From: Wim Van Sebroeck <wim@iguana.be>

Hi Linus, Andrew,

please do a

	bk pull http://linux-watchdog.bkbits.net/linux-2.6-watchdog

This will update the following files:

 drivers/char/watchdog/advantechwdt.c |    2 
 drivers/char/watchdog/alim7101_wdt.c |    2 
 drivers/char/watchdog/sa1100_wdt.c   |    1 
 drivers/char/watchdog/w83627hf_wdt.c |    2 
 drivers/char/watchdog/wafer5823wdt.c |    2 

through these ChangeSets:

<wim@iguana.be> (04/01/02 1.1569)
   [WATCHDOG] 2.6.0-rc1 - iminor(inode).patch
   
   get rid of unnecessary iminor(inode) code in watchdog's open and close functions.

<wim@iguana.be> (04/01/02 1.1570)
   [WATCHDOG] 2.6.0-rc1 expect_close.patch
   
   Made the behaviour and syntax of expect_close the same for all watchdog-drivers

<wim@iguana.be> (04/01/02 1.1571)
   [WATCHDOG] 2.6.0-rc1 i810-tco.c.nowayout.patch
   
   Fix nowayout handling to the way all other watchdog-drivers do it

<wim@iguana.be> (04/01/02 1.1572)
   [WATCHDOG] 2.6.0-rc1 _is_open.patch
   
   Make _is_open code consistent for all watchdog-drivers

<wim@iguana.be> (04/01/02 1.1573)
   [WATCHDOG] 2.6.0-rc1 cleanup-spaces-tabs.patch
   
   Cleanup of trailing spaces, tabs, ...

<wim@iguana.be> (04/01/02 1.1574)
   [WATCHDOG] 2.6.0-rc1 -ENOIOCTLCMD.patch
   
   Make the default return value for the ioctl commands that don't exist = -ENOIOCTLCMD

<wim@iguana.be> (04/01/02 1.1575)
   [WATCHDOG] 2.6.0-rc1 ib700wdt-version-comment.patch
   
   remove "for Linux 2.4.x" in the ib700wdt.c driver

<wim@iguana.be> (04/01/02 1.1576)
   [WATCHDOG] 2.6.0-rc1 amd7xx_tco.module_param.patch
   
   Made nowayout a module_parameter

The ChangeSets can also be looked at on:
	http://linux-watchdog.bkbits.net:8080/linux-2.6-watchdog

For completeness, I added the patches below.

Greetings,
Wim.

================================================================================


 25-akpm/drivers/char/watchdog/acquirewdt.c   |   46 ++++----
 25-akpm/drivers/char/watchdog/advantechwdt.c |    2 
 25-akpm/drivers/char/watchdog/alim7101_wdt.c |    2 
 25-akpm/drivers/char/watchdog/amd7xx_tco.c   |   83 ++++++++-------
 25-akpm/drivers/char/watchdog/cpu5wdt.c      |   34 ++----
 25-akpm/drivers/char/watchdog/eurotechwdt.c  |   94 ++++++++---------
 25-akpm/drivers/char/watchdog/i810-tco.c     |   38 +++---
 25-akpm/drivers/char/watchdog/ib700wdt.c     |   64 +++++------
 25-akpm/drivers/char/watchdog/indydog.c      |   19 +--
 25-akpm/drivers/char/watchdog/machzwd.c      |  148 ++++++++++++---------------
 25-akpm/drivers/char/watchdog/mixcomwd.c     |   51 ++++-----
 25-akpm/drivers/char/watchdog/pcwd.c         |   79 +++++++-------
 25-akpm/drivers/char/watchdog/sa1100_wdt.c   |    1 
 25-akpm/drivers/char/watchdog/sc1200wdt.c    |   18 +--
 25-akpm/drivers/char/watchdog/scx200_wdt.c   |   58 +++++-----
 25-akpm/drivers/char/watchdog/shwdt.c        |   14 +-
 25-akpm/drivers/char/watchdog/softdog.c      |   29 ++---
 25-akpm/drivers/char/watchdog/w83627hf_wdt.c |    2 
 25-akpm/drivers/char/watchdog/wafer5823wdt.c |    2 
 25-akpm/drivers/char/watchdog/wdt.c          |  119 ++++++++++-----------
 25-akpm/drivers/char/watchdog/wdt285.c       |   12 +-
 25-akpm/drivers/char/watchdog/wdt977.c       |   15 +-
 25-akpm/drivers/char/watchdog/wdt_pci.c      |  107 +++++++++----------
 23 files changed, 516 insertions(+), 521 deletions(-)

diff -puN drivers/char/watchdog/acquirewdt.c~watchdog-updates drivers/char/watchdog/acquirewdt.c
--- 25/drivers/char/watchdog/acquirewdt.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/acquirewdt.c	Fri Jan  2 15:37:58 2004
@@ -263,33 +263,33 @@ static int __init acq_init(void)
 		goto unreg_stop;
 	}
 
-        ret = register_reboot_notifier(&acq_notifier);
-        if (ret != 0) {
-                printk (KERN_ERR PFX "cannot register reboot notifier (err=%d)\n",
-                        ret);
-                goto unreg_regions;
-        }
-                                                                                                 
-        ret = misc_register(&acq_miscdev);
-        if (ret != 0) {
-                printk (KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n",
-                        WATCHDOG_MINOR, ret);
-                goto unreg_reboot;
-        }
-                                                                                                 
-        printk (KERN_INFO PFX "initialized. (nowayout=%d)\n",
-                nowayout);
-                                                                                                 
+	ret = register_reboot_notifier(&acq_notifier);
+	if (ret != 0) {
+		printk (KERN_ERR PFX "cannot register reboot notifier (err=%d)\n",
+			ret);
+		goto unreg_regions;
+	}
+
+	ret = misc_register(&acq_miscdev);
+	if (ret != 0) {
+		printk (KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n",
+			WATCHDOG_MINOR, ret);
+		goto unreg_reboot;
+	}
+
+	printk (KERN_INFO PFX "initialized. (nowayout=%d)\n",
+		nowayout);
+
 out:
-        return ret;
+	return ret;
 unreg_reboot:
-        unregister_reboot_notifier(&acq_notifier);
+	unregister_reboot_notifier(&acq_notifier);
 unreg_regions:
-        release_region(wdt_start, 1);
+	release_region(wdt_start, 1);
 unreg_stop:
-        if (wdt_stop != wdt_start)
-                release_region(wdt_stop, 1);
-        goto out;
+	if (wdt_stop != wdt_start)
+		release_region(wdt_stop, 1);
+	goto out;
 }
 
 static void __exit acq_exit(void)
diff -puN drivers/char/watchdog/advantechwdt.c~watchdog-updates drivers/char/watchdog/advantechwdt.c
--- 25/drivers/char/watchdog/advantechwdt.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/advantechwdt.c	Fri Jan  2 15:37:58 2004
@@ -183,7 +183,7 @@ advwdt_ioctl(struct inode *inode, struct
 	}
 
 	default:
-	  return -ENOTTY;
+	  return -ENOIOCTLCMD;
 	}
 	return 0;
 }
diff -puN drivers/char/watchdog/alim7101_wdt.c~watchdog-updates drivers/char/watchdog/alim7101_wdt.c
--- 25/drivers/char/watchdog/alim7101_wdt.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/alim7101_wdt.c	Fri Jan  2 15:37:58 2004
@@ -374,7 +374,7 @@ static int __init alim7101_wdt_init(void
 err_out_miscdev:
 	misc_deregister(&wdt_miscdev);
 err_out:
-        return rc;
+	return rc;
 }
 
 module_init(alim7101_wdt_init);
diff -puN drivers/char/watchdog/amd7xx_tco.c~watchdog-updates drivers/char/watchdog/amd7xx_tco.c
--- 25/drivers/char/watchdog/amd7xx_tco.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/amd7xx_tco.c	Fri Jan  2 15:37:58 2004
@@ -19,6 +19,7 @@
 
 #include <linux/config.h>
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/kernel.h>
 #include <linux/miscdevice.h>
 #include <linux/watchdog.h>
@@ -45,7 +46,7 @@
 #define TCO_TIMEOUT_MASK	0x3f
 #define TCO_STATUS1_REG 0x44
 #define TCO_STATUS2_REG	0x46
-#define NDTO_STS2	(1 << 1)	/* we're interested in the second timeout */ 
+#define NDTO_STS2	(1 << 1)	/* we're interested in the second timeout */
 #define BOOT_STS	(1 << 2)	/* will be set if NDTO_STS2 was set before reboot */
 #define TCO_CTRL1_REG	0x48
 #define TCO_HALT	(1 << 11)
@@ -57,11 +58,20 @@ static u32 pmbase;		/* PMxx I/O base */
 static struct pci_dev *dev;
 static struct semaphore open_sem;
 static spinlock_t amdtco_lock;	/* only for device access */
-static int expect_close = 0;
+static char expect_close;
 
-MODULE_PARM(timeout, "i");
+module_param(timeout, int, 0);
 MODULE_PARM_DESC(timeout, "range is 0-38 seconds, default is 38");
 
+#ifdef CONFIG_WATCHDOG_NOWAYOUT
+static int nowayout = 1;
+#else
+static int nowayout = 0;
+#endif
+
+module_param(nowayout, int, 0);
+MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=CONFIG_WATCHDOG_NOWAYOUT)");
+
 static inline u8 seconds_to_ticks(int seconds)
 {
 	/* the internal timer is stored as ticks which decrement
@@ -124,7 +134,7 @@ static inline void amdtco_global_enable(
 static inline void amdtco_enable(void)
 {
 	u16 reg;
-	
+
 	spin_lock(&amdtco_lock);
 	reg = inw(pmbase+TCO_CTRL1_REG);
 	reg &= ~TCO_HALT;
@@ -152,13 +162,13 @@ static int amdtco_fop_open(struct inode 
 		timeout = MAX_TIMEOUT;
 
 	amdtco_disable();
-	amdtco_settimeout(timeout);	
+	amdtco_settimeout(timeout);
 	amdtco_global_enable();
 	amdtco_enable();
 	amdtco_ping();
 	printk(KERN_INFO PFX "Watchdog enabled, timeout = %ds of %ds\n",
 		amdtco_gettimeout(), timeout);
-	
+
 	return 0;
 }
 
@@ -170,12 +180,12 @@ static int amdtco_fop_ioctl(struct inode
 
 	static struct watchdog_info ident = {
 		.options	= WDIOF_SETTIMEOUT | WDIOF_CARDRESET,
-		.identity	= "AMD 766/768"
+		.identity	= "AMD 766/768",
 	};
 
 	switch (cmd) {
 		default:
-			return -ENOTTY;	
+			return -ENOIOCTLCMD;
 
 		case WDIOC_GETSUPPORT:
 			if (copy_to_user((struct watchdog_info *)arg, &ident, sizeof ident))
@@ -184,7 +194,7 @@ static int amdtco_fop_ioctl(struct inode
 
 		case WDIOC_GETSTATUS:
 			return put_user(amdtco_status(), (int *)arg);
-	
+
 		case WDIOC_KEEPALIVE:
 			amdtco_ping();
 			return 0;
@@ -192,10 +202,10 @@ static int amdtco_fop_ioctl(struct inode
 		case WDIOC_SETTIMEOUT:
 			if (get_user(new_timeout, (int *)arg))
 				return -EFAULT;
-			
+
 			if (new_timeout < 0)
 				return -EINVAL;
-		
+
 			if (new_timeout > MAX_TIMEOUT)
 				new_timeout = MAX_TIMEOUT;
 
@@ -205,17 +215,17 @@ static int amdtco_fop_ioctl(struct inode
 
 		case WDIOC_GETTIMEOUT:
 			return put_user(amdtco_gettimeout(), (int *)arg);
-		
+
 		case WDIOC_SETOPTIONS:
 			if (copy_from_user(&tmp, (int *)arg, sizeof tmp))
-                                return -EFAULT;
+				return -EFAULT;
 
 			if (tmp & WDIOS_DISABLECARD)
 				amdtco_disable();
 
 			if (tmp & WDIOS_ENABLECARD)
 				amdtco_enable();
-			
+
 			return 0;
 	}
 }
@@ -223,14 +233,15 @@ static int amdtco_fop_ioctl(struct inode
 
 static int amdtco_fop_release(struct inode *inode, struct file *file)
 {
-	if (expect_close) {
-		amdtco_disable();	
+	if (expect_close == 42) {
+		amdtco_disable();
 		printk(KERN_INFO PFX "Watchdog disabled\n");
 	} else {
 		amdtco_ping();
 		printk(KERN_CRIT PFX "Unexpected close!, timeout in %d seconds\n", timeout);
-	}	
-	
+	}
+
+	expect_close = 0;
 	up(&open_sem);
 	return 0;
 }
@@ -240,21 +251,21 @@ static ssize_t amdtco_fop_write(struct f
 {
 	if (ppos != &file->f_pos)
 		return -ESPIPE;
-	
-	if (len) {
-#ifndef CONFIG_WATCHDOG_NOWAYOUT
-		size_t i;
-		char c;
-		expect_close = 0;
-		
-		for (i = 0; i != len; i++) {
-			if (get_user(c, data + i))
-				return -EFAULT;
 
-			if (c == 'V')
-				expect_close = 1;
+	if (len) {
+		if (!nowayout)
+			size_t i;
+			char c;
+			expect_close = 0;
+
+			for (i = 0; i != len; i++) {
+				if (get_user(c, data + i))
+					return -EFAULT;
+
+				if (c == 'V')
+					expect_close = 42;
+			}
 		}
-#endif
 		amdtco_ping();
 	}
 
@@ -273,7 +284,7 @@ static int amdtco_notify_sys(struct noti
 
 static struct notifier_block amdtco_notifier =
 {
-	.notifier_call = amdtco_notify_sys
+	.notifier_call = amdtco_notify_sys,
 };
 
 static struct file_operations amdtco_fops =
@@ -282,20 +293,20 @@ static struct file_operations amdtco_fop
 	.write		= amdtco_fop_write,
 	.ioctl		= amdtco_fop_ioctl,
 	.open		= amdtco_fop_open,
-	.release	= amdtco_fop_release
+	.release	= amdtco_fop_release,
 };
 
 static struct miscdevice amdtco_miscdev =
 {
 	.minor	= WATCHDOG_MINOR,
 	.name	= "watchdog",
-	.fops	= &amdtco_fops
+	.fops	= &amdtco_fops,
 };
 
 static struct pci_device_id amdtco_pci_tbl[] = {
 	/* AMD 766 PCI_IDs here */
 	{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_OPUS_7443, PCI_ANY_ID, PCI_ANY_ID, },
-	{ 0, }
+	{ 0, },
 };
 
 MODULE_DEVICE_TABLE (pci, amdtco_pci_tbl);
