Lines Matching refs:nvmem

54 	struct nvmem_device	*nvmem;  member
69 static int nvmem_reg_read(struct nvmem_device *nvmem, unsigned int offset, in nvmem_reg_read() argument
72 if (nvmem->reg_read) in nvmem_reg_read()
73 return nvmem->reg_read(nvmem->priv, offset, val, bytes); in nvmem_reg_read()
78 static int nvmem_reg_write(struct nvmem_device *nvmem, unsigned int offset, in nvmem_reg_write() argument
81 if (nvmem->reg_write) in nvmem_reg_write()
82 return nvmem->reg_write(nvmem->priv, offset, val, bytes); in nvmem_reg_write()
92 struct nvmem_device *nvmem; in bin_attr_nvmem_read() local
99 nvmem = to_nvmem_device(dev); in bin_attr_nvmem_read()
102 if (pos >= nvmem->size) in bin_attr_nvmem_read()
105 if (count < nvmem->word_size) in bin_attr_nvmem_read()
108 if (pos + count > nvmem->size) in bin_attr_nvmem_read()
109 count = nvmem->size - pos; in bin_attr_nvmem_read()
111 count = round_down(count, nvmem->word_size); in bin_attr_nvmem_read()
113 rc = nvmem_reg_read(nvmem, pos, buf, count); in bin_attr_nvmem_read()
126 struct nvmem_device *nvmem; in bin_attr_nvmem_write() local
133 nvmem = to_nvmem_device(dev); in bin_attr_nvmem_write()
136 if (pos >= nvmem->size) in bin_attr_nvmem_write()
139 if (count < nvmem->word_size) in bin_attr_nvmem_write()
142 if (pos + count > nvmem->size) in bin_attr_nvmem_write()
143 count = nvmem->size - pos; in bin_attr_nvmem_write()
145 count = round_down(count, nvmem->word_size); in bin_attr_nvmem_write()
147 rc = nvmem_reg_write(nvmem, pos, buf, count); in bin_attr_nvmem_write()
251 struct nvmem_device *nvmem = to_nvmem_device(dev); in nvmem_release() local
253 ida_simple_remove(&nvmem_ida, nvmem->id); in nvmem_release()
254 kfree(nvmem); in nvmem_release()
310 static void nvmem_device_remove_all_cells(const struct nvmem_device *nvmem) in nvmem_device_remove_all_cells() argument
317 if (cell->nvmem == nvmem) in nvmem_device_remove_all_cells()
329 static int nvmem_cell_info_to_nvmem_cell(struct nvmem_device *nvmem, in nvmem_cell_info_to_nvmem_cell() argument
333 cell->nvmem = nvmem; in nvmem_cell_info_to_nvmem_cell()
345 if (!IS_ALIGNED(cell->offset, nvmem->stride)) { in nvmem_cell_info_to_nvmem_cell()
346 dev_err(&nvmem->dev, in nvmem_cell_info_to_nvmem_cell()
348 cell->name, nvmem->stride); in nvmem_cell_info_to_nvmem_cell()
364 int nvmem_add_cells(struct nvmem_device *nvmem, in nvmem_add_cells() argument
382 rval = nvmem_cell_info_to_nvmem_cell(nvmem, &info[i], cells[i]); in nvmem_add_cells()
410 static int nvmem_setup_compat(struct nvmem_device *nvmem, in nvmem_setup_compat() argument
418 if (nvmem->read_only) in nvmem_setup_compat()
419 nvmem->eeprom = bin_attr_ro_root_nvmem; in nvmem_setup_compat()
421 nvmem->eeprom = bin_attr_rw_root_nvmem; in nvmem_setup_compat()
422 nvmem->eeprom.attr.name = "eeprom"; in nvmem_setup_compat()
423 nvmem->eeprom.size = nvmem->size; in nvmem_setup_compat()
425 nvmem->eeprom.attr.key = &eeprom_lock_key; in nvmem_setup_compat()
427 nvmem->eeprom.private = &nvmem->dev; in nvmem_setup_compat()
428 nvmem->base_dev = config->base_dev; in nvmem_setup_compat()
430 rval = device_create_bin_file(nvmem->base_dev, &nvmem->eeprom); in nvmem_setup_compat()
432 dev_err(&nvmem->dev, in nvmem_setup_compat()
437 nvmem->flags |= FLAG_COMPAT; in nvmem_setup_compat()
454 struct nvmem_device *nvmem; in nvmem_register() local
460 nvmem = kzalloc(sizeof(*nvmem), GFP_KERNEL); in nvmem_register()
461 if (!nvmem) in nvmem_register()
466 kfree(nvmem); in nvmem_register()
470 nvmem->id = rval; in nvmem_register()
471 nvmem->owner = config->owner; in nvmem_register()
472 if (!nvmem->owner && config->dev->driver) in nvmem_register()
473 nvmem->owner = config->dev->driver->owner; in nvmem_register()
474 nvmem->stride = config->stride ?: 1; in nvmem_register()
475 nvmem->word_size = config->word_size ?: 1; in nvmem_register()
476 nvmem->size = config->size; in nvmem_register()
477 nvmem->dev.type = &nvmem_provider_type; in nvmem_register()
478 nvmem->dev.bus = &nvmem_bus_type; in nvmem_register()
479 nvmem->dev.parent = config->dev; in nvmem_register()
480 nvmem->priv = config->priv; in nvmem_register()
481 nvmem->reg_read = config->reg_read; in nvmem_register()
482 nvmem->reg_write = config->reg_write; in nvmem_register()
483 nvmem->dev.of_node = config->dev->of_node; in nvmem_register()
486 dev_set_name(&nvmem->dev, "%s", config->name); in nvmem_register()
488 dev_set_name(&nvmem->dev, "%s%d", in nvmem_register()
490 config->name ? config->id : nvmem->id); in nvmem_register()
493 nvmem->read_only = device_property_present(config->dev, "read-only") | in nvmem_register()
497 nvmem->dev.groups = nvmem->read_only ? in nvmem_register()
501 nvmem->dev.groups = nvmem->read_only ? in nvmem_register()
505 device_initialize(&nvmem->dev); in nvmem_register()
507 dev_dbg(&nvmem->dev, "Registering nvmem device %s\n", config->name); in nvmem_register()
509 rval = device_add(&nvmem->dev); in nvmem_register()
514 rval = nvmem_setup_compat(nvmem, config); in nvmem_register()
520 nvmem_add_cells(nvmem, config->cells, config->ncells); in nvmem_register()
522 return nvmem; in nvmem_register()
525 device_del(&nvmem->dev); in nvmem_register()
527 put_device(&nvmem->dev); in nvmem_register()
540 int nvmem_unregister(struct nvmem_device *nvmem) in nvmem_unregister() argument
543 if (nvmem->users) { in nvmem_unregister()
549 if (nvmem->flags & FLAG_COMPAT) in nvmem_unregister()
550 device_remove_bin_file(nvmem->base_dev, &nvmem->eeprom); in nvmem_unregister()
552 nvmem_device_remove_all_cells(nvmem); in nvmem_unregister()
553 device_del(&nvmem->dev); in nvmem_unregister()
554 put_device(&nvmem->dev); in nvmem_unregister()
579 struct nvmem_device **ptr, *nvmem; in devm_nvmem_register() local
585 nvmem = nvmem_register(config); in devm_nvmem_register()
587 if (!IS_ERR(nvmem)) { in devm_nvmem_register()
588 *ptr = nvmem; in devm_nvmem_register()
594 return nvmem; in devm_nvmem_register()
614 int devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem) in devm_nvmem_unregister() argument
616 return devres_release(dev, devm_nvmem_release, devm_nvmem_match, nvmem); in devm_nvmem_unregister()
625 struct nvmem_device *nvmem = NULL; in __nvmem_device_get() local
630 nvmem = of_nvmem_find(np); in __nvmem_device_get()
631 if (!nvmem) { in __nvmem_device_get()
639 nvmem = cell->nvmem; in __nvmem_device_get()
643 if (!nvmem) { in __nvmem_device_get()
649 nvmem->users++; in __nvmem_device_get()
652 if (!try_module_get(nvmem->owner)) { in __nvmem_device_get()
653 dev_err(&nvmem->dev, in __nvmem_device_get()
655 nvmem->name); in __nvmem_device_get()
658 nvmem->users--; in __nvmem_device_get()
664 return nvmem; in __nvmem_device_get()
667 static void __nvmem_device_put(struct nvmem_device *nvmem) in __nvmem_device_put() argument
669 module_put(nvmem->owner); in __nvmem_device_put()
671 nvmem->users--; in __nvmem_device_put()
726 struct nvmem_device *nvmem; in nvmem_device_get() local
728 nvmem = of_nvmem_device_get(dev->of_node, dev_name); in nvmem_device_get()
730 if (!IS_ERR(nvmem) || PTR_ERR(nvmem) == -EPROBE_DEFER) in nvmem_device_get()
731 return nvmem; in nvmem_device_get()
741 struct nvmem_device **nvmem = res; in devm_nvmem_device_match() local
743 if (WARN_ON(!nvmem || !*nvmem)) in devm_nvmem_device_match()
746 return *nvmem == data; in devm_nvmem_device_match()
761 void devm_nvmem_device_put(struct device *dev, struct nvmem_device *nvmem) in devm_nvmem_device_put() argument
766 devm_nvmem_device_match, nvmem); in devm_nvmem_device_put()
777 void nvmem_device_put(struct nvmem_device *nvmem) in nvmem_device_put() argument
779 __nvmem_device_put(nvmem); in nvmem_device_put()
795 struct nvmem_device **ptr, *nvmem; in devm_nvmem_device_get() local
801 nvmem = nvmem_device_get(dev, id); in devm_nvmem_device_get()
802 if (!IS_ERR(nvmem)) { in devm_nvmem_device_get()
803 *ptr = nvmem; in devm_nvmem_device_get()
809 return nvmem; in devm_nvmem_device_get()
816 struct nvmem_device *nvmem; in nvmem_cell_get_from_list() local
818 nvmem = __nvmem_device_get(NULL, &cell, cell_id); in nvmem_cell_get_from_list()
819 if (IS_ERR(nvmem)) in nvmem_cell_get_from_list()
820 return ERR_CAST(nvmem); in nvmem_cell_get_from_list()
843 struct nvmem_device *nvmem; in of_nvmem_cell_get() local
860 nvmem = __nvmem_device_get(nvmem_np, NULL, NULL); in of_nvmem_cell_get()
862 if (IS_ERR(nvmem)) in of_nvmem_cell_get()
863 return ERR_CAST(nvmem); in of_nvmem_cell_get()
867 dev_err(&nvmem->dev, "nvmem: invalid reg on %pOF\n", in of_nvmem_cell_get()
879 cell->nvmem = nvmem; in of_nvmem_cell_get()
894 if (!IS_ALIGNED(cell->offset, nvmem->stride)) { in of_nvmem_cell_get()
895 dev_err(&nvmem->dev, in of_nvmem_cell_get()
897 cell->name, nvmem->stride); in of_nvmem_cell_get()
910 __nvmem_device_put(nvmem); in of_nvmem_cell_get()
1015 struct nvmem_device *nvmem = cell->nvmem; in nvmem_cell_put() local
1017 __nvmem_device_put(nvmem); in nvmem_cell_put()
1049 static int __nvmem_cell_read(struct nvmem_device *nvmem, in __nvmem_cell_read() argument
1055 rc = nvmem_reg_read(nvmem, cell->offset, buf, cell->bytes); in __nvmem_cell_read()
1082 struct nvmem_device *nvmem = cell->nvmem; in nvmem_cell_read() local
1086 if (!nvmem) in nvmem_cell_read()
1093 rc = __nvmem_cell_read(nvmem, cell, buf, len); in nvmem_cell_read()
1106 struct nvmem_device *nvmem = cell->nvmem; in nvmem_cell_prepare_write_buffer() local
1123 rc = nvmem_reg_read(nvmem, cell->offset, &v, 1); in nvmem_cell_prepare_write_buffer()
1142 rc = nvmem_reg_read(nvmem, in nvmem_cell_prepare_write_buffer()
1167 struct nvmem_device *nvmem = cell->nvmem; in nvmem_cell_write() local
1170 if (!nvmem || nvmem->read_only || in nvmem_cell_write()
1180 rc = nvmem_reg_write(nvmem, cell->offset, buf, cell->bytes); in nvmem_cell_write()
1240 ssize_t nvmem_device_cell_read(struct nvmem_device *nvmem, in nvmem_device_cell_read() argument
1247 if (!nvmem) in nvmem_device_cell_read()
1250 rc = nvmem_cell_info_to_nvmem_cell(nvmem, info, &cell); in nvmem_device_cell_read()
1254 rc = __nvmem_cell_read(nvmem, &cell, buf, &len); in nvmem_device_cell_read()
1271 int nvmem_device_cell_write(struct nvmem_device *nvmem, in nvmem_device_cell_write() argument
1277 if (!nvmem) in nvmem_device_cell_write()
1280 rc = nvmem_cell_info_to_nvmem_cell(nvmem, info, &cell); in nvmem_device_cell_write()
1299 int nvmem_device_read(struct nvmem_device *nvmem, in nvmem_device_read() argument
1305 if (!nvmem) in nvmem_device_read()
1308 rc = nvmem_reg_read(nvmem, offset, buf, bytes); in nvmem_device_read()
1327 int nvmem_device_write(struct nvmem_device *nvmem, in nvmem_device_write() argument
1333 if (!nvmem) in nvmem_device_write()
1336 rc = nvmem_reg_write(nvmem, offset, buf, bytes); in nvmem_device_write()