Instead of handling the registration manually, use the automatic
`devres` variant `devm_power_supply_register()`. This is less error
prone and cleaner.
Signed-off-by: Waqar Hameed <waqar.hameed@axis.com>
---
drivers/power/supply/wm97xx_battery.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/power/supply/wm97xx_battery.c b/drivers/power/supply/wm97xx_battery.c
index f00722c88c6fe..e91467dcab19c 100644
--- a/drivers/power/supply/wm97xx_battery.c
+++ b/drivers/power/supply/wm97xx_battery.c
@@ -223,7 +223,7 @@ static int wm97xx_bat_probe(struct platform_device *dev)
bat_psy_desc.properties = prop;
bat_psy_desc.num_properties = props;
- bat_psy = power_supply_register(&dev->dev, &bat_psy_desc, &cfg);
+ bat_psy = devm_power_supply_register(&dev->dev, &bat_psy_desc, &cfg);
if (!IS_ERR(bat_psy)) {
schedule_work(&bat_work);
} else {
@@ -237,15 +237,12 @@ static int wm97xx_bat_probe(struct platform_device *dev)
if (ret) {
dev_err_probe(&dev->dev, ret,
"failed to request GPIO irq\n");
- goto unregister;
+ goto free;
}
}
return 0;
-unregister:
- power_supply_unregister(bat_psy);
-
free:
kfree(prop);
@@ -257,7 +254,6 @@ static void wm97xx_bat_remove(struct platform_device *dev)
if (charge_gpiod)
free_irq(gpiod_to_irq(charge_gpiod), dev);
cancel_work_sync(&bat_work);
- power_supply_unregister(bat_psy);
kfree(prop);
}
--
2.39.5
Hi,
On Sat, Dec 20, 2025 at 11:46:24PM +0100, Waqar Hameed wrote:
> Instead of handling the registration manually, use the automatic
> `devres` variant `devm_power_supply_register()`. This is less error
> prone and cleaner.
>
> Signed-off-by: Waqar Hameed <waqar.hameed@axis.com>
> ---
> drivers/power/supply/wm97xx_battery.c | 8 ++------
> 1 file changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/power/supply/wm97xx_battery.c b/drivers/power/supply/wm97xx_battery.c
> index f00722c88c6fe..e91467dcab19c 100644
> --- a/drivers/power/supply/wm97xx_battery.c
> +++ b/drivers/power/supply/wm97xx_battery.c
> @@ -223,7 +223,7 @@ static int wm97xx_bat_probe(struct platform_device *dev)
> bat_psy_desc.properties = prop;
> bat_psy_desc.num_properties = props;
>
> - bat_psy = power_supply_register(&dev->dev, &bat_psy_desc, &cfg);
> + bat_psy = devm_power_supply_register(&dev->dev, &bat_psy_desc, &cfg);
> if (!IS_ERR(bat_psy)) {
> schedule_work(&bat_work);
> } else {
> @@ -237,15 +237,12 @@ static int wm97xx_bat_probe(struct platform_device *dev)
> if (ret) {
> dev_err_probe(&dev->dev, ret,
> "failed to request GPIO irq\n");
> - goto unregister;
> + goto free;
> }
> }
>
> return 0;
>
> -unregister:
> - power_supply_unregister(bat_psy);
> -
> free:
> kfree(prop);
>
> @@ -257,7 +254,6 @@ static void wm97xx_bat_remove(struct platform_device *dev)
> if (charge_gpiod)
> free_irq(gpiod_to_irq(charge_gpiod), dev);
> cancel_work_sync(&bat_work);
> - power_supply_unregister(bat_psy);
> kfree(prop);
> }
This free's prop before bat_psy. You fix that in the next patch, but
to be bisectable those two patches must be swapped.
Greetings,
-- Sebastian
On Mon, Jan 12, 2026 at 02:36 +0100 Sebastian Reichel <sebastian.reichel@collabora.com> wrote: [...] >> @@ -257,7 +254,6 @@ static void wm97xx_bat_remove(struct platform_device *dev) >> if (charge_gpiod) >> free_irq(gpiod_to_irq(charge_gpiod), dev); >> cancel_work_sync(&bat_work); >> - power_supply_unregister(bat_psy); >> kfree(prop); >> } > > This free's prop before bat_psy. You fix that in the next patch, but > to be bisectable those two patches must be swapped. Ah, of course! Let's swap the patches in v2.
© 2016 - 2026 Red Hat, Inc.