diff options
author | matteo <matteo@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-09-12 15:30:00 +0000 |
---|---|---|
committer | matteo <matteo@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-09-12 15:30:00 +0000 |
commit | 91d6f27676c4d2dc432ea32729cc9dadc55e4d4c (patch) | |
tree | 39e78fdbfa08d20a8d01e195e14193a612dbc990 /target/linux/ar7/files/drivers/char | |
parent | 969318c24f2101c94c43067e376474e13d159dcf (diff) |
added ar7_wdt fix by Alex
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@8762 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ar7/files/drivers/char')
-rw-r--r-- | target/linux/ar7/files/drivers/char/watchdog/ar7_wdt.c | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/target/linux/ar7/files/drivers/char/watchdog/ar7_wdt.c b/target/linux/ar7/files/drivers/char/watchdog/ar7_wdt.c index a1bbad0365..889306188c 100644 --- a/target/linux/ar7/files/drivers/char/watchdog/ar7_wdt.c +++ b/target/linux/ar7/files/drivers/char/watchdog/ar7_wdt.c @@ -55,6 +55,9 @@ static int nowayout = WATCHDOG_NOWAYOUT; module_param(nowayout, int, 0); MODULE_PARM_DESC(nowayout, "Disable watchdog shutdown on close"); +#define READ_REG(x) readl((void __iomem*)&(x)) +#define WRITE_REG(x,v) writel((v), (void __iomem*)&(x)) + struct ar7_wdt { u32 kick_lock; u32 kick; @@ -93,11 +96,11 @@ static void ar7_wdt_get_regs(void) static void ar7_wdt_kick(u32 value) { - ar7_wdt->kick_lock = 0x5555; - if ((ar7_wdt->kick_lock & 3) == 1) { - ar7_wdt->kick_lock = 0xaaaa; - if ((ar7_wdt->kick_lock & 3) == 3) { - ar7_wdt->kick = value; + WRITE_REG(ar7_wdt->kick_lock, 0x5555); + if ((READ_REG(ar7_wdt->kick_lock) & 3) == 1) { + WRITE_REG(ar7_wdt->kick_lock, 0xaaaa); + if ((READ_REG(ar7_wdt->kick_lock) & 3) == 3) { + WRITE_REG(ar7_wdt->kick, value); return; } } @@ -106,11 +109,11 @@ static void ar7_wdt_kick(u32 value) static void ar7_wdt_prescale(u32 value) { - ar7_wdt->prescale_lock = 0x5a5a; - if ((ar7_wdt->prescale_lock & 3) == 1) { - ar7_wdt->prescale_lock = 0xa5a5; - if ((ar7_wdt->prescale_lock & 3) == 3) { - ar7_wdt->prescale = value; + WRITE_REG(ar7_wdt->prescale_lock, 0x5a5a); + if ((READ_REG(ar7_wdt->prescale_lock) & 3) == 1) { + WRITE_REG(ar7_wdt->prescale_lock, 0xa5a5); + if ((READ_REG(ar7_wdt->prescale_lock) & 3) == 3) { + WRITE_REG(ar7_wdt->prescale, value); return; } } @@ -119,11 +122,11 @@ static void ar7_wdt_prescale(u32 value) static void ar7_wdt_change(u32 value) { - ar7_wdt->change_lock = 0x6666; - if ((ar7_wdt->change_lock & 3) == 1) { - ar7_wdt->change_lock = 0xbbbb; - if ((ar7_wdt->change_lock & 3) == 3) { - ar7_wdt->change = value; + WRITE_REG(ar7_wdt->change_lock, 0x6666); + if ((READ_REG(ar7_wdt->change_lock) & 3) == 1) { + WRITE_REG(ar7_wdt->change_lock, 0xbbbb); + if ((READ_REG(ar7_wdt->change_lock) & 3) == 3) { + WRITE_REG(ar7_wdt->change, value); return; } } @@ -132,13 +135,13 @@ static void ar7_wdt_change(u32 value) static void ar7_wdt_disable(u32 value) { - ar7_wdt->disable_lock = 0x7777; - if ((ar7_wdt->disable_lock & 3) == 1) { - ar7_wdt->disable_lock = 0xcccc; - if ((ar7_wdt->disable_lock & 3) == 2) { - ar7_wdt->disable_lock = 0xdddd; - if ((ar7_wdt->disable_lock & 3) == 3) { - ar7_wdt->disable = value; + WRITE_REG(ar7_wdt->disable_lock, 0x7777); + if ((READ_REG(ar7_wdt->disable_lock) & 3) == 1) { + WRITE_REG(ar7_wdt->disable_lock, 0xcccc); + if ((READ_REG(ar7_wdt->disable_lock) & 3) == 2) { + WRITE_REG(ar7_wdt->disable_lock, 0xdddd); + if ((READ_REG(ar7_wdt->disable_lock) & 3) == 3) { + WRITE_REG(ar7_wdt->disable, value); return; } } |