mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
nvmem: Introduce devm_nvmem_(un)register()
Introduce devm_nvmem_register()/devm_nvmem_unregister() to make .remove() unnecessary in trivial drivers. Cc: Srinivas Kandagatla <[email protected]> Cc: Heiko Stuebner <[email protected]> Cc: Masahiro Yamada <[email protected]> Cc: Carlo Caione <[email protected]> Cc: Kevin Hilman <[email protected]> Cc: Matthias Brugger <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Signed-off-by: Andrey Smirnov <[email protected]> Signed-off-by: Srinivas Kandagatla <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
This commit is contained in:
parent
fd0f4906a3
commit
f1f50eca5f
2 changed files with 76 additions and 0 deletions
|
|
@ -549,6 +549,65 @@ int nvmem_unregister(struct nvmem_device *nvmem)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(nvmem_unregister);
|
||||
|
||||
static void devm_nvmem_release(struct device *dev, void *res)
|
||||
{
|
||||
WARN_ON(nvmem_unregister(*(struct nvmem_device **)res));
|
||||
}
|
||||
|
||||
/**
|
||||
* devm_nvmem_register() - Register a managed nvmem device for given
|
||||
* nvmem_config.
|
||||
* Also creates an binary entry in /sys/bus/nvmem/devices/dev-name/nvmem
|
||||
*
|
||||
* @config: nvmem device configuration with which nvmem device is created.
|
||||
*
|
||||
* Return: Will be an ERR_PTR() on error or a valid pointer to nvmem_device
|
||||
* on success.
|
||||
*/
|
||||
struct nvmem_device *devm_nvmem_register(struct device *dev,
|
||||
const struct nvmem_config *config)
|
||||
{
|
||||
struct nvmem_device **ptr, *nvmem;
|
||||
|
||||
ptr = devres_alloc(devm_nvmem_release, sizeof(*ptr), GFP_KERNEL);
|
||||
if (!ptr)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
nvmem = nvmem_register(config);
|
||||
|
||||
if (!IS_ERR(nvmem)) {
|
||||
*ptr = nvmem;
|
||||
devres_add(dev, ptr);
|
||||
} else {
|
||||
devres_free(ptr);
|
||||
}
|
||||
|
||||
return nvmem;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_nvmem_register);
|
||||
|
||||
static int devm_nvmem_match(struct device *dev, void *res, void *data)
|
||||
{
|
||||
struct nvmem_device **r = res;
|
||||
|
||||
return *r == data;
|
||||
}
|
||||
|
||||
/**
|
||||
* devm_nvmem_unregister() - Unregister previously registered managed nvmem
|
||||
* device.
|
||||
*
|
||||
* @nvmem: Pointer to previously registered nvmem device.
|
||||
*
|
||||
* Return: Will be an negative on error or a zero on success.
|
||||
*/
|
||||
int devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem)
|
||||
{
|
||||
return devres_release(dev, devm_nvmem_release, devm_nvmem_match, nvmem);
|
||||
}
|
||||
EXPORT_SYMBOL(devm_nvmem_unregister);
|
||||
|
||||
|
||||
static struct nvmem_device *__nvmem_device_get(struct device_node *np,
|
||||
struct nvmem_cell **cellp,
|
||||
const char *cell_id)
|
||||
|
|
|
|||
Loading…
Reference in a new issue