mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
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;
|
||||
}
|
||||
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 */
|
||||
|
||||
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
|
||||
extern struct power_supply *power_supply_get_by_phandle(struct device_node *np,
|
||||
const char *property);
|
||||
extern struct power_supply *devm_power_supply_get_by_phandle(
|
||||
struct device *dev, const char *property);
|
||||
#else /* !CONFIG_OF */
|
||||
static inline struct power_supply *
|
||||
power_supply_get_by_phandle(struct device_node *np, const char *property)
|
||||
{ return NULL; }
|
||||
static inline struct power_supply *
|
||||
devm_power_supply_get_by_phandle(struct device *dev, const char *property)
|
||||
{ return NULL; }
|
||||
#endif /* CONFIG_OF */
|
||||
extern void power_supply_changed(struct power_supply *psy);
|
||||
extern int power_supply_am_i_supplied(struct power_supply *psy);
|
||||
|
Loading…
Reference in New Issue
Block a user