diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2021-07-18 07:13:26 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-07-18 07:13:26 +0200 |
commit | ca922d6044e49b1ed9782aa8eb28d1ed70931978 (patch) | |
tree | 6cac7b356b9fc9f4c152eafca0e38d14c311577b /drivers/nvmem/core.c | |
parent | 889612fab092ec20463c886513b5cfde14cc8cb0 (diff) | |
parent | 5bf59d3f2baa0f98ab93ddb4ea8a3b37986db608 (diff) | |
download | barebox-ca922d6044e49b1ed9782aa8eb28d1ed70931978.tar.gz barebox-ca922d6044e49b1ed9782aa8eb28d1ed70931978.tar.xz |
Merge branch 'for-next/nvmem'
Diffstat (limited to 'drivers/nvmem/core.c')
-rw-r--r-- | drivers/nvmem/core.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 8f4b4646a9..4e558e1650 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -49,6 +49,15 @@ struct nvmem_cell { static LIST_HEAD(nvmem_cells); static LIST_HEAD(nvmem_devs); +void nvmem_devices_print(void) +{ + struct nvmem_device *dev; + + list_for_each_entry(dev, &nvmem_devs, node) { + printf("%s\n", dev_name(&dev->dev)); + } +} + static ssize_t nvmem_cdev_read(struct cdev *cdev, void *buf, size_t count, loff_t offset, unsigned long flags) { @@ -205,12 +214,12 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config) nvmem->size = config->size; nvmem->dev.parent = config->dev; nvmem->bus = config->bus; - np = config->dev->device_node; + np = config->cdev ? config->cdev->device_node : config->dev->device_node; nvmem->dev.device_node = np; nvmem->priv = config->priv; - nvmem->read_only = of_property_read_bool(np, "read-only") | - config->read_only; + if (config->read_only || !config->bus->write || of_property_read_bool(np, "read-only")) + nvmem->read_only = true; dev_set_name(&nvmem->dev, config->name); nvmem->dev.id = DEVICE_ID_DYNAMIC; @@ -223,10 +232,12 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config) return ERR_PTR(rval); } - rval = nvmem_register_cdev(nvmem, config->name); - if (rval) { - kfree(nvmem); - return ERR_PTR(rval); + if (!config->cdev) { + rval = nvmem_register_cdev(nvmem, config->name); + if (rval) { + kfree(nvmem); + return ERR_PTR(rval); + } } list_add_tail(&nvmem->node, &nvmem_devs); |