diff options
author | Andrey Smirnov <andrew.smirnov@gmail.com> | 2018-06-27 21:42:26 -0700 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2018-06-29 07:04:47 +0200 |
commit | 8905d0f1a4cd2d15b7aeb585f8cf39137b1b9b03 (patch) | |
tree | 8e07e76de64a0103c8980b37d31aa4df84f1abed /drivers/nvmem | |
parent | 97f22548a8e887f163af7dc1598cbc8d0f85f0da (diff) | |
download | barebox-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.c | 23 |
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); |