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