Lines Matching +full:nvmem +full:- +full:layout

1 // SPDX-License-Identifier: GPL-2.0-or-later
6 /* UBI NVMEM provider */
8 #include <linux/nvmem-provider.h>
10 /* List of all NVMEM devices */
15 struct nvmem_device *nvmem; member
32 desc = ubi_open_volume(unv->ubi_num, unv->vol_id, UBI_READONLY); in ubi_nvmem_reg_read()
36 offs = from % unv->usable_leb_size; in ubi_nvmem_reg_read()
37 lnum = from / unv->usable_leb_size; in ubi_nvmem_reg_read()
39 to_read = unv->usable_leb_size - offs; in ubi_nvmem_reg_read()
50 bytes_left -= to_read; in ubi_nvmem_reg_read()
58 return bytes_left == 0 ? 0 : -EIO; in ubi_nvmem_reg_read()
63 struct device_node *np = dev_of_node(vi->dev); in ubi_nvmem_add()
71 if (!of_get_child_by_name(np, "nvmem-layout")) in ubi_nvmem_add()
74 if (WARN_ON_ONCE(vi->usable_leb_size <= 0) || in ubi_nvmem_add()
75 WARN_ON_ONCE(vi->size <= 0)) in ubi_nvmem_add()
76 return -EINVAL; in ubi_nvmem_add()
80 return -ENOMEM; in ubi_nvmem_add()
83 config.dev = vi->dev; in ubi_nvmem_add()
84 config.name = dev_name(vi->dev); in ubi_nvmem_add()
88 config.size = vi->usable_leb_size * vi->size; in ubi_nvmem_add()
96 unv->ubi_num = vi->ubi_num; in ubi_nvmem_add()
97 unv->vol_id = vi->vol_id; in ubi_nvmem_add()
98 unv->usable_leb_size = vi->usable_leb_size; in ubi_nvmem_add()
99 unv->nvmem = nvmem_register(&config); in ubi_nvmem_add()
100 if (IS_ERR(unv->nvmem)) { in ubi_nvmem_add()
101 ret = dev_err_probe(vi->dev, PTR_ERR(unv->nvmem), in ubi_nvmem_add()
102 "Failed to register NVMEM device\n"); in ubi_nvmem_add()
108 list_add_tail(&unv->list, &nvmem_devices); in ubi_nvmem_add()
120 if (unv_c->ubi_num == vi->ubi_num && unv_c->vol_id == vi->vol_id) { in ubi_nvmem_remove()
130 list_del(&unv->list); in ubi_nvmem_remove()
132 nvmem_unregister(unv->nvmem); in ubi_nvmem_remove()
137 * nvmem_notify - UBI notification handler.
149 ubi_nvmem_remove(&nt->vi); in nvmem_notify()
152 ubi_nvmem_add(&nt->vi); in nvmem_notify()
155 ubi_nvmem_remove(&nt->vi); in nvmem_notify()
178 nvmem_unregister(unv->nvmem); in ubi_nvmem_exit()
179 list_del(&unv->list); in ubi_nvmem_exit()
189 MODULE_DESCRIPTION("NVMEM layer over UBI volumes");