Messages in this thread | | | From | Frank Lee <> | Date | Wed, 5 Feb 2020 19:50:50 +0800 | Subject | Re: [PATCH 1/2] nvmem: core: add nvmem_cell_read_common |
| |
ping...
On Mon, Jan 27, 2020 at 3:56 AM Yangtao Li <tiny.windzz@gmail.com> wrote: > > Now there are nvmem_cell_read_u16 and nvmem_cell_read_u32. > They are very similar, let's strip out a common part. > > And use nvmem_cell_read_common to simplify their implementation. > > Signed-off-by: Yangtao Li <tiny.windzz@gmail.com> > --- > drivers/nvmem/core.c | 54 ++++++++++++++++---------------------------- > 1 file changed, 19 insertions(+), 35 deletions(-) > > diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c > index 9f1ee9c766ec..f4226546e49a 100644 > --- a/drivers/nvmem/core.c > +++ b/drivers/nvmem/core.c > @@ -1071,16 +1071,8 @@ int nvmem_cell_write(struct nvmem_cell *cell, void *buf, size_t len) > } > EXPORT_SYMBOL_GPL(nvmem_cell_write); > > -/** > - * nvmem_cell_read_u16() - Read a cell value as an u16 > - * > - * @dev: Device that requests the nvmem cell. > - * @cell_id: Name of nvmem cell to read. > - * @val: pointer to output value. > - * > - * Return: 0 on success or negative errno. > - */ > -int nvmem_cell_read_u16(struct device *dev, const char *cell_id, u16 *val) > +static int nvmem_cell_read_common(struct device *dev, const char *cell_id, > + void *val, size_t count) > { > struct nvmem_cell *cell; > void *buf; > @@ -1095,17 +1087,31 @@ int nvmem_cell_read_u16(struct device *dev, const char *cell_id, u16 *val) > nvmem_cell_put(cell); > return PTR_ERR(buf); > } > - if (len != sizeof(*val)) { > + if (len != count) { > kfree(buf); > nvmem_cell_put(cell); > return -EINVAL; > } > - memcpy(val, buf, sizeof(*val)); > + memcpy(val, buf, count); > kfree(buf); > nvmem_cell_put(cell); > > return 0; > } > + > +/** > + * nvmem_cell_read_u16() - Read a cell value as an u16 > + * > + * @dev: Device that requests the nvmem cell. > + * @cell_id: Name of nvmem cell to read. > + * @val: pointer to output value. > + * > + * Return: 0 on success or negative errno. > + */ > +int nvmem_cell_read_u16(struct device *dev, const char *cell_id, u16 *val) > +{ > + return nvmem_cell_read_common(dev, cell_id, val, sizeof(*val)); > +} > EXPORT_SYMBOL_GPL(nvmem_cell_read_u16); > > /** > @@ -1119,29 +1125,7 @@ EXPORT_SYMBOL_GPL(nvmem_cell_read_u16); > */ > int nvmem_cell_read_u32(struct device *dev, const char *cell_id, u32 *val) > { > - struct nvmem_cell *cell; > - void *buf; > - size_t len; > - > - cell = nvmem_cell_get(dev, cell_id); > - if (IS_ERR(cell)) > - return PTR_ERR(cell); > - > - buf = nvmem_cell_read(cell, &len); > - if (IS_ERR(buf)) { > - nvmem_cell_put(cell); > - return PTR_ERR(buf); > - } > - if (len != sizeof(*val)) { > - kfree(buf); > - nvmem_cell_put(cell); > - return -EINVAL; > - } > - memcpy(val, buf, sizeof(*val)); > - > - kfree(buf); > - nvmem_cell_put(cell); > - return 0; > + return nvmem_cell_read_common(dev, cell_id, val, sizeof(*val)); > } > EXPORT_SYMBOL_GPL(nvmem_cell_read_u32); > > -- > 2.17.1 >
| |