From 793d448a51b53d81e2dbd58a5865a204de92ad34 Mon Sep 17 00:00:00 2001 From: Pavel Kubelun Date: Fri, 4 Nov 2016 02:12:32 +0300 Subject: ipq806x: backport upstream wdt driver Signed-off-by: Pavel Kubelun --- .../010-1-qcom-wdt-use-core-restart-handler.patch | 113 +++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 target/linux/ipq806x/patches-4.4/010-1-qcom-wdt-use-core-restart-handler.patch (limited to 'target/linux/ipq806x/patches-4.4/010-1-qcom-wdt-use-core-restart-handler.patch') diff --git a/target/linux/ipq806x/patches-4.4/010-1-qcom-wdt-use-core-restart-handler.patch b/target/linux/ipq806x/patches-4.4/010-1-qcom-wdt-use-core-restart-handler.patch new file mode 100644 index 0000000000..d36dedcd1c --- /dev/null +++ b/target/linux/ipq806x/patches-4.4/010-1-qcom-wdt-use-core-restart-handler.patch @@ -0,0 +1,113 @@ +From 80969a68ffed12f82e2a29908306ff43a6861a61 Mon Sep 17 00:00:00 2001 +From: Damien Riegel +Date: Mon, 16 Nov 2015 12:28:09 -0500 +Subject: watchdog: qcom-wdt: use core restart handler + +Get rid of the custom restart handler by using the one provided by the +watchdog core. + +Signed-off-by: Damien Riegel +Reviewed-by: Guenter Roeck +Reviewed-by: Vivien Didelot +Signed-off-by: Guenter Roeck +Signed-off-by: Wim Van Sebroeck +--- + drivers/watchdog/qcom-wdt.c | 49 ++++++++++++++++++--------------------------- + 1 file changed, 19 insertions(+), 30 deletions(-) + +--- a/drivers/watchdog/qcom-wdt.c ++++ b/drivers/watchdog/qcom-wdt.c +@@ -17,7 +17,6 @@ + #include + #include + #include +-#include + #include + + #define WDT_RST 0x38 +@@ -28,7 +27,6 @@ struct qcom_wdt { + struct watchdog_device wdd; + struct clk *clk; + unsigned long rate; +- struct notifier_block restart_nb; + void __iomem *base; + }; + +@@ -72,25 +70,9 @@ static int qcom_wdt_set_timeout(struct w + return qcom_wdt_start(wdd); + } + +-static const struct watchdog_ops qcom_wdt_ops = { +- .start = qcom_wdt_start, +- .stop = qcom_wdt_stop, +- .ping = qcom_wdt_ping, +- .set_timeout = qcom_wdt_set_timeout, +- .owner = THIS_MODULE, +-}; +- +-static const struct watchdog_info qcom_wdt_info = { +- .options = WDIOF_KEEPALIVEPING +- | WDIOF_MAGICCLOSE +- | WDIOF_SETTIMEOUT, +- .identity = KBUILD_MODNAME, +-}; +- +-static int qcom_wdt_restart(struct notifier_block *nb, unsigned long action, +- void *data) ++static int qcom_wdt_restart(struct watchdog_device *wdd) + { +- struct qcom_wdt *wdt = container_of(nb, struct qcom_wdt, restart_nb); ++ struct qcom_wdt *wdt = to_qcom_wdt(wdd); + u32 timeout; + + /* +@@ -110,9 +92,25 @@ static int qcom_wdt_restart(struct notif + wmb(); + + msleep(150); +- return NOTIFY_DONE; ++ return 0; + } + ++static const struct watchdog_ops qcom_wdt_ops = { ++ .start = qcom_wdt_start, ++ .stop = qcom_wdt_stop, ++ .ping = qcom_wdt_ping, ++ .set_timeout = qcom_wdt_set_timeout, ++ .restart = qcom_wdt_restart, ++ .owner = THIS_MODULE, ++}; ++ ++static const struct watchdog_info qcom_wdt_info = { ++ .options = WDIOF_KEEPALIVEPING ++ | WDIOF_MAGICCLOSE ++ | WDIOF_SETTIMEOUT, ++ .identity = KBUILD_MODNAME, ++}; ++ + static int qcom_wdt_probe(struct platform_device *pdev) + { + struct qcom_wdt *wdt; +@@ -187,14 +185,6 @@ static int qcom_wdt_probe(struct platfor + goto err_clk_unprepare; + } + +- /* +- * WDT restart notifier has priority 0 (use as a last resort) +- */ +- wdt->restart_nb.notifier_call = qcom_wdt_restart; +- ret = register_restart_handler(&wdt->restart_nb); +- if (ret) +- dev_err(&pdev->dev, "failed to setup restart handler\n"); +- + platform_set_drvdata(pdev, wdt); + return 0; + +@@ -207,7 +197,6 @@ static int qcom_wdt_remove(struct platfo + { + struct qcom_wdt *wdt = platform_get_drvdata(pdev); + +- unregister_restart_handler(&wdt->restart_nb); + watchdog_unregister_device(&wdt->wdd); + clk_disable_unprepare(wdt->clk); + return 0; -- cgit v1.2.3