@@ -316,7 +327,7 @@ static int __init amdtco_init(void)
 	return -ENODEV;
 
 found_one:
-	
+
 	if ((ret = register_reboot_notifier(&amdtco_notifier))) {
 		printk(KERN_ERR PFX "Unable to register reboot notifier err = %d\n", ret);
 		goto out_clean;
diff -puN drivers/char/watchdog/cpu5wdt.c~watchdog-updates drivers/char/watchdog/cpu5wdt.c
--- 25/drivers/char/watchdog/cpu5wdt.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/cpu5wdt.c	Fri Jan  2 15:37:58 2004
@@ -105,8 +105,8 @@ static void cpu5wdt_start(void)
 {
 	if ( !cpu5wdt_device.queue ) {
 		cpu5wdt_device.queue = 1;
-		outb(0, port + CPU5WDT_TIME_A_REG);  
-		outb(0, port + CPU5WDT_TIME_B_REG);  
+		outb(0, port + CPU5WDT_TIME_A_REG);
+		outb(0, port + CPU5WDT_TIME_B_REG);
 		outb(1, port + CPU5WDT_MODE_REG);
 		outb(0, port + CPU5WDT_RESET_REG);
 		outb(0, port + CPU5WDT_ENABLE_REG);
@@ -134,23 +134,15 @@ static int cpu5wdt_stop(void)
 
 static int cpu5wdt_open(struct inode *inode, struct file *file)
 {
-	switch(iminor(inode)) {
-		case WATCHDOG_MINOR:
-			if ( test_and_set_bit(0, &cpu5wdt_device.inuse) )
-				return -EBUSY;
-			break;
-		default:
-			return -ENODEV;
-	}
+	if ( test_and_set_bit(0, &cpu5wdt_device.inuse) )
+		return -EBUSY;
 	return 0;
 
 }
 
 static int cpu5wdt_release(struct inode *inode, struct file *file)
 {
-	if(iminor(inode)==WATCHDOG_MINOR) {
-		clear_bit(0, &cpu5wdt_device.inuse);
-	}
+	clear_bit(0, &cpu5wdt_device.inuse);
 	return 0;
 }
 
@@ -160,15 +152,15 @@ static int cpu5wdt_ioctl(struct inode *i
 	static struct watchdog_info ident =
 	{
 		.options = WDIOF_CARDRESET,
-		.identity = "CPU5 WDT"
+		.identity = "CPU5 WDT",
 	};
-  
+
 	switch(cmd) {
 		case WDIOC_KEEPALIVE:
 			cpu5wdt_reset();
 			break;
-		case WDIOC_GETSTATUS:    
-			value = inb(port + CPU5WDT_STATUS_REG); 
+		case WDIOC_GETSTATUS:
+			value = inb(port + CPU5WDT_STATUS_REG);
 			value = (value >> 2) & 1;
 			if ( copy_to_user((int *)arg, (int *)&value, sizeof(int)) )
 				return -EFAULT;
@@ -191,7 +183,7 @@ static int cpu5wdt_ioctl(struct inode *i
 			}
 			break;
 		default:
-    			return -EINVAL;
+    			return -ENOIOCTLCMD;
 	}
 	return 0;
 }
@@ -200,7 +192,7 @@ static ssize_t cpu5wdt_write(struct file
 {
 	if ( !count )
 		return -EIO;
-	
+
 	cpu5wdt_reset();
 	return count;
 
@@ -217,7 +209,7 @@ static struct file_operations cpu5wdt_fo
 static struct miscdevice cpu5wdt_misc = {
 	.minor	= WATCHDOG_MINOR,
 	.name	= "watchdog",
-	.fops	= &cpu5wdt_fops
+	.fops	= &cpu5wdt_fops,
 };
 
 /* init/exit function */
@@ -242,7 +234,7 @@ static int __devinit cpu5wdt_init(void)
 	}
 
 	/* watchdog reboot? */
-	val = inb(port + CPU5WDT_STATUS_REG); 
+	val = inb(port + CPU5WDT_STATUS_REG);
 	val = (val >> 2) & 1;
 	if ( !val )
 		printk(KERN_INFO PFX "sorry, was my fault\n");
diff -puN drivers/char/watchdog/eurotechwdt.c~watchdog-updates drivers/char/watchdog/eurotechwdt.c
--- 25/drivers/char/watchdog/eurotechwdt.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/eurotechwdt.c	Fri Jan  2 15:37:58 2004
@@ -1,5 +1,5 @@
 /*
- *	Eurotech CPU-1220/1410 on board WDT driver for Linux 2.4.x
+ *	Eurotech CPU-1220/1410 on board WDT driver
  *
  *	(c) Copyright 2001 Ascensit <support@ascensit.com>
  *	(c) Copyright 2001 Rodolfo Giometti <giometti@ascensit.com>
@@ -64,11 +64,11 @@ static char eur_expect_close;
  * You must set these - there is no sane way to probe for this board.
  * You can use eurwdt=x,y to set these now.
  */
- 
+
 static int io = 0x3f0;
 static int irq = 10;
 static char *ev = "int";
- 
+
 #define WDT_TIMEOUT		60                /* 1 minute */
 
 #ifdef CONFIG_WATCHDOG_NOWAYOUT
@@ -81,7 +81,7 @@ MODULE_PARM(nowayout,"i");
 MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=CONFIG_WATCHDOG_NOWAYOUT)");
 
 /*
- * Some symbolic names 
+ * Some symbolic names
  */
 
 #define WDT_CTRL_REG		0x30
@@ -92,7 +92,7 @@ MODULE_PARM_DESC(nowayout, "Watchdog can
 #define WDT_UNIT_SECS		0x80
 #define WDT_TIMEOUT_VAL		0xf2
 #define WDT_TIMER_CFG		0xf3
- 
+
 
 #ifndef MODULE
 
@@ -104,26 +104,26 @@ MODULE_PARM_DESC(nowayout, "Watchdog can
  * get the user to tell us the configuration. Sane people build it
  * modular but the others come here.
  */
- 
+
 static int __init eurwdt_setup(char *str)
 {
 	int ints[4];
- 
+
 str = get_options (str, ARRAY_SIZE(ints), ints);
- 
+
 	if (ints[0] > 0) {
 		io = ints[1];
 		if (ints[0] > 1)
 			irq = ints[2];
 	}
- 
+
 	return 1;
 }
- 
+
 __setup("eurwdt=", eurwdt_setup);
 
 #endif /* !MODULE */
- 
+
 MODULE_PARM(io, "i");
 MODULE_PARM_DESC(io, "Eurotech WDT io port (default=0x3f0)");
 MODULE_PARM(irq, "i");
@@ -162,7 +162,7 @@ static inline void eurwdt_disable_timer(
 {
 	eurwdt_set_timeout(0);
 }
- 
+
 static void eurwdt_activate_timer(void)
 {
 	eurwdt_disable_timer();
@@ -180,18 +180,18 @@ static void eurwdt_activate_timer(void)
 	eurwdt_write_reg(WDT_TIMER_CFG, irq<<4);
 
 	eurwdt_write_reg(WDT_UNIT_SEL, WDT_UNIT_SECS);	/* we use seconds */
-	eurwdt_set_timeout(0);	/* the default timeout */ 
+	eurwdt_set_timeout(0);	/* the default timeout */
 }
 
 
 /*
  * Kernel methods.
  */
- 
+
 static irqreturn_t eurwdt_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
 	printk(KERN_CRIT "timeout WDT timeout\n");
- 
+
 #ifdef ONLY_TESTING
 	printk(KERN_CRIT "Would Reboot.\n");
 #else
@@ -207,13 +207,13 @@ static irqreturn_t eurwdt_interrupt(int 
  *
  * Reload counter one with the watchdog timeout.
  */
- 
+
 static void eurwdt_ping(void)
 {
 	/* Write the watchdog default value */
 	eurwdt_set_timeout(eurwdt_timeout);
 }
- 
+
 /**
  * eurwdt_write:
  * @file: file handle to the watchdog
@@ -224,14 +224,14 @@ static void eurwdt_ping(void)
  * A write to a watchdog device is defined as a keepalive signal. Any
  * write of data will do, as we we don't define content meaning.
  */
- 
+
 static ssize_t eurwdt_write(struct file *file, const char *buf, size_t count,
 loff_t *ppos)
 {
 	/*  Can't seek (pwrite) on this device  */
 	if (ppos != &file->f_pos)
 	return -ESPIPE;
- 
+
 	if (count) 	{
 		if (!nowayout) {
 			size_t i;
@@ -262,7 +262,7 @@ loff_t *ppos)
  * The watchdog API defines a common set of functions for all watchdogs
  * according to their available features.
  */
- 
+
 static int eurwdt_ioctl(struct inode *inode, struct file *file,
 	unsigned int cmd, unsigned long arg)
 {
@@ -274,15 +274,15 @@ static int eurwdt_ioctl(struct inode *in
 
 	int time;
 	int options, retval = -EINVAL;
- 
+
 	switch(cmd) {
 	default:
-		return -ENOTTY;
+		return -ENOIOCTLCMD;
 
 	case WDIOC_GETSUPPORT:
 		return copy_to_user((struct watchdog_info *)arg, &ident,
 			sizeof(ident)) ? -EFAULT : 0;
- 
+
 	case WDIOC_GETSTATUS:
 	case WDIOC_GETBOOTSTATUS:
 		return put_user(0, (int *) arg);
@@ -299,8 +299,8 @@ static int eurwdt_ioctl(struct inode *in
 		if (time < 0 || time > 255)
 			return -EINVAL;
 
-		eurwdt_timeout = time; 
-		eurwdt_set_timeout(time); 
+		eurwdt_timeout = time;
+		eurwdt_set_timeout(time);
 		/* Fall */
 
 	case WDIOC_GETTIMEOUT:
@@ -330,7 +330,7 @@ static int eurwdt_ioctl(struct inode *in
  * The misc device has been opened. The watchdog device is single
  * open and on opening we load the counter.
  */
- 
+
 static int eurwdt_open(struct inode *inode, struct file *file)
 {
 	if (test_and_set_bit(0, &eurwdt_is_open))
@@ -340,7 +340,7 @@ static int eurwdt_open(struct inode *ino
 	eurwdt_activate_timer();
 	return 0;
 }
- 
+
 /**
  * eurwdt_release:
  * @inode: inode to board
@@ -352,7 +352,7 @@ static int eurwdt_open(struct inode *ino
  * reboots. In the former case we disable the counters, in the latter
  * case you have to open it again very soon.
  */
- 
+
 static int eurwdt_release(struct inode *inode, struct file *file)
 {
 	if (eur_expect_close == 42) {
@@ -360,12 +360,12 @@ static int eurwdt_release(struct inode *
 	} else {
 		printk(KERN_CRIT "eurwdt: Unexpected close, not stopping watchdog!\n");
 		eurwdt_ping();
-    }
+	}
 	clear_bit(0, &eurwdt_is_open);
 	eur_expect_close = 0;
 	return 0;
 }
- 
+
 /**
  * eurwdt_notify_sys:
  * @this: our notifier block
@@ -377,7 +377,7 @@ static int eurwdt_release(struct inode *
  * test or worse yet during the following fsck. This would suck, in fact
  * trust me - if it happens it does suck.
  */
- 
+
 static int eurwdt_notify_sys(struct notifier_block *this, unsigned long code,
 	void *unused)
 {
@@ -388,12 +388,12 @@ static int eurwdt_notify_sys(struct noti
 
 	return NOTIFY_DONE;
 }
- 
+
 /*
  * Kernel Interfaces
  */
- 
- 
+
+
 static struct file_operations eurwdt_fops = {
 	.owner	= THIS_MODULE,
 	.llseek	= no_llseek,
@@ -406,18 +406,18 @@ static struct file_operations eurwdt_fop
 static struct miscdevice eurwdt_miscdev = {
 	.minor	= WATCHDOG_MINOR,
 	.name	= "watchdog",
-	.fops	= &eurwdt_fops
+	.fops	= &eurwdt_fops,
 };
- 
+
 /*
  * The WDT card needs to learn about soft shutdowns in order to
  * turn the timebomb registers off.
  */
- 
+
 static struct notifier_block eurwdt_notifier = {
 	.notifier_call = eurwdt_notify_sys,
 };
- 
+
 /**
  * cleanup_module:
  *
@@ -427,7 +427,7 @@ static struct notifier_block eurwdt_noti
  * will not touch PC memory so all is fine. You just have to load a new
  * module in 60 seconds or reboot.
  */
- 
+
 static void __exit eurwdt_exit(void)
 {
 	eurwdt_lock_chip();
@@ -438,15 +438,15 @@ static void __exit eurwdt_exit(void)
 	release_region(io, 2);
 	free_irq(irq, NULL);
 }
- 
+
 /**
  * eurwdt_init:
  *
- * Set up the WDT watchdog board. After grabbing the resources 
+ * Set up the WDT watchdog board. After grabbing the resources
  * we require we need also to unlock the device.
  * The open() function will actually kick the board off.
  */
- 
+
 static int __init eurwdt_init(void)
 {
 	int ret;
@@ -477,15 +477,15 @@ static int __init eurwdt_init(void)
 	}
 
 	eurwdt_unlock_chip();
- 
+
 	ret = 0;
 	printk(KERN_INFO "Eurotech WDT driver 0.01 at %X (Interrupt %d)"
-		" - timeout event: %s\n", 
+		" - timeout event: %s\n",
 		io, irq, (!strcmp("int", ev) ? "int" : "reboot"));
 
 out:
 	return ret;
- 
+
 outreg:
 	release_region(io, 2);
 
@@ -496,10 +496,10 @@ outmisc:
 	misc_deregister(&eurwdt_miscdev);
 	goto out;
 }
- 
+
 module_init(eurwdt_init);
 module_exit(eurwdt_exit);
- 
+
 MODULE_AUTHOR("Rodolfo Giometti");
 MODULE_DESCRIPTION("Driver for Eurotech CPU-1220/1410 on board watchdog");
 MODULE_LICENSE("GPL");
diff -puN drivers/char/watchdog/i810-tco.c~watchdog-updates drivers/char/watchdog/i810-tco.c
--- 25/drivers/char/watchdog/i810-tco.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/i810-tco.c	Fri Jan  2 15:37:58 2004
@@ -8,7 +8,7 @@
  *	modify it under the terms of the GNU General Public License
  *	as published by the Free Software Foundation; either version
  *	2 of the License, or (at your option) any later version.
- *	
+ *
  *	Neither kernel concepts nor Nils Faerber admit liability nor provide
  *	warranty for any of this software. This material is provided
  *	"AS-IS" and at no charge.
@@ -112,7 +112,7 @@ static int tco_timer_start (void)
 	outb (val, TCO1_CNT + 1);
 	val = inb (TCO1_CNT + 1);
 	spin_unlock(&tco_lock);
-	
+
 	if (val & 0x08)
 		return -1;
 	return 0;
@@ -131,7 +131,7 @@ static int tco_timer_stop (void)
 	outb (val, TCO1_CNT + 1);
 	val = inb (TCO1_CNT + 1);
 	spin_unlock(&tco_lock);
-	
+
 	if ((val & 0x08) == 0)
 		return -1;
 	return 0;
@@ -148,7 +148,7 @@ static int tco_timer_settimer (unsigned 
 	/* "Values of 0h-3h are ignored and should not be attempted" */
 	if (tmrval > 0x3f || tmrval < 0x04)
 		return -1;
-	
+
 	spin_lock(&tco_lock);
 	val = inb (TCO1_TMR);
 	val &= 0xc0;
@@ -156,7 +156,7 @@ static int tco_timer_settimer (unsigned 
 	outb (val, TCO1_TMR);
 	val = inb (TCO1_TMR);
 	spin_unlock(&tco_lock);
-	
+
 	if ((val & 0x3f) != tmrval)
 		return -1;
 
@@ -197,7 +197,7 @@ static int i810tco_release (struct inode
 	/*
 	 *      Shut off the timer.
 	 */
-	if (tco_expect_close == 42 && !nowayout) {
+	if (tco_expect_close == 42) {
 		tco_timer_stop ();
 	} else {
 		tco_timer_reload ();
@@ -217,17 +217,21 @@ static ssize_t i810tco_write (struct fil
 
 	/* See if we got the magic character 'V' and reload the timer */
 	if (len) {
-		size_t i;
-
-		tco_expect_close = 0;
+		if (!nowayout) {
+			size_t i;
 
-		/* scan to see whether or not we got the magic character */
-		for (i = 0; i != len; i++) {
-			u8 c;
-			if(get_user(c, data+i))
-				return -EFAULT;
-			if (c == 'V')
-				tco_expect_close = 42;
+			/* note: just in case someone wrote the magic character
+			 * five months ago... */
+			tco_expect_close = 0;
+
+			/* scan to see whether or not we got the magic character */
+			for (i = 0; i != len; i++) {
+				u8 c;
+				if(get_user(c, data+i))
+					return -EFAULT;
+				if (c == 'V')
+					tco_expect_close = 42;
+			}
 		}
 
 		/* someone wrote to us, we should reload the timer */
@@ -251,7 +255,7 @@ static int i810tco_ioctl (struct inode *
 	};
 	switch (cmd) {
 		default:
-			return -ENOTTY;
+			return -ENOIOCTLCMD;
 		case WDIOC_GETSUPPORT:
 			if (copy_to_user
 			    ((struct watchdog_info *) arg, &ident, sizeof (ident)))
diff -puN drivers/char/watchdog/ib700wdt.c~watchdog-updates drivers/char/watchdog/ib700wdt.c
--- 25/drivers/char/watchdog/ib700wdt.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/ib700wdt.c	Fri Jan  2 15:37:58 2004
@@ -1,5 +1,5 @@
 /*
- *	IB700 Single Board Computer WDT driver for Linux 2.4.x
+ *	IB700 Single Board Computer WDT driver
  *
  *	(c) Copyright 2001 Charles Howes <chowes@vsol.net>
  *
@@ -28,7 +28,7 @@
  *      14-Dec-2001 Matt Domsch <Matt_Domsch@dell.com>
  *           Added nowayout module option to override CONFIG_WATCHDOG_NOWAYOUT
  *           Added timeout module option to override default
- * 
+ *
  */
 
 #include <linux/config.h>
@@ -48,9 +48,9 @@
 #include <asm/uaccess.h>
 #include <asm/system.h>
 
-static int ibwdt_is_open;
+static unsigned long ibwdt_is_open;
 static spinlock_t ibwdt_lock;
-static int expect_close = 0;
+static char expect_close;
 
 #define PFX "ib700wdt: "
 
@@ -157,7 +157,7 @@ ibwdt_write(struct file *file, const cha
 				if (get_user(c, buf + i))
 					return -EFAULT;
 				if (c == 'V')
-					expect_close = 1;
+					expect_close = 42;
 			}
 		}
 		ibwdt_ping();
@@ -174,7 +174,7 @@ ibwdt_ioctl(struct inode *inode, struct 
 	static struct watchdog_info ident = {
 		.options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT | WDIOF_MAGICCLOSE,
 		.firmware_version = 1,
-		.identity = "IB700 WDT"
+		.identity = "IB700 WDT",
 	};
 
 	switch (cmd) {
@@ -184,9 +184,7 @@ ibwdt_ioctl(struct inode *inode, struct 
 	  break;
 
 	case WDIOC_GETSTATUS:
-	  if (copy_to_user((int *)arg, &ibwdt_is_open,  sizeof(int)))
-	    return -EFAULT;
-	  break;
+	  return put_user(0, (int *) arg);
 
 	case WDIOC_KEEPALIVE:
 	  ibwdt_ping();
@@ -209,7 +207,7 @@ ibwdt_ioctl(struct inode *inode, struct 
 	  break;
 
 	default:
-	  return -ENOTTY;
+	  return -ENOIOCTLCMD;
 	}
 	return 0;
 }
@@ -217,38 +215,32 @@ ibwdt_ioctl(struct inode *inode, struct 
 static int
 ibwdt_open(struct inode *inode, struct file *file)
 {
-	if (iminor(inode) == WATCHDOG_MINOR) {
-		spin_lock(&ibwdt_lock);
-		if (ibwdt_is_open) {
-			spin_unlock(&ibwdt_lock);
-			return -EBUSY;
-		}
-		if (nowayout)
-			__module_get(THIS_MODULE);
-
-		/* Activate */
-		ibwdt_is_open = 1;
-		ibwdt_ping();
+	spin_lock(&ibwdt_lock);
+	if (test_and_set_bit(0, &ibwdt_is_open)) {
 		spin_unlock(&ibwdt_lock);
-		return 0;
-	} else {	
-		return -ENODEV;
+		return -EBUSY;
 	}
+	if (nowayout)
+		__module_get(THIS_MODULE);
+
+	/* Activate */
+	ibwdt_ping();
+	spin_unlock(&ibwdt_lock);
+	return 0;
 }
 
 static int
 ibwdt_close(struct inode *inode, struct file *file)
 {
-	if (iminor(inode) == WATCHDOG_MINOR) {
-		spin_lock(&ibwdt_lock);
-		if (expect_close)
-			outb_p(wd_times[wd_margin], WDT_STOP);
-		else
-			printk(KERN_CRIT PFX "WDT device closed unexpectedly.  WDT will not stop!\n");
+	spin_lock(&ibwdt_lock);
+	if (expect_close == 42)
+		outb_p(wd_times[wd_margin], WDT_STOP);
+	else
+		printk(KERN_CRIT PFX "WDT device closed unexpectedly.  WDT will not stop!\n");
 
-		ibwdt_is_open = 0;
-		spin_unlock(&ibwdt_lock);
-	}
+	clear_bit(0, &ibwdt_is_open);
+	expect_close = 0;
+	spin_unlock(&ibwdt_lock);
 	return 0;
 }
 
@@ -282,7 +274,7 @@ static struct file_operations ibwdt_fops
 static struct miscdevice ibwdt_miscdev = {
 	.minor = WATCHDOG_MINOR,
 	.name = "watchdog",
-	.fops = &ibwdt_fops
+	.fops = &ibwdt_fops,
 };
 
 /*
@@ -293,7 +285,7 @@ static struct miscdevice ibwdt_miscdev =
 static struct notifier_block ibwdt_notifier = {
 	.notifier_call = ibwdt_notify_sys,
 	.next = NULL,
-	.priority = 0
+	.priority = 0,
 };
 
 static int __init ibwdt_init(void)
diff -puN drivers/char/watchdog/indydog.c~watchdog-updates drivers/char/watchdog/indydog.c
--- 25/drivers/char/watchdog/indydog.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/indydog.c	Fri Jan  2 15:37:58 2004
@@ -7,10 +7,10 @@
  *	modify it under the terms of the GNU General Public License
  *	as published by the Free Software Foundation; either version
  *	2 of the License, or (at your option) any later version.
- *	
+ *
  *	based on softdog.c by Alan Cox <alan@redhat.com>
  */
- 
+
 #include <linux/module.h>
 #include <linux/config.h>
 #include <linux/types.h>
@@ -25,8 +25,8 @@
 #include <asm/sgi/sgimc.h>
 
 static unsigned long indydog_alive;
-static struct sgimc_misc_ctrl *mcmisc_regs; 
-static int expect_close = 0;
+static struct sgimc_misc_ctrl *mcmisc_regs;
+static char expect_close;
 
 #ifdef CONFIG_WATCHDOG_NOWAYOUT
 static int nowayout = 1;
@@ -50,7 +50,7 @@ static void indydog_ping()
 static int indydog_open(struct inode *inode, struct file *file)
 {
 	u32 mc_ctrl0;
-	
+
 	if( test_and_set_bit(0,&indydog_alive) )
 		return -EBUSY;
 
@@ -65,7 +65,7 @@ static int indydog_open(struct inode *in
 	mc_ctrl0 = mcmisc_regs->cpuctrl0 | SGIMC_CCTRL0_WDOG;
 	mcmisc_regs->cpuctrl0 = mc_ctrl0;
 	indydog_ping();
-			
+
 	printk("Started watchdog timer.\n");
 	return 0;
 }
@@ -77,8 +77,8 @@ static int indydog_release(struct inode 
 	 * 	Lock it in if it's a module and we set nowayout
 	 */
 
-	if (expect_close) {
-		u32 mc_ctrl0 = mcmisc_regs->cpuctrl0; 
+	if (expect_close == 42) {
+		u32 mc_ctrl0 = mcmisc_regs->cpuctrl0;
 		mc_ctrl0 &= ~SGIMC_CCTRL0_WDOG;
 		mcmisc_regs->cpuctrl0 = mc_ctrl0;
 		printk("Stopped watchdog timer.\n");
@@ -86,6 +86,7 @@ static int indydog_release(struct inode 
 		printk(KERN_CRIT "WDT device closed unexpectedly.  WDT will not stop!\n");
 	}
 	clear_bit(0,&indydog_alive);
+	expect_close = 0;
 	return 0;
 }
 
@@ -109,7 +110,7 @@ static ssize_t indydog_write(struct file
 				if (get_user(c, data + i))
 					return -EFAULT;
 				if (c == 'V')
-					expect_close = 1;
+					expect_close = 42;
 			}
 		}
 		indydog_ping();
diff -puN drivers/char/watchdog/machzwd.c~watchdog-updates drivers/char/watchdog/machzwd.c
--- 25/drivers/char/watchdog/machzwd.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/machzwd.c	Fri Jan  2 15:37:58 2004
@@ -1,7 +1,7 @@
 /*
  *  MachZ ZF-Logic Watchdog Timer driver for Linux
- *  
- * 
+ *
+ *
  *  This program is free software; you can redistribute it and/or
  *  modify it under the terms of the GNU General Public License
  *  as published by the Free Software Foundation; either version
@@ -14,14 +14,14 @@
  *  Author: Fernando Fuganti <fuganti@conectiva.com.br>
  *
  *  Based on sbc60xxwdt.c by Jakob Oestergaard
- * 
  *
- *  We have two timers (wd#1, wd#2) driven by a 32 KHz clock with the 
+ *
+ *  We have two timers (wd#1, wd#2) driven by a 32 KHz clock with the
  *  following periods:
  *      wd#1 - 2 seconds;
  *      wd#2 - 7.2 ms;
- *  After the expiration of wd#1, it can generate a NMI, SCI, SMI, or 
- *  a system RESET and it starts wd#2 that unconditionaly will RESET 
+ *  After the expiration of wd#1, it can generate a NMI, SCI, SMI, or
+ *  a system RESET and it starts wd#2 that unconditionaly will RESET
  *  the system when the counter reaches zero.
  *
  *  14-Dec-2001 Matt Domsch <Matt_Domsch@dell.com>
@@ -55,7 +55,7 @@
 
 /* indexes */			/* size */
 #define ZFL_VERSION	0x02	/* 16   */
-#define CONTROL 	0x10	/* 16   */	
+#define CONTROL 	0x10	/* 16   */
 #define STATUS		0x12	/* 8    */
 #define COUNTER_1	0x0C	/* 16   */
 #define COUNTER_2	0x0E	/* 8    */
@@ -111,9 +111,9 @@ MODULE_PARM_DESC(nowayout, "Watchdog can
 #define PFX "machzwd"
 
 static struct watchdog_info zf_info = {
-	.options		= WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE, 
-	.firmware_version	= 1, 
-	.identity		= "ZF-Logic watchdog"
+	.options		= WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
+	.firmware_version	= 1,
+	.identity		= "ZF-Logic watchdog",
 };
 
 
@@ -130,8 +130,8 @@ module_param(action, int, 0);
 MODULE_PARM_DESC(action, "after watchdog resets, generate: 0 = RESET(*)  1 = SMI  2 = NMI  3 = SCI");
 
 static int zf_action = GEN_RESET;
-static int zf_is_open = 0;
-static int zf_expect_close = 0;
+static unsigned long zf_is_open;
+static char zf_expect_close;
 static spinlock_t zf_lock;
 static spinlock_t zf_port_lock;
 static struct timer_list zf_timer;
@@ -225,7 +225,7 @@ static void zf_timer_off(void)
 	del_timer_sync(&zf_timer);
 
 	spin_lock_irqsave(&zf_port_lock, flags);
-	/* stop watchdog timer */	
+	/* stop watchdog timer */
 	ctrl_reg = zf_get_control();
 	ctrl_reg |= (ENABLE_WD1|ENABLE_WD2);	/* disable wd1 and wd2 */
 	ctrl_reg &= ~(ENABLE_WD1|ENABLE_WD2);
@@ -237,13 +237,13 @@ static void zf_timer_off(void)
 
 
 /*
- * start hardware timer 
+ * start hardware timer
  */
 static void zf_timer_on(void)
 {
 	unsigned int ctrl_reg = 0;
 	unsigned long flags;
-	
+
 	spin_lock_irqsave(&zf_port_lock, flags);
 
 	zf_writeb(PULSE_LEN, 0xff);
@@ -272,26 +272,26 @@ static void zf_ping(unsigned long data)
 {
 	unsigned int ctrl_reg = 0;
 	unsigned long flags;
-		
+
 	zf_writeb(COUNTER_2, 0xff);
 
 	if(time_before(jiffies, next_heartbeat)){
 
 		dprintk("time_before: %ld\n", next_heartbeat - jiffies);
-		
-		/* 
+
+		/*
 		 * reset event is activated by transition from 0 to 1 on
 		 * RESET_WD1 bit and we assume that it is already zero...
 		 */
 
 		spin_lock_irqsave(&zf_port_lock, flags);
-		ctrl_reg = zf_get_control();    
-		ctrl_reg |= RESET_WD1;		
-		zf_set_control(ctrl_reg);	
-		
+		ctrl_reg = zf_get_control();
+		ctrl_reg |= RESET_WD1;
+		zf_set_control(ctrl_reg);
+
 		/* ...and nothing changes until here */
 		ctrl_reg &= ~(RESET_WD1);
-		zf_set_control(ctrl_reg);		
+		zf_set_control(ctrl_reg);
 		spin_unlock_irqrestore(&zf_port_lock, flags);
 
 		zf_timer.expires = jiffies + ZF_HW_TIMEO;
@@ -301,7 +301,7 @@ static void zf_ping(unsigned long data)
 	}
 }
 
-static ssize_t zf_write(struct file *file, const char *buf, size_t count, 
+static ssize_t zf_write(struct file *file, const char *buf, size_t count,
 								loff_t *ppos)
 {
 	/*  Can't seek (pwrite) on this device  */
@@ -317,21 +317,21 @@ static ssize_t zf_write(struct file *fil
 		 */
 		if (!nowayout) {
 			size_t ofs;
-			
-			/* 
+
+			/*
 			 * note: just in case someone wrote the magic character
 			 * five months ago...
 			 */
 			zf_expect_close = 0;
-			
+
 			/* now scan */
 			for (ofs = 0; ofs != count; ofs++){
 				char c;
 				if (get_user(c, buf + ofs))
 					return -EFAULT;
 				if (c == 'V'){
-					zf_expect_close = 1;
-					dprintk("zf_expect_close 1\n");
+					zf_expect_close = 42;
+					dprintk("zf_expect_close = 42\n");
 				}
 			}
 		}
@@ -342,7 +342,7 @@ static ssize_t zf_write(struct file *fil
 		 */
 		next_heartbeat = jiffies + ZF_USER_TIMEO;
 		dprintk("user ping at %ld\n", jiffies);
-		
+
 	}
 
 	return count;
@@ -353,22 +353,20 @@ static int zf_ioctl(struct inode *inode,
 {
 	switch(cmd){
 		case WDIOC_GETSUPPORT:
-			if (copy_to_user((struct watchdog_info *)arg, 
+			if (copy_to_user((struct watchdog_info *)arg,
 					 &zf_info, sizeof(zf_info)))
 				return -EFAULT;
 			break;
-	  
+
 		case WDIOC_GETSTATUS:
-			if (copy_to_user((int *)arg, &zf_is_open, sizeof(int)))
-				return -EFAULT;
-			break;
+			return put_user(0, (int *) arg);
 
 		case WDIOC_KEEPALIVE:
 			zf_ping(0);
 			break;
 
 		default:
-			return -ENOTTY;
+			return -ENOIOCTLCMD;
 	}
 
 	return 0;
@@ -376,47 +374,37 @@ static int zf_ioctl(struct inode *inode,
 
 static int zf_open(struct inode *inode, struct file *file)
 {
-	switch(iminor(inode)){
-		case WATCHDOG_MINOR:
-			spin_lock(&zf_lock);
-			if(zf_is_open){
-				spin_unlock(&zf_lock);
-				return -EBUSY;
-			}
-
-			if (nowayout)
-				__module_get(THIS_MODULE);
+	spin_lock(&zf_lock);
+	if(test_and_set_bit(0, &zf_is_open)) {
+		spin_unlock(&zf_lock);
+		return -EBUSY;
+	}
 
-			zf_is_open = 1;
+	if (nowayout)
+		__module_get(THIS_MODULE);
 
-			spin_unlock(&zf_lock);
+	spin_unlock(&zf_lock);
 
-			zf_timer_on();
+	zf_timer_on();
 
-			return 0;
-		default:
-			return -ENODEV;
-	}
+	return 0;
 }
 
 static int zf_close(struct inode *inode, struct file *file)
 {
-	if(iminor(inode) == WATCHDOG_MINOR){
+	if(zf_expect_close == 42){
+		zf_timer_off();
+	} else {
+		del_timer(&zf_timer);
+		printk(KERN_ERR PFX ": device file closed unexpectedly. Will not stop the WDT!\n");
+	}
 
-		if(zf_expect_close){
-			zf_timer_off();
-		} else {
-			del_timer(&zf_timer);
-			printk(KERN_ERR PFX ": device file closed unexpectedly. Will not stop the WDT!\n");
-		}
-		
-		spin_lock(&zf_lock);
-		zf_is_open = 0;
-		spin_unlock(&zf_lock);
+	spin_lock(&zf_lock);
+	clear_bit(0, &zf_is_open);
+	spin_unlock(&zf_lock);
+
+	zf_expect_close = 0;
 
-		zf_expect_close = 0;
-	}
-	
 	return 0;
 }
 
@@ -428,9 +416,9 @@ static int zf_notify_sys(struct notifier
 								void *unused)
 {
 	if(code == SYS_DOWN || code == SYS_HALT){
-		zf_timer_off();		
+		zf_timer_off();
 	}
-	
+
 	return NOTIFY_DONE;
 }
 
@@ -448,9 +436,9 @@ static struct file_operations zf_fops = 
 static struct miscdevice zf_miscdev = {
 	.minor = WATCHDOG_MINOR,
 	.name = "watchdog",
-	.fops = &zf_fops
+	.fops = &zf_fops,
 };
-                                                                        
+ 
 
 /*
  * The device needs to learn about soft shutdowns in order to
@@ -459,20 +447,20 @@ static struct miscdevice zf_miscdev = {
 static struct notifier_block zf_notifier = {
 	.notifier_call = zf_notify_sys,
 	.next = NULL,
-	.priority = 0
+	.priority = 0,
 };
 
 static void __init zf_show_action(int act)
 {
 	char *str[] = { "RESET", "SMI", "NMI", "SCI" };
-	
+
 	printk(KERN_INFO PFX ": Watchdog using action = %s\n", str[act]);
 }
 
 static int __init zf_init(void)
 {
 	int ret;
-	
+
 	printk(KERN_INFO PFX ": MachZ ZF-Logic Watchdog driver initializing.\n");
 
 	ret = zf_get_ZFL_version();
@@ -486,12 +474,12 @@ static int __init zf_init(void)
 		zf_action = zf_action>>action;
 	} else
 		action = 0;
-	
+
 	zf_show_action(action);
 
 	spin_lock_init(&zf_lock);
 	spin_lock_init(&zf_port_lock);
-	
+
 	ret = misc_register(&zf_miscdev);
 	if (ret){
 		printk(KERN_ERR "can't misc_register on minor=%d\n",
@@ -512,7 +500,7 @@ static int __init zf_init(void)
 									ret);
 		goto no_reboot;
 	}
-	
+
 	zf_set_status(0);
 	zf_set_control(0);
 
@@ -520,7 +508,7 @@ static int __init zf_init(void)
 	init_timer(&zf_timer);
 	zf_timer.function = zf_ping;
 	zf_timer.data = 0;
-	
+
 	return 0;
 
 no_reboot:
@@ -531,11 +519,11 @@ out:
 	return ret;
 }
 
-	
+
 void __exit zf_exit(void)
 {
 	zf_timer_off();
-	
+
 	misc_deregister(&zf_miscdev);
 	unregister_reboot_notifier(&zf_notifier);
 	release_region(ZF_IOBASE, 3);
diff -puN drivers/char/watchdog/mixcomwd.c~watchdog-updates drivers/char/watchdog/mixcomwd.c
--- 25/drivers/char/watchdog/mixcomwd.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/mixcomwd.c	Fri Jan  2 15:37:58 2004
@@ -30,11 +30,11 @@
  *
  * Version 0.5 (2001/12/14) Matt Domsch <Matt_Domsch@dell.com>
  *              - added nowayout module option to override CONFIG_WATCHDOG_NOWAYOUT
- *	
+ *
  */
 
-#define VERSION "0.5" 
-  
+#define VERSION "0.5"
+
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/config.h>
@@ -55,12 +55,12 @@ static int mixcomwd_ioports[] = { 0x180,
 #define FLASHCOM_WATCHDOG_OFFSET 0x4
 #define FLASHCOM_ID 0x18
 
-static long mixcomwd_opened; /* long req'd for setbit --RR */
+static unsigned long mixcomwd_opened; /* long req'd for setbit --RR */
 
 static int watchdog_port;
 static int mixcomwd_timer_alive;
 static struct timer_list mixcomwd_timer = TIMER_INITIALIZER(NULL, 0, 0);
-static int expect_close = 0;
+static char expect_close;
 
 #ifdef CONFIG_WATCHDOG_NOWAYOUT
 static int nowayout = 1;
@@ -80,21 +80,21 @@ static void mixcomwd_ping(void)
 static void mixcomwd_timerfun(unsigned long d)
 {
 	mixcomwd_ping();
-	
+
 	mod_timer(&mixcomwd_timer,jiffies+ 5*HZ);
 }
 
 /*
  *	Allow only one person to hold it open
  */
- 
+
 static int mixcomwd_open(struct inode *inode, struct file *file)
 {
 	if(test_and_set_bit(0,&mixcomwd_opened)) {
 		return -EBUSY;
 	}
 	mixcomwd_ping();
-	
+
 	if (nowayout) {
 		/*
 		 * fops_get() code via open() has already done
@@ -113,7 +113,7 @@ static int mixcomwd_open(struct inode *i
 
 static int mixcomwd_release(struct inode *inode, struct file *file)
 {
-	if (expect_close) {
+	if (expect_close == 42) {
 		if(mixcomwd_timer_alive) {
 			printk(KERN_ERR "mixcomwd: release called while internal timer alive");
 			return -EBUSY;
@@ -129,6 +129,7 @@ static int mixcomwd_release(struct inode
 	}
 
 	clear_bit(0,&mixcomwd_opened);
+	expect_close=0;
 	return 0;
 }
 
@@ -152,7 +153,7 @@ static ssize_t mixcomwd_write(struct fil
 				if (get_user(c, data + i))
 					return -EFAULT;
 				if (c == 'V')
-					expect_close = 1;
+					expect_close = 42;
 			}
 		}
 		mixcomwd_ping();
@@ -167,9 +168,9 @@ static int mixcomwd_ioctl(struct inode *
 	static struct watchdog_info ident = {
 		.options = WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
 		.firmware_version = 1,
-		.identity = "MixCOM watchdog"
+		.identity = "MixCOM watchdog",
 	};
-                                        
+
 	switch(cmd)
 	{
 		case WDIOC_GETSTATUS:
@@ -182,7 +183,7 @@ static int mixcomwd_ioctl(struct inode *
 			}
 			break;
 		case WDIOC_GETSUPPORT:
-			if (copy_to_user((struct watchdog_info *)arg, &ident, 
+			if (copy_to_user((struct watchdog_info *)arg, &ident,
 			    sizeof(ident))) {
 				return -EFAULT;
 			}
@@ -191,7 +192,7 @@ static int mixcomwd_ioctl(struct inode *
 			mixcomwd_ping();
 			break;
 		default:
-			return -ENOTTY;
+			return -ENOIOCTLCMD;
 	}
 	return 0;
 }
@@ -207,9 +208,9 @@ static struct file_operations mixcomwd_f
 
 static struct miscdevice mixcomwd_miscdev=
 {
-	WATCHDOG_MINOR,
-	"watchdog",
-	&mixcomwd_fops
+	.minor	= WATCHDOG_MINOR,
+	.name	= "watchdog",
+	.fops	= &mixcomwd_fops,
 };
 
 static int __init mixcomwd_checkcard(int port)
@@ -220,7 +221,7 @@ static int __init mixcomwd_checkcard(int
 	if (!request_region(port, 1, "MixCOM watchdog")) {
 		return 0;
 	}
-	
+
 	id=inb_p(port) & 0x3f;
 	if(id!=MIXCOM_ID) {
 		release_region(port, 1);
@@ -232,12 +233,12 @@ static int __init mixcomwd_checkcard(int
 static int __init flashcom_checkcard(int port)
 {
 	int id;
-	
+
 	port += FLASHCOM_WATCHDOG_OFFSET;
 	if (!request_region(port, 1, "MixCOM watchdog")) {
 		return 0;
 	}
-	
+
 	id=inb_p(port);
  	if(id!=FLASHCOM_ID) {
 		release_region(port, 1);
@@ -245,7 +246,7 @@ static int __init flashcom_checkcard(int
 	}
  	return port;
  }
- 
+
 static int __init mixcomwd_init(void)
 {
 	int i;
@@ -258,7 +259,7 @@ static int __init mixcomwd_init(void)
 			found = 1;
 		}
 	}
-	
+
 	/* The FlashCOM card can be set up at 0x300 -> 0x378, in 0x8 jumps */
 	for (i = 0x300; !found && i < 0x380; i+=0x8) {
 		watchdog_port = flashcom_checkcard(i);
@@ -266,7 +267,7 @@ static int __init mixcomwd_init(void)
 			found = 1;
 		}
 	}
-	
+
 	if (!found) {
 		printk("mixcomwd: No card detected, or port not available.\n");
 		return -ENODEV;
@@ -278,11 +279,11 @@ static int __init mixcomwd_init(void)
 		release_region(watchdog_port, 1);
 		return ret;
 	}
-	
+
 	printk(KERN_INFO "MixCOM watchdog driver v%s, watchdog port at 0x%3x\n",VERSION,watchdog_port);
 
 	return 0;
-}	
+}
 
 static void __exit mixcomwd_exit(void)
 {
diff -puN drivers/char/watchdog/pcwd.c~watchdog-updates drivers/char/watchdog/pcwd.c
--- 25/drivers/char/watchdog/pcwd.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/pcwd.c	Fri Jan  2 15:37:58 2004
@@ -34,7 +34,7 @@
  * 971222       Changed open/close for temperature handling
  *              Michael Meskes <meskes@debian.org>.
  * 980112       Used minor numbers from include/linux/miscdevice.h
- * 990403       Clear reset status after reading control status register in 
+ * 990403       Clear reset status after reading control status register in
  *              pcwd_showprevstate(). [Marc Boucher <marc@mbsi.ca>]
  * 990605	Made changes to code to support Firmware 1.22a, added
  *		fairly useless proc entry.
@@ -86,10 +86,10 @@ static int pcwd_ioports[] = { 0x270, 0x3
 #define	WD_TIMEOUT		4	/* 2 seconds for a timeout */
 static int timeout_val = WD_TIMEOUT;
 static int timeout = 2;
-static int expect_close = 0;
+static char expect_close;
 
 module_param(timeout, int, 0);
-MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds (default=2)"); 
+MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds (default=2)");
 
 #ifdef CONFIG_WATCHDOG_NOWAYOUT
 static int nowayout = 1;
@@ -248,14 +248,14 @@ static int pcwd_ioctl(struct inode *inod
 	int cdat, rv;
 	static struct watchdog_info ident=
 	{
-		WDIOF_OVERHEAT|WDIOF_CARDRESET,
-		1,
-		"PCWD"
+		.options =		WDIOF_OVERHEAT|WDIOF_CARDRESET,
+		.firmware_version =	1,
+		.identity =		"PCWD",
 	};
 
 	switch(cmd) {
 	default:
-		return -ENOTTY;
+		return -ENOIOCTLCMD;
 
 	case WDIOC_GETSUPPORT:
 		if(copy_to_user((void*)arg, &ident, sizeof(ident)))
@@ -264,19 +264,19 @@ static int pcwd_ioctl(struct inode *inod
 
 	case WDIOC_GETSTATUS:
 		spin_lock(&io_lock);
-		if (revision == PCWD_REVISION_A) 
+		if (revision == PCWD_REVISION_A)
 			cdat = inb(current_readport);
 		else
 			cdat = inb(current_readport + 1 );
 		spin_unlock(&io_lock);
 		rv = WDIOF_MAGICCLOSE;
 
-		if (revision == PCWD_REVISION_A) 
+		if (revision == PCWD_REVISION_A)
 		{
 			if (cdat & WD_WDRST)
 				rv |= WDIOF_CARDRESET;
 
-			if (cdat & WD_T110) 
+			if (cdat & WD_T110)
 			{
 				rv |= WDIOF_OVERHEAT;
 
@@ -286,12 +286,12 @@ static int pcwd_ioctl(struct inode *inod
 				}
 			}
 		}
-		else 
+		else
 		{
 			if (cdat & 0x01)
 				rv |= WDIOF_CARDRESET;
 
-			if (cdat & 0x04) 
+			if (cdat & 0x04)
 			{
 				rv |= WDIOF_OVERHEAT;
 
@@ -309,7 +309,7 @@ static int pcwd_ioctl(struct inode *inod
 	case WDIOC_GETBOOTSTATUS:
 		rv = 0;
 
-		if (revision == PCWD_REVISION_A) 
+		if (revision == PCWD_REVISION_A)
 		{
 			if (initial_status & WD_WDRST)
 				rv |= WDIOF_CARDRESET;
@@ -333,7 +333,7 @@ static int pcwd_ioctl(struct inode *inod
 	case WDIOC_GETTEMP:
 
 		rv = 0;
-		if ((supports_temp) && (mode_debug == 0)) 
+		if ((supports_temp) && (mode_debug == 0))
 		{
 			spin_lock(&io_lock);
 			rv = inb(current_readport);
@@ -345,19 +345,19 @@ static int pcwd_ioctl(struct inode *inod
 		return 0;
 
 	case WDIOC_SETOPTIONS:
-		if (revision == PCWD_REVISION_C) 
+		if (revision == PCWD_REVISION_C)
 		{
 			if(copy_from_user(&rv, (int*) arg, sizeof(int)))
 				return -EFAULT;
 
-			if (rv & WDIOS_DISABLECARD) 
+			if (rv & WDIOS_DISABLECARD)
 			{
 				spin_lock(&io_lock);
 				outb_p(0xA5, current_readport + 3);
 				outb_p(0xA5, current_readport + 3);
 				cdat = inb_p(current_readport + 2);
 				spin_unlock(&io_lock);
-				if ((cdat & 0x10) == 0) 
+				if ((cdat & 0x10) == 0)
 				{
 					printk(KERN_INFO "pcwd: Could not disable card.\n");
 					return -EIO;
@@ -366,13 +366,13 @@ static int pcwd_ioctl(struct inode *inod
 				return 0;
 			}
 
-			if (rv & WDIOS_ENABLECARD) 
+			if (rv & WDIOS_ENABLECARD)
 			{
 				spin_lock(&io_lock);
 				outb_p(0x00, current_readport + 3);
 				cdat = inb_p(current_readport + 2);
 				spin_unlock(&io_lock);
-				if (cdat & 0x10) 
+				if (cdat & 0x10)
 				{
 					printk(KERN_INFO "pcwd: Could not enable card.\n");
 					return -EIO;
@@ -380,13 +380,13 @@ static int pcwd_ioctl(struct inode *inod
 				return 0;
 			}
 
-			if (rv & WDIOS_TEMPPANIC) 
+			if (rv & WDIOS_TEMPPANIC)
 			{
 				temp_panic = 1;
 			}
 		}
 		return -EINVAL;
-		
+
 	case WDIOC_KEEPALIVE:
 		pcwd_send_heartbeat();
 		return 0;
@@ -415,7 +415,7 @@ static ssize_t pcwd_write(struct file *f
 				if (get_user(c, buf + i))
 					return -EFAULT;
 				if (c == 'V')
-					expect_close = 1;
+					expect_close = 42;
 			}
 		}
 		pcwd_send_heartbeat();
@@ -456,14 +456,14 @@ static ssize_t pcwd_read(struct file *fi
 	/*  Can't seek (pread) on this device  */
 	if (ppos != &file->f_pos)
 		return -ESPIPE;
-	switch(iminor(file->f_dentry->d_inode)) 
+	switch(iminor(file->f_dentry->d_inode))
 	{
 		case TEMP_MINOR:
 			/*
 			 * Convert metric to Fahrenheit, since this was
 			 * the decided 'standard' for this return value.
 			 */
-			
+
 			c = inb(current_readport);
 			cp = (c * 9 / 5) + 32;
 			if(copy_to_user(buf, &cp, 1))
@@ -477,7 +477,7 @@ static ssize_t pcwd_read(struct file *fi
 static int pcwd_close(struct inode *ino, struct file *filep)
 {
 	if (iminor(ino)==WATCHDOG_MINOR) {
-		if (expect_close) {
+		if (expect_close == 42) {
 			/*  Disable the board  */
 			if (revision == PCWD_REVISION_C) {
 				spin_lock(&io_lock);
@@ -488,6 +488,7 @@ static int pcwd_close(struct inode *ino,
 			atomic_inc( &open_allowed );
 		}
 	}
+	expect_close = 0;
 	return 0;
 }
 
@@ -500,7 +501,7 @@ static inline void get_support(void)
 static inline int get_revision(void)
 {
 	int r = PCWD_REVISION_C;
-	
+
 	spin_lock(&io_lock);
 	if ((inb(current_readport + 2) == 0xFF) ||
 	    (inb(current_readport + 3) == 0xFF))
@@ -576,29 +577,29 @@ static struct file_operations pcwd_fops 
 };
 
 static struct miscdevice pcwd_miscdev = {
-	WATCHDOG_MINOR,
-	"watchdog",
-	&pcwd_fops
+	.minor =	WATCHDOG_MINOR,
+	.name =		"watchdog",
+	.fops =		&pcwd_fops,
 };
 
 static struct miscdevice temp_miscdev = {
-	TEMP_MINOR,
-	"temperature",
-	&pcwd_fops
+	.minor =	TEMP_MINOR,
+	.name =		"temperature",
+	.fops =		&pcwd_fops,
 };
- 
+
 static void __init pcwd_validate_timeout(void)
 {
 	timeout_val = timeout * 2;
 }
- 
+
 static int __init pcwatchdog_init(void)
 {
 	char *firmware;
 	int i, found = 0;
 	pcwd_validate_timeout();
 	spin_lock_init(&io_lock);
-	
+
 	revision = PCWD_REVISION_A;
 
 	printk(KERN_INFO "pcwd: v%s Ken Hollis (kenji@bitgate.com)\n", WD_VER);
@@ -660,11 +661,11 @@ static int __init pcwatchdog_init(void)
 
 	if (misc_register(&pcwd_miscdev))
 		return -ENODEV;
-	
+
 	if (supports_temp)
 		if (misc_register(&temp_miscdev)) {
 			misc_deregister(&pcwd_miscdev);
-			return -ENODEV;		
+			return -ENODEV;
 		}
 
 
@@ -673,10 +674,10 @@ static int __init pcwatchdog_init(void)
 			misc_deregister(&pcwd_miscdev);
 			if (supports_temp)
 				misc_deregister(&pcwd_miscdev);
-			return -EIO;		
+			return -EIO;
 		}
 	}
-	else 
+	else
 		if (!request_region(current_readport, 4, "PCWD Rev.C (Berkshire)")) {
 			misc_deregister(&pcwd_miscdev);
 			if (supports_temp)
diff -puN drivers/char/watchdog/sa1100_wdt.c~watchdog-updates drivers/char/watchdog/sa1100_wdt.c
--- 25/drivers/char/watchdog/sa1100_wdt.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/sa1100_wdt.c	Fri Jan  2 15:37:58 2004
@@ -77,6 +77,7 @@ static int sa1100dog_release(struct inod
 	}
 
 	clear_bit(1, &sa1100wdt_users);
+	expect_close = 0;
 
 	return 0;
 }
diff -puN drivers/char/watchdog/sc1200wdt.c~watchdog-updates drivers/char/watchdog/sc1200wdt.c
--- 25/drivers/char/watchdog/sc1200wdt.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/sc1200wdt.c	Fri Jan  2 15:37:58 2004
@@ -175,12 +175,12 @@ static int sc1200wdt_ioctl(struct inode 
 	static struct watchdog_info ident = {
 		.options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT | WDIOF_MAGICCLOSE,
 		.firmware_version = 0,
-		.identity = "PC87307/PC97307"
+		.identity = "PC87307/PC97307",
 	};
 
 	switch (cmd) {
 		default:
-			return -ENOTTY;	/* Keep Pavel Machek amused ;) */
+			return -ENOIOCTLCMD;	/* Keep Pavel Machek amused ;) */
 
 		case WDIOC_GETSUPPORT:
 			if (copy_to_user((struct watchdog_info *)arg, &ident, sizeof ident))
@@ -256,7 +256,7 @@ static ssize_t sc1200wdt_write(struct fi
 {
 	if (ppos != &file->f_pos)
 		return -ESPIPE;
-	
+
 	if (len) {
 		if (!nowayout) {
 			size_t i;
@@ -292,7 +292,7 @@ static int sc1200wdt_notify_sys(struct n
 
 static struct notifier_block sc1200wdt_notifier =
 {
-	notifier_call:	sc1200wdt_notify_sys
+	.notifier_call =	sc1200wdt_notify_sys,
 };
 
 static struct file_operations sc1200wdt_fops =
@@ -301,7 +301,7 @@ static struct file_operations sc1200wdt_
 	.write		= sc1200wdt_write,
 	.ioctl		= sc1200wdt_ioctl,
 	.open		= sc1200wdt_open,
-	.release	= sc1200wdt_release
+	.release	= sc1200wdt_release,
 };
 
 static struct miscdevice sc1200wdt_miscdev =
@@ -320,7 +320,7 @@ static int __init sc1200wdt_probe(void)
 	 * Nb. This could be done with accuracy by reading the SID registers, but
 	 * we don't have access to those io regions.
 	 */
-	
+
 	unsigned char reg;
 
 	sc1200wdt_read_data(PMC3, &reg);
@@ -334,7 +334,7 @@ static int __init sc1200wdt_probe(void)
 struct pnp_device_id scl200wdt_pnp_devices[] = {
 	/* National Semiconductor PC87307/PC97307 watchdog component */
 	{.id = "NSC0800", .driver_data = 0},
-	{.id = ""}
+	{.id = ""},
 };
 
 static int scl200wdt_pnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id)
@@ -409,7 +409,7 @@ static int __init sc1200wdt_init(void)
 		ret = -EBUSY;
 		goto out_clean;
 	}
-	
+
 	ret = sc1200wdt_probe();
 	if (ret)
 		goto out_io;
@@ -438,7 +438,7 @@ out_io:
 	release_region(io, io_len);
 
 	goto out_clean;
-}	
+}
 
 
 static void __exit sc1200wdt_exit(void)
diff -puN drivers/char/watchdog/scx200_wdt.c~watchdog-updates drivers/char/watchdog/scx200_wdt.c
--- 25/drivers/char/watchdog/scx200_wdt.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/scx200_wdt.c	Fri Jan  2 15:37:58 2004
@@ -1,4 +1,4 @@
-/* linux/drivers/char/scx200_wdt.c 
+/* drivers/char/watchdog/scx200_wdt.c
 
    National Semiconductor SCx200 Watchdog support
 
@@ -51,7 +51,7 @@ MODULE_PARM_DESC(nowayout, "Disable watc
 
 static u16 wdto_restart;
 static struct semaphore open_semaphore;
-static unsigned expect_close;
+static char expect_close;
 
 /* Bits of the WDCNFG register */
 #define W_ENABLE 0x00fa		/* Enable watchdog */
@@ -73,7 +73,7 @@ static void scx200_wdt_update_margin(voi
 
 static void scx200_wdt_enable(void)
 {
-	printk(KERN_DEBUG NAME ": enabling watchdog timer, wdto_restart = %d\n", 
+	printk(KERN_DEBUG NAME ": enabling watchdog timer, wdto_restart = %d\n",
 	       wdto_restart);
 
 	outw(0, SCx200_CB_BASE + SCx200_WDT_WDTO);
@@ -86,7 +86,7 @@ static void scx200_wdt_enable(void)
 static void scx200_wdt_disable(void)
 {
 	printk(KERN_DEBUG NAME ": disabling watchdog timer\n");
-		
+
 	outw(0, SCx200_CB_BASE + SCx200_WDT_WDTO);
 	outb(SCx200_WDT_WDSTS_WDOVF, SCx200_CB_BASE + SCx200_WDT_WDSTS);
 	outw(W_DISABLE, SCx200_CB_BASE + SCx200_WDT_WDCNFG);
@@ -94,50 +94,50 @@ static void scx200_wdt_disable(void)
 
 static int scx200_wdt_open(struct inode *inode, struct file *file)
 {
-        /* only allow one at a time */
-        if (down_trylock(&open_semaphore))
-                return -EBUSY;
+	/* only allow one at a time */
+	if (down_trylock(&open_semaphore))
+		return -EBUSY;
 	scx200_wdt_enable();
-	expect_close = 0;
 
 	return 0;
 }
 
 static int scx200_wdt_release(struct inode *inode, struct file *file)
 {
-	if (!expect_close) {
+	if (expect_close != 42) {
 		printk(KERN_WARNING NAME ": watchdog device closed unexpectedly, will not disable the watchdog timer\n");
 	} else if (!nowayout) {
 		scx200_wdt_disable();
 	}
-        up(&open_semaphore);
+	expect_close = 0;
+	up(&open_semaphore);
 
 	return 0;
 }
 
-static int scx200_wdt_notify_sys(struct notifier_block *this, 
+static int scx200_wdt_notify_sys(struct notifier_block *this,
 				      unsigned long code, void *unused)
 {
-        if (code == SYS_HALT || code == SYS_POWER_OFF)
+	if (code == SYS_HALT || code == SYS_POWER_OFF)
 		if (!nowayout)
 			scx200_wdt_disable();
 
-        return NOTIFY_DONE;
+	return NOTIFY_DONE;
 }
 
 static struct notifier_block scx200_wdt_notifier =
 {
-        .notifier_call = scx200_wdt_notify_sys
+	.notifier_call = scx200_wdt_notify_sys,
 };
 
-static ssize_t scx200_wdt_write(struct file *file, const char *data, 
+static ssize_t scx200_wdt_write(struct file *file, const char *data,
 				     size_t len, loff_t *ppos)
 {
 	if (ppos != &file->f_pos)
 		return -ESPIPE;
 
 	/* check for a magic close character */
-	if (len) 
+	if (len)
 	{
 		size_t i;
 
@@ -149,7 +149,7 @@ static ssize_t scx200_wdt_write(struct f
 			if (get_user(c, data+i))
 				return -EFAULT;
 			if (c == 'V')
-				expect_close = 1;
+				expect_close = 42;
 		}
 
 		return len;
@@ -163,16 +163,16 @@ static int scx200_wdt_ioctl(struct inode
 {
 	static struct watchdog_info ident = {
 		.identity = "NatSemi SCx200 Watchdog",
-		.firmware_version = 1, 
+		.firmware_version = 1,
 		.options = (WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING),
 	};
 	int new_margin;
-	
+
 	switch (cmd) {
 	default:
-		return -ENOTTY;
+		return -ENOIOCTLCMD;
 	case WDIOC_GETSUPPORT:
-		if(copy_to_user((struct watchdog_info *)arg, &ident, 
+		if(copy_to_user((struct watchdog_info *)arg, &ident,
 				sizeof(ident)))
 			return -EFAULT;
 		return 0;
@@ -220,7 +220,7 @@ static int __init scx200_wdt_init(void)
 	printk(KERN_DEBUG NAME ": NatSemi SCx200 Watchdog Driver\n");
 
 	/* First check that this really is a NatSemi SCx200 CPU */
-	if ((pci_find_device(PCI_VENDOR_ID_NS, 
+	if ((pci_find_device(PCI_VENDOR_ID_NS,
 			     PCI_DEVICE_ID_NS_SCx200_BRIDGE,
 			     NULL)) == NULL)
 		return -ENODEV;
@@ -231,8 +231,8 @@ static int __init scx200_wdt_init(void)
 		return -ENODEV;
 	}
 
-	if (!request_region(SCx200_CB_BASE + SCx200_WDT_OFFSET, 
-			    SCx200_WDT_SIZE, 
+	if (!request_region(SCx200_CB_BASE + SCx200_WDT_OFFSET,
+			    SCx200_WDT_SIZE,
 			    "NatSemi SCx200 Watchdog")) {
 		printk(KERN_WARNING NAME ": watchdog I/O region busy\n");
 		return -EBUSY;
@@ -251,20 +251,20 @@ static int __init scx200_wdt_init(void)
 	}
 
 	r = register_reboot_notifier(&scx200_wdt_notifier);
-        if (r) {
-                printk(KERN_ERR NAME ": unable to register reboot notifier");
+	if (r) {
+		printk(KERN_ERR NAME ": unable to register reboot notifier");
 		misc_deregister(&scx200_wdt_miscdev);
 		release_region(SCx200_CB_BASE + SCx200_WDT_OFFSET,
 				SCx200_WDT_SIZE);
-                return r;
-        }
+		return r;
+	}
 
 	return 0;
 }
 
 static void __exit scx200_wdt_cleanup(void)
 {
-        unregister_reboot_notifier(&scx200_wdt_notifier);
+	unregister_reboot_notifier(&scx200_wdt_notifier);
 	misc_deregister(&scx200_wdt_miscdev);
 	release_region(SCx200_CB_BASE + SCx200_WDT_OFFSET,
 		       SCx200_WDT_SIZE);
diff -puN drivers/char/watchdog/shwdt.c~watchdog-updates drivers/char/watchdog/shwdt.c
--- 25/drivers/char/watchdog/shwdt.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/shwdt.c	Fri Jan  2 15:37:58 2004
@@ -36,7 +36,7 @@
 /*
  * Default clock division ratio is 5.25 msecs. For an additional table of
  * values, consult the asm-sh/watchdog.h. Overload this at module load
- * time. 
+ * time.
  *
  * In order for this to work reliably we need to have HZ set to 1000 or
  * something quite higher than 100 (or we need a proper high-res timer
@@ -122,7 +122,7 @@ static void sh_wdt_start(void)
 	csr = sh_wdt_read_rstcsr();
 	csr &= ~RSTCSR_RSTS;
 	sh_wdt_write_rstcsr(csr);
-#endif	
+#endif
 }
 
 /**
@@ -202,7 +202,7 @@ static int sh_wdt_close(struct inode *in
 
 	clear_bit(0, &shwdt_is_open);
 	shwdt_expect_close = 0;
-	
+
 	return 0;
 }
 
@@ -264,7 +264,7 @@ static int sh_wdt_ioctl(struct inode *in
 					  sizeof(sh_wdt_info))) {
 				return -EFAULT;
 			}
-			
+
 			break;
 		case WDIOC_GETSTATUS:
 		case WDIOC_GETBOOTSTATUS:
@@ -299,11 +299,11 @@ static int sh_wdt_ioctl(struct inode *in
 				sh_wdt_start();
 				retval = 0;
 			}
-			
+
 			return retval;
 		}
 		default:
-			return -ENOTTY;
+			return -ENOIOCTLCMD;
 	}
 
 	return 0;
@@ -311,7 +311,7 @@ static int sh_wdt_ioctl(struct inode *in
 
 /**
  * 	sh_wdt_notify_sys - Notifier Handler
- * 	
+ *
  * 	@this: notifier block
  * 	@code: notifier event
  * 	@unused: unused
diff -puN drivers/char/watchdog/softdog.c~watchdog-updates drivers/char/watchdog/softdog.c
--- 25/drivers/char/watchdog/softdog.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/softdog.c	Fri Jan  2 15:37:58 2004
@@ -8,10 +8,10 @@
  *	modify it under the terms of the GNU General Public License
  *	as published by the Free Software Foundation; either version
  *	2 of the License, or (at your option) any later version.
- *	
- *	Neither Alan Cox nor CymruNet Ltd. admit liability nor provide 
- *	warranty for any of this software. This material is provided 
- *	"AS-IS" and at no charge.	
+ *
+ *	Neither Alan Cox nor CymruNet Ltd. admit liability nor provide
+ *	warranty for any of this software. This material is provided
+ *	"AS-IS" and at no charge.
  *
  *	(c) Copyright 1995    Alan Cox <alan@lxorguk.ukuu.org.uk>
  *
@@ -28,14 +28,14 @@
  *	Made SMP safe for 2.3.x
  *
  *  20011127 Joel Becker (jlbec@evilplan.org>
- *	Added soft_noboot; Allows testing the softdog trigger without 
+ *	Added soft_noboot; Allows testing the softdog trigger without
  *	requiring a recompile.
  *	Added WDIOC_GETTIMEOUT and WDIOC_SETTIMOUT.
  *
  *  20020530 Joel Becker <joel.becker@oracle.com>
  *  	Added Matt Domsch's nowayout module option.
  */
- 
+
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/config.h>
@@ -49,7 +49,7 @@
 
 #define TIMER_MARGIN	60		/* (secs) Default is 1 minute */
 
-static int expect_close = 0;
+static char expect_close;
 static int soft_margin = TIMER_MARGIN;	/* in seconds */
 #ifdef ONLY_TESTING
 static int soft_noboot = 1;
@@ -73,7 +73,7 @@ MODULE_PARM_DESC(nowayout, "Watchdog can
 /*
  *	Our timer
  */
- 
+
 static void watchdog_fire(unsigned long);
 
 static struct timer_list watchdog_ticktock =
@@ -84,7 +84,7 @@ static unsigned long timer_alive;
 /*
  *	If the timer expires..
  */
- 
+
 static void watchdog_fire(unsigned long data)
 {
 	if (soft_noboot)
@@ -100,12 +100,12 @@ static void watchdog_fire(unsigned long 
 /*
  *	Allow only one person to hold it open
  */
- 
+
 static int softdog_open(struct inode *inode, struct file *file)
 {
 	if(test_and_set_bit(0, &timer_alive))
 		return -EBUSY;
-	if (nowayout) 
+	if (nowayout)
 		__module_get(THIS_MODULE);
 	/*
 	 *	Activate timer
@@ -120,12 +120,13 @@ static int softdog_release(struct inode 
 	 *	Shut off the timer.
 	 * 	Lock it in if it's a module and we set nowayout
 	 */
-	if (expect_close) {
+	if (expect_close == 42) {
 		del_timer(&watchdog_ticktock);
 	} else {
 		printk(KERN_CRIT "SOFTDOG: WDT device closed unexpectedly.  WDT will not stop!\n");
 	}
 	clear_bit(0, &timer_alive);
+	expect_close = 0;
 	return 0;
 }
 
@@ -151,7 +152,7 @@ static ssize_t softdog_write(struct file
 				if (get_user(c, data + i))
 					return -EFAULT;
 				if (c == 'V')
-					expect_close = 1;
+					expect_close = 42;
 			}
 		}
 		mod_timer(&watchdog_ticktock, jiffies+(soft_margin*HZ));
@@ -169,7 +170,7 @@ static int softdog_ioctl(struct inode *i
 	};
 	switch (cmd) {
 		default:
-			return -ENOTTY;
+			return -ENOIOCTLCMD;
 		case WDIOC_GETSUPPORT:
 			if(copy_to_user((struct watchdog_info *)arg, &ident, sizeof(ident)))
 				return -EFAULT;
diff -puN drivers/char/watchdog/w83627hf_wdt.c~watchdog-updates drivers/char/watchdog/w83627hf_wdt.c
--- 25/drivers/char/watchdog/w83627hf_wdt.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/w83627hf_wdt.c	Fri Jan  2 15:37:58 2004
@@ -184,7 +184,7 @@ wdt_ioctl(struct inode *inode, struct fi
 	}
 
 	default:
-	  return -ENOTTY;
+	  return -ENOIOCTLCMD;
 	}
 	return 0;
 }
diff -puN drivers/char/watchdog/wafer5823wdt.c~watchdog-updates drivers/char/watchdog/wafer5823wdt.c
--- 25/drivers/char/watchdog/wafer5823wdt.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/wafer5823wdt.c	Fri Jan  2 15:37:58 2004
@@ -182,7 +182,7 @@ static int wafwdt_ioctl(struct inode *in
 	}
 
 	default:
-		return -ENOTTY;
+		return -ENOIOCTLCMD;
 	}
 	return 0;
 }
diff -puN drivers/char/watchdog/wdt285.c~watchdog-updates drivers/char/watchdog/wdt285.c
--- 25/drivers/char/watchdog/wdt285.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/wdt285.c	Fri Jan  2 15:37:58 2004
@@ -12,9 +12,9 @@
  *	modify it under the terms of the GNU General Public License
  *	as published by the Free Software Foundation; either version
  *	2 of the License, or (at your option) any later version.
- *	
+ *
  */
- 
+
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/types.h>
@@ -79,7 +79,7 @@ static int watchdog_open(struct inode *i
 
 	*CSR_TIMER4_CLR = 0;
 	watchdog_ping();
-	*CSR_TIMER4_CNTL = TIMER_CNTL_ENABLE | TIMER_CNTL_AUTORELOAD 
+	*CSR_TIMER4_CNTL = TIMER_CNTL_ENABLE | TIMER_CNTL_AUTORELOAD
 		| TIMER_CNTL_DIV256;
 
 #ifdef ONLY_TESTING
@@ -132,7 +132,7 @@ watchdog_write(struct file *file, const 
 
 static struct watchdog_info ident = {
 	.options	= WDIOF_SETTIMEOUT,
-	.identity	= "Footbridge Watchdog"
+	.identity	= "Footbridge Watchdog",
 };
 
 static int
@@ -192,7 +192,7 @@ static struct file_operations watchdog_f
 static struct miscdevice watchdog_miscdev = {
 	.minor		= WATCHDOG_MINOR,
 	.name		= "watchdog",
-	.fops		= &watchdog_fops
+	.fops		= &watchdog_fops,
 };
 
 static int __init footbridge_watchdog_init(void)
@@ -206,7 +206,7 @@ static int __init footbridge_watchdog_in
 	if (retval < 0)
 		return retval;
 
-	printk("Footbridge Watchdog Timer: 0.01, timer margin: %d sec\n", 
+	printk("Footbridge Watchdog Timer: 0.01, timer margin: %d sec\n",
 	       soft_margin);
 
 	if (machine_is_cats())
diff -puN drivers/char/watchdog/wdt977.c~watchdog-updates drivers/char/watchdog/wdt977.c
--- 25/drivers/char/watchdog/wdt977.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/wdt977.c	Fri Jan  2 15:37:58 2004
@@ -43,7 +43,7 @@ static	int timeout = DEFAULT_TIMEOUT*60;
 static	int timeoutM = DEFAULT_TIMEOUT;		/* timeout in minutes */
 static	unsigned long timer_alive;
 static	int testmode;
-static int expect_close = 0;
+static	char expect_close;
 
 module_param(timeout, int, 0);
 MODULE_PARM_DESC(timeout,"Watchdog timeout in seconds (60..15300), default=60");
@@ -165,7 +165,7 @@ static int wdt977_release(struct inode *
 	 *	Shut off the timer.
 	 * 	Lock it in if it's a module and we set nowayout
 	 */
-	if (!nowayout)
+	if (expect_close == 42)
 	{
 		/* unlock the SuperIO chip */
 		outb(0x87,0x370);
@@ -202,6 +202,7 @@ static int wdt977_release(struct inode *
 	} else {
 		printk(KERN_CRIT "WDT device closed unexpectedly.  WDT will not stop!\n");
 	}
+	expect_close = 0;
 	return 0;
 }
 
@@ -235,7 +236,7 @@ static ssize_t wdt977_write(struct file 
 				if (get_user(c, buf + i))
 					return -EFAULT;
 				if (c == 'V')
-					expect_close = 1;
+					expect_close = 42;
 			}
 		}
 
@@ -257,18 +258,18 @@ static ssize_t wdt977_write(struct file 
 
 static struct watchdog_info ident = {
 	.options	= WDIOF_SETTIMEOUT,
-	.identity	= "Winbond 83977"
+	.identity	= "Winbond 83977",
 };
 
 static int wdt977_ioctl(struct inode *inode, struct file *file,
-         unsigned int cmd, unsigned long arg)
+	unsigned int cmd, unsigned long arg)
 {
 	int temp;
 
 	switch(cmd)
 	{
 	default:
-		return -ENOTTY;
+		return -ENOIOCTLCMD;
 
 	case WDIOC_GETSUPPORT:
 	    return copy_to_user((struct watchdog_info *)arg, &ident,
@@ -341,7 +342,7 @@ static struct miscdevice wdt977_miscdev=
 {
 	.minor		= WATCHDOG_MINOR,
 	.name		= "watchdog",
-	.fops		= &wdt977_fops
+	.fops		= &wdt977_fops,
 };
 
 static int __init nwwatchdog_init(void)
diff -puN drivers/char/watchdog/wdt.c~watchdog-updates drivers/char/watchdog/wdt.c
--- 25/drivers/char/watchdog/wdt.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/wdt.c	Fri Jan  2 15:37:58 2004
@@ -8,10 +8,10 @@
  *	modify it under the terms of the GNU General Public License
  *	as published by the Free Software Foundation; either version
  *	2 of the License, or (at your option) any later version.
- *	
- *	Neither Alan Cox nor CymruNet Ltd. admit liability nor provide 
- *	warranty for any of this software. This material is provided 
- *	"AS-IS" and at no charge.	
+ *
+ *	Neither Alan Cox nor CymruNet Ltd. admit liability nor provide
+ *	warranty for any of this software. This material is provided
+ *	"AS-IS" and at no charge.
  *
  *	(c) Copyright 1995    Alan Cox <alan@lxorguk.ukuu.org.uk>
  *
@@ -49,13 +49,13 @@
 #include "wd501p.h"
 
 static unsigned long wdt_is_open;
-static int expect_close;
+static char expect_close;
 
 /*
  *	You must set these - there is no sane way to probe for this board.
  *	You can use wdt=x,y to set these now.
  */
- 
+
 static int io=0x240;
 static int irq=11;
 
@@ -80,10 +80,10 @@ MODULE_PARM_DESC(nowayout, "Watchdog can
  *	@str: command line string
  *
  *	Setup options. The board isn't really probe-able so we have to
- *	get the user to tell us the configuration. Sane people build it 
+ *	get the user to tell us the configuration. Sane people build it
  *	modular but the others come here.
  */
- 
+
 static int __init wdt_setup(char *str)
 {
 	int ints[4];
@@ -108,11 +108,11 @@ MODULE_PARM(io, "i");
 MODULE_PARM_DESC(io, "WDT io port (default=0x240)");
 MODULE_PARM(irq, "i");
 MODULE_PARM_DESC(irq, "WDT irq (default=11)");
- 
+
 /*
  *	Programming support
  */
- 
+
 static void wdt_ctr_mode(int ctr, int mode)
 {
 	ctr<<=6;
@@ -130,29 +130,29 @@ static void wdt_ctr_load(int ctr, int va
 /*
  *	Kernel methods.
  */
- 
- 
+
+
 /**
  *	wdt_status:
- *	
+ *
  *	Extract the status information from a WDT watchdog device. There are
  *	several board variants so we have to know which bits are valid. Some
  *	bits default to one and some to zero in order to be maximally painful.
  *
  *	we then map the bits onto the status ioctl flags.
  */
- 
+
 static int wdt_status(void)
 {
 	/*
 	 *	Status register to bit flags
 	 */
-	 
+
 	int flag=0;
 	unsigned char status=inb_p(WDT_SR);
 	status|=FEATUREMAP1;
-	status&=~FEATUREMAP2;	
-	
+	status&=~FEATUREMAP2;
+
 	if(!(status&WDC_SR_TGOOD))
 		flag|=WDIOF_OVERHEAT;
 	if(!(status&WDC_SR_PSUOVER))
@@ -178,21 +178,21 @@ static int wdt_status(void)
  *	map changes in what the board considers an interesting way. That means
  *	a failure condition occurring.
  */
- 
+
 static irqreturn_t wdt_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
 	/*
 	 *	Read the status register see what is up and
-	 *	then printk it. 
+	 *	then printk it.
 	 */
-	 
+
 	unsigned char status=inb_p(WDT_SR);
-	
+
 	status|=FEATUREMAP1;
-	status&=~FEATUREMAP2;	
-	
+	status&=~FEATUREMAP2;
+
 	printk(KERN_CRIT "WDT status %d\n", status);
-	
+
 	if(!(status&WDC_SR_TGOOD))
 		printk(KERN_CRIT "Overheat alarm.(%d)\n",inb_p(WDT_RT));
 	if(!(status&WDC_SR_PSUOVER))
@@ -205,10 +205,10 @@ static irqreturn_t wdt_interrupt(int irq
 #ifdef SOFTWARE_REBOOT
 #ifdef ONLY_TESTING
 		printk(KERN_CRIT "Would Reboot.\n");
-#else		
+#else
 		printk(KERN_CRIT "Initiating system reboot.\n");
 		machine_restart(NULL);
-#endif		
+#endif
 #else
 		printk(KERN_CRIT "Reset in 5ms.\n");
 #endif
@@ -220,9 +220,9 @@ static irqreturn_t wdt_interrupt(int irq
  *	wdt_ping:
  *
  *	Reload counter one with the watchdog timeout. We don't bother reloading
- *	the cascade counter. 
+ *	the cascade counter.
  */
- 
+
 static void wdt_ping(void)
 {
 	/* Write a watchdog value */
@@ -235,14 +235,14 @@ static void wdt_ping(void)
 /**
  *	wdt_write:
  *	@file: file handle to the watchdog
- *	@buf: buffer to write (unused as data does not matter here 
+ *	@buf: buffer to write (unused as data does not matter here
  *	@count: count of bytes
  *	@ppos: pointer to the position to write. No seeks allowed
  *
  *	A write to a watchdog device is defined as a keepalive signal. Any
  *	write of data will do, as we we don't define content meaning.
  */
- 
+
 static ssize_t wdt_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
 {
 	/*  Can't seek (pwrite) on this device  */
@@ -261,7 +261,7 @@ static ssize_t wdt_write(struct file *fi
 				if (get_user(c, buf + i))
 					return -EFAULT;
 				if (c == 'V')
-					expect_close = 1;
+					expect_close = 42;
 			}
 		}
 		wdt_ping();
@@ -279,12 +279,12 @@ static ssize_t wdt_write(struct file *fi
  *	Read reports the temperature in degrees Fahrenheit. The API is in
  *	farenheit. It was designed by an imperial measurement luddite.
  */
- 
+
 static ssize_t wdt_read(struct file *file, char *buf, size_t count, loff_t *ptr)
 {
 	unsigned short c=inb_p(WDT_RT);
 	unsigned char cp;
-	
+
 	/*  Can't seek (pread) on this device  */
 	if (ptr != &file->f_pos)
 		return -ESPIPE;
@@ -312,9 +312,9 @@ static ssize_t wdt_read(struct file *fil
  *
  *	The watchdog API defines a common set of functions for all watchdogs
  *	according to their available features. We only actually usefully support
- *	querying capabilities and current status. 
+ *	querying capabilities and current status.
  */
- 
+
 static int wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
 	unsigned long arg)
 {
@@ -326,14 +326,14 @@ static int wdt_ioctl(struct inode *inode
 					|WDIOF_EXTERN1|WDIOF_EXTERN2|WDIOF_FANFAULT
 					|WDIOF_SETTIMEOUT|WDIOF_MAGICCLOSE,
 		.firmware_version = 1,
-		.identity = "WDT500/501"
+		.identity = "WDT500/501",
 	};
-	
+
 	ident.options&=WDT_OPTION_MASK;	/* Mask down to the card we have */
 	switch(cmd)
 	{
 		default:
-			return -ENOTTY;
+			return -ENOIOCTLCMD;
 		case WDIOC_GETSUPPORT:
 			return copy_to_user((struct watchdog_info *)arg, &ident, sizeof(ident))?-EFAULT:0;
 
@@ -364,12 +364,12 @@ static int wdt_ioctl(struct inode *inode
  *	@file: file handle to device
  *
  *	One of our two misc devices has been opened. The watchdog device is
- *	single open and on opening we load the counters. Counter zero is a 
+ *	single open and on opening we load the counters. Counter zero is a
  *	100Hz cascade, into counter 1 which downcounts to reboot. When the
  *	counter triggers counter 2 downcounts the length of the reset pulse
- *	which set set to be as long as possible. 
+ *	which set set to be as long as possible.
  */
- 
+
 static int wdt_open(struct inode *inode, struct file *file)
 {
 	switch(iminor(inode))
@@ -378,9 +378,9 @@ static int wdt_open(struct inode *inode,
 			if(test_and_set_bit(0, &wdt_is_open))
 				return -EBUSY;
 			/*
-			 *	Activate 
+			 *	Activate
 			 */
-	 
+
 			wdt_is_open=1;
 			inb_p(WDT_DC);		/* Disable */
 			wdt_ctr_mode(0,3);
@@ -403,24 +403,25 @@ static int wdt_open(struct inode *inode,
  *	@inode: inode to board
  *	@file: file handle to board
  *
- *	The watchdog has a configurable API. There is a religious dispute 
- *	between people who want their watchdog to be able to shut down and 
+ *	The watchdog has a configurable API. There is a religious dispute
+ *	between people who want their watchdog to be able to shut down and
  *	those who want to be sure if the watchdog manager dies the machine
  *	reboots. In the former case we disable the counters, in the latter
  *	case you have to open it again very soon.
  */
- 
+
 static int wdt_release(struct inode *inode, struct file *file)
 {
 	if(iminor(inode)==WATCHDOG_MINOR)
 	{
-		if (expect_close) {
+		if (expect_close == 42) {
 			inb_p(WDT_DC);		/* Disable counters */
 			wdt_ctr_load(2,0);	/* 0 length reset pulses now */
 		} else {
 			printk(KERN_CRIT "wdt: WDT device closed unexpectedly.  WDT will not stop!\n");
 		}
 		clear_bit(0, &wdt_is_open);
+		expect_close = 0;
 	}
 	return 0;
 }
@@ -448,12 +449,12 @@ static int wdt_notify_sys(struct notifie
 	}
 	return NOTIFY_DONE;
 }
- 
+
 /*
  *	Kernel Interfaces
  */
- 
- 
+
+
 static struct file_operations wdt_fops = {
 	.owner		= THIS_MODULE,
 	.llseek		= no_llseek,
@@ -468,7 +469,7 @@ static struct miscdevice wdt_miscdev=
 {
 	.minor	= WATCHDOG_MINOR,
 	.name	= "watchdog",
-	.fops	= &wdt_fops
+	.fops	= &wdt_fops,
 };
 
 #ifdef CONFIG_WDT_501
@@ -476,20 +477,20 @@ static struct miscdevice temp_miscdev=
 {
 	.minor	= TEMP_MINOR,
 	.name	= "temperature",
-	.fops	= &wdt_fops
+	.fops	= &wdt_fops,
 };
 #endif
 
 /*
  *	The WDT card needs to learn about soft shutdowns in order to
- *	turn the timebomb registers off. 
+ *	turn the timebomb registers off.
  */
- 
+
 static struct notifier_block wdt_notifier=
 {
 	.notifier_call = wdt_notify_sys,
 	.next = NULL,
-	.priority = 0
+	.priority = 0,
 };
 
 /**
@@ -501,13 +502,13 @@ static struct notifier_block wdt_notifie
  *	will not touch PC memory so all is fine. You just have to load a new
  *	module in 60 seconds or reboot.
  */
- 
+
 static void __exit wdt_exit(void)
 {
 	misc_deregister(&wdt_miscdev);
-#ifdef CONFIG_WDT_501	
+#ifdef CONFIG_WDT_501
 	misc_deregister(&temp_miscdev);
-#endif	
+#endif
 	unregister_reboot_notifier(&wdt_notifier);
 	release_region(io,8);
 	free_irq(irq, NULL);
@@ -520,7 +521,7 @@ static void __exit wdt_exit(void)
  *	resources we require and bitch if anyone beat us to them.
  *	The open() function will actually kick the board off.
  */
- 
+
 static int __init wdt_init(void)
 {
 	int ret;
diff -puN drivers/char/watchdog/wdt_pci.c~watchdog-updates drivers/char/watchdog/wdt_pci.c
--- 25/drivers/char/watchdog/wdt_pci.c~watchdog-updates	Fri Jan  2 15:37:58 2004
+++ 25-akpm/drivers/char/watchdog/wdt_pci.c	Fri Jan  2 15:37:58 2004
@@ -8,10 +8,10 @@
  *	modify it under the terms of the GNU General Public License
  *	as published by the Free Software Foundation; either version
  *	2 of the License, or (at your option) any later version.
- *	
- *	Neither Alan Cox nor CymruNet Ltd. admit liability nor provide 
- *	warranty for any of this software. This material is provided 
- *	"AS-IS" and at no charge.	
+ *
+ *	Neither Alan Cox nor CymruNet Ltd. admit liability nor provide
+ *	warranty for any of this software. This material is provided
+ *	"AS-IS" and at no charge.
  *
  *	(c) Copyright 1995    Alan Cox <alan@lxorguk.ukuu.org.uk>
  *
@@ -72,7 +72,7 @@
 
 static struct semaphore open_sem;
 static spinlock_t wdtpci_lock;
-static int expect_close = 0;
+static char expect_close;
 
 static int io;
 static int irq;
@@ -95,7 +95,7 @@ MODULE_PARM_DESC(nowayout, "Watchdog can
 /*
  *	Programming support
  */
- 
+
 static void wdtpci_ctr_mode(int ctr, int mode)
 {
 	ctr<<=6;
@@ -113,29 +113,29 @@ static void wdtpci_ctr_load(int ctr, int
 /*
  *	Kernel methods.
  */
- 
- 
+
+
 /**
  *	wdtpci_status:
- *	
+ *
  *	Extract the status information from a WDT watchdog device. There are
  *	several board variants so we have to know which bits are valid. Some
  *	bits default to one and some to zero in order to be maximally painful.
  *
  *	we then map the bits onto the status ioctl flags.
  */
- 
+
 static int wdtpci_status(void)
 {
 	/*
 	 *	Status register to bit flags
 	 */
-	 
+
 	int flag=0;
 	unsigned char status=inb_p(WDT_SR);
 	status|=FEATUREMAP1;
-	status&=~FEATUREMAP2;	
-	
+	status&=~FEATUREMAP2;
+
 	if(!(status&WDC_SR_TGOOD))
 		flag|=WDIOF_OVERHEAT;
 	if(!(status&WDC_SR_PSUOVER))
@@ -161,21 +161,21 @@ static int wdtpci_status(void)
  *	map changes in what the board considers an interesting way. That means
  *	a failure condition occurring.
  */
- 
+
 static irqreturn_t wdtpci_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
 	/*
 	 *	Read the status register see what is up and
-	 *	then printk it. 
+	 *	then printk it.
 	 */
-	 
+
 	unsigned char status=inb_p(WDT_SR);
-	
+
 	status|=FEATUREMAP1;
-	status&=~FEATUREMAP2;	
-	
+	status&=~FEATUREMAP2;
+
 	printk(KERN_CRIT "WDT status %d\n", status);
-	
+
 	if(!(status&WDC_SR_TGOOD))
 		printk(KERN_CRIT "Overheat alarm.(%d)\n",inb_p(WDT_RT));
 	if(!(status&WDC_SR_PSUOVER))
@@ -188,10 +188,10 @@ static irqreturn_t wdtpci_interrupt(int 
 #ifdef SOFTWARE_REBOOT
 #ifdef ONLY_TESTING
 		printk(KERN_CRIT "Would Reboot.\n");
-#else		
+#else
 		printk(KERN_CRIT "Initiating system reboot.\n");
 		machine_restart(NULL);
-#endif		
+#endif
 #else
 		printk(KERN_CRIT "Reset in 5ms.\n");
 #endif
@@ -203,9 +203,9 @@ static irqreturn_t wdtpci_interrupt(int 
  *	wdtpci_ping:
  *
  *	Reload counter one with the watchdog timeout. We don't bother reloading
- *	the cascade counter. 
+ *	the cascade counter.
  */
- 
+
 static void wdtpci_ping(void)
 {
 	unsigned long flags;
@@ -222,14 +222,14 @@ static void wdtpci_ping(void)
 /**
  *	wdtpci_write:
  *	@file: file handle to the watchdog
- *	@buf: buffer to write (unused as data does not matter here 
+ *	@buf: buffer to write (unused as data does not matter here
  *	@count: count of bytes
  *	@ppos: pointer to the position to write. No seeks allowed
  *
  *	A write to a watchdog device is defined as a keepalive signal. Any
  *	write of data will do, as we we don't define content meaning.
  */
- 
+
 static ssize_t wdtpci_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
 {
 	/*  Can't seek (pwrite) on this device  */
@@ -247,7 +247,7 @@ static ssize_t wdtpci_write(struct file 
 				if(get_user(c, buf+i))
 					return -EFAULT;
 				if (c == 'V')
-					expect_close = 1;
+					expect_close = 42;
 			}
 		}
 		wdtpci_ping();
@@ -266,12 +266,12 @@ static ssize_t wdtpci_write(struct file 
  *	Read reports the temperature in degrees Fahrenheit. The API is in
  *	fahrenheit. It was designed by an imperial measurement luddite.
  */
- 
+
 static ssize_t wdtpci_read(struct file *file, char *buf, size_t count, loff_t *ptr)
 {
 	unsigned short c=inb_p(WDT_RT);
 	unsigned char cp;
-	
+
 	/*  Can't seek (pread) on this device  */
 	if (ptr != &file->f_pos)
 		return -ESPIPE;
@@ -299,9 +299,9 @@ static ssize_t wdtpci_read(struct file *
  *
  *	The watchdog API defines a common set of functions for all watchdogs
  *	according to their available features. We only actually usefully support
- *	querying capabilities and current status. 
+ *	querying capabilities and current status.
  */
- 
+
 static int wdtpci_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
 	unsigned long arg)
 {
@@ -314,12 +314,12 @@ static int wdtpci_ioctl(struct inode *in
 		.firmware_version = 1,
 		.identity	  = "WDT500/501PCI",
 	};
-	
+
 	ident.options&=WDT_OPTION_MASK;	/* Mask down to the card we have */
 	switch(cmd)
 	{
 		default:
-			return -ENOTTY;
+			return -ENOIOCTLCMD;
 		case WDIOC_GETSUPPORT:
 			return copy_to_user((struct watchdog_info *)arg, &ident, sizeof(ident))?-EFAULT:0;
 
@@ -351,12 +351,12 @@ static int wdtpci_ioctl(struct inode *in
  *	@file: file handle to device
  *
  *	One of our two misc devices has been opened. The watchdog device is
- *	single open and on opening we load the counters. Counter zero is a 
+ *	single open and on opening we load the counters. Counter zero is a
  *	100Hz cascade, into counter 1 which downcounts to reboot. When the
  *	counter triggers counter 2 downcounts the length of the reset pulse
- *	which set set to be as long as possible. 
+ *	which set set to be as long as possible.
  */
- 
+
 static int wdtpci_open(struct inode *inode, struct file *file)
 {
 	unsigned long flags;
@@ -371,17 +371,17 @@ static int wdtpci_open(struct inode *ino
 				__module_get(THIS_MODULE);
 			}
 			/*
-			 *	Activate 
+			 *	Activate
 			 */
 			spin_lock_irqsave(&wdtpci_lock, flags);
-			
+
 			inb_p(WDT_DC);		/* Disable */
 
 			/*
 			 * "pet" the watchdog, as Access says.
 			 * This resets the clock outputs.
 			 */
-				
+
 			wdtpci_ctr_mode(2,0);
 			outb_p(0, WDT_DC);
 
@@ -413,19 +413,19 @@ static int wdtpci_open(struct inode *ino
  *	@inode: inode to board
  *	@file: file handle to board
  *
- *	The watchdog has a configurable API. There is a religious dispute 
- *	between people who want their watchdog to be able to shut down and 
+ *	The watchdog has a configurable API. There is a religious dispute
+ *	between people who want their watchdog to be able to shut down and
  *	those who want to be sure if the watchdog manager dies the machine
  *	reboots. In the former case we disable the counters, in the latter
  *	case you have to open it again very soon.
  */
- 
+
 static int wdtpci_release(struct inode *inode, struct file *file)
 {
 
 	if (iminor(inode)==WATCHDOG_MINOR) {
 		unsigned long flags;
-		if (expect_close) {
+		if (expect_close == 42) {
 			spin_lock_irqsave(&wdtpci_lock, flags);
 			inb_p(WDT_DC);		/* Disable counters */
 			wdtpci_ctr_load(2,0);	/* 0 length reset pulses now */
@@ -434,6 +434,7 @@ static int wdtpci_release(struct inode *
 			printk(KERN_CRIT PFX "Unexpected close, not stopping timer!");
 			wdtpci_ping();
 		}
+		expect_close = 0;
 		up(&open_sem);
 	}
 	return 0;
@@ -465,12 +466,12 @@ static int wdtpci_notify_sys(struct noti
 	}
 	return NOTIFY_DONE;
 }
- 
+
 /*
  *	Kernel Interfaces
  */
- 
- 
+
+
 static struct file_operations wdtpci_fops = {
 	.owner		= THIS_MODULE,
 	.llseek		= no_llseek,
@@ -497,9 +498,9 @@ static struct miscdevice temp_miscdev = 
 
 /*
  *	The WDT card needs to learn about soft shutdowns in order to
- *	turn the timebomb registers off. 
+ *	turn the timebomb registers off.
  */
- 
+
 static struct notifier_block wdtpci_notifier = {
 	.notifier_call = wdtpci_notify_sys,
 };
@@ -584,7 +585,7 @@ static void __devexit wdtpci_remove_one 
 	unregister_reboot_notifier(&wdtpci_notifier);
 #ifdef CONFIG_WDT_501_PCI
 	misc_deregister(&temp_miscdev);
-#endif	
+#endif
 	misc_deregister(&wdtpci_miscdev);
 	free_irq(irq, &wdtpci_miscdev);
 	release_region(io, 16);
@@ -620,7 +621,7 @@ static struct pci_driver wdtpci_driver =
  *	will not touch PC memory so all is fine. You just have to load a new
  *	module in 60 seconds or reboot.
  */
- 
+
 static void __exit wdtpci_cleanup(void)
 {
 	pci_unregister_driver (&wdtpci_driver);
@@ -634,14 +635,14 @@ static void __exit wdtpci_cleanup(void)
  *	resources we require and bitch if anyone beat us to them.
  *	The open() function will actually kick the board off.
  */
- 
+
 static int __init wdtpci_init(void)
 {
 	int rc = pci_register_driver (&wdtpci_driver);
-	
+
 	if (rc < 1)
 		return -ENODEV;
-	
+
 	return 0;
 }
 

_