nvmem: add support for cell lookups from machine code

Add a way for machine code users to associate devices with nvmem cells.

This restores the support for non-DT systems but following a different
approach. Cells must now be associated with devices using provided
routines and data structures before they can be retrieved using
nvmem_cell_get().

It's still possible to define cells statically in nvmem_config but
cells created this way still need to be associated with consumers using
lookup entries.

Note that nvmem_find() must be moved higher in the source file as we
want to call it from __nvmem_device_get() for devices that don't have
a device node.

The signature of __nvmem_device_get() is also changed as it's no longer
used to retrieve cells.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Bartosz Golaszewski
2018-09-21 06:40:17 -07:00
committed by Greg Kroah-Hartman
parent e888d445ac
commit 506157be06
2 changed files with 131 additions and 26 deletions

View File

@@ -29,6 +29,24 @@ struct nvmem_cell_info {
unsigned int nbits;
};
/**
* struct nvmem_cell_lookup - cell lookup entry
*
* @nvmem_name: Name of the provider.
* @cell_name: Name of the nvmem cell as defined in the name field of
* struct nvmem_cell_info.
* @dev_id: Name of the consumer device that will be associated with
* this cell.
* @con_id: Connector id for this cell lookup.
*/
struct nvmem_cell_lookup {
const char *nvmem_name;
const char *cell_name;
const char *dev_id;
const char *con_id;
struct list_head node;
};
#if IS_ENABLED(CONFIG_NVMEM)
/* Cell based interface */
@@ -57,6 +75,11 @@ int nvmem_device_cell_write(struct nvmem_device *nvmem,
const char *nvmem_dev_name(struct nvmem_device *nvmem);
void nvmem_add_cell_lookups(struct nvmem_cell_lookup *entries,
size_t nentries);
void nvmem_del_cell_lookups(struct nvmem_cell_lookup *entries,
size_t nentries);
#else
static inline struct nvmem_cell *nvmem_cell_get(struct device *dev,
@@ -151,6 +174,11 @@ static inline const char *nvmem_dev_name(struct nvmem_device *nvmem)
return NULL;
}
static inline void
nvmem_add_cell_lookups(struct nvmem_cell_lookup *entries, size_t nentries) {}
static inline void
nvmem_del_cell_lookups(struct nvmem_cell_lookup *entries, size_t nentries) {}
#endif /* CONFIG_NVMEM */
#if IS_ENABLED(CONFIG_NVMEM) && IS_ENABLED(CONFIG_OF)