diff options
author | Loic Poulain <loic.poulain@linaro.org> | 2020-02-11 16:38:03 +0100 |
---|---|---|
committer | Wim Van Sebroeck <wim@linux-watchdog.org> | 2020-03-18 11:10:09 +0100 |
commit | b1413e6edc5ab55d77cfa2a0b45f4918c5e97e0f (patch) | |
tree | e56d92b8d3a3a151a9c5fe0f61a5b3ee86424da5 /drivers/watchdog/pm8916_wdt.c | |
parent | 000de5417107623925a4cf0310579f744ff43c28 (diff) | |
download | linux-stable-b1413e6edc5ab55d77cfa2a0b45f4918c5e97e0f.tar.gz linux-stable-b1413e6edc5ab55d77cfa2a0b45f4918c5e97e0f.tar.bz2 linux-stable-b1413e6edc5ab55d77cfa2a0b45f4918c5e97e0f.zip |
watchdog: pm8916_wdt: Add system sleep callbacks
Add suspend and resume pm operations.
Tested on dragonboard-410c.
Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/1581435483-6796-1-git-send-email-loic.poulain@linaro.org
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
Diffstat (limited to 'drivers/watchdog/pm8916_wdt.c')
-rw-r--r-- | drivers/watchdog/pm8916_wdt.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/watchdog/pm8916_wdt.c b/drivers/watchdog/pm8916_wdt.c index 1213179f863c..0937b8d33104 100644 --- a/drivers/watchdog/pm8916_wdt.c +++ b/drivers/watchdog/pm8916_wdt.c @@ -192,6 +192,7 @@ static int pm8916_wdt_probe(struct platform_device *pdev) wdt->wdev.timeout = PM8916_WDT_DEFAULT_TIMEOUT; wdt->wdev.pretimeout = 0; watchdog_set_drvdata(&wdt->wdev, wdt); + platform_set_drvdata(pdev, wdt); watchdog_init_timeout(&wdt->wdev, 0, dev); pm8916_wdt_configure_timers(&wdt->wdev); @@ -199,6 +200,29 @@ static int pm8916_wdt_probe(struct platform_device *pdev) return devm_watchdog_register_device(dev, &wdt->wdev); } +static int __maybe_unused pm8916_wdt_suspend(struct device *dev) +{ + struct pm8916_wdt *wdt = dev_get_drvdata(dev); + + if (watchdog_active(&wdt->wdev)) + return pm8916_wdt_stop(&wdt->wdev); + + return 0; +} + +static int __maybe_unused pm8916_wdt_resume(struct device *dev) +{ + struct pm8916_wdt *wdt = dev_get_drvdata(dev); + + if (watchdog_active(&wdt->wdev)) + return pm8916_wdt_start(&wdt->wdev); + + return 0; +} + +static SIMPLE_DEV_PM_OPS(pm8916_wdt_pm_ops, pm8916_wdt_suspend, + pm8916_wdt_resume); + static const struct of_device_id pm8916_wdt_id_table[] = { { .compatible = "qcom,pm8916-wdt" }, { } @@ -210,6 +234,7 @@ static struct platform_driver pm8916_wdt_driver = { .driver = { .name = "pm8916-wdt", .of_match_table = of_match_ptr(pm8916_wdt_id_table), + .pm = &pm8916_wdt_pm_ops, }, }; module_platform_driver(pm8916_wdt_driver); |