From: Rafał Miłecki <rafal@xxxxxxxxxx> This adds a driver for the "fixed-layout" NVMEM layout binding. It allows defining NVMEM cells in a layout DT node named "nvmem-layout". Signed-off-by: Rafał Miłecki <rafal@xxxxxxxxxx> --- drivers/nvmem/layouts/Kconfig | 8 +++++++ drivers/nvmem/layouts/Makefile | 1 + drivers/nvmem/layouts/fixed.c | 41 ++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 drivers/nvmem/layouts/fixed.c diff --git a/drivers/nvmem/layouts/Kconfig b/drivers/nvmem/layouts/Kconfig index 7ff1ee1c1f05..2ebbde7b15b2 100644 --- a/drivers/nvmem/layouts/Kconfig +++ b/drivers/nvmem/layouts/Kconfig @@ -2,6 +2,14 @@ menu "Layout Types" +config NVMEM_LAYOUT_FIXED + tristate "Fixed cells layout support" + help + Say Y here if you want to support layout with fixed cells (hardcoded + offsets and sizes). + + If unsure, say N. + config NVMEM_LAYOUT_SL28_VPD tristate "Kontron sl28 VPD layout support" select CRC8 diff --git a/drivers/nvmem/layouts/Makefile b/drivers/nvmem/layouts/Makefile index 2974bd7d33ed..449dd893f968 100644 --- a/drivers/nvmem/layouts/Makefile +++ b/drivers/nvmem/layouts/Makefile @@ -3,5 +3,6 @@ # Makefile for nvmem layouts. # +obj-$(CONFIG_NVMEM_LAYOUT_FIXED) += fixed.o obj-$(CONFIG_NVMEM_LAYOUT_SL28_VPD) += sl28vpd.o obj-$(CONFIG_NVMEM_LAYOUT_ONIE_TLV) += onie-tlv.o diff --git a/drivers/nvmem/layouts/fixed.c b/drivers/nvmem/layouts/fixed.c new file mode 100644 index 000000000000..b8d2f141d272 --- /dev/null +++ b/drivers/nvmem/layouts/fixed.c @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include <linux/module.h> +#include <linux/nvmem-consumer.h> +#include <linux/nvmem-provider.h> +#include <linux/of.h> + +static int fixed_add_cells(struct device *dev, struct nvmem_device *nvmem, + struct nvmem_layout *layout) +{ + struct device_node *layout_np; + int err; + + layout_np = of_nvmem_layout_get_container(nvmem); + if (!layout_np) + return -ENOENT; + + err = nvmem_add_cells_from_of(nvmem, layout_np); + + of_node_put(layout_np); + + return err; +} + +static const struct of_device_id fixed_of_match_table[] = { + { .compatible = "fixed-layout" }, + {}, +}; +MODULE_DEVICE_TABLE(of, fixed_of_match_table); + +struct nvmem_layout fixed_nvmem_layout = { + .name = "fixed-layout", + .of_match_table = fixed_of_match_table, + .add_cells = fixed_add_cells, +}; + +module_nvmem_layout_driver(fixed_nvmem_layout); + +MODULE_AUTHOR("Rafał Miłecki"); +MODULE_LICENSE("GPL"); +MODULE_DEVICE_TABLE(of, fixed_of_match_table); -- 2.34.1