[WATCHDOG] max63xx: be careful when disabling the watchdog
authorMarc Zyngier <maz@misterjones.org>
Fri, 9 Apr 2010 16:43:33 +0000 (17:43 +0100)
committerWim Van Sebroeck <wim@iguana.be>
Fri, 16 Apr 2010 12:26:27 +0000 (12:26 +0000)
When shutting down the watchdog timer, special care must be taken
not to overwrite other bits in the register, as it may be shared
with other peripherals.

For example, on the Arcom Vulcan, the register is shared between
the watchdog and the PCI reset line...

Signed-off-by: Marc Zyngier <maz@misterjones.org>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
drivers/watchdog/max63xx_wdt.c

index 75f3a83c0361d9f0a30d70c9722b64a891253edd..3053ff05ca410b7d4fba52cadd7d86071d3c4896 100644 (file)
@@ -154,9 +154,14 @@ static void max63xx_wdt_enable(struct max63xx_timeout *entry)
 
 static void max63xx_wdt_disable(void)
 {
+       u8 val;
+
        spin_lock(&io_lock);
 
-       __raw_writeb(3, wdt_base);
+       val = __raw_readb(wdt_base);
+       val &= ~MAX6369_WDSET;
+       val |= 3;
+       __raw_writeb(val, wdt_base);
 
        spin_unlock(&io_lock);