diff options
author | Christophe JAILLET <christophe.jaillet@wanadoo.fr> | 2022-02-13 20:55:05 +0300 |
---|---|---|
committer | Sebastian Reichel <sebastian.reichel@collabora.com> | 2022-02-24 14:17:41 +0300 |
commit | 419c0e9d25ac083877eb37143b54eb57af1401dd (patch) | |
tree | 41c477f9a2496da8c11b410f2db473826766085a | |
parent | de85193cff0d94d030a53656d8fcc41794807bef (diff) | |
download | linux-419c0e9d25ac083877eb37143b54eb57af1401dd.tar.xz |
power: supply: da9150-fg: Use devm_delayed_work_autocancel()
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>
-rw-r--r-- | drivers/power/supply/da9150-fg.c | 31 |
1 files changed, 10 insertions, 21 deletions
diff --git a/drivers/power/supply/da9150-fg.c b/drivers/power/supply/da9150-fg.c index 6e367826aae9..e63fa62d1943 100644 --- a/drivers/power/supply/da9150-fg.c +++ b/drivers/power/supply/da9150-fg.c @@ -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, }; |