123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 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;
|