diff options
author | John Crispin <blogic@openwrt.org> | 2011-08-24 10:31:39 +0200 |
---|---|---|
committer | Wim Van Sebroeck <wim@iguana.be> | 2011-09-20 14:28:24 +0200 |
commit | 9cfce47b146cb492b8d5e7b40d6f7b3ea1963d50 (patch) | |
tree | 37019440c279b8fb9616c1a728f18b8a509ed50a /drivers/watchdog/lantiq_wdt.c | |
parent | dbc018eca386b4e2670fc3116feada19f3db664c (diff) | |
download | lwn-9cfce47b146cb492b8d5e7b40d6f7b3ea1963d50.tar.gz lwn-9cfce47b146cb492b8d5e7b40d6f7b3ea1963d50.zip |
watchdog: lantiq: fix watchdogs timeout handling
The enable function was using the global timeout variable for local operations.
This resulted in the value of the global variable being corrupted, thus
breaking the code.
Signed-off-by: John Crispin <blogic@openwrt.org>
Signed-off-by: Thomas Langer <thomas.langer@lantiq.com>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
Cc: linux-watchdog@vger.kernel.org
Cc: linux-mips@linux-mips.org
Diffstat (limited to 'drivers/watchdog/lantiq_wdt.c')
-rw-r--r-- | drivers/watchdog/lantiq_wdt.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/watchdog/lantiq_wdt.c b/drivers/watchdog/lantiq_wdt.c index 7d82adac1cb2..102aed0efbf1 100644 --- a/drivers/watchdog/lantiq_wdt.c +++ b/drivers/watchdog/lantiq_wdt.c @@ -51,16 +51,16 @@ static int ltq_wdt_ok_to_close; static void ltq_wdt_enable(void) { - ltq_wdt_timeout = ltq_wdt_timeout * + unsigned long int timeout = ltq_wdt_timeout * (ltq_io_region_clk_rate / LTQ_WDT_DIVIDER) + 0x1000; - if (ltq_wdt_timeout > LTQ_MAX_TIMEOUT) - ltq_wdt_timeout = LTQ_MAX_TIMEOUT; + if (timeout > LTQ_MAX_TIMEOUT) + timeout = LTQ_MAX_TIMEOUT; /* write the first password magic */ ltq_w32(LTQ_WDT_PW1, ltq_wdt_membase + LTQ_WDT_CR); /* write the second magic plus the configuration and new timeout */ ltq_w32(LTQ_WDT_SR_EN | LTQ_WDT_SR_PWD | LTQ_WDT_SR_CLKDIV | - LTQ_WDT_PW2 | ltq_wdt_timeout, ltq_wdt_membase + LTQ_WDT_CR); + LTQ_WDT_PW2 | timeout, ltq_wdt_membase + LTQ_WDT_CR); } static void |