diff options
author | Wim Van Sebroeck <wim@iguana.be> | 2009-03-23 13:50:38 +0000 |
---|---|---|
committer | Wim Van Sebroeck <wim@iguana.be> | 2009-03-25 09:11:02 +0000 |
commit | 3b9d49eea1c32e529fa932670a53358e1c8cd67e (patch) | |
tree | 3fdd6b9a6b118642954a544cb1094b42594d8212 | |
parent | 0426fd0d88a595a8ab18e0cd69bdfe82a4d15115 (diff) |
[WATCHDOG] i6300esb.c: start locking
Change the start function in preparation of the generic watchdog code.
Also make sure that locking of the start function is OK.
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
-rw-r--r-- | drivers/watchdog/i6300esb.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/watchdog/i6300esb.c b/drivers/watchdog/i6300esb.c index fbe85285324..2dbe83570d6 100644 --- a/drivers/watchdog/i6300esb.c +++ b/drivers/watchdog/i6300esb.c @@ -83,7 +83,6 @@ static unsigned short triggered; /* The status of the watchdog upon boot */ static char esb_expect_close; static struct platform_device *esb_platform_device; - /* module parameters */ /* 30 sec default heartbeat (1 < heartbeat < 2*1023) */ #define WATCHDOG_HEARTBEAT 30 @@ -116,13 +115,18 @@ static inline void esb_unlock_registers(void) writeb(ESB_UNLOCK2, ESB_RELOAD_REG); } -static void esb_timer_start(void) +static int esb_timer_start(void) { u8 val; + spin_lock(&esb_lock); + esb_unlock_registers(); + writew(ESB_WDT_RELOAD, ESB_RELOAD_REG); /* Enable or Enable + Lock? */ val = 0x02 | (nowayout ? 0x01 : 0x00); pci_write_config_byte(esb_pci, ESB_LOCK_REG, val); + spin_unlock(&esb_lock); + return 0; } static int esb_timer_stop(void) @@ -209,7 +213,6 @@ static int esb_open(struct inode *inode, struct file *file) return -EBUSY; /* Reload and activate timer */ - esb_timer_keepalive(); esb_timer_start(); return nonseekable_open(inode, file); @@ -295,7 +298,6 @@ static long esb_ioctl(struct file *file, unsigned int cmd, unsigned long arg) } if (new_options & WDIOS_ENABLECARD) { - esb_timer_keepalive(); esb_timer_start(); retval = 0; } |