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>
This commit is contained in:
parent
a6e6b63ee2
commit
fe27e1dfe9
|
@ -446,6 +446,45 @@ struct power_supply *power_supply_get_by_phandle(struct device_node *np,
|
||||||
return psy;
|
return psy;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(power_supply_get_by_phandle);
|
EXPORT_SYMBOL_GPL(power_supply_get_by_phandle);
|
||||||
|
|
||||||
|
static void devm_power_supply_put(struct device *dev, void *res)
|
||||||
|
{
|
||||||
|
struct power_supply **psy = res;
|
||||||
|
|
||||||
|
power_supply_put(*psy);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* devm_power_supply_get_by_phandle() - Resource managed version of
|
||||||
|
* power_supply_get_by_phandle()
|
||||||
|
* @dev: Pointer to device holding phandle property
|
||||||
|
* @phandle_name: Name of property holding a power supply phandle
|
||||||
|
*
|
||||||
|
* Return: On success returns a reference to a power supply with
|
||||||
|
* matching name equals to value under @property, NULL or ERR_PTR otherwise.
|
||||||
|
*/
|
||||||
|
struct power_supply *devm_power_supply_get_by_phandle(struct device *dev,
|
||||||
|
const char *property)
|
||||||
|
{
|
||||||
|
struct power_supply **ptr, *psy;
|
||||||
|
|
||||||
|
if (!dev->of_node)
|
||||||
|
return ERR_PTR(-ENODEV);
|
||||||
|
|
||||||
|
ptr = devres_alloc(devm_power_supply_put, sizeof(*ptr), GFP_KERNEL);
|
||||||
|
if (!ptr)
|
||||||
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
|
psy = power_supply_get_by_phandle(dev->of_node, property);
|
||||||
|
if (IS_ERR_OR_NULL(psy)) {
|
||||||
|
devres_free(ptr);
|
||||||
|
} else {
|
||||||
|
*ptr = psy;
|
||||||
|
devres_add(dev, ptr);
|
||||||
|
}
|
||||||
|
return psy;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(devm_power_supply_get_by_phandle);
|
||||||
#endif /* CONFIG_OF */
|
#endif /* CONFIG_OF */
|
||||||
|
|
||||||
int power_supply_get_property(struct power_supply *psy,
|
int power_supply_get_property(struct power_supply *psy,
|
||||||
|
|
|
@ -292,10 +292,15 @@ extern void power_supply_put(struct power_supply *psy);
|
||||||
#ifdef CONFIG_OF
|
#ifdef CONFIG_OF
|
||||||
extern struct power_supply *power_supply_get_by_phandle(struct device_node *np,
|
extern struct power_supply *power_supply_get_by_phandle(struct device_node *np,
|
||||||
const char *property);
|
const char *property);
|
||||||
|
extern struct power_supply *devm_power_supply_get_by_phandle(
|
||||||
|
struct device *dev, const char *property);
|
||||||
#else /* !CONFIG_OF */
|
#else /* !CONFIG_OF */
|
||||||
static inline struct power_supply *
|
static inline struct power_supply *
|
||||||
power_supply_get_by_phandle(struct device_node *np, const char *property)
|
power_supply_get_by_phandle(struct device_node *np, const char *property)
|
||||||
{ return NULL; }
|
{ return NULL; }
|
||||||
|
static inline struct power_supply *
|
||||||
|
devm_power_supply_get_by_phandle(struct device *dev, const char *property)
|
||||||
|
{ return NULL; }
|
||||||
#endif /* CONFIG_OF */
|
#endif /* CONFIG_OF */
|
||||||
extern void power_supply_changed(struct power_supply *psy);
|
extern void power_supply_changed(struct power_supply *psy);
|
||||||
extern int power_supply_am_i_supplied(struct power_supply *psy);
|
extern int power_supply_am_i_supplied(struct power_supply *psy);
|
||||||
|
|
Loading…
Reference in New Issue