diff options
author | Viresh Kumar <viresh.kumar@st.com> | 2012-02-24 09:42:37 (GMT) |
---|---|---|
committer | Wim Van Sebroeck <wim@iguana.be> | 2012-03-27 17:58:45 (GMT) |
commit | 16ac4abe0d0ea0a8d42d6a2a7de2a4a00bbf5b40 (patch) | |
tree | 1b602e1c94f51b83f66a9c77e8fcff66cae5fa8b /drivers/watchdog | |
parent | 474ef121008a2992bcc496930166ced89bda23d2 (diff) | |
download | linux-16ac4abe0d0ea0a8d42d6a2a7de2a4a00bbf5b40.tar.xz |
watchdog: sp805_wdt: add pm callbacks to support standby/S2R/hibernation
Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
Diffstat (limited to 'drivers/watchdog')
-rw-r--r-- | drivers/watchdog/sp805_wdt.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/watchdog/sp805_wdt.c b/drivers/watchdog/sp805_wdt.c index 3ff9e47..2b0939a 100644 --- a/drivers/watchdog/sp805_wdt.c +++ b/drivers/watchdog/sp805_wdt.c @@ -25,6 +25,7 @@ #include <linux/miscdevice.h> #include <linux/module.h> #include <linux/moduleparam.h> +#include <linux/pm.h> #include <linux/slab.h> #include <linux/spinlock.h> #include <linux/types.h> @@ -351,6 +352,37 @@ static int __devexit sp805_wdt_remove(struct amba_device *adev) return 0; } +#ifdef CONFIG_PM +static int sp805_wdt_suspend(struct device *dev) +{ + if (test_bit(WDT_BUSY, &wdt->status)) { + wdt_disable(); + clk_disable(wdt->clk); + } + + return 0; +} + +static int sp805_wdt_resume(struct device *dev) +{ + int ret = 0; + + if (test_bit(WDT_BUSY, &wdt->status)) { + ret = clk_enable(wdt->clk); + if (ret) { + dev_err(dev, "clock enable fail"); + return ret; + } + wdt_enable(); + } + + return ret; +} +#endif /* CONFIG_PM */ + +static SIMPLE_DEV_PM_OPS(sp805_wdt_dev_pm_ops, sp805_wdt_suspend, + sp805_wdt_resume); + static struct amba_id sp805_wdt_ids[] = { { .id = 0x00141805, @@ -364,6 +396,7 @@ MODULE_DEVICE_TABLE(amba, sp805_wdt_ids); static struct amba_driver sp805_wdt_driver = { .drv = { .name = MODULE_NAME, + .pm = &sp805_wdt_dev_pm_ops, }, .id_table = sp805_wdt_ids, .probe = sp805_wdt_probe, |