[WATCHDOG] w83697hf/hg WDT driver - patch 13
authorSamuel Tardieu <sam@rfc1149.net>
Thu, 7 Sep 2006 09:57:00 +0000 (11:57 +0200)
committerWim Van Sebroeck <wim@iguana.be>
Wed, 4 Oct 2006 20:45:42 +0000 (22:45 +0200)
This is patch 13 in the series of patches that converts
Marcus Junker's w83697hf watchdog driver to Samuel Tardieau's
w83697hf/hg watchdog driver.

This patch contains following changes:
 - Remove wdt_ctrl (it has been replaced with the
   w83697hf_write_timeout() function) and redo/clean-up
   the start/stop/ping code.
 - Make sure that the watchdog is enabled or disabled
   When starting or stoping the device (with a call
   to w83697hf_set_reg(0x30, ?); ).

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

index b3dcc81..2b3ce43 100644 (file)
@@ -156,31 +156,44 @@ w83697hf_init(void)
        w83697hf_unselect_wd_register();
 }
 
-static void
-wdt_ctrl(int timeout)
+static int
+wdt_ping(void)
 {
        spin_lock(&io_lock);
-
        w83697hf_select_wdt();
 
        w83697hf_write_timeout(timeout);
 
        w83697hf_deselect_wdt();
-
        spin_unlock(&io_lock);
+       return 0;
 }
 
 static int
-wdt_ping(void)
+wdt_enable(void)
 {
-       wdt_ctrl(timeout);
+       spin_lock(&io_lock);
+       w83697hf_select_wdt();
+
+       w83697hf_write_timeout(timeout);
+       w83697hf_set_reg(0x30, 1);      /* Enable timer */
+
+       w83697hf_deselect_wdt();
+       spin_unlock(&io_lock);
        return 0;
 }
 
 static int
 wdt_disable(void)
 {
-       wdt_ctrl(0);
+       spin_lock(&io_lock);
+       w83697hf_select_wdt();
+
+       w83697hf_set_reg(0x30, 0);      /* Disable timer */
+       w83697hf_write_timeout(0);
+
+       w83697hf_deselect_wdt();
+       spin_unlock(&io_lock);
        return 0;
 }
 
@@ -267,7 +280,7 @@ wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
                }
 
                if (options & WDIOS_ENABLECARD) {
-                       wdt_ping();
+                       wdt_enable();
                        retval = 0;
                }
 
@@ -289,7 +302,7 @@ wdt_open(struct inode *inode, struct file *file)
         *      Activate
         */
 
-       wdt_ping();
+       wdt_enable();
        return nonseekable_open(inode, file);
 }