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:
parent
40fe78a242
commit
b3db17e4b8
|
@ -353,18 +353,27 @@ static int nvmem_cell_info_to_nvmem_cell(struct nvmem_device *nvmem,
|
|||
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;
|
||||
const struct nvmem_cell_info *info = cfg->cells;
|
||||
int i, rval;
|
||||
|
||||
cells = kcalloc(cfg->ncells, sizeof(*cells), GFP_KERNEL);
|
||||
cells = kcalloc(ncells, sizeof(*cells), GFP_KERNEL);
|
||||
if (!cells)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < cfg->ncells; i++) {
|
||||
for (i = 0; i < ncells; i++) {
|
||||
cells[i] = kzalloc(sizeof(**cells), GFP_KERNEL);
|
||||
if (!cells[i]) {
|
||||
rval = -ENOMEM;
|
||||
|
@ -380,7 +389,7 @@ static int nvmem_add_cells(struct nvmem_device *nvmem,
|
|||
nvmem_cell_add(cells[i]);
|
||||
}
|
||||
|
||||
nvmem->ncells = cfg->ncells;
|
||||
nvmem->ncells = ncells;
|
||||
/* remove tmp array */
|
||||
kfree(cells);
|
||||
|
||||
|
@ -393,6 +402,7 @@ err:
|
|||
|
||||
return rval;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nvmem_add_cells);
|
||||
|
||||
/*
|
||||
* 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)
|
||||
nvmem_add_cells(nvmem, config);
|
||||
nvmem_add_cells(nvmem, config->cells, config->ncells);
|
||||
|
||||
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 nvmem_add_cells(struct nvmem_device *nvmem,
|
||||
const struct nvmem_cell_info *info,
|
||||
int ncells);
|
||||
#else
|
||||
|
||||
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)
|
||||
{
|
||||
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 */
|
||||
|
|
Loading…
Reference in New Issue