Commit 6c5c0d48 authored by Jongsung Kim's avatar Jongsung Kim Committed by Wim Van Sebroeck

watchdog: sp805: add restart handler

Add restart handler for SP805 watchdog so that the driver can be
used to reboot the system.
Signed-off-by: default avatarJongsung Kim <neidhard.kim@lge.com>
Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
Signed-off-by: default avatarWim Van Sebroeck <wim@iguana.be>
parent 665f9442
...@@ -121,6 +121,18 @@ static unsigned int wdt_timeleft(struct watchdog_device *wdd) ...@@ -121,6 +121,18 @@ static unsigned int wdt_timeleft(struct watchdog_device *wdd)
return div_u64(load, rate); return div_u64(load, rate);
} }
static int
wdt_restart(struct watchdog_device *wdd, unsigned long mode, void *cmd)
{
struct sp805_wdt *wdt = watchdog_get_drvdata(wdd);
writel_relaxed(0, wdt->base + WDTCONTROL);
writel_relaxed(0, wdt->base + WDTLOAD);
writel_relaxed(INT_ENABLE | RESET_ENABLE, wdt->base + WDTCONTROL);
return 0;
}
static int wdt_config(struct watchdog_device *wdd, bool ping) static int wdt_config(struct watchdog_device *wdd, bool ping)
{ {
struct sp805_wdt *wdt = watchdog_get_drvdata(wdd); struct sp805_wdt *wdt = watchdog_get_drvdata(wdd);
...@@ -197,6 +209,7 @@ static const struct watchdog_ops wdt_ops = { ...@@ -197,6 +209,7 @@ static const struct watchdog_ops wdt_ops = {
.ping = wdt_ping, .ping = wdt_ping,
.set_timeout = wdt_setload, .set_timeout = wdt_setload,
.get_timeleft = wdt_timeleft, .get_timeleft = wdt_timeleft,
.restart = wdt_restart,
}; };
static int static int
...@@ -230,6 +243,7 @@ sp805_wdt_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -230,6 +243,7 @@ sp805_wdt_probe(struct amba_device *adev, const struct amba_id *id)
spin_lock_init(&wdt->lock); spin_lock_init(&wdt->lock);
watchdog_set_nowayout(&wdt->wdd, nowayout); watchdog_set_nowayout(&wdt->wdd, nowayout);
watchdog_set_drvdata(&wdt->wdd, wdt); watchdog_set_drvdata(&wdt->wdd, wdt);
watchdog_set_restart_priority(&wdt->wdd, 128);
wdt_setload(&wdt->wdd, DEFAULT_TIMEOUT); wdt_setload(&wdt->wdd, DEFAULT_TIMEOUT);
ret = watchdog_register_device(&wdt->wdd); ret = watchdog_register_device(&wdt->wdd);
......
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