summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Suvorov <oleksandr.suvorov@toradex.com>2019-12-06 17:41:24 +0200
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2020-02-09 22:38:59 +0100
commit3af28a4e6d92080bdeda9b0d88f2b18d9ffdc23b (patch)
tree2fe109d277ab6c89a0bba24b027fb99dbd9aacbc
parent3c09e92969ec22218e51e35d9c21cce292ee80a2 (diff)
watchdog: imx8_wdt: fix load/unload driver
- Fix a probing to handle errors in scu notifier registration. - Unregister scu notifier properly on unload, so it is possible to load driver again. Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
-rw-r--r--drivers/watchdog/imx8_wdt.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/drivers/watchdog/imx8_wdt.c b/drivers/watchdog/imx8_wdt.c
index 0fc5c8861b6f..50e4aba59d60 100644
--- a/drivers/watchdog/imx8_wdt.c
+++ b/drivers/watchdog/imx8_wdt.c
@@ -179,20 +179,33 @@ static int imx8_wdt_probe(struct platform_device *pdev)
wdt->parent = &pdev->dev;
watchdog_set_drvdata(wdt, NULL);
- err = watchdog_init_timeout(wdt, DEFAULT_TIMEOUT, &pdev->dev);
+ err = watchdog_init_timeout(wdt, timeout, &pdev->dev);
if (err) {
- dev_err(&pdev->dev, "Failed to init the wdog timeout:%d\n",
- err);
+ dev_err(&pdev->dev, "Failed to init watchdog timeout:%d\n", err);
return err;
}
err = watchdog_register_device(wdt);
if (err) {
- dev_err(&pdev->dev, "Failed to register watchdog device\n");
+ dev_err(&pdev->dev, "Failed to register watchdog device: %d\n", err);
return err;
}
- return register_scu_notifier(&imx8_wdt_notifier);
+ err = register_scu_notifier(&imx8_wdt_notifier);
+ if (err) {
+ dev_err(&pdev->dev, "Failed to register scu notifier: %d\n", err);
+ goto scu_err;
+ }
+
+ dev_info(&pdev->dev, "initialized (timeout=%d sec, nowayout=%d)\n",
+ timeout, nowayout);
+
+ return 0;
+
+scu_err:
+ watchdog_unregister_device(wdt);
+
+ return err;
}
static int imx8_wdt_remove(struct platform_device *pdev)
@@ -201,6 +214,8 @@ static int imx8_wdt_remove(struct platform_device *pdev)
imx8_wdt_stop(wdt);
+ unregister_scu_notifier(&imx8_wdt_notifier);
+
watchdog_unregister_device(wdt);
return 0;