diff options
author | Oleksandr Suvorov <oleksandr.suvorov@toradex.com> | 2019-12-06 17:41:24 +0200 |
---|---|---|
committer | Marcel Ziswiler <marcel.ziswiler@toradex.com> | 2020-02-12 11:06:11 +0100 |
commit | fc68d60f4aec199ac5f82de17998f81725394ab2 (patch) | |
tree | 2cc40fd913e5e69d85ed8b6c91210ad74501dbbe /drivers | |
parent | a9dbe66f7be259422ec3c11198fd30bce4d19c0a (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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/watchdog/imx8_wdt.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/drivers/watchdog/imx8_wdt.c b/drivers/watchdog/imx8_wdt.c index 3f72bd4deaca..98eb765bc90e 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; |