diff options
Diffstat (limited to 'drivers/nvmem/core.c')
-rw-r--r-- | drivers/nvmem/core.c | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 398ea7f54826..408b521ee520 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -608,7 +608,7 @@ static struct nvmem_device *nvmem_find(const char *name) /** * of_nvmem_device_get() - Get nvmem device from a given id * - * @dev node: Device tree node that uses the nvmem device + * @np: Device tree node that uses the nvmem device. * @id: nvmem name from nvmem-names property. * * Return: ERR_PTR() on error or a valid pointer to a struct nvmem_device @@ -634,8 +634,8 @@ EXPORT_SYMBOL_GPL(of_nvmem_device_get); /** * nvmem_device_get() - Get nvmem device from a given id * - * @dev : Device that uses the nvmem device - * @id: nvmem name from nvmem-names property. + * @dev: Device that uses the nvmem device. + * @dev_name: name of the requested nvmem device. * * Return: ERR_PTR() on error or a valid pointer to a struct nvmem_device * on success. @@ -674,6 +674,7 @@ static void devm_nvmem_device_release(struct device *dev, void *res) /** * devm_nvmem_device_put() - put alredy got nvmem device * + * @dev: Device that uses the nvmem device. * @nvmem: pointer to nvmem device allocated by devm_nvmem_cell_get(), * that needs to be released. */ @@ -702,8 +703,8 @@ EXPORT_SYMBOL_GPL(nvmem_device_put); /** * devm_nvmem_device_get() - Get nvmem cell of device form a given id * - * @dev node: Device tree node that uses the nvmem cell - * @id: nvmem name in nvmems property. + * @dev: Device that requests the nvmem device. + * @id: name id for the requested nvmem device. * * Return: ERR_PTR() on error or a valid pointer to a struct nvmem_cell * on success. The nvmem_cell will be freed by the automatically once the @@ -745,8 +746,10 @@ static struct nvmem_cell *nvmem_cell_get_from_list(const char *cell_id) /** * of_nvmem_cell_get() - Get a nvmem cell from given device node and cell id * - * @dev node: Device tree node that uses the nvmem cell - * @id: nvmem cell name from nvmem-cell-names property. + * @np: Device tree node that uses the nvmem cell. + * @name: nvmem cell name from nvmem-cell-names property, or NULL + * for the cell at index 0 (the lone cell with no accompanying + * nvmem-cell-names property). * * Return: Will be an ERR_PTR() on error or a valid pointer * to a struct nvmem_cell. The nvmem_cell will be freed by the @@ -759,9 +762,12 @@ struct nvmem_cell *of_nvmem_cell_get(struct device_node *np, struct nvmem_cell *cell; struct nvmem_device *nvmem; const __be32 *addr; - int rval, len, index; + int rval, len; + int index = 0; - index = of_property_match_string(np, "nvmem-cell-names", name); + /* if cell name exists, find index to the name */ + if (name) + index = of_property_match_string(np, "nvmem-cell-names", name); cell_np = of_parse_phandle(np, "nvmem-cells", index); if (!cell_np) @@ -830,8 +836,8 @@ EXPORT_SYMBOL_GPL(of_nvmem_cell_get); /** * nvmem_cell_get() - Get nvmem cell of device form a given cell name * - * @dev node: Device tree node that uses the nvmem cell - * @id: nvmem cell name to get. + * @dev: Device that requests the nvmem cell. + * @cell_id: nvmem cell name to get. * * Return: Will be an ERR_PTR() on error or a valid pointer * to a struct nvmem_cell. The nvmem_cell will be freed by the @@ -859,8 +865,8 @@ static void devm_nvmem_cell_release(struct device *dev, void *res) /** * devm_nvmem_cell_get() - Get nvmem cell of device form a given id * - * @dev node: Device tree node that uses the nvmem cell - * @id: nvmem id in nvmem-names property. + * @dev: Device that requests the nvmem cell. + * @id: nvmem cell name id to get. * * Return: Will be an ERR_PTR() on error or a valid pointer * to a struct nvmem_cell. The nvmem_cell will be freed by the @@ -900,7 +906,8 @@ static int devm_nvmem_cell_match(struct device *dev, void *res, void *data) * devm_nvmem_cell_put() - Release previously allocated nvmem cell * from devm_nvmem_cell_get. * - * @cell: Previously allocated nvmem cell by devm_nvmem_cell_get() + * @dev: Device that requests the nvmem cell. + * @cell: Previously allocated nvmem cell by devm_nvmem_cell_get(). */ void devm_nvmem_cell_put(struct device *dev, struct nvmem_cell *cell) { @@ -916,7 +923,7 @@ EXPORT_SYMBOL(devm_nvmem_cell_put); /** * nvmem_cell_put() - Release previously allocated nvmem cell. * - * @cell: Previously allocated nvmem cell by nvmem_cell_get() + * @cell: Previously allocated nvmem cell by nvmem_cell_get(). */ void nvmem_cell_put(struct nvmem_cell *cell) { @@ -970,7 +977,8 @@ static int __nvmem_cell_read(struct nvmem_device *nvmem, if (cell->bit_offset || cell->nbits) nvmem_shift_read_buffer_in_place(cell, buf); - *len = cell->bytes; + if (len) + *len = cell->bytes; return 0; } @@ -979,7 +987,8 @@ static int __nvmem_cell_read(struct nvmem_device *nvmem, * nvmem_cell_read() - Read a given nvmem cell * * @cell: nvmem cell to be read. - * @len: pointer to length of cell which will be populated on successful read. + * @len: pointer to length of cell which will be populated on successful read; + * can be NULL. * * Return: ERR_PTR() on error or a valid pointer to a buffer on success. The * buffer should be freed by the consumer with a kfree(). @@ -1126,7 +1135,7 @@ EXPORT_SYMBOL_GPL(nvmem_device_cell_read); * nvmem_device_cell_write() - Write cell to a given nvmem device * * @nvmem: nvmem device to be written to. - * @info: nvmem cell info to be written + * @info: nvmem cell info to be written. * @buf: buffer to be written to cell. * * Return: length of bytes written or negative error code on failure. |