watchdog: digicolor_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>
This commit is contained in:
Родитель
f79781cead
Коммит
d3b081857c
|
@ -15,7 +15,6 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/watchdog.h>
|
#include <linux/watchdog.h>
|
||||||
#include <linux/reboot.h>
|
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/of_address.h>
|
#include <linux/of_address.h>
|
||||||
|
|
||||||
|
@ -28,7 +27,6 @@
|
||||||
struct dc_wdt {
|
struct dc_wdt {
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
struct clk *clk;
|
struct clk *clk;
|
||||||
struct notifier_block restart_handler;
|
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -50,16 +48,15 @@ static void dc_wdt_set(struct dc_wdt *wdt, u32 ticks)
|
||||||
spin_unlock_irqrestore(&wdt->lock, flags);
|
spin_unlock_irqrestore(&wdt->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dc_restart_handler(struct notifier_block *this, unsigned long mode,
|
static int dc_wdt_restart(struct watchdog_device *wdog)
|
||||||
void *cmd)
|
|
||||||
{
|
{
|
||||||
struct dc_wdt *wdt = container_of(this, struct dc_wdt, restart_handler);
|
struct dc_wdt *wdt = watchdog_get_drvdata(wdog);
|
||||||
|
|
||||||
dc_wdt_set(wdt, 1);
|
dc_wdt_set(wdt, 1);
|
||||||
/* wait for reset to assert... */
|
/* wait for reset to assert... */
|
||||||
mdelay(500);
|
mdelay(500);
|
||||||
|
|
||||||
return NOTIFY_DONE;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dc_wdt_start(struct watchdog_device *wdog)
|
static int dc_wdt_start(struct watchdog_device *wdog)
|
||||||
|
@ -104,6 +101,7 @@ static struct watchdog_ops dc_wdt_ops = {
|
||||||
.stop = dc_wdt_stop,
|
.stop = dc_wdt_stop,
|
||||||
.set_timeout = dc_wdt_set_timeout,
|
.set_timeout = dc_wdt_set_timeout,
|
||||||
.get_timeleft = dc_wdt_get_timeleft,
|
.get_timeleft = dc_wdt_get_timeleft,
|
||||||
|
.restart = dc_wdt_restart,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct watchdog_info dc_wdt_info = {
|
static struct watchdog_info dc_wdt_info = {
|
||||||
|
@ -148,6 +146,7 @@ static int dc_wdt_probe(struct platform_device *pdev)
|
||||||
spin_lock_init(&wdt->lock);
|
spin_lock_init(&wdt->lock);
|
||||||
|
|
||||||
watchdog_set_drvdata(&dc_wdt_wdd, wdt);
|
watchdog_set_drvdata(&dc_wdt_wdd, wdt);
|
||||||
|
watchdog_set_restart_priority(&dc_wdt_wdd, 128);
|
||||||
watchdog_init_timeout(&dc_wdt_wdd, timeout, dev);
|
watchdog_init_timeout(&dc_wdt_wdd, timeout, dev);
|
||||||
ret = watchdog_register_device(&dc_wdt_wdd);
|
ret = watchdog_register_device(&dc_wdt_wdd);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
@ -155,12 +154,6 @@ static int dc_wdt_probe(struct platform_device *pdev)
|
||||||
goto err_iounmap;
|
goto err_iounmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
wdt->restart_handler.notifier_call = dc_restart_handler;
|
|
||||||
wdt->restart_handler.priority = 128;
|
|
||||||
ret = register_restart_handler(&wdt->restart_handler);
|
|
||||||
if (ret)
|
|
||||||
dev_warn(&pdev->dev, "cannot register restart handler\n");
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_iounmap:
|
err_iounmap:
|
||||||
|
@ -172,7 +165,6 @@ static int dc_wdt_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct dc_wdt *wdt = platform_get_drvdata(pdev);
|
struct dc_wdt *wdt = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
unregister_restart_handler(&wdt->restart_handler);
|
|
||||||
watchdog_unregister_device(&dc_wdt_wdd);
|
watchdog_unregister_device(&dc_wdt_wdd);
|
||||||
iounmap(wdt->base);
|
iounmap(wdt->base);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче