diff options
author | Timo Juhani Lindfors <timo.lindfors@iki.fi> | 2010-09-30 17:08:04 +0300 |
---|---|---|
committer | Wim Van Sebroeck <wim@iguana.be> | 2010-10-28 21:42:32 +0000 |
commit | a422088db21333ba02a0f4fe4f5abfb08c802d35 (patch) | |
tree | 8ace538437914668ab3060c275cb3d7a0c5de61a /drivers/watchdog | |
parent | f0fc10745a48c766ea5d6d83a6a371a223986bb0 (diff) | |
download | lwn-a422088db21333ba02a0f4fe4f5abfb08c802d35.tar.gz lwn-a422088db21333ba02a0f4fe4f5abfb08c802d35.zip |
watchdog: it8712f_wdt: Add module parameter for alternative reset sources
On iEi PCISA-9652-R10 (BIOS version 1.5) single board computer reads
from the game port do not seem to reset the watchdog timer. This patch
adds a module parameter wdt_config_reg to specify alternative reset
sources. At least WDT_RESET_KBD has been tested, even just running
while true; do
setleds -L +scroll
sleep 1
setleds -L -scroll
sleep 1
done
is enough to keep the watchdog happy.
Signed-off-by: Timo Juhani Lindfors <timo.lindfors@iki.fi>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
Diffstat (limited to 'drivers/watchdog')
-rw-r--r-- | drivers/watchdog/it8712f_wdt.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/watchdog/it8712f_wdt.c b/drivers/watchdog/it8712f_wdt.c index b08fae65bb0e..b32c6c045b1a 100644 --- a/drivers/watchdog/it8712f_wdt.c +++ b/drivers/watchdog/it8712f_wdt.c @@ -85,6 +85,14 @@ static unsigned short address; #define WDT_OUT_PWROK 0x10 /* Pulse PWROK on timeout */ #define WDT_OUT_KRST 0x40 /* Pulse reset on timeout */ +static int wdt_control_reg = WDT_RESET_GAME; +module_param(wdt_control_reg, int, 0); +MODULE_PARM_DESC(wdt_control_reg, "Value to write to watchdog control " + "register. The default WDT_RESET_GAME resets the timer on " + "game port reads that this driver generates. You can also " + "use KBD, MOUSE or CIR if you have some external way to " + "generate those interrupts."); + static int superio_inb(int reg) { outb(reg, REG); @@ -131,7 +139,8 @@ static inline void superio_exit(void) static inline void it8712f_wdt_ping(void) { - inb(address); + if (wdt_control_reg & WDT_RESET_GAME) + inb(address); } static void it8712f_wdt_update_margin(void) @@ -170,7 +179,7 @@ static void it8712f_wdt_enable(void) superio_enter(); superio_select(LDN_GPIO); - superio_outb(WDT_RESET_GAME, WDT_CONTROL); + superio_outb(wdt_control_reg, WDT_CONTROL); it8712f_wdt_update_margin(); |