summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/watchdog/dw_wdt.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/watchdog/dw_wdt.c b/drivers/watchdog/dw_wdt.c
index a2edcef2c13d..7b1984d18448 100644
--- a/drivers/watchdog/dw_wdt.c
+++ b/drivers/watchdog/dw_wdt.c
@@ -68,6 +68,9 @@ static struct {
struct timer_list timer;
int expect_close;
struct notifier_block restart_handler;
+ /* Save/restore */
+ u32 control;
+ u32 timeout;
} dw_wdt;
static inline int dw_wdt_is_enabled(void)
@@ -301,6 +304,9 @@ static int dw_wdt_release(struct inode *inode, struct file *filp)
#ifdef CONFIG_PM_SLEEP
static int dw_wdt_suspend(struct device *dev)
{
+ dw_wdt.control = readl(dw_wdt.regs + WDOG_CONTROL_REG_OFFSET);
+ dw_wdt.timeout = readl(dw_wdt.regs + WDOG_TIMEOUT_RANGE_REG_OFFSET);
+
clk_disable_unprepare(dw_wdt.clk);
return 0;
@@ -313,6 +319,9 @@ static int dw_wdt_resume(struct device *dev)
if (err)
return err;
+ writel(dw_wdt.timeout, dw_wdt.regs + WDOG_TIMEOUT_RANGE_REG_OFFSET);
+ writel(dw_wdt.control, dw_wdt.regs + WDOG_CONTROL_REG_OFFSET);
+
dw_wdt_keepalive();
return 0;