aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ipq806x/patches-4.4/010-1-qcom-wdt-use-core-restart-handler.patch
diff options
context:
space:
mode:
authorPavel Kubelun <be.dissent@gmail.com>2016-11-04 02:12:32 +0300
committerJohn Crispin <john@phrozen.org>2016-11-16 10:59:30 +0100
commit793d448a51b53d81e2dbd58a5865a204de92ad34 (patch)
treec0bc1ee32bdff6336dfa73288b5d7f2ac8564a7b /target/linux/ipq806x/patches-4.4/010-1-qcom-wdt-use-core-restart-handler.patch
parent4a6f9fc6333d5043d4ddfd25d87be3ae17f9e794 (diff)
downloadupstream-793d448a51b53d81e2dbd58a5865a204de92ad34.tar.gz
upstream-793d448a51b53d81e2dbd58a5865a204de92ad34.tar.bz2
upstream-793d448a51b53d81e2dbd58a5865a204de92ad34.zip
ipq806x: backport upstream wdt driver
Signed-off-by: Pavel Kubelun <be.dissent@gmail.com>
Diffstat (limited to 'target/linux/ipq806x/patches-4.4/010-1-qcom-wdt-use-core-restart-handler.patch')
-rw-r--r--target/linux/ipq806x/patches-4.4/010-1-qcom-wdt-use-core-restart-handler.patch113
1 files changed, 113 insertions, 0 deletions
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 <damien.riegel@savoirfairelinux.com>
+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 <damien.riegel@savoirfairelinux.com>
+Reviewed-by: Guenter Roeck <linux@roeck-us.net>
+Reviewed-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
+---
+ 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 <linux/module.h>
+ #include <linux/of.h>
+ #include <linux/platform_device.h>
+-#include <linux/reboot.h>
+ #include <linux/watchdog.h>
+
+ #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;