diff options
author | Guenter Roeck <linux@roeck-us.net> | 2013-08-17 16:58:40 -0400 |
---|---|---|
committer | Wim Van Sebroeck <wim@iguana.be> | 2013-11-18 15:34:08 -0500 |
commit | 8f526389599fc543b204c12a36de8345eb298085 (patch) | |
tree | 9a95ff30277a2afc4382dd49d103ee55d08132ac | |
parent | 30a83695aa2ed3ffb1445d6daef1e620c3ca4e6d (diff) |
watchdog: w83627hf: Enable watchdog only once
It is unnecessary to enable the logical device and WDT0 each time
the watchdog is accessed. Do it only once during initialization.
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
-rw-r--r-- | drivers/watchdog/w83627hf_wdt.c | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/drivers/watchdog/w83627hf_wdt.c b/drivers/watchdog/w83627hf_wdt.c index ab5ec6d84b16..910d43736821 100644 --- a/drivers/watchdog/w83627hf_wdt.c +++ b/drivers/watchdog/w83627hf_wdt.c | |||
@@ -72,28 +72,10 @@ MODULE_PARM_DESC(nowayout, | |||
72 | 72 | ||
73 | static void w83627hf_select_wd_register(void) | 73 | static void w83627hf_select_wd_register(void) |
74 | { | 74 | { |
75 | unsigned char c; | ||
76 | outb_p(0x87, WDT_EFER); /* Enter extended function mode */ | 75 | outb_p(0x87, WDT_EFER); /* Enter extended function mode */ |
77 | outb_p(0x87, WDT_EFER); /* Again according to manual */ | 76 | outb_p(0x87, WDT_EFER); /* Again according to manual */ |
78 | |||
79 | outb(0x20, WDT_EFER); /* check chip version */ | ||
80 | c = inb(WDT_EFDR); | ||
81 | if (c == 0x82) { /* W83627THF */ | ||
82 | outb_p(0x2b, WDT_EFER); /* select GPIO3 */ | ||
83 | c = ((inb_p(WDT_EFDR) & 0xf7) | 0x04); /* select WDT0 */ | ||
84 | outb_p(0x2b, WDT_EFER); | ||
85 | outb_p(c, WDT_EFDR); /* set GPIO3 to WDT0 */ | ||
86 | } else if (c == 0x88 || c == 0xa0) { /* W83627EHF / W83627DHG */ | ||
87 | outb_p(0x2d, WDT_EFER); /* select GPIO5 */ | ||
88 | c = inb_p(WDT_EFDR) & ~0x01; /* PIN77 -> WDT0# */ | ||
89 | outb_p(0x2d, WDT_EFER); | ||
90 | outb_p(c, WDT_EFDR); /* set GPIO5 to WDT0 */ | ||
91 | } | ||
92 | |||
93 | outb_p(0x07, WDT_EFER); /* point to logical device number reg */ | 77 | outb_p(0x07, WDT_EFER); /* point to logical device number reg */ |
94 | outb_p(0x08, WDT_EFDR); /* select logical device 8 (GPIO2) */ | 78 | outb_p(0x08, WDT_EFDR); /* select logical device 8 (GPIO2) */ |
95 | outb_p(0x30, WDT_EFER); /* select CR30 */ | ||
96 | outb_p(0x01, WDT_EFDR); /* set bit 0 to activate GPIO2 */ | ||
97 | } | 79 | } |
98 | 80 | ||
99 | static void w83627hf_unselect_wd_register(void) | 81 | static void w83627hf_unselect_wd_register(void) |
@@ -110,6 +92,23 @@ static void w83627hf_init(struct watchdog_device *wdog) | |||
110 | 92 | ||
111 | w83627hf_select_wd_register(); | 93 | w83627hf_select_wd_register(); |
112 | 94 | ||
95 | outb(0x20, WDT_EFER); /* check chip version */ | ||
96 | t = inb(WDT_EFDR); | ||
97 | if (t == 0x82) { /* W83627THF */ | ||
98 | outb_p(0x2b, WDT_EFER); /* select GPIO3 */ | ||
99 | t = ((inb_p(WDT_EFDR) & 0xf7) | 0x04); /* select WDT0 */ | ||
100 | outb_p(0x2b, WDT_EFER); | ||
101 | outb_p(t, WDT_EFDR); /* set GPIO3 to WDT0 */ | ||
102 | } else if (t == 0x88 || t == 0xa0) { /* W83627EHF / W83627DHG */ | ||
103 | outb_p(0x2d, WDT_EFER); /* select GPIO5 */ | ||
104 | t = inb_p(WDT_EFDR) & ~0x01; /* PIN77 -> WDT0# */ | ||
105 | outb_p(0x2d, WDT_EFER); | ||
106 | outb_p(t, WDT_EFDR); /* set GPIO5 to WDT0 */ | ||
107 | } | ||
108 | |||
109 | outb_p(0x30, WDT_EFER); /* select CR30 */ | ||
110 | outb_p(0x01, WDT_EFDR); /* set bit 0 to activate GPIO2 */ | ||
111 | |||
113 | outb_p(0xF6, WDT_EFER); /* Select CRF6 */ | 112 | outb_p(0xF6, WDT_EFER); /* Select CRF6 */ |
114 | t = inb_p(WDT_EFDR); /* read CRF6 */ | 113 | t = inb_p(WDT_EFDR); /* read CRF6 */ |
115 | if (t != 0) { | 114 | if (t != 0) { |