[WATCHDOG] w83697hf/hg WDT driver - autodetect patch
authorWim Van Sebroeck <wim@iguana.be>
Fri, 15 Sep 2006 15:59:07 +0000 (17:59 +0200)
committerWim Van Sebroeck <wim@iguana.be>
Wed, 4 Oct 2006 20:46:35 +0000 (22:46 +0200)
Change the autodetect code so that it is more generic.

Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
drivers/char/watchdog/w83697hf_wdt.c

index 21052de..7768b55 100644 (file)
@@ -369,33 +369,35 @@ w83697hf_check_wdt(void)
        return -EIO;
 }
 
+static int w83697hf_ioports[] = { 0x2e, 0x4e, 0x00 };
+
 static int __init
 wdt_init(void)
 {
-       int ret, autodetect;
+       int ret, i, found = 0;
 
        spin_lock_init(&io_lock);
 
        printk (KERN_INFO PFX "WDT driver for W83697HF/HG initializing\n");
 
-       autodetect = wdt_io == 0;
-       if (autodetect)
-               wdt_io = 0x2e;
-
-       if (!w83697hf_check_wdt())
-               goto found;
-
-       if (autodetect) {
-               wdt_io = 0x4e;
+       if (wdt_io == 0) {
+               /* we will autodetect the W83697HF/HG watchdog */
+               for (i = 0; ((!found) && (w83697hf_ioports[i] != 0)); i++) {
+                       wdt_io = w83697hf_ioports[i];
+                       if (!w83697hf_check_wdt())
+                               found++;
+               }
+       } else {
                if (!w83697hf_check_wdt())
-                       goto found;
+                       found++;
        }
 
-       printk (KERN_ERR PFX "No W83697HF/HG could be found\n");
-       ret = -EIO;
-       goto out;
+       if (!found) {
+               printk (KERN_ERR PFX "No W83697HF/HG could be found\n");
+               ret = -EIO;
+               goto out;
+       }
 
-found:
        w83697hf_init();
        wdt_disable();  /* Disable watchdog until first use */