[PATCH 1/8] watchdog: w83627hf: Convert to watchdog infrastructure

2013-03-04 Thread Guenter Roeck
Signed-off-by: Guenter Roeck 
---
 drivers/watchdog/Kconfig|1 +
 drivers/watchdog/w83627hf_wdt.c |  234 ---
 2 files changed, 47 insertions(+), 188 deletions(-)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 9fcc70c..dd462af 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -856,6 +856,7 @@ config VIA_WDT
 config W83627HF_WDT
tristate "W83627HF/W83627DHG Watchdog Timer"
depends on X86
+   select WATCHDOG_CORE
---help---
  This is the driver for the hardware watchdog on the W83627HF chipset
  as used in Advantech PC-9578 and Tyan S2721-533 motherboards
diff --git a/drivers/watchdog/w83627hf_wdt.c b/drivers/watchdog/w83627hf_wdt.c
index 92f1326..cd82a47 100644
--- a/drivers/watchdog/w83627hf_wdt.c
+++ b/drivers/watchdog/w83627hf_wdt.c
@@ -1,6 +1,9 @@
 /*
  * w83627hf/thf WDT driver
  *
+ * (c) Copyright 2013 Guenter Roeck
+ * converted to watchdog infrastructure
+ *
  * (c) Copyright 2007 Vlad Drukker 
  * added support for W83627THF.
  *
@@ -31,42 +34,21 @@
 #include 
 #include 
 #include 
-#include 
 #include 
-#include 
 #include 
-#include 
 #include 
 #include 
 #include 
 #include 
-#include 
-
 
 #define WATCHDOG_NAME "w83627hf/thf/hg/dhg WDT"
 #define WATCHDOG_TIMEOUT 60/* 60 sec default timeout */
 
-static unsigned long wdt_is_open;
-static char expect_close;
-static DEFINE_SPINLOCK(io_lock);
-
 /* You must set this - there is no sane way to probe for this board. */
 static int wdt_io = 0x2E;
 module_param(wdt_io, int, 0);
 MODULE_PARM_DESC(wdt_io, "w83627hf/thf WDT io port (default 0x2E)");
 
-static int timeout = WATCHDOG_TIMEOUT; /* in seconds */
-module_param(timeout, int, 0);
-MODULE_PARM_DESC(timeout,
-   "Watchdog timeout in seconds. 1 <= timeout <= 255, default="
-   __MODULE_STRING(WATCHDOG_TIMEOUT) ".");
-
-static bool nowayout = WATCHDOG_NOWAYOUT;
-module_param(nowayout, bool, 0);
-MODULE_PARM_DESC(nowayout,
-   "Watchdog cannot be stopped once started (default="
-   __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
-
 /*
  * Kernel methods.
  */
@@ -120,8 +102,8 @@ static void w83627hf_init(void)
t = inb_p(WDT_EFDR);  /* read CRF6 */
if (t != 0) {
pr_info("Watchdog already running. Resetting timeout to %d 
sec\n",
-   timeout);
-   outb_p(timeout, WDT_EFDR);/* Write back to CRF6 */
+   WATCHDOG_TIMEOUT);
+   outb_p(WATCHDOG_TIMEOUT, WDT_EFDR);/* Write back to CRF6 */
}
 
outb_p(0xF5, WDT_EFER); /* Select CRF5 */
@@ -141,171 +123,53 @@ static void w83627hf_init(void)
w83627hf_unselect_wd_register();
 }
 
-static void wdt_set_time(int timeout)
+static int wdt_set_time(unsigned int timeout)
 {
-   spin_lock(_lock);
-
w83627hf_select_wd_register();
-
outb_p(0xF6, WDT_EFER);/* Select CRF6 */
outb_p(timeout, WDT_EFDR); /* Write Timeout counter to CRF6 */
-
w83627hf_unselect_wd_register();
-
-   spin_unlock(_lock);
+   return 0;
 }
 
