power: supply: da9150-fg: Use devm_delayed_work_autocancel()
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sun, 13 Feb 2022 17:55:05 +0000 (18:55 +0100)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Thu, 24 Feb 2022 11:17:41 +0000 (12:17 +0100)
This driver only uses managed resources, except for the delayed work, if
it is used.

Use devm_delayed_work_autocancel() to also manage the delayed work.
The error handling path of the probe and the remove function can both be
removed.

This saves a few lines of code.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/da9150-fg.c

index 6e36782..e63fa62 100644 (file)
@@ -20,6 +20,7 @@
 #include <asm/div64.h>
 #include <linux/mfd/da9150/core.h>
 #include <linux/mfd/da9150/registers.h>
+#include <linux/devm-helpers.h>
 
 /* Core2Wire */
 #define DA9150_QIF_READ                (0x0 << 7)
@@ -506,7 +507,13 @@ static int da9150_fg_probe(struct platform_device *pdev)
         * work for reporting data updates.
         */
        if (fg->interval) {
-               INIT_DELAYED_WORK(&fg->work, da9150_fg_work);
+               ret = devm_delayed_work_autocancel(dev, &fg->work,
+                                                  da9150_fg_work);
+               if (ret) {
+                       dev_err(dev, "Failed to init work\n");
+                       return ret;
+               }
+
                schedule_delayed_work(&fg->work,
                                      msecs_to_jiffies(fg->interval));
        }
@@ -515,34 +522,17 @@ static int da9150_fg_probe(struct platform_device *pdev)
        irq = platform_get_irq_byname(pdev, "FG");
        if (irq < 0) {
                dev_err(dev, "Failed to get IRQ FG: %d\n", irq);
-               ret = irq;
-               goto irq_fail;
+               return irq;
        }
 
        ret = devm_request_threaded_irq(dev, irq, NULL, da9150_fg_irq,
                                        IRQF_ONESHOT, "FG", fg);
        if (ret) {
                dev_err(dev, "Failed to request IRQ %d: %d\n", irq, ret);
-               goto irq_fail;
+               return ret;
        }
 
        return 0;
-
-irq_fail:
-       if (fg->interval)
-               cancel_delayed_work(&fg->work);
-
-       return ret;
-}
-
-static int da9150_fg_remove(struct platform_device *pdev)
-{
-       struct da9150_fg *fg = platform_get_drvdata(pdev);
-
-       if (fg->interval)
-               cancel_delayed_work(&fg->work);
-
-       return 0;
 }
 
 static int da9150_fg_resume(struct platform_device *pdev)
@@ -564,7 +554,6 @@ static struct platform_driver da9150_fg_driver = {
                .name = "da9150-fuel-gauge",
        },
        .probe = da9150_fg_probe,
-       .remove = da9150_fg_remove,
        .resume = da9150_fg_resume,
 };