1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- From de12c9691501ccba41a154c223869f82be4c12fd Mon Sep 17 00:00:00 2001
- From: Michael Walle <[email protected]>
- Date: Tue, 4 Apr 2023 18:21:25 +0100
- Subject: [PATCH] nvmem: core: allow to modify a cell before adding it
- Provide a way to modify a cell before it will get added. This is useful
- to attach a custom post processing hook via a layout.
- Signed-off-by: Michael Walle <[email protected]>
- Signed-off-by: Miquel Raynal <[email protected]>
- Signed-off-by: Srinivas Kandagatla <[email protected]>
- Link: https://lore.kernel.org/r/[email protected]
- Signed-off-by: Greg Kroah-Hartman <[email protected]>
- ---
- drivers/nvmem/core.c | 4 ++++
- include/linux/nvmem-provider.h | 5 +++++
- 2 files changed, 9 insertions(+)
- --- a/drivers/nvmem/core.c
- +++ b/drivers/nvmem/core.c
- @@ -695,6 +695,7 @@ static int nvmem_validate_keepouts(struc
-
- static int nvmem_add_cells_from_of(struct nvmem_device *nvmem)
- {
- + struct nvmem_layout *layout = nvmem->layout;
- struct device *dev = &nvmem->dev;
- struct device_node *child;
- const __be32 *addr;
- @@ -724,6 +725,9 @@ static int nvmem_add_cells_from_of(struc
-
- info.np = of_node_get(child);
-
- + if (layout && layout->fixup_cell_info)
- + layout->fixup_cell_info(nvmem, layout, &info);
- +
- ret = nvmem_add_one_cell(nvmem, &info);
- kfree(info.name);
- if (ret) {
- --- a/include/linux/nvmem-provider.h
- +++ b/include/linux/nvmem-provider.h
- @@ -155,6 +155,8 @@ struct nvmem_cell_table {
- * @add_cells: Will be called if a nvmem device is found which
- * has this layout. The function will add layout
- * specific cells with nvmem_add_one_cell().
- + * @fixup_cell_info: Will be called before a cell is added. Can be
- + * used to modify the nvmem_cell_info.
- * @owner: Pointer to struct module.
- * @node: List node.
- *
- @@ -168,6 +170,9 @@ struct nvmem_layout {
- const struct of_device_id *of_match_table;
- int (*add_cells)(struct device *dev, struct nvmem_device *nvmem,
- struct nvmem_layout *layout);
- + void (*fixup_cell_info)(struct nvmem_device *nvmem,
- + struct nvmem_layout *layout,
- + struct nvmem_cell_info *cell);
-
- /* private */
- struct module *owner;
|