From 78c7e2b94fd26b65205bfd5d22298f34540494d2 Mon Sep 17 00:00:00 2001 From: Wim Van Sebroeck Date: Thu, 11 Jan 2007 22:27:51 +0100 Subject: [PATCH] --- yaml --- r: 48142 b: refs/heads/master c: 0349a363e23a0533e081ca320c837bc08247343e h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/char/watchdog/advantechwdt.c | 26 +++++++++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index 5596c911a796..6da52b37804c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1d747be647c2239e39a9b5faa138c1e36222b37e +refs/heads/master: 0349a363e23a0533e081ca320c837bc08247343e diff --git a/trunk/drivers/char/watchdog/advantechwdt.c b/trunk/drivers/char/watchdog/advantechwdt.c index 6c919797591a..216af0d67fd2 100644 --- a/trunk/drivers/char/watchdog/advantechwdt.c +++ b/trunk/drivers/char/watchdog/advantechwdt.c @@ -95,6 +95,16 @@ advwdt_disable(void) inb_p(wdt_stop); } +static int +advwdt_set_heartbeat(int t) +{ + if ((t < 1) || (t > 63)) + return -EINVAL; + + timeout = t; + return 0; +} + /* * /dev/watchdog handling */ @@ -151,9 +161,8 @@ advwdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, case WDIOC_SETTIMEOUT: if (get_user(new_timeout, p)) return -EFAULT; - if ((new_timeout < 1) || (new_timeout > 63)) + if (advwdt_set_heartbeat(new_timeout)) return -EINVAL; - timeout = new_timeout; advwdt_ping(); /* Fall */ @@ -267,12 +276,6 @@ advwdt_init(void) printk(KERN_INFO "WDT driver for Advantech single board computer initialising.\n"); - if (timeout < 1 || timeout > 63) { - timeout = WATCHDOG_TIMEOUT; - printk (KERN_INFO PFX "timeout value must be 1<=x<=63, using %d\n", - timeout); - } - if (wdt_stop != wdt_start) { if (!request_region(wdt_stop, 1, WATCHDOG_NAME)) { printk (KERN_ERR PFX "I/O address 0x%04x already in use\n", @@ -289,6 +292,13 @@ advwdt_init(void) goto unreg_stop; } + /* Check that the heartbeat value is within it's range ; if not reset to the default */ + if (advwdt_set_heartbeat(timeout)) { + advwdt_set_heartbeat(WATCHDOG_TIMEOUT); + printk (KERN_INFO PFX "timeout value must be 1<=x<=63, using %d\n", + timeout); + } + ret = register_reboot_notifier(&advwdt_notifier); if (ret != 0) { printk (KERN_ERR PFX "cannot register reboot notifier (err=%d)\n",