summaryrefslogtreecommitdiffstats
path: root/drivers/nvmem
diff options
context:
space:
mode:
authorAndrey Smirnov <andrew.smirnov@gmail.com>2018-06-27 21:42:26 -0700
committerSascha Hauer <s.hauer@pengutronix.de>2018-06-29 07:04:47 +0200
commit8905d0f1a4cd2d15b7aeb585f8cf39137b1b9b03 (patch)
tree8e07e76de64a0103c8980b37d31aa4df84f1abed /drivers/nvmem
parent97f22548a8e887f163af7dc1598cbc8d0f85f0da (diff)
downloadbarebox-8905d0f1a4cd2d15b7aeb585f8cf39137b1b9b03.tar.gz
barebox-8905d0f1a4cd2d15b7aeb585f8cf39137b1b9b03.tar.xz
nvmem: Introduce nvmem_cell_get_and_read()
Introduce nvmem_cell_get_and_read() that combines getting a NVMEM cell by name and reading its contents. Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Reviewed-by: Lucas Stach <l.stach@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/nvmem')
-rw-r--r--drivers/nvmem/core.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index 53b934bb33..c0f61f453a 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -750,3 +750,26 @@ int nvmem_device_write(struct nvmem_device *nvmem,
return bytes;
}
EXPORT_SYMBOL_GPL(nvmem_device_write);
+
+void *nvmem_cell_get_and_read(struct device_node *np, const char *cell_name,
+ size_t bytes)
+{
+ struct nvmem_cell *cell;
+ void *value;
+ size_t len;
+
+ cell = of_nvmem_cell_get(np, cell_name);
+ if (IS_ERR(cell))
+ return cell;
+
+ value = nvmem_cell_read(cell, &len);
+ if (!IS_ERR(value) && len != bytes) {
+ kfree(value);
+ value = ERR_PTR(-EINVAL);
+ }
+
+ nvmem_cell_put(cell);
+
+ return value;
+}
+EXPORT_SYMBOL_GPL(nvmem_cell_get_and_read);