]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
power: supply: ipaq_micro: Simplify with devm
authorKrzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Thu, 5 Mar 2026 21:45:45 +0000 (22:45 +0100)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Wed, 11 Mar 2026 05:58:00 +0000 (06:58 +0100)
Simplify the driver by using devm interfaces, which allow to drop
probe() error paths and the remove() callback.

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://patch.msgid.link/20260305-workqueue-devm-v2-6-66a38741c652@oss.qualcomm.com
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/ipaq_micro_battery.c

index ff8573a5ca6d09908b330ef2a9ed37f7c7a1eb7f..5e3fe3852d0ecf2f93d686fdac291042c2d632a6 100644 (file)
@@ -7,6 +7,7 @@
  * Author : Linus Walleij <linus.walleij@linaro.org>
  */
 
+#include <linux/devm-helpers.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/platform_device.h>
@@ -232,49 +233,31 @@ static int micro_batt_probe(struct platform_device *pdev)
                return -ENOMEM;
 
        mb->micro = dev_get_drvdata(pdev->dev.parent);
-       mb->wq = alloc_workqueue("ipaq-battery-wq",
-                                WQ_MEM_RECLAIM | WQ_PERCPU, 0);
+       mb->wq = devm_alloc_workqueue(&pdev->dev, "ipaq-battery-wq",
+                                     WQ_MEM_RECLAIM | WQ_PERCPU, 0);
        if (!mb->wq)
                return -ENOMEM;
 
-       INIT_DELAYED_WORK(&mb->update, micro_battery_work);
+       ret = devm_delayed_work_autocancel(&pdev->dev, &mb->update, micro_battery_work);
+       if (ret)
+               return ret;
+
        platform_set_drvdata(pdev, mb);
        queue_delayed_work(mb->wq, &mb->update, 1);
 
-       micro_batt_power = power_supply_register(&pdev->dev,
-                                                &micro_batt_power_desc, NULL);
-       if (IS_ERR(micro_batt_power)) {
-               ret = PTR_ERR(micro_batt_power);
-               goto batt_err;
-       }
+       micro_batt_power = devm_power_supply_register(&pdev->dev,
+                                                     &micro_batt_power_desc,
+                                                     NULL);
+       if (IS_ERR(micro_batt_power))
+               return PTR_ERR(micro_batt_power);
 
-       micro_ac_power = power_supply_register(&pdev->dev,
-                                              &micro_ac_power_desc, NULL);
-       if (IS_ERR(micro_ac_power)) {
-               ret = PTR_ERR(micro_ac_power);
-               goto ac_err;
-       }
+       micro_ac_power = devm_power_supply_register(&pdev->dev,
+                                                   &micro_ac_power_desc, NULL);
+       if (IS_ERR(micro_ac_power))
+               return PTR_ERR(micro_ac_power);
 
        dev_info(&pdev->dev, "iPAQ micro battery driver\n");
        return 0;
-
-ac_err:
-       power_supply_unregister(micro_batt_power);
-batt_err:
-       cancel_delayed_work_sync(&mb->update);
-       destroy_workqueue(mb->wq);
-       return ret;
-}
-
-static void micro_batt_remove(struct platform_device *pdev)
-
-{
-       struct micro_battery *mb = platform_get_drvdata(pdev);
-
-       power_supply_unregister(micro_ac_power);
-       power_supply_unregister(micro_batt_power);
-       cancel_delayed_work_sync(&mb->update);
-       destroy_workqueue(mb->wq);
 }
 
 static int __maybe_unused micro_batt_suspend(struct device *dev)
@@ -303,7 +286,6 @@ static struct platform_driver micro_batt_device_driver = {
                .pm     = &micro_batt_dev_pm_ops,
        },
        .probe          = micro_batt_probe,
-       .remove         = micro_batt_remove,
 };
 module_platform_driver(micro_batt_device_driver);