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:
parent
df278dac20
commit
9c67bea419
|
@ -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.
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue