From 70d21b7988db0cad28a2cb4b0d7f5d77d587a51f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Fri, 17 Mar 2023 14:26:19 +0100 Subject: [PATCH] nvmem: core: export nvmem_add_cells_from_of() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This symbol can be cleanly re-used by the fixed NVMEM layout driver. Allow passing DT node as argument to make it a bit more generic. Signed-off-by: Rafał Miłecki --- drivers/nvmem/core.c | 7 ++++--- include/linux/nvmem-provider.h | 7 +++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 212c5ba5789ffb..985a42cfb0a277 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -694,7 +694,7 @@ static int nvmem_validate_keepouts(struct nvmem_device *nvmem) return 0; } -static int nvmem_add_cells_from_of(struct nvmem_device *nvmem) +int nvmem_add_cells_from_of(struct nvmem_device *nvmem, struct device_node *np) { struct nvmem_layout *layout = nvmem->layout; struct device *dev = &nvmem->dev; @@ -702,7 +702,7 @@ static int nvmem_add_cells_from_of(struct nvmem_device *nvmem) const __be32 *addr; int len, ret; - for_each_child_of_node(dev->of_node, child) { + for_each_child_of_node(np, child) { struct nvmem_cell_info info = {0}; addr = of_get_property(child, "reg", &len); @@ -739,6 +739,7 @@ static int nvmem_add_cells_from_of(struct nvmem_device *nvmem) return 0; } +EXPORT_SYMBOL_GPL(nvmem_add_cells_from_of); int __nvmem_layout_register(struct nvmem_layout *layout, struct module *owner) { @@ -970,7 +971,7 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config) if (rval) goto err_remove_cells; - rval = nvmem_add_cells_from_of(nvmem); + rval = nvmem_add_cells_from_of(nvmem, nvmem->dev.of_node); if (rval) goto err_remove_cells; diff --git a/include/linux/nvmem-provider.h b/include/linux/nvmem-provider.h index 0cf9f9490514ca..81d604ecb10042 100644 --- a/include/linux/nvmem-provider.h +++ b/include/linux/nvmem-provider.h @@ -194,6 +194,8 @@ void nvmem_del_cell_table(struct nvmem_cell_table *table); int nvmem_add_one_cell(struct nvmem_device *nvmem, const struct nvmem_cell_info *info); +int nvmem_add_cells_from_of(struct nvmem_device *nvmem, struct device_node *np); + int __nvmem_layout_register(struct nvmem_layout *layout, struct module *owner); #define nvmem_layout_register(layout) \ __nvmem_layout_register(layout, THIS_MODULE) @@ -225,6 +227,11 @@ static inline int nvmem_add_one_cell(struct nvmem_device *nvmem, return -EOPNOTSUPP; } +static int nvmem_add_cells_from_of(struct nvmem_device *nvmem, struct device_node *np) +{ + return -EOPNOTSUPP; +} + static inline int nvmem_layout_register(struct nvmem_layout *layout) { return -EOPNOTSUPP;