1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * nvmem framework core. 4 * 5 * Copyright (C) 2015 Srinivas Kandagatla <srinivas.kandagatla@linaro.org> 6 * Copyright (C) 2013 Maxime Ripard <maxime.ripard@free-electrons.com> 7 */ 8 9 #include <linux/device.h> 10 #include <linux/export.h> 11 #include <linux/fs.h> 12 #include <linux/idr.h> 13 #include <linux/init.h> 14 #include <linux/kref.h> 15 #include <linux/module.h> 16 #include <linux/nvmem-consumer.h> 17 #include <linux/nvmem-provider.h> 18 #include <linux/of.h> 19 #include <linux/slab.h> 20 21 struct nvmem_device { 22 struct module *owner; 23 struct device dev; 24 int stride; 25 int word_size; 26 int id; 27 struct kref refcnt; 28 size_t size; 29 bool read_only; 30 int flags; 31 struct bin_attribute eeprom; 32 struct device *base_dev; 33 struct list_head cells; 34 nvmem_reg_read_t reg_read; 35 nvmem_reg_write_t reg_write; 36 void *priv; 37 }; 38 39 #define FLAG_COMPAT BIT(0) 40 41 struct nvmem_cell { 42 const char *name; 43 int offset; 44 int bytes; 45 int bit_offset; 46 int nbits; 47 struct nvmem_device *nvmem; 48 struct list_head node; 49 }; 50 51 static DEFINE_MUTEX(nvmem_mutex); 52 static DEFINE_IDA(nvmem_ida); 53 54 static DEFINE_MUTEX(nvmem_cell_mutex); 55 static LIST_HEAD(nvmem_cell_tables); 56 57 static DEFINE_MUTEX(nvmem_lookup_mutex); 58 static LIST_HEAD(nvmem_lookup_list); 59 60 static BLOCKING_NOTIFIER_HEAD(nvmem_notifier); 61 62 #ifdef CONFIG_DEBUG_LOCK_ALLOC 63 static struct lock_class_key eeprom_lock_key; 64 #endif 65 66 #define to_nvmem_device(d) container_of(d, struct nvmem_device, dev) 67 static int nvmem_reg_read(struct nvmem_device *nvmem, unsigned int offset, 68 void *val, size_t bytes) 69 { 70 if (nvmem->reg_read) 71 return nvmem->reg_read(nvmem->priv, offset, val, bytes); 72 73 return -EINVAL; 74 } 75 76 static int nvmem_reg_write(struct nvmem_device *nvmem, unsigned int offset, 77 void *val, size_t bytes) 78 { 79 if (nvmem->reg_write) 80 return nvmem->reg_write(nvmem->priv, offset, val, bytes); 81 82 return -EINVAL; 83 } 84 85 static ssize_t bin_attr_nvmem_read(struct file *filp, struct kobject *kobj, 86 struct bin_attribute *attr, 87 char *buf, loff_t pos, size_t count) 88 { 89 struct device *dev; 90 struct nvmem_device *nvmem; 91 int rc; 92 93 if (attr->private) 94 dev = attr->private; 95 else 96 dev = container_of(kobj, struct device, kobj); 97 nvmem = to_nvmem_device(dev); 98 99 /* Stop the user from reading */ 100 if (pos >= nvmem->size) 101 return 0; 102 103 if (count < nvmem->word_size) 104 return -EINVAL; 105 106 if (pos + count > nvmem->size) 107 count = nvmem->size - pos; 108 109 count = round_down(count, nvmem->word_size); 110 111 rc = nvmem_reg_read(nvmem, pos, buf, count); 112 113 if (rc) 114 return rc; 115 116 return count; 117 } 118 119 static ssize_t bin_attr_nvmem_write(struct file *filp, struct kobject *kobj, 120 struct bin_attribute *attr, 121 char *buf, loff_t pos, size_t count) 122 { 123 struct device *dev; 124 struct nvmem_device *nvmem; 125 int rc; 126 127 if (attr->private) 128 dev = attr->private; 129 else 130 dev = container_of(kobj, struct device, kobj); 131 nvmem = to_nvmem_device(dev); 132 133 /* Stop the user from writing */ 134 if (pos >= nvmem->size) 135 return -EFBIG; 136 137 if (count < nvmem->word_size) 138 return -EINVAL; 139 140 if (pos + count > nvmem->size) 141 count = nvmem->size - pos; 142 143 count = round_down(count, nvmem->word_size); 144 145 rc = nvmem_reg_write(nvmem, pos, buf, count); 146 147 if (rc) 148 return rc; 149 150 return count; 151 } 152 153 /* default read/write permissions */ 154 static struct bin_attribute bin_attr_rw_nvmem = { 155 .attr = { 156 .name = "nvmem", 157 .mode = 0644, 158 }, 159 .read = bin_attr_nvmem_read, 160 .write = bin_attr_nvmem_write, 161 }; 162 163 static struct bin_attribute *nvmem_bin_rw_attributes[] = { 164 &bin_attr_rw_nvmem, 165 NULL, 166 }; 167 168 static const struct attribute_group nvmem_bin_rw_group = { 169 .bin_attrs = nvmem_bin_rw_attributes, 170 }; 171 172 static const struct attribute_group *nvmem_rw_dev_groups[] = { 173 &nvmem_bin_rw_group, 174 NULL, 175 }; 176 177 /* read only permission */ 178 static struct bin_attribute bin_attr_ro_nvmem = { 179 .attr = { 180 .name = "nvmem", 181 .mode = 0444, 182 }, 183 .read = bin_attr_nvmem_read, 184 }; 185 186 static struct bin_attribute *nvmem_bin_ro_attributes[] = { 187 &bin_attr_ro_nvmem, 188 NULL, 189 }; 190 191 static const struct attribute_group nvmem_bin_ro_group = { 192 .bin_attrs = nvmem_bin_ro_attributes, 193 }; 194 195 static const struct attribute_group *nvmem_ro_dev_groups[] = { 196 &nvmem_bin_ro_group, 197 NULL, 198 }; 199 200 /* default read/write permissions, root only */ 201 static struct bin_attribute bin_attr_rw_root_nvmem = { 202 .attr = { 203 .name = "nvmem", 204 .mode = 0600, 205 }, 206 .read = bin_attr_nvmem_read, 207 .write = bin_attr_nvmem_write, 208 }; 209 210 static struct bin_attribute *nvmem_bin_rw_root_attributes[] = { 211 &bin_attr_rw_root_nvmem, 212 NULL, 213 }; 214 215 static const struct attribute_group nvmem_bin_rw_root_group = { 216 .bin_attrs = nvmem_bin_rw_root_attributes, 217 }; 218 219 static const struct attribute_group *nvmem_rw_root_dev_groups[] = { 220 &nvmem_bin_rw_root_group, 221 NULL, 222 }; 223 224 /* read only permission, root only */ 225 static struct bin_attribute bin_attr_ro_root_nvmem = { 226 .attr = { 227 .name = "nvmem", 228 .mode = 0400, 229 }, 230 .read = bin_attr_nvmem_read, 231 }; 232 233 static struct bin_attribute *nvmem_bin_ro_root_attributes[] = { 234 &bin_attr_ro_root_nvmem, 235 NULL, 236 }; 237 238 static const struct attribute_group nvmem_bin_ro_root_group = { 239 .bin_attrs = nvmem_bin_ro_root_attributes, 240 }; 241 242 static const struct attribute_group *nvmem_ro_root_dev_groups[] = { 243 &nvmem_bin_ro_root_group, 244 NULL, 245 }; 246 247 static void nvmem_release(struct device *dev) 248 { 249 struct nvmem_device *nvmem = to_nvmem_device(dev); 250 251 ida_simple_remove(&nvmem_ida, nvmem->id); 252 kfree(nvmem); 253 } 254 255 static const struct device_type nvmem_provider_type = { 256 .release = nvmem_release, 257 }; 258 259 static struct bus_type nvmem_bus_type = { 260 .name = "nvmem", 261 }; 262 263 static int of_nvmem_match(struct device *dev, void *nvmem_np) 264 { 265 return dev->of_node == nvmem_np; 266 } 267 268 static struct nvmem_device *of_nvmem_find(struct device_node *nvmem_np) 269 { 270 struct device *d; 271 272 if (!nvmem_np) 273 return NULL; 274 275 d = bus_find_device(&nvmem_bus_type, NULL, nvmem_np, of_nvmem_match); 276 277 if (!d) 278 return NULL; 279 280 return to_nvmem_device(d); 281 } 282 283 static struct nvmem_device *nvmem_find(const char *name) 284 { 285 struct device *d; 286 287 d = bus_find_device_by_name(&nvmem_bus_type, NULL, name); 288 289 if (!d) 290 return NULL; 291 292 return to_nvmem_device(d); 293 } 294 295 static void nvmem_cell_drop(struct nvmem_cell *cell) 296 { 297 blocking_notifier_call_chain(&nvmem_notifier, NVMEM_CELL_REMOVE, cell); 298 mutex_lock(&nvmem_mutex); 299 list_del(&cell->node); 300 mutex_unlock(&nvmem_mutex); 301 kfree(cell); 302 } 303 304 static void nvmem_device_remove_all_cells(const struct nvmem_device *nvmem) 305 { 306 struct nvmem_cell *cell, *p; 307 308 list_for_each_entry_safe(cell, p, &nvmem->cells, node) 309 nvmem_cell_drop(cell); 310 } 311 312 static void nvmem_cell_add(struct nvmem_cell *cell) 313 { 314 mutex_lock(&nvmem_mutex); 315 list_add_tail(&cell->node, &cell->nvmem->cells); 316 mutex_unlock(&nvmem_mutex); 317 blocking_notifier_call_chain(&nvmem_notifier, NVMEM_CELL_ADD, cell); 318 } 319 320 static int nvmem_cell_info_to_nvmem_cell(struct nvmem_device *nvmem, 321 const struct nvmem_cell_info *info, 322 struct nvmem_cell *cell) 323 { 324 cell->nvmem = nvmem; 325 cell->offset = info->offset; 326 cell->bytes = info->bytes; 327 cell->name = info->name; 328 329 cell->bit_offset = info->bit_offset; 330 cell->nbits = info->nbits; 331 332 if (cell->nbits) 333 cell->bytes = DIV_ROUND_UP(cell->nbits + cell->bit_offset, 334 BITS_PER_BYTE); 335 336 if (!IS_ALIGNED(cell->offset, nvmem->stride)) { 337 dev_err(&nvmem->dev, 338 "cell %s unaligned to nvmem stride %d\n", 339 cell->name, nvmem->stride); 340 return -EINVAL; 341 } 342 343 return 0; 344 } 345 346 /** 347 * nvmem_add_cells() - Add cell information to an nvmem device 348 * 349 * @nvmem: nvmem device to add cells to. 350 * @info: nvmem cell info to add to the device 351 * @ncells: number of cells in info 352 * 353 * Return: 0 or negative error code on failure. 354 */ 355 static int nvmem_add_cells(struct nvmem_device *nvmem, 356 const struct nvmem_cell_info *info, 357 int ncells) 358 { 359 struct nvmem_cell **cells; 360 int i, rval; 361 362 cells = kcalloc(ncells, sizeof(*cells), GFP_KERNEL); 363 if (!cells) 364 return -ENOMEM; 365 366 for (i = 0; i < ncells; i++) { 367 cells[i] = kzalloc(sizeof(**cells), GFP_KERNEL); 368 if (!cells[i]) { 369 rval = -ENOMEM; 370 goto err; 371 } 372 373 rval = nvmem_cell_info_to_nvmem_cell(nvmem, &info[i], cells[i]); 374 if (rval) { 375 kfree(cells[i]); 376 goto err; 377 } 378 379 nvmem_cell_add(cells[i]); 380 } 381 382 /* remove tmp array */ 383 kfree(cells); 384 385 return 0; 386 err: 387 while (i--) 388 nvmem_cell_drop(cells[i]); 389 390 kfree(cells); 391 392 return rval; 393 } 394 395 /* 396 * nvmem_setup_compat() - Create an additional binary entry in 397 * drivers sys directory, to be backwards compatible with the older 398 * drivers/misc/eeprom drivers. 399 */ 400 static int nvmem_setup_compat(struct nvmem_device *nvmem, 401 const struct nvmem_config *config) 402 { 403 int rval; 404 405 if (!config->base_dev) 406 return -EINVAL; 407 408 if (nvmem->read_only) 409 nvmem->eeprom = bin_attr_ro_root_nvmem; 410 else 411 nvmem->eeprom = bin_attr_rw_root_nvmem; 412 nvmem->eeprom.attr.name = "eeprom"; 413 nvmem->eeprom.size = nvmem->size; 414 #ifdef CONFIG_DEBUG_LOCK_ALLOC 415 nvmem->eeprom.attr.key = &eeprom_lock_key; 416 #endif 417 nvmem->eeprom.private = &nvmem->dev; 418 nvmem->base_dev = config->base_dev; 419 420 rval = device_create_bin_file(nvmem->base_dev, &nvmem->eeprom); 421 if (rval) { 422 dev_err(&nvmem->dev, 423 "Failed to create eeprom binary file %d\n", rval); 424 return rval; 425 } 426 427 nvmem->flags |= FLAG_COMPAT; 428 429 return 0; 430 } 431 432 /** 433 * nvmem_register_notifier() - Register a notifier block for nvmem events. 434 * 435 * @nb: notifier block to be called on nvmem events. 436 * 437 * Return: 0 on success, negative error number on failure. 438 */ 439 int nvmem_register_notifier(struct notifier_block *nb) 440 { 441 return blocking_notifier_chain_register(&nvmem_notifier, nb); 442 } 443 EXPORT_SYMBOL_GPL(nvmem_register_notifier); 444 445 /** 446 * nvmem_unregister_notifier() - Unregister a notifier block for nvmem events. 447 * 448 * @nb: notifier block to be unregistered. 449 * 450 * Return: 0 on success, negative error number on failure. 451 */ 452 int nvmem_unregister_notifier(struct notifier_block *nb) 453 { 454 return blocking_notifier_chain_unregister(&nvmem_notifier, nb); 455 } 456 EXPORT_SYMBOL_GPL(nvmem_unregister_notifier); 457 458 static int nvmem_add_cells_from_table(struct nvmem_device *nvmem) 459 { 460 const struct nvmem_cell_info *info; 461 struct nvmem_cell_table *table; 462 struct nvmem_cell *cell; 463 int rval = 0, i; 464 465 mutex_lock(&nvmem_cell_mutex); 466 list_for_each_entry(table, &nvmem_cell_tables, node) { 467 if (strcmp(nvmem_dev_name(nvmem), table->nvmem_name) == 0) { 468 for (i = 0; i < table->ncells; i++) { 469 info = &table->cells[i]; 470 471 cell = kzalloc(sizeof(*cell), GFP_KERNEL); 472 if (!cell) { 473 rval = -ENOMEM; 474 goto out; 475 } 476 477 rval = nvmem_cell_info_to_nvmem_cell(nvmem, 478 info, 479 cell); 480 if (rval) { 481 kfree(cell); 482 goto out; 483 } 484 485 nvmem_cell_add(cell); 486 } 487 } 488 } 489 490 out: 491 mutex_unlock(&nvmem_cell_mutex); 492 return rval; 493 } 494 495 static struct nvmem_cell * 496 nvmem_find_cell_by_index(struct nvmem_device *nvmem, int index) 497 { 498 struct nvmem_cell *cell = NULL; 499 int i = 0; 500 501 mutex_lock(&nvmem_mutex); 502 list_for_each_entry(cell, &nvmem->cells, node) { 503 if (index == i++) 504 break; 505 } 506 mutex_unlock(&nvmem_mutex); 507 508 return cell; 509 } 510 511 static struct nvmem_cell * 512 nvmem_find_cell_by_name(struct nvmem_device *nvmem, const char *cell_id) 513 { 514 struct nvmem_cell *cell = NULL; 515 516 mutex_lock(&nvmem_mutex); 517 list_for_each_entry(cell, &nvmem->cells, node) { 518 if (strcmp(cell_id, cell->name) == 0) 519 break; 520 } 521 mutex_unlock(&nvmem_mutex); 522 523 return cell; 524 } 525 526 static int nvmem_add_cells_from_of(struct nvmem_device *nvmem) 527 { 528 struct device_node *parent, *child; 529 struct device *dev = &nvmem->dev; 530 struct nvmem_cell *cell; 531 const __be32 *addr; 532 int len; 533 534 parent = dev->of_node; 535 536 for_each_child_of_node(parent, child) { 537 addr = of_get_property(child, "reg", &len); 538 if (!addr || (len < 2 * sizeof(u32))) { 539 dev_err(dev, "nvmem: invalid reg on %pOF\n", child); 540 return -EINVAL; 541 } 542 543 cell = kzalloc(sizeof(*cell), GFP_KERNEL); 544 if (!cell) 545 return -ENOMEM; 546 547 cell->nvmem = nvmem; 548 cell->offset = be32_to_cpup(addr++); 549 cell->bytes = be32_to_cpup(addr); 550 cell->name = child->name; 551 552 addr = of_get_property(child, "bits", &len); 553 if (addr && len == (2 * sizeof(u32))) { 554 cell->bit_offset = be32_to_cpup(addr++); 555 cell->nbits = be32_to_cpup(addr); 556 } 557 558 if (cell->nbits) 559 cell->bytes = DIV_ROUND_UP( 560 cell->nbits + cell->bit_offset, 561 BITS_PER_BYTE); 562 563 if (!IS_ALIGNED(cell->offset, nvmem->stride)) { 564 dev_err(dev, "cell %s unaligned to nvmem stride %d\n", 565 cell->name, nvmem->stride); 566 /* Cells already added will be freed later. */ 567 kfree(cell); 568 return -EINVAL; 569 } 570 571 nvmem_cell_add(cell); 572 } 573 574 return 0; 575 } 576 577 /** 578 * nvmem_register() - Register a nvmem device for given nvmem_config. 579 * Also creates an binary entry in /sys/bus/nvmem/devices/dev-name/nvmem 580 * 581 * @config: nvmem device configuration with which nvmem device is created. 582 * 583 * Return: Will be an ERR_PTR() on error or a valid pointer to nvmem_device 584 * on success. 585 */ 586 587 struct nvmem_device *nvmem_register(const struct nvmem_config *config) 588 { 589 struct nvmem_device *nvmem; 590 int rval; 591 592 if (!config->dev) 593 return ERR_PTR(-EINVAL); 594 595 nvmem = kzalloc(sizeof(*nvmem), GFP_KERNEL); 596 if (!nvmem) 597 return ERR_PTR(-ENOMEM); 598 599 rval = ida_simple_get(&nvmem_ida, 0, 0, GFP_KERNEL); 600 if (rval < 0) { 601 kfree(nvmem); 602 return ERR_PTR(rval); 603 } 604 605 kref_init(&nvmem->refcnt); 606 INIT_LIST_HEAD(&nvmem->cells); 607 608 nvmem->id = rval; 609 nvmem->owner = config->owner; 610 if (!nvmem->owner && config->dev->driver) 611 nvmem->owner = config->dev->driver->owner; 612 nvmem->stride = config->stride ?: 1; 613 nvmem->word_size = config->word_size ?: 1; 614 nvmem->size = config->size; 615 nvmem->dev.type = &nvmem_provider_type; 616 nvmem->dev.bus = &nvmem_bus_type; 617 nvmem->dev.parent = config->dev; 618 nvmem->priv = config->priv; 619 nvmem->reg_read = config->reg_read; 620 nvmem->reg_write = config->reg_write; 621 nvmem->dev.of_node = config->dev->of_node; 622 623 if (config->id == -1 && config->name) { 624 dev_set_name(&nvmem->dev, "%s", config->name); 625 } else { 626 dev_set_name(&nvmem->dev, "%s%d", 627 config->name ? : "nvmem", 628 config->name ? config->id : nvmem->id); 629 } 630 631 nvmem->read_only = device_property_present(config->dev, "read-only") | 632 config->read_only; 633 634 if (config->root_only) 635 nvmem->dev.groups = nvmem->read_only ? 636 nvmem_ro_root_dev_groups : 637 nvmem_rw_root_dev_groups; 638 else 639 nvmem->dev.groups = nvmem->read_only ? 640 nvmem_ro_dev_groups : 641 nvmem_rw_dev_groups; 642 643 device_initialize(&nvmem->dev); 644 645 dev_dbg(&nvmem->dev, "Registering nvmem device %s\n", config->name); 646 647 rval = device_add(&nvmem->dev); 648 if (rval) 649 goto err_put_device; 650 651 if (config->compat) { 652 rval = nvmem_setup_compat(nvmem, config); 653 if (rval) 654 goto err_device_del; 655 } 656 657 if (config->cells) { 658 rval = nvmem_add_cells(nvmem, config->cells, config->ncells); 659 if (rval) 660 goto err_teardown_compat; 661 } 662 663 rval = nvmem_add_cells_from_table(nvmem); 664 if (rval) 665 goto err_remove_cells; 666 667 rval = nvmem_add_cells_from_of(nvmem); 668 if (rval) 669 goto err_remove_cells; 670 671 rval = blocking_notifier_call_chain(&nvmem_notifier, NVMEM_ADD, nvmem); 672 if (rval) 673 goto err_remove_cells; 674 675 return nvmem; 676 677 err_remove_cells: 678 nvmem_device_remove_all_cells(nvmem); 679 err_teardown_compat: 680 if (config->compat) 681 device_remove_bin_file(nvmem->base_dev, &nvmem->eeprom); 682 err_device_del: 683 device_del(&nvmem->dev); 684 err_put_device: 685 put_device(&nvmem->dev); 686 687 return ERR_PTR(rval); 688 } 689 EXPORT_SYMBOL_GPL(nvmem_register); 690 691 static void nvmem_device_release(struct kref *kref) 692 { 693 struct nvmem_device *nvmem; 694 695 nvmem = container_of(kref, struct nvmem_device, refcnt); 696 697 blocking_notifier_call_chain(&nvmem_notifier, NVMEM_REMOVE, nvmem); 698 699 if (nvmem->flags & FLAG_COMPAT) 700 device_remove_bin_file(nvmem->base_dev, &nvmem->eeprom); 701 702 nvmem_device_remove_all_cells(nvmem); 703 device_del(&nvmem->dev); 704 put_device(&nvmem->dev); 705 } 706 707 /** 708 * nvmem_unregister() - Unregister previously registered nvmem device 709 * 710 * @nvmem: Pointer to previously registered nvmem device. 711 */ 712 void nvmem_unregister(struct nvmem_device *nvmem) 713 { 714 kref_put(&nvmem->refcnt, nvmem_device_release); 715 } 716 EXPORT_SYMBOL_GPL(nvmem_unregister); 717 718 static void devm_nvmem_release(struct device *dev, void *res) 719 { 720 nvmem_unregister(*(struct nvmem_device **)res); 721 } 722 723 /** 724 * devm_nvmem_register() - Register a managed nvmem device for given 725 * nvmem_config. 726 * Also creates an binary entry in /sys/bus/nvmem/devices/dev-name/nvmem 727 * 728 * @dev: Device that uses the nvmem device. 729 * @config: nvmem device configuration with which nvmem device is created. 730 * 731 * Return: Will be an ERR_PTR() on error or a valid pointer to nvmem_device 732 * on success. 733 */ 734 struct nvmem_device *devm_nvmem_register(struct device *dev, 735 const struct nvmem_config *config) 736 { 737 struct nvmem_device **ptr, *nvmem; 738 739 ptr = devres_alloc(devm_nvmem_release, sizeof(*ptr), GFP_KERNEL); 740 if (!ptr) 741 return ERR_PTR(-ENOMEM); 742 743 nvmem = nvmem_register(config); 744 745 if (!IS_ERR(nvmem)) { 746 *ptr = nvmem; 747 devres_add(dev, ptr); 748 } else { 749 devres_free(ptr); 750 } 751 752 return nvmem; 753 } 754 EXPORT_SYMBOL_GPL(devm_nvmem_register); 755 756 static int devm_nvmem_match(struct device *dev, void *res, void *data) 757 { 758 struct nvmem_device **r = res; 759 760 return *r == data; 761 } 762 763 /** 764 * devm_nvmem_unregister() - Unregister previously registered managed nvmem 765 * device. 766 * 767 * @dev: Device that uses the nvmem device. 768 * @nvmem: Pointer to previously registered nvmem device. 769 * 770 * Return: Will be an negative on error or a zero on success. 771 */ 772 int devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem) 773 { 774 return devres_release(dev, devm_nvmem_release, devm_nvmem_match, nvmem); 775 } 776 EXPORT_SYMBOL(devm_nvmem_unregister); 777 778 static struct nvmem_device *__nvmem_device_get(struct device_node *np, 779 const char *nvmem_name) 780 { 781 struct nvmem_device *nvmem = NULL; 782 783 mutex_lock(&nvmem_mutex); 784 nvmem = np ? of_nvmem_find(np) : nvmem_find(nvmem_name); 785 mutex_unlock(&nvmem_mutex); 786 if (!nvmem) 787 return ERR_PTR(-EPROBE_DEFER); 788 789 if (!try_module_get(nvmem->owner)) { 790 dev_err(&nvmem->dev, 791 "could not increase module refcount for cell %s\n", 792 nvmem_dev_name(nvmem)); 793 794 return ERR_PTR(-EINVAL); 795 } 796 797 kref_get(&nvmem->refcnt); 798 799 return nvmem; 800 } 801 802 static void __nvmem_device_put(struct nvmem_device *nvmem) 803 { 804 module_put(nvmem->owner); 805 kref_put(&nvmem->refcnt, nvmem_device_release); 806 } 807 808 #if IS_ENABLED(CONFIG_OF) 809 /** 810 * of_nvmem_device_get() - Get nvmem device from a given id 811 * 812 * @np: Device tree node that uses the nvmem device. 813 * @id: nvmem name from nvmem-names property. 814 * 815 * Return: ERR_PTR() on error or a valid pointer to a struct nvmem_device 816 * on success. 817 */ 818 struct nvmem_device *of_nvmem_device_get(struct device_node *np, const char *id) 819 { 820 821 struct device_node *nvmem_np; 822 int index; 823 824 index = of_property_match_string(np, "nvmem-names", id); 825 826 nvmem_np = of_parse_phandle(np, "nvmem", index); 827 if (!nvmem_np) 828 return ERR_PTR(-EINVAL); 829 830 return __nvmem_device_get(nvmem_np, NULL); 831 } 832 EXPORT_SYMBOL_GPL(of_nvmem_device_get); 833 #endif 834 835 /** 836 * nvmem_device_get() - Get nvmem device from a given id 837 * 838 * @dev: Device that uses the nvmem device. 839 * @dev_name: name of the requested nvmem device. 840 * 841 * Return: ERR_PTR() on error or a valid pointer to a struct nvmem_device 842 * on success. 843 */ 844 struct nvmem_device *nvmem_device_get(struct device *dev, const char *dev_name) 845 { 846 if (dev->of_node) { /* try dt first */ 847 struct nvmem_device *nvmem; 848 849 nvmem = of_nvmem_device_get(dev->of_node, dev_name); 850 851 if (!IS_ERR(nvmem) || PTR_ERR(nvmem) == -EPROBE_DEFER) 852 return nvmem; 853 854 } 855 856 return nvmem_find(dev_name); 857 } 858 EXPORT_SYMBOL_GPL(nvmem_device_get); 859 860 static int devm_nvmem_device_match(struct device *dev, void *res, void *data) 861 { 862 struct nvmem_device **nvmem = res; 863 864 if (WARN_ON(!nvmem || !*nvmem)) 865 return 0; 866 867 return *nvmem == data; 868 } 869 870 static void devm_nvmem_device_release(struct device *dev, void *res) 871 { 872 nvmem_device_put(*(struct nvmem_device **)res); 873 } 874 875 /** 876 * devm_nvmem_device_put() - put alredy got nvmem device 877 * 878 * @dev: Device that uses the nvmem device. 879 * @nvmem: pointer to nvmem device allocated by devm_nvmem_cell_get(), 880 * that needs to be released. 881 */ 882 void devm_nvmem_device_put(struct device *dev, struct nvmem_device *nvmem) 883 { 884 int ret; 885 886 ret = devres_release(dev, devm_nvmem_device_release, 887 devm_nvmem_device_match, nvmem); 888 889 WARN_ON(ret); 890 } 891 EXPORT_SYMBOL_GPL(devm_nvmem_device_put); 892 893 /** 894 * nvmem_device_put() - put alredy got nvmem device 895 * 896 * @nvmem: pointer to nvmem device that needs to be released. 897 */ 898 void nvmem_device_put(struct nvmem_device *nvmem) 899 { 900 __nvmem_device_put(nvmem); 901 } 902 EXPORT_SYMBOL_GPL(nvmem_device_put); 903 904 /** 905 * devm_nvmem_device_get() - Get nvmem cell of device form a given id 906 * 907 * @dev: Device that requests the nvmem device. 908 * @id: name id for the requested nvmem device. 909 * 910 * Return: ERR_PTR() on error or a valid pointer to a struct nvmem_cell 911 * on success. The nvmem_cell will be freed by the automatically once the 912 * device is freed. 913 */ 914 struct nvmem_device *devm_nvmem_device_get(struct device *dev, const char *id) 915 { 916 struct nvmem_device **ptr, *nvmem; 917 918 ptr = devres_alloc(devm_nvmem_device_release, sizeof(*ptr), GFP_KERNEL); 919 if (!ptr) 920 return ERR_PTR(-ENOMEM); 921 922 nvmem = nvmem_device_get(dev, id); 923 if (!IS_ERR(nvmem)) { 924 *ptr = nvmem; 925 devres_add(dev, ptr); 926 } else { 927 devres_free(ptr); 928 } 929 930 return nvmem; 931 } 932 EXPORT_SYMBOL_GPL(devm_nvmem_device_get); 933 934 static struct nvmem_cell * 935 nvmem_cell_get_from_lookup(struct device *dev, const char *con_id) 936 { 937 struct nvmem_cell *cell = ERR_PTR(-ENOENT); 938 struct nvmem_cell_lookup *lookup; 939 struct nvmem_device *nvmem; 940 const char *dev_id; 941 942 if (!dev) 943 return ERR_PTR(-EINVAL); 944 945 dev_id = dev_name(dev); 946 947 mutex_lock(&nvmem_lookup_mutex); 948 949 list_for_each_entry(lookup, &nvmem_lookup_list, node) { 950 if ((strcmp(lookup->dev_id, dev_id) == 0) && 951 (strcmp(lookup->con_id, con_id) == 0)) { 952 /* This is the right entry. */ 953 nvmem = __nvmem_device_get(NULL, lookup->nvmem_name); 954 if (!nvmem) { 955 /* Provider may not be registered yet. */ 956 cell = ERR_PTR(-EPROBE_DEFER); 957 goto out; 958 } 959 960 cell = nvmem_find_cell_by_name(nvmem, 961 lookup->cell_name); 962 if (!cell) { 963 __nvmem_device_put(nvmem); 964 goto out; 965 } 966 } 967 } 968 969 out: 970 mutex_unlock(&nvmem_lookup_mutex); 971 return cell; 972 } 973 974 #if IS_ENABLED(CONFIG_OF) 975 /** 976 * of_nvmem_cell_get() - Get a nvmem cell from given device node and cell id 977 * 978 * @np: Device tree node that uses the nvmem cell. 979 * @id: nvmem cell name from nvmem-cell-names property, or NULL 980 * for the cell at index 0 (the lone cell with no accompanying 981 * nvmem-cell-names property). 982 * 983 * Return: Will be an ERR_PTR() on error or a valid pointer 984 * to a struct nvmem_cell. The nvmem_cell will be freed by the 985 * nvmem_cell_put(). 986 */ 987 struct nvmem_cell *of_nvmem_cell_get(struct device_node *np, const char *id) 988 { 989 struct device_node *cell_np, *nvmem_np; 990 struct nvmem_device *nvmem; 991 struct nvmem_cell *cell; 992 int index = 0; 993 994 /* if cell name exists, find index to the name */ 995 if (id) 996 index = of_property_match_string(np, "nvmem-cell-names", id); 997 998 cell_np = of_parse_phandle(np, "nvmem-cells", index); 999 if (!cell_np) 1000 return ERR_PTR(-EINVAL); 1001 1002 nvmem_np = of_get_next_parent(cell_np); 1003 if (!nvmem_np) 1004 return ERR_PTR(-EINVAL); 1005 1006 nvmem = __nvmem_device_get(nvmem_np, NULL); 1007 of_node_put(nvmem_np); 1008 if (IS_ERR(nvmem)) 1009 return ERR_CAST(nvmem); 1010 1011 cell = nvmem_find_cell_by_index(nvmem, index); 1012 if (!cell) { 1013 __nvmem_device_put(nvmem); 1014 return ERR_PTR(-ENOENT); 1015 } 1016 1017 return cell; 1018 } 1019 EXPORT_SYMBOL_GPL(of_nvmem_cell_get); 1020 #endif 1021 1022 /** 1023 * nvmem_cell_get() - Get nvmem cell of device form a given cell name 1024 * 1025 * @dev: Device that requests the nvmem cell. 1026 * @id: nvmem cell name to get (this corresponds with the name from the 1027 * nvmem-cell-names property for DT systems and with the con_id from 1028 * the lookup entry for non-DT systems). 1029 * 1030 * Return: Will be an ERR_PTR() on error or a valid pointer 1031 * to a struct nvmem_cell. The nvmem_cell will be freed by the 1032 * nvmem_cell_put(). 1033 */ 1034 struct nvmem_cell *nvmem_cell_get(struct device *dev, const char *id) 1035 { 1036 struct nvmem_cell *cell; 1037 1038 if (dev->of_node) { /* try dt first */ 1039 cell = of_nvmem_cell_get(dev->of_node, id); 1040 if (!IS_ERR(cell) || PTR_ERR(cell) == -EPROBE_DEFER) 1041 return cell; 1042 } 1043 1044 /* NULL cell id only allowed for device tree; invalid otherwise */ 1045 if (!id) 1046 return ERR_PTR(-EINVAL); 1047 1048 return nvmem_cell_get_from_lookup(dev, id); 1049 } 1050 EXPORT_SYMBOL_GPL(nvmem_cell_get); 1051 1052 static void devm_nvmem_cell_release(struct device *dev, void *res) 1053 { 1054 nvmem_cell_put(*(struct nvmem_cell **)res); 1055 } 1056 1057 /** 1058 * devm_nvmem_cell_get() - Get nvmem cell of device form a given id 1059 * 1060 * @dev: Device that requests the nvmem cell. 1061 * @id: nvmem cell name id to get. 1062 * 1063 * Return: Will be an ERR_PTR() on error or a valid pointer 1064 * to a struct nvmem_cell. The nvmem_cell will be freed by the 1065 * automatically once the device is freed. 1066 */ 1067 struct nvmem_cell *devm_nvmem_cell_get(struct device *dev, const char *id) 1068 { 1069 struct nvmem_cell **ptr, *cell; 1070 1071 ptr = devres_alloc(devm_nvmem_cell_release, sizeof(*ptr), GFP_KERNEL); 1072 if (!ptr) 1073 return ERR_PTR(-ENOMEM); 1074 1075 cell = nvmem_cell_get(dev, id); 1076 if (!IS_ERR(cell)) { 1077 *ptr = cell; 1078 devres_add(dev, ptr); 1079 } else { 1080 devres_free(ptr); 1081 } 1082 1083 return cell; 1084 } 1085 EXPORT_SYMBOL_GPL(devm_nvmem_cell_get); 1086 1087 static int devm_nvmem_cell_match(struct device *dev, void *res, void *data) 1088 { 1089 struct nvmem_cell **c = res; 1090 1091 if (WARN_ON(!c || !*c)) 1092 return 0; 1093 1094 return *c == data; 1095 } 1096 1097 /** 1098 * devm_nvmem_cell_put() - Release previously allocated nvmem cell 1099 * from devm_nvmem_cell_get. 1100 * 1101 * @dev: Device that requests the nvmem cell. 1102 * @cell: Previously allocated nvmem cell by devm_nvmem_cell_get(). 1103 */ 1104 void devm_nvmem_cell_put(struct device *dev, struct nvmem_cell *cell) 1105 { 1106 int ret; 1107 1108 ret = devres_release(dev, devm_nvmem_cell_release, 1109 devm_nvmem_cell_match, cell); 1110 1111 WARN_ON(ret); 1112 } 1113 EXPORT_SYMBOL(devm_nvmem_cell_put); 1114 1115 /** 1116 * nvmem_cell_put() - Release previously allocated nvmem cell. 1117 * 1118 * @cell: Previously allocated nvmem cell by nvmem_cell_get(). 1119 */ 1120 void nvmem_cell_put(struct nvmem_cell *cell) 1121 { 1122 struct nvmem_device *nvmem = cell->nvmem; 1123 1124 __nvmem_device_put(nvmem); 1125 } 1126 EXPORT_SYMBOL_GPL(nvmem_cell_put); 1127 1128 static void nvmem_shift_read_buffer_in_place(struct nvmem_cell *cell, void *buf) 1129 { 1130 u8 *p, *b; 1131 int i, bit_offset = cell->bit_offset; 1132 1133 p = b = buf; 1134 if (bit_offset) { 1135 /* First shift */ 1136 *b++ >>= bit_offset; 1137 1138 /* setup rest of the bytes if any */ 1139 for (i = 1; i < cell->bytes; i++) { 1140 /* Get bits from next byte and shift them towards msb */ 1141 *p |= *b << (BITS_PER_BYTE - bit_offset); 1142 1143 p = b; 1144 *b++ >>= bit_offset; 1145 } 1146 1147 /* result fits in less bytes */ 1148 if (cell->bytes != DIV_ROUND_UP(cell->nbits, BITS_PER_BYTE)) 1149 *p-- = 0; 1150 } 1151 /* clear msb bits if any leftover in the last byte */ 1152 *p &= GENMASK((cell->nbits%BITS_PER_BYTE) - 1, 0); 1153 } 1154 1155 static int __nvmem_cell_read(struct nvmem_device *nvmem, 1156 struct nvmem_cell *cell, 1157 void *buf, size_t *len) 1158 { 1159 int rc; 1160 1161 rc = nvmem_reg_read(nvmem, cell->offset, buf, cell->bytes); 1162 1163 if (rc) 1164 return rc; 1165 1166 /* shift bits in-place */ 1167 if (cell->bit_offset || cell->nbits) 1168 nvmem_shift_read_buffer_in_place(cell, buf); 1169 1170 if (len) 1171 *len = cell->bytes; 1172 1173 return 0; 1174 } 1175 1176 /** 1177 * nvmem_cell_read() - Read a given nvmem cell 1178 * 1179 * @cell: nvmem cell to be read. 1180 * @len: pointer to length of cell which will be populated on successful read; 1181 * can be NULL. 1182 * 1183 * Return: ERR_PTR() on error or a valid pointer to a buffer on success. The 1184 * buffer should be freed by the consumer with a kfree(). 1185 */ 1186 void *nvmem_cell_read(struct nvmem_cell *cell, size_t *len) 1187 { 1188 struct nvmem_device *nvmem = cell->nvmem; 1189 u8 *buf; 1190 int rc; 1191 1192 if (!nvmem) 1193 return ERR_PTR(-EINVAL); 1194 1195 buf = kzalloc(cell->bytes, GFP_KERNEL); 1196 if (!buf) 1197 return ERR_PTR(-ENOMEM); 1198 1199 rc = __nvmem_cell_read(nvmem, cell, buf, len); 1200 if (rc) { 1201 kfree(buf); 1202 return ERR_PTR(rc); 1203 } 1204 1205 return buf; 1206 } 1207 EXPORT_SYMBOL_GPL(nvmem_cell_read); 1208 1209 static void *nvmem_cell_prepare_write_buffer(struct nvmem_cell *cell, 1210 u8 *_buf, int len) 1211 { 1212 struct nvmem_device *nvmem = cell->nvmem; 1213 int i, rc, nbits, bit_offset = cell->bit_offset; 1214 u8 v, *p, *buf, *b, pbyte, pbits; 1215 1216 nbits = cell->nbits; 1217 buf = kzalloc(cell->bytes, GFP_KERNEL); 1218 if (!buf) 1219 return ERR_PTR(-ENOMEM); 1220 1221 memcpy(buf, _buf, len); 1222 p = b = buf; 1223 1224 if (bit_offset) { 1225 pbyte = *b; 1226 *b <<= bit_offset; 1227 1228 /* setup the first byte with lsb bits from nvmem */ 1229 rc = nvmem_reg_read(nvmem, cell->offset, &v, 1); 1230 if (rc) 1231 goto err; 1232 *b++ |= GENMASK(bit_offset - 1, 0) & v; 1233 1234 /* setup rest of the byte if any */ 1235 for (i = 1; i < cell->bytes; i++) { 1236 /* Get last byte bits and shift them towards lsb */ 1237 pbits = pbyte >> (BITS_PER_BYTE - 1 - bit_offset); 1238 pbyte = *b; 1239 p = b; 1240 *b <<= bit_offset; 1241 *b++ |= pbits; 1242 } 1243 } 1244 1245 /* if it's not end on byte boundary */ 1246 if ((nbits + bit_offset) % BITS_PER_BYTE) { 1247 /* setup the last byte with msb bits from nvmem */ 1248 rc = nvmem_reg_read(nvmem, 1249 cell->offset + cell->bytes - 1, &v, 1); 1250 if (rc) 1251 goto err; 1252 *p |= GENMASK(7, (nbits + bit_offset) % BITS_PER_BYTE) & v; 1253 1254 } 1255 1256 return buf; 1257 err: 1258 kfree(buf); 1259 return ERR_PTR(rc); 1260 } 1261 1262 /** 1263 * nvmem_cell_write() - Write to a given nvmem cell 1264 * 1265 * @cell: nvmem cell to be written. 1266 * @buf: Buffer to be written. 1267 * @len: length of buffer to be written to nvmem cell. 1268 * 1269 * Return: length of bytes written or negative on failure. 1270 */ 1271 int nvmem_cell_write(struct nvmem_cell *cell, void *buf, size_t len) 1272 { 1273 struct nvmem_device *nvmem = cell->nvmem; 1274 int rc; 1275 1276 if (!nvmem || nvmem->read_only || 1277 (cell->bit_offset == 0 && len != cell->bytes)) 1278 return -EINVAL; 1279 1280 if (cell->bit_offset || cell->nbits) { 1281 buf = nvmem_cell_prepare_write_buffer(cell, buf, len); 1282 if (IS_ERR(buf)) 1283 return PTR_ERR(buf); 1284 } 1285 1286 rc = nvmem_reg_write(nvmem, cell->offset, buf, cell->bytes); 1287 1288 /* free the tmp buffer */ 1289 if (cell->bit_offset || cell->nbits) 1290 kfree(buf); 1291 1292 if (rc) 1293 return rc; 1294 1295 return len; 1296 } 1297 EXPORT_SYMBOL_GPL(nvmem_cell_write); 1298 1299 /** 1300 * nvmem_cell_read_u32() - Read a cell value as an u32 1301 * 1302 * @dev: Device that requests the nvmem cell. 1303 * @cell_id: Name of nvmem cell to read. 1304 * @val: pointer to output value. 1305 * 1306 * Return: 0 on success or negative errno. 1307 */ 1308 int nvmem_cell_read_u32(struct device *dev, const char *cell_id, u32 *val) 1309 { 1310 struct nvmem_cell *cell; 1311 void *buf; 1312 size_t len; 1313 1314 cell = nvmem_cell_get(dev, cell_id); 1315 if (IS_ERR(cell)) 1316 return PTR_ERR(cell); 1317 1318 buf = nvmem_cell_read(cell, &len); 1319 if (IS_ERR(buf)) { 1320 nvmem_cell_put(cell); 1321 return PTR_ERR(buf); 1322 } 1323 if (len != sizeof(*val)) { 1324 kfree(buf); 1325 nvmem_cell_put(cell); 1326 return -EINVAL; 1327 } 1328 memcpy(val, buf, sizeof(*val)); 1329 1330 kfree(buf); 1331 nvmem_cell_put(cell); 1332 return 0; 1333 } 1334 EXPORT_SYMBOL_GPL(nvmem_cell_read_u32); 1335 1336 /** 1337 * nvmem_device_cell_read() - Read a given nvmem device and cell 1338 * 1339 * @nvmem: nvmem device to read from. 1340 * @info: nvmem cell info to be read. 1341 * @buf: buffer pointer which will be populated on successful read. 1342 * 1343 * Return: length of successful bytes read on success and negative 1344 * error code on error. 1345 */ 1346 ssize_t nvmem_device_cell_read(struct nvmem_device *nvmem, 1347 struct nvmem_cell_info *info, void *buf) 1348 { 1349 struct nvmem_cell cell; 1350 int rc; 1351 ssize_t len; 1352 1353 if (!nvmem) 1354 return -EINVAL; 1355 1356 rc = nvmem_cell_info_to_nvmem_cell(nvmem, info, &cell); 1357 if (rc) 1358 return rc; 1359 1360 rc = __nvmem_cell_read(nvmem, &cell, buf, &len); 1361 if (rc) 1362 return rc; 1363 1364 return len; 1365 } 1366 EXPORT_SYMBOL_GPL(nvmem_device_cell_read); 1367 1368 /** 1369 * nvmem_device_cell_write() - Write cell to a given nvmem device 1370 * 1371 * @nvmem: nvmem device to be written to. 1372 * @info: nvmem cell info to be written. 1373 * @buf: buffer to be written to cell. 1374 * 1375 * Return: length of bytes written or negative error code on failure. 1376 */ 1377 int nvmem_device_cell_write(struct nvmem_device *nvmem, 1378 struct nvmem_cell_info *info, void *buf) 1379 { 1380 struct nvmem_cell cell; 1381 int rc; 1382 1383 if (!nvmem) 1384 return -EINVAL; 1385 1386 rc = nvmem_cell_info_to_nvmem_cell(nvmem, info, &cell); 1387 if (rc) 1388 return rc; 1389 1390 return nvmem_cell_write(&cell, buf, cell.bytes); 1391 } 1392 EXPORT_SYMBOL_GPL(nvmem_device_cell_write); 1393 1394 /** 1395 * nvmem_device_read() - Read from a given nvmem device 1396 * 1397 * @nvmem: nvmem device to read from. 1398 * @offset: offset in nvmem device. 1399 * @bytes: number of bytes to read. 1400 * @buf: buffer pointer which will be populated on successful read. 1401 * 1402 * Return: length of successful bytes read on success and negative 1403 * error code on error. 1404 */ 1405 int nvmem_device_read(struct nvmem_device *nvmem, 1406 unsigned int offset, 1407 size_t bytes, void *buf) 1408 { 1409 int rc; 1410 1411 if (!nvmem) 1412 return -EINVAL; 1413 1414 rc = nvmem_reg_read(nvmem, offset, buf, bytes); 1415 1416 if (rc) 1417 return rc; 1418 1419 return bytes; 1420 } 1421 EXPORT_SYMBOL_GPL(nvmem_device_read); 1422 1423 /** 1424 * nvmem_device_write() - Write cell to a given nvmem device 1425 * 1426 * @nvmem: nvmem device to be written to. 1427 * @offset: offset in nvmem device. 1428 * @bytes: number of bytes to write. 1429 * @buf: buffer to be written. 1430 * 1431 * Return: length of bytes written or negative error code on failure. 1432 */ 1433 int nvmem_device_write(struct nvmem_device *nvmem, 1434 unsigned int offset, 1435 size_t bytes, void *buf) 1436 { 1437 int rc; 1438 1439 if (!nvmem) 1440 return -EINVAL; 1441 1442 rc = nvmem_reg_write(nvmem, offset, buf, bytes); 1443 1444 if (rc) 1445 return rc; 1446 1447 1448 return bytes; 1449 } 1450 EXPORT_SYMBOL_GPL(nvmem_device_write); 1451 1452 /** 1453 * nvmem_add_cell_table() - register a table of cell info entries 1454 * 1455 * @table: table of cell info entries 1456 */ 1457 void nvmem_add_cell_table(struct nvmem_cell_table *table) 1458 { 1459 mutex_lock(&nvmem_cell_mutex); 1460 list_add_tail(&table->node, &nvmem_cell_tables); 1461 mutex_unlock(&nvmem_cell_mutex); 1462 } 1463 EXPORT_SYMBOL_GPL(nvmem_add_cell_table); 1464 1465 /** 1466 * nvmem_del_cell_table() - remove a previously registered cell info table 1467 * 1468 * @table: table of cell info entries 1469 */ 1470 void nvmem_del_cell_table(struct nvmem_cell_table *table) 1471 { 1472 mutex_lock(&nvmem_cell_mutex); 1473 list_del(&table->node); 1474 mutex_unlock(&nvmem_cell_mutex); 1475 } 1476 EXPORT_SYMBOL_GPL(nvmem_del_cell_table); 1477 1478 /** 1479 * nvmem_add_cell_lookups() - register a list of cell lookup entries 1480 * 1481 * @entries: array of cell lookup entries 1482 * @nentries: number of cell lookup entries in the array 1483 */ 1484 void nvmem_add_cell_lookups(struct nvmem_cell_lookup *entries, size_t nentries) 1485 { 1486 int i; 1487 1488 mutex_lock(&nvmem_lookup_mutex); 1489 for (i = 0; i < nentries; i++) 1490 list_add_tail(&entries[i].node, &nvmem_lookup_list); 1491 mutex_unlock(&nvmem_lookup_mutex); 1492 } 1493 EXPORT_SYMBOL_GPL(nvmem_add_cell_lookups); 1494 1495 /** 1496 * nvmem_del_cell_lookups() - remove a list of previously added cell lookup 1497 * entries 1498 * 1499 * @entries: array of cell lookup entries 1500 * @nentries: number of cell lookup entries in the array 1501 */ 1502 void nvmem_del_cell_lookups(struct nvmem_cell_lookup *entries, size_t nentries) 1503 { 1504 int i; 1505 1506 mutex_lock(&nvmem_lookup_mutex); 1507 for (i = 0; i < nentries; i++) 1508 list_del(&entries[i].node); 1509 mutex_unlock(&nvmem_lookup_mutex); 1510 } 1511 EXPORT_SYMBOL_GPL(nvmem_del_cell_lookups); 1512 1513 /** 1514 * nvmem_dev_name() - Get the name of a given nvmem device. 1515 * 1516 * @nvmem: nvmem device. 1517 * 1518 * Return: name of the nvmem device. 1519 */ 1520 const char *nvmem_dev_name(struct nvmem_device *nvmem) 1521 { 1522 return dev_name(&nvmem->dev); 1523 } 1524 EXPORT_SYMBOL_GPL(nvmem_dev_name); 1525 1526 static int __init nvmem_init(void) 1527 { 1528 return bus_register(&nvmem_bus_type); 1529 } 1530 1531 static void __exit nvmem_exit(void) 1532 { 1533 bus_unregister(&nvmem_bus_type); 1534 } 1535 1536 subsys_initcall(nvmem_init); 1537 module_exit(nvmem_exit); 1538 1539 MODULE_AUTHOR("Srinivas Kandagatla <srinivas.kandagatla@linaro.org"); 1540 MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com"); 1541 MODULE_DESCRIPTION("nvmem Driver Core"); 1542 MODULE_LICENSE("GPL v2"); 1543