-static int wdt_ping(void)
+static int wdt_start(struct watchdog_device *wdog)
 {
-   wdt_set_time(timeout);
-   return 0;
+   return wdt_set_time(wdog->timeout);
 }
 
-static int wdt_disable(void)
+static int wdt_stop(struct watchdog_device *wdog)
 {
-   wdt_set_time(0);
-   return 0;
+   return wdt_set_time(0);
 }
 
-static int wdt_set_heartbeat(int t)
+static int wdt_set_timeout(struct watchdog_device *wdog, unsigned int timeout)
 {
-   if (t < 1 || t > 255)
-   return -EINVAL;
-   timeout = t;
+   wdt_set_time(timeout);
+   wdog->timeout = timeout;
+
return 0;
 }
 
-static int wdt_get_time(void)
+static unsigned int wdt_get_time(struct watchdog_device *wdog)
 {
-   int timeleft;
-
-   spin_lock(_lock);
+   unsigned int timeleft;
 
w83627hf_select_wd_register();
-
-   outb_p(0xF6, WDT_EFER);/* Select CRF6 */
-   timeleft = inb_p(WDT_EFDR); /* Read Timeout counter to CRF6 */
-
+   outb_p(0xF6, WDT_EFER);
+   timeleft = inb(WDT_EFDR);
w83627hf_unselect_wd_register();
 
-   spin_unlock(_lock);
-
return timeleft;
 }
 
