aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/power
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2015-06-09 17:37:56 -0400
committerSebastian Reichel <sre@kernel.org>2015-06-10 10:15:54 -0400
commitfe27e1dfe9962b07215ee01445926306ddbb7c25 (patch)
treeb0e05cfc8302404ba84e0b4c3d270ff4b4d1b762 /drivers/power
parenta6e6b63ee2798f18e0e786feb407cc7846077ea3 (diff)
power: Add devm_power_supply_get_by_phandle() helper function
This commit adds a resource-managed version of the power_supply_get_by_phandle() function. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Sebastian Reichel <sre@kernel.org>
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/power_supply_core.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c
index 4bc0c7f459a5..a44d4554af4f 100644
--- a/drivers/power/power_supply_core.c
+++ b/drivers/power/power_supply_core.c
@@ -446,6 +446,45 @@ struct power_supply *power_supply_get_by_phandle(struct device_node *np,
446 return psy; 446 return psy;
447} 447}
448EXPORT_SYMBOL_GPL(power_supply_get_by_phandle); 448EXPORT_SYMBOL_GPL(power_supply_get_by_phandle);
449
450static void devm_power_supply_put(struct device *dev, void *res)
451{
452 struct power_supply **psy = res;
453
454 power_supply_put(*psy);
455}
456
457/**
458 * devm_power_supply_get_by_phandle() - Resource managed version of
459 * power_supply_get_by_phandle()
460 * @dev: Pointer to device holding phandle property
461 * @phandle_name: Name of property holding a power supply phandle
462 *
463 * Return: On success returns a reference to a power supply with
464 * matching name equals to value under @property, NULL or ERR_PTR otherwise.
465 */
466struct power_supply *devm_power_supply_get_by_phandle(struct device *dev,
467 const char *property)
468{
469 struct power_supply **ptr, *psy;
470
471 if (!dev->of_node)
472 return ERR_PTR(-ENODEV);
473
474 ptr = devres_alloc(devm_power_supply_put, sizeof(*ptr), GFP_KERNEL);
475 if (!ptr)
476 return ERR_PTR(-ENOMEM);
477
478 psy = power_supply_get_by_phandle(dev->of_node, property);
479 if (IS_ERR_OR_NULL(psy)) {
480 devres_free(ptr);
481 } else {
482 *ptr = psy;
483 devres_add(dev, ptr);
484 }
485 return psy;
486}
487EXPORT_SYMBOL_GPL(devm_power_supply_get_by_phandle);
449#endif /* CONFIG_OF */ 488#endif /* CONFIG_OF */
450 489
451int power_supply_get_property(struct power_supply *psy, 490int power_supply_get_property(struct power_supply *psy,