Commit 419c0e9d authored by Christophe JAILLET's avatar Christophe JAILLET Committed by Sebastian Reichel

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: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: default avatarAdam Thomson <Adam.Thomson.Opensource@diasemi.com>
Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent de85193c
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <asm/div64.h> #include <asm/div64.h>
#include <linux/mfd/da9150/core.h> #include <linux/mfd/da9150/core.h>
#include <linux/mfd/da9150/registers.h> #include <linux/mfd/da9150/registers.h>
#include <linux/devm-helpers.h>
/* Core2Wire */ /* Core2Wire */
#define DA9150_QIF_READ (0x0 << 7) #define DA9150_QIF_READ (0x0 << 7)
...@@ -506,7 +507,13 @@ static int da9150_fg_probe(struct platform_device *pdev) ...@@ -506,7 +507,13 @@ static int da9150_fg_probe(struct platform_device *pdev)
* work for reporting data updates. * work for reporting data updates.
*/ */
if (fg->interval) { 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, schedule_delayed_work(&fg->work,
msecs_to_jiffies(fg->interval)); msecs_to_jiffies(fg->interval));
} }
...@@ -515,34 +522,17 @@ static int da9150_fg_probe(struct platform_device *pdev) ...@@ -515,34 +522,17 @@ static int da9150_fg_probe(struct platform_device *pdev)
irq = platform_get_irq_byname(pdev, "FG"); irq = platform_get_irq_byname(pdev, "FG");
if (irq < 0) { if (irq < 0) {
dev_err(dev, "Failed to get IRQ FG: %d\n", irq); dev_err(dev, "Failed to get IRQ FG: %d\n", irq);
ret = irq; return irq;
goto irq_fail;
} }
ret = devm_request_threaded_irq(dev, irq, NULL, da9150_fg_irq, ret = devm_request_threaded_irq(dev, irq, NULL, da9150_fg_irq,
IRQF_ONESHOT, "FG", fg); IRQF_ONESHOT, "FG", fg);
if (ret) { if (ret) {
dev_err(dev, "Failed to request IRQ %d: %d\n", irq, ret); dev_err(dev, "Failed to request IRQ %d: %d\n", irq, ret);
goto irq_fail; return ret;
} }
return 0; 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) static int da9150_fg_resume(struct platform_device *pdev)
...@@ -564,7 +554,6 @@ static struct platform_driver da9150_fg_driver = { ...@@ -564,7 +554,6 @@ static struct platform_driver da9150_fg_driver = {
.name = "da9150-fuel-gauge", .name = "da9150-fuel-gauge",
}, },
.probe = da9150_fg_probe, .probe = da9150_fg_probe,
.remove = da9150_fg_remove,
.resume = da9150_fg_resume, .resume = da9150_fg_resume,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment