You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
power_supply core: support use of devres to register/unregister a power supply.
Using devm_power_supply_register allows the unregister to happen automatically on error or final put. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Sebastian Reichel <sre@kernel.org>
This commit is contained in:
committed by
Sebastian Reichel
parent
881f985a25
commit
5d8a4219a0
@@ -617,6 +617,51 @@ int power_supply_register_no_ws(struct device *parent, struct power_supply *psy)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(power_supply_register_no_ws);
|
||||
|
||||
static void devm_power_supply_release(struct device *dev, void *res)
|
||||
{
|
||||
struct power_supply **psy = res;
|
||||
|
||||
power_supply_unregister(*psy);
|
||||
}
|
||||
|
||||
int devm_power_supply_register(struct device *parent, struct power_supply *psy)
|
||||
{
|
||||
struct power_supply **ptr = devres_alloc(devm_power_supply_release,
|
||||
sizeof(*ptr), GFP_KERNEL);
|
||||
int ret;
|
||||
|
||||
if (!ptr)
|
||||
return -ENOMEM;
|
||||
ret = __power_supply_register(parent, psy, true);
|
||||
if (ret < 0)
|
||||
devres_free(ptr);
|
||||
else {
|
||||
*ptr = psy;
|
||||
devres_add(parent, ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_power_supply_register);
|
||||
|
||||
int devm_power_supply_register_no_ws(struct device *parent, struct power_supply *psy)
|
||||
{
|
||||
struct power_supply **ptr = devres_alloc(devm_power_supply_release,
|
||||
sizeof(*ptr), GFP_KERNEL);
|
||||
int ret;
|
||||
|
||||
if (!ptr)
|
||||
return -ENOMEM;
|
||||
ret = __power_supply_register(parent, psy, false);
|
||||
if (ret < 0)
|
||||
devres_free(ptr);
|
||||
else {
|
||||
*ptr = psy;
|
||||
devres_add(parent, ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_power_supply_register_no_ws);
|
||||
|
||||
void power_supply_unregister(struct power_supply *psy)
|
||||
{
|
||||
cancel_work_sync(&psy->changed_work);
|
||||
|
||||
@@ -278,6 +278,10 @@ extern int power_supply_register(struct device *parent,
|
||||
struct power_supply *psy);
|
||||
extern int power_supply_register_no_ws(struct device *parent,
|
||||
struct power_supply *psy);
|
||||
extern int devm_power_supply_register(struct device *parent,
|
||||
struct power_supply *psy);
|
||||
extern int devm_power_supply_register_no_ws(struct device *parent,
|
||||
struct power_supply *psy);
|
||||
extern void power_supply_unregister(struct power_supply *psy);
|
||||
extern int power_supply_powers(struct power_supply *psy, struct device *dev);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user