Skip to content

Commit

Permalink
watchdog: bcm47xx_wdt.c: add restart handler support
Browse files Browse the repository at this point in the history
Just like in case of other watchdog drivers, use the new kernel core
API to provide restart support.

Signed-off-by: Rafał Miłecki <[email protected]>
Reviewed-by: Guenter Roeck <[email protected]>
Signed-off-by: Wim Van Sebroeck <[email protected]>
  • Loading branch information
rmilecki authored and Wim Van Sebroeck committed Feb 17, 2015
1 parent ba804a9 commit 1cc7495
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
21 changes: 20 additions & 1 deletion drivers/watchdog/bcm47xx_wdt.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,17 @@ static int bcm47xx_wdt_notify_sys(struct notifier_block *this,
return NOTIFY_DONE;
}

static int bcm47xx_wdt_restart(struct notifier_block *this, unsigned long mode,
void *cmd)
{
struct bcm47xx_wdt *wdt;

wdt = container_of(this, struct bcm47xx_wdt, restart_handler);
wdt->timer_set(wdt, 1);

return NOTIFY_DONE;
}

static struct watchdog_ops bcm47xx_wdt_soft_ops = {
.owner = THIS_MODULE,
.start = bcm47xx_wdt_soft_start,
Expand Down Expand Up @@ -209,15 +220,23 @@ static int bcm47xx_wdt_probe(struct platform_device *pdev)
if (ret)
goto err_timer;

ret = watchdog_register_device(&wdt->wdd);
wdt->restart_handler.notifier_call = &bcm47xx_wdt_restart;
wdt->restart_handler.priority = 64;
ret = register_restart_handler(&wdt->restart_handler);
if (ret)
goto err_notifier;

ret = watchdog_register_device(&wdt->wdd);
if (ret)
goto err_handler;

dev_info(&pdev->dev, "BCM47xx Watchdog Timer enabled (%d seconds%s%s)\n",
timeout, nowayout ? ", nowayout" : "",
soft ? ", Software Timer" : "");
return 0;

err_handler:
unregister_restart_handler(&wdt->restart_handler);
err_notifier:
unregister_reboot_notifier(&wdt->notifier);
err_timer:
Expand Down
1 change: 1 addition & 0 deletions include/linux/bcm47xx_wdt.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ struct bcm47xx_wdt {

struct watchdog_device wdd;
struct notifier_block notifier;
struct notifier_block restart_handler;

struct timer_list soft_timer;
atomic_t soft_ticks;
Expand Down

0 comments on commit 1cc7495

Please sign in to comment.