-static ssize_t wdt_write(struct file *file, const char __user *buf,
-   size_t count, loff_t *ppos)
-{
-   if (count) {
-   if (!nowayout) {
-   size_t i;
-
-   expect_close = 0;
-
-   for (i = 0; i != count; i++) {
-   char c;
-   if (get_user(c, buf + i))
-   return -EFAULT;
-   if (c == 'V')
-   expect_close = 42;
-  

[PATCH 1/8] watchdog: w83627hf: Convert to watchdog infrastructure

2013-03-04 Thread Guenter Roeck
Signed-off-by: Guenter Roeck li...@roeck-us.net
---
 drivers/watchdog/Kconfig|1 +
 drivers/watchdog/w83627hf_wdt.c |  234 ---
 2 files changed, 47 insertions(+), 188 deletions(-)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 9fcc70c..dd462af 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -856,6 +856,7 @@ config VIA_WDT
 config W83627HF_WDT
tristate W83627HF/W83627DHG Watchdog Timer
depends on X86
+   select WATCHDOG_CORE
---help---
  This is the driver for the hardware watchdog on the W83627HF chipset
  as used in Advantech PC-9578 and Tyan S2721-533 motherboards
diff --git a/drivers/watchdog/w83627hf_wdt.c b/drivers/watchdog/w83627hf_wdt.c
index 92f1326..cd82a47 100644
--- a/drivers/watchdog/w83627hf_wdt.c
+++ b/drivers/watchdog/w83627hf_wdt.c
@@ -1,6 +1,9 @@
 /*
  * w83627hf/thf WDT driver
  *
+ * (c) Copyright 2013 Guenter Roeck
+ * converted to watchdog infrastructure
+ *
  * (c) Copyright 2007 Vlad Drukker v...@storewiz.com
  * added support for W83627THF.
  *
@@ -31,42 +34,21 @@
 #include linux/module.h
 #include linux/moduleparam.h
 #include linux/types.h
-#include linux/miscdevice.h
 #include linux/watchdog.h
-#include linux/fs.h
 #include linux/ioport.h
-#include linux/notifier.h
 #include linux/reboot.h
 #include linux/init.h
 #include linux/spinlock.h
 #include linux/io.h
-#include linux/uaccess.h
-
 
 #define WATCHDOG_NAME w83627hf/thf/hg/dhg WDT
 #define WATCHDOG_TIMEOUT 60/* 60 sec default timeout */
 
-static unsigned long wdt_is_open;
-static char expect_close;
-static DEFINE_SPINLOCK(io_lock);
-
 /* You must set this - there is no sane way to probe for this board. */
 static int wdt_io = 0x2E;
 module_param(wdt_io, int, 0);
 MODULE_PARM_DESC(wdt_io, w83627hf/thf WDT io port (default 0x2E));
 
-static int timeout = WATCHDOG_TIMEOUT; /* in seconds */
-module_param(timeout, int, 0);
-MODULE_PARM_DESC(timeout,
-   Watchdog timeout in seconds. 1 = timeout = 255, default=
-   __MODULE_STRING(WATCHDOG_TIMEOUT) .);
-
-static bool nowayout = WATCHDOG_NOWAYOUT;
-module_param(nowayout, bool, 0);
-MODULE_PARM_DESC(nowayout,
-   Watchdog cannot be stopped once started (default=
-   __MODULE_STRING(WATCHDOG_NOWAYOUT) ));
-
 /*
  * Kernel methods.
  */
@@ -120,8 +102,8 @@ static void w83627hf_init(void)
t = inb_p(WDT_EFDR);  /* read CRF6 */
if (t != 0) {
pr_info(Watchdog already running. Resetting timeout to %d 
sec\n,
-   timeout);
-   outb_p(timeout, WDT_EFDR);/* Write back to CRF6 */
+   WATCHDOG_TIMEOUT);
+   outb_p(WATCHDOG_TIMEOUT, WDT_EFDR);/* Write back to CRF6 */
}
 
outb_p(0xF5, WDT_EFER); /* Select CRF5 */
@@ -141,171 +123,53 @@ static void w83627hf_init(void)
w83627hf_unselect_wd_register();
 }
 
-static void wdt_set_time(int timeout)
+static int wdt_set_time(unsigned int timeout)
 {
-   spin_lock(io_lock);
-
w83627hf_select_wd_register();
-
outb_p(0xF6, WDT_EFER);/* Select CRF6 */
outb_p(timeout, WDT_EFDR); /* Write Timeout counter to CRF6 */
-
w83627hf_unselect_wd_register();
-
-   spin_unlock(io_lock);
+   return 0;
 }
 
-static int wdt_ping(void)
+static int wdt_start(struct watchdog_device *wdog)
 {
-   wdt_set_time(timeout);
-   return 0;
+   return wdt_set_time(wdog-timeout);
 }
 
-static int wdt_disable(void)
+static int wdt_stop(struct watchdog_device *wdog)
 {
-   wdt_set_time(0);
-   return 0;
+   return wdt_set_time(0);
 }
 
-static int wdt_set_heartbeat(int t)
+static int wdt_set_timeout(struct watchdog_device *wdog, unsigned int timeout)
 {
-   if (t  1 || t  255)
-   return -EINVAL;
-   timeout = t;
+   wdt_set_time(timeout);
+   wdog-timeout = timeout;
+
return 0;
 }
 
-static int wdt_get_time(void)
+static unsigned int wdt_get_time(struct watchdog_device *wdog)
 {
-   int timeleft;
-
-   spin_lock(io_lock);
+   unsigned int timeleft;
 
w83627hf_select_wd_register();
-
-   outb_p(0xF6, WDT_EFER);/* Select CRF6 */
-   timeleft = inb_p(WDT_EFDR); /* Read Timeout counter to CRF6 */
-
+   outb_p(0xF6, WDT_EFER);
+   timeleft = inb(WDT_EFDR);
w83627hf_unselect_wd_register();
 
-   spin_unlock(io_lock);
-
return timeleft;
 }
 
-static ssize_t wdt_write(struct file *file, const char __user *buf,
-   size_t count, loff_t *ppos)
-{
-   if (count) {
-   if (!nowayout) {
-   size_t i;
-
-   expect_close = 0;
-
-   for (i = 0; i != count; i++) {
-   char c;
-