The watchdog subsystem now provides an API to trigger a system reboot. Register with it.
Signed-off-by: Guenter Roeck <li...@roeck-us.net> --- drivers/watchdog/sunxi_wdt.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/drivers/watchdog/sunxi_wdt.c b/drivers/watchdog/sunxi_wdt.c index c9ca343..744b6f5 100644 --- a/drivers/watchdog/sunxi_wdt.c +++ b/drivers/watchdog/sunxi_wdt.c @@ -27,8 +27,6 @@ #include <linux/types.h> #include <linux/watchdog.h> -#include <asm/system_misc.h> - #define WDT_MAX_TIMEOUT 16 #define WDT_MIN_TIMEOUT 1 #define WDT_MODE_TIMEOUT(n) ((n) << 3) @@ -74,27 +72,25 @@ static const int wdt_timeout_map[] = { [16] = 0xB, /* 16s */ }; -static struct sunxi_wdt_dev *sunxi_restart_ctx; - -static void sun4i_wdt_restart(enum reboot_mode mode, const char *cmd) +static void sunxi_wdt_reboot(struct watchdog_device *wdt_dev, + enum reboot_mode mode, const char *cmd) { - if (!sunxi_restart_ctx) - return; + struct sunxi_wdt_dev *sunxi_wdt = watchdog_get_drvdata(wdt_dev); /* Enable timer and set reset bit in the watchdog */ writel(WDT_MODE_EN | WDT_MODE_RST_EN, - sunxi_restart_ctx->wdt_base + WDT_MODE); + sunxi_wdt->wdt_base + WDT_MODE); /* * Restart the watchdog. The default (and lowest) interval * value for the watchdog is 0.5s. */ - writel(WDT_CTRL_RELOAD, sunxi_restart_ctx->wdt_base + WDT_CTRL); + writel(WDT_CTRL_RELOAD, sunxi_wdt->wdt_base + WDT_CTRL); while (1) { mdelay(5); writel(WDT_MODE_EN | WDT_MODE_RST_EN, - sunxi_restart_ctx->wdt_base + WDT_MODE); + sunxi_wdt->wdt_base + WDT_MODE); } } @@ -171,6 +167,7 @@ static const struct watchdog_ops sunxi_wdt_ops = { .start = sunxi_wdt_start, .stop = sunxi_wdt_stop, .ping = sunxi_wdt_ping, + .reboot = sunxi_wdt_reboot, .set_timeout = sunxi_wdt_set_timeout, }; @@ -209,9 +206,6 @@ static int sunxi_wdt_probe(struct platform_device *pdev) if (unlikely(err)) return err; - sunxi_restart_ctx = sunxi_wdt; - arm_pm_restart = sun4i_wdt_restart; - dev_info(&pdev->dev, "Watchdog enabled (timeout=%d sec, nowayout=%d)", sunxi_wdt->wdt_dev.timeout, nowayout); @@ -222,8 +216,6 @@ static int sunxi_wdt_remove(struct platform_device *pdev) { struct sunxi_wdt_dev *sunxi_wdt = platform_get_drvdata(pdev); - arm_pm_restart = NULL; - watchdog_unregister_device(&sunxi_wdt->wdt_dev); watchdog_set_drvdata(&sunxi_wdt->wdt_dev, NULL); -- 1.7.9.7 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/