watchdog: Add watchdog support for W83627DHG chip

The following adds watchdog support for the Winbond W83627DHG chip.
I have tested it on a PQ7-M102XL (Intel Atom) board.

Signed-off-by: Benny Lønstrup Ammitzbøll <benny@ammitzboell-consult.dk>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
This commit is contained in:
Benny Loenstrup Ammitzboell 2010-11-11 16:08:41 +01:00 committed by Wim Van Sebroeck
parent df278dac20
commit 9c67bea419
2 changed files with 8 additions and 7 deletions

View File

@ -722,14 +722,15 @@ config SMSC37B787_WDT
Most people will say N. Most people will say N.
config W83627HF_WDT config W83627HF_WDT
tristate "W83627HF Watchdog Timer" tristate "W83627HF/W83627DHG Watchdog Timer"
depends on X86 depends on X86
---help--- ---help---
This is the driver for the hardware watchdog on the W83627HF chipset This is the driver for the hardware watchdog on the W83627HF chipset
as used in Advantech PC-9578 and Tyan S2721-533 motherboards as used in Advantech PC-9578 and Tyan S2721-533 motherboards
(and likely others). This watchdog simply watches your kernel to (and likely others). The driver also supports the W83627DHG chip.
make sure it doesn't freeze, and if it does, it reboots your computer This watchdog simply watches your kernel to make sure it doesn't
after a certain amount of time. freeze, and if it does, it reboots your computer after a certain
amount of time.
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called w83627hf_wdt. module will be called w83627hf_wdt.

View File

@ -42,7 +42,7 @@
#include <asm/system.h> #include <asm/system.h>
#define WATCHDOG_NAME "w83627hf/thf/hg WDT" #define WATCHDOG_NAME "w83627hf/thf/hg/dhg WDT"
#define PFX WATCHDOG_NAME ": " #define PFX WATCHDOG_NAME ": "
#define WATCHDOG_TIMEOUT 60 /* 60 sec default timeout */ #define WATCHDOG_TIMEOUT 60 /* 60 sec default timeout */
@ -89,7 +89,7 @@ static void w83627hf_select_wd_register(void)
c = ((inb_p(WDT_EFDR) & 0xf7) | 0x04); /* select WDT0 */ c = ((inb_p(WDT_EFDR) & 0xf7) | 0x04); /* select WDT0 */
outb_p(0x2b, WDT_EFER); outb_p(0x2b, WDT_EFER);
outb_p(c, WDT_EFDR); /* set GPIO3 to WDT0 */ outb_p(c, WDT_EFDR); /* set GPIO3 to WDT0 */
} else if (c == 0x88) { /* W83627EHF */ } else if (c == 0x88 || c == 0xa0) { /* W83627EHF / W83627DHG */
outb_p(0x2d, WDT_EFER); /* select GPIO5 */ outb_p(0x2d, WDT_EFER); /* select GPIO5 */
c = inb_p(WDT_EFDR) & ~0x01; /* PIN77 -> WDT0# */ c = inb_p(WDT_EFDR) & ~0x01; /* PIN77 -> WDT0# */
outb_p(0x2d, WDT_EFER); outb_p(0x2d, WDT_EFER);
@ -321,7 +321,7 @@ static int __init wdt_init(void)
{ {
int ret; int ret;
printk(KERN_INFO "WDT driver for the Winbond(TM) W83627HF/THF/HG Super I/O chip initialising.\n"); printk(KERN_INFO "WDT driver for the Winbond(TM) W83627HF/THF/HG/DHG Super I/O chip initialising.\n");
if (wdt_set_heartbeat(timeout)) { if (wdt_set_heartbeat(timeout)) {
wdt_set_heartbeat(WATCHDOG_TIMEOUT); wdt_set_heartbeat(WATCHDOG_TIMEOUT);