diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/char/watchdog/mixcomwd.c | 35 |
1 files changed, 11 insertions, 24 deletions
diff --git a/drivers/char/watchdog/mixcomwd.c b/drivers/char/watchdog/mixcomwd.c index b614a5f6e331..17c29cb78d09 100644 --- a/drivers/char/watchdog/mixcomwd.c +++ b/drivers/char/watchdog/mixcomwd.c | |||
@@ -217,23 +217,7 @@ static struct miscdevice mixcomwd_miscdev= | |||
217 | .fops = &mixcomwd_fops, | 217 | .fops = &mixcomwd_fops, |
218 | }; | 218 | }; |
219 | 219 | ||
220 | static int __init mixcomwd_checkcard(int port) | 220 | static int __init checkcard(int port, int card_id) |
221 | { | ||
222 | int id; | ||
223 | |||
224 | if (!request_region(port, 1, "MixCOM watchdog")) { | ||
225 | return 0; | ||
226 | } | ||
227 | |||
228 | id=inb_p(port) & 0x3f; | ||
229 | if(id!=MIXCOM_ID) { | ||
230 | release_region(port, 1); | ||
231 | return 0; | ||
232 | } | ||
233 | return port; | ||
234 | } | ||
235 | |||
236 | static int __init flashcom_checkcard(int port) | ||
237 | { | 221 | { |
238 | int id; | 222 | int id; |
239 | 223 | ||
@@ -242,12 +226,15 @@ static int __init flashcom_checkcard(int port) | |||
242 | } | 226 | } |
243 | 227 | ||
244 | id=inb_p(port); | 228 | id=inb_p(port); |
245 | if(id!=FLASHCOM_ID) { | 229 | if (card_id==MIXCOM_ID) |
230 | id &= 0x3f; | ||
231 | |||
232 | if (id!=card_id) { | ||
246 | release_region(port, 1); | 233 | release_region(port, 1); |
247 | return 0; | 234 | return 0; |
248 | } | 235 | } |
249 | return port; | 236 | return 1; |
250 | } | 237 | } |
251 | 238 | ||
252 | static int __init mixcomwd_init(void) | 239 | static int __init mixcomwd_init(void) |
253 | { | 240 | { |
@@ -256,17 +243,17 @@ static int __init mixcomwd_init(void) | |||
256 | int found=0; | 243 | int found=0; |
257 | 244 | ||
258 | for (i = 0; !found && mixcomwd_ioports[i] != 0; i++) { | 245 | for (i = 0; !found && mixcomwd_ioports[i] != 0; i++) { |
259 | watchdog_port = mixcomwd_checkcard(mixcomwd_ioports[i]); | 246 | if (checkcard(mixcomwd_ioports[i], MIXCOM_ID)) { |
260 | if (watchdog_port) { | ||
261 | found = 1; | 247 | found = 1; |
248 | watchdog_port = mixcomwd_ioports[i]; | ||
262 | } | 249 | } |
263 | } | 250 | } |
264 | 251 | ||
265 | /* The FlashCOM card can be set up at 0x304 -> 0x37c, in 0x8 jumps */ | 252 | /* The FlashCOM card can be set up at 0x304 -> 0x37c, in 0x8 jumps */ |
266 | for (i = 0x304; !found && i < 0x380; i+=0x8) { | 253 | for (i = 0x304; !found && i < 0x380; i+=0x8) { |
267 | watchdog_port = flashcom_checkcard(i); | 254 | if (checkcard(i, FLASHCOM_ID)) { |
268 | if (watchdog_port) { | ||
269 | found = 1; | 255 | found = 1; |
256 | watchdog_port = i; | ||
270 | } | 257 | } |
271 | } | 258 | } |
272 | 259 | ||