[WATCHDOG] w83697hf/hg WDT driver - patch 13

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>

diff --git a/drivers/char/watchdog/w83697hf_wdt.c b/drivers/char/watchdog/w83697hf_wdt.c
index b3dcc81..2b3ce43 100644
--- a/drivers/char/watchdog/w83697hf_wdt.c
+++ b/drivers/char/watchdog/w83697hf_wdt.c
@@ -156,31 +156,44 @@
 	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 @@
 		}
 
 		if (options & WDIOS_ENABLECARD) {
-			wdt_ping();
+			wdt_enable();
 			retval = 0;
 		}
 
@@ -289,7 +302,7 @@
 	 *	Activate
 	 */
 
-	wdt_ping();
+	wdt_enable();
 	return nonseekable_open(inode, file);
 }