diff options
author | Wim Van Sebroeck <wim@iguana.be> | 2009-03-25 19:14:45 +0000 |
---|---|---|
committer | Wim Van Sebroeck <wim@iguana.be> | 2009-04-08 06:06:41 +0000 |
commit | 31838d9dac17dce6d68d985fd28c10d7a756dc4d (patch) | |
tree | 0a1ad0496f45c4ca4b692f78e3a2bca5f86b2304 /drivers | |
parent | bd4e6c18ae02a492094621072e540df02e866f61 (diff) | |
download | op-kernel-dev-31838d9dac17dce6d68d985fd28c10d7a756dc4d.zip op-kernel-dev-31838d9dac17dce6d68d985fd28c10d7a756dc4d.tar.gz |
[WATCHDOG] i6300esb.c: Fix the GETSTATUS and GETBOOTSTATUS ioctls.
The WDIOC_GETSTATUS and WDIOC_GETBOOTSTATUS should return WDIOF_* flags
(and not counter values, ...)
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/watchdog/i6300esb.c | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/drivers/watchdog/i6300esb.c b/drivers/watchdog/i6300esb.c index cfbb01c..8a0ef65 100644 --- a/drivers/watchdog/i6300esb.c +++ b/drivers/watchdog/i6300esb.c @@ -68,6 +68,7 @@ #define ESB_WDT_INTTYPE (0x11 << 0) /* Interrupt type on timer1 timeout */ /* Reload register bits */ +#define ESB_WDT_TIMEOUT (0x01 << 9) /* Watchdog timed out */ #define ESB_WDT_RELOAD (0x01 << 8) /* prevent timeout */ /* Magic constants */ @@ -87,7 +88,6 @@ static struct platform_device *esb_platform_device; /* 30 sec default heartbeat (1 < heartbeat < 2*1023) */ #define WATCHDOG_HEARTBEAT 30 static int heartbeat = WATCHDOG_HEARTBEAT; /* in seconds */ - module_param(heartbeat, int, 0); MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. (1<heartbeat<2046, default=" @@ -190,18 +190,6 @@ static int esb_timer_set_heartbeat(int time) return 0; } -static int esb_timer_read(void) -{ - u32 count; - - /* This isn't documented, and doesn't take into - * acount which stage is running, but it looks - * like a 20 bit count down, so we might as well report it. - */ - pci_read_config_dword(esb_pci, 0x64, &count); - return (int)count; -} - /* * /dev/watchdog handling */ @@ -282,7 +270,7 @@ static long esb_ioctl(struct file *file, unsigned int cmd, unsigned long arg) sizeof(ident)) ? -EFAULT : 0; case WDIOC_GETSTATUS: - return put_user(esb_timer_read(), p); + return put_user(0, p); case WDIOC_GETBOOTSTATUS: return put_user(triggered, p); @@ -412,11 +400,12 @@ static unsigned char __devinit esb_getdevice(void) /* Check if the watchdog was previously triggered */ esb_unlock_registers(); val2 = readw(ESB_RELOAD_REG); - triggered = (val2 & (0x01 << 9) >> 9); + if (val2 & ESB_WDT_TIMEOUT) + triggered = WDIOF_CARDRESET; /* Reset trigger flag and timers */ esb_unlock_registers(); - writew((0x11 << 8), ESB_RELOAD_REG); + writew((ESB_WDT_TIMEOUT | ESB_WDT_RELOAD), ESB_RELOAD_REG); /* Done */ return 1; |