drivers: nvmem: Export nvmem_add_cells()
Not all platforms use device tree. It is useful to be able to add cells to a NVMEM device from code. Export nvmem_add_cells() so making this possible. This required changing the parameters a bit, so that just the cells and the number of cells are passed, not the whole nvmem config structure. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Andrey Smirnov <andrew.smirnov@gmail.com> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
40fe78a242
commit
b3db17e4b8
@@ -353,18 +353,27 @@ static int nvmem_cell_info_to_nvmem_cell(struct nvmem_device *nvmem,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nvmem_add_cells(struct nvmem_device *nvmem,
|
/**
|
||||||
const struct nvmem_config *cfg)
|
* nvmem_add_cells() - Add cell information to an nvmem device
|
||||||
|
*
|
||||||
|
* @nvmem: nvmem device to add cells to.
|
||||||
|
* @info: nvmem cell info to add to the device
|
||||||
|
* @ncells: number of cells in info
|
||||||
|
*
|
||||||
|
* Return: 0 or negative error code on failure.
|
||||||
|
*/
|
||||||
|
int nvmem_add_cells(struct nvmem_device *nvmem,
|
||||||
|
const struct nvmem_cell_info *info,
|
||||||
|
int ncells)
|
||||||
{
|
{
|
||||||
struct nvmem_cell **cells;
|
struct nvmem_cell **cells;
|
||||||
const struct nvmem_cell_info *info = cfg->cells;
|
|
||||||
int i, rval;
|
int i, rval;
|
||||||
|
|
||||||
cells = kcalloc(cfg->ncells, sizeof(*cells), GFP_KERNEL);
|
cells = kcalloc(ncells, sizeof(*cells), GFP_KERNEL);
|
||||||
if (!cells)
|
if (!cells)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
for (i = 0; i < cfg->ncells; i++) {
|
for (i = 0; i < ncells; i++) {
|
||||||
cells[i] = kzalloc(sizeof(**cells), GFP_KERNEL);
|
cells[i] = kzalloc(sizeof(**cells), GFP_KERNEL);
|
||||||
if (!cells[i]) {
|
if (!cells[i]) {
|
||||||
rval = -ENOMEM;
|
rval = -ENOMEM;
|
||||||
@@ -380,7 +389,7 @@ static int nvmem_add_cells(struct nvmem_device *nvmem,
|
|||||||
nvmem_cell_add(cells[i]);
|
nvmem_cell_add(cells[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
nvmem->ncells = cfg->ncells;
|
nvmem->ncells = ncells;
|
||||||
/* remove tmp array */
|
/* remove tmp array */
|
||||||
kfree(cells);
|
kfree(cells);
|
||||||
|
|
||||||
@@ -393,6 +402,7 @@ err:
|
|||||||
|
|
||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(nvmem_add_cells);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* nvmem_setup_compat() - Create an additional binary entry in
|
* nvmem_setup_compat() - Create an additional binary entry in
|
||||||
@@ -509,7 +519,7 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (config->cells)
|
if (config->cells)
|
||||||
nvmem_add_cells(nvmem, config);
|
nvmem_add_cells(nvmem, config->cells, config->ncells);
|
||||||
|
|
||||||
return nvmem;
|
return nvmem;
|
||||||
|
|
||||||
|
|||||||
@@ -77,6 +77,9 @@ struct nvmem_device *devm_nvmem_register(struct device *dev,
|
|||||||
|
|
||||||
int devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem);
|
int devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem);
|
||||||
|
|
||||||
|
int nvmem_add_cells(struct nvmem_device *nvmem,
|
||||||
|
const struct nvmem_cell_info *info,
|
||||||
|
int ncells);
|
||||||
#else
|
#else
|
||||||
|
|
||||||
static inline struct nvmem_device *nvmem_register(const struct nvmem_config *c)
|
static inline struct nvmem_device *nvmem_register(const struct nvmem_config *c)
|
||||||
@@ -99,6 +102,14 @@ static inline int
|
|||||||
devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem)
|
devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem)
|
||||||
{
|
{
|
||||||
return nvmem_unregister(nvmem);
|
return nvmem_unregister(nvmem);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int nvmem_add_cells(struct nvmem_device *nvmem,
|
||||||
|
const struct nvmem_cell_info *info,
|
||||||
|
int ncells)
|
||||||
|
{
|
||||||
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_NVMEM */
|
#endif /* CONFIG_NVMEM */
|
||||||
|
|||||||
Reference in New Issue
Block a user