diff options
| -rw-r--r-- | drivers/char/watchdog/w83627hf_wdt.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/char/watchdog/w83627hf_wdt.c b/drivers/char/watchdog/w83627hf_wdt.c index 337ee42c90dd..b46e7f47d705 100644 --- a/drivers/char/watchdog/w83627hf_wdt.c +++ b/drivers/char/watchdog/w83627hf_wdt.c | |||
| @@ -1,5 +1,8 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * w83627hf WDT driver | 2 | * w83627hf/thf WDT driver |
| 3 | * | ||
| 4 | * (c) Copyright 2007 Vlad Drukker <vlad@storewiz.com> | ||
| 5 | * added support for W83627THF. | ||
| 3 | * | 6 | * |
| 4 | * (c) Copyright 2003 Pádraig Brady <P@draigBrady.com> | 7 | * (c) Copyright 2003 Pádraig Brady <P@draigBrady.com> |
| 5 | * | 8 | * |
| @@ -39,7 +42,7 @@ | |||
| 39 | #include <asm/uaccess.h> | 42 | #include <asm/uaccess.h> |
| 40 | #include <asm/system.h> | 43 | #include <asm/system.h> |
| 41 | 44 | ||
| 42 | #define WATCHDOG_NAME "w83627hf WDT" | 45 | #define WATCHDOG_NAME "w83627hf/thf WDT" |
| 43 | #define PFX WATCHDOG_NAME ": " | 46 | #define PFX WATCHDOG_NAME ": " |
| 44 | #define WATCHDOG_TIMEOUT 60 /* 60 sec default timeout */ | 47 | #define WATCHDOG_TIMEOUT 60 /* 60 sec default timeout */ |
| 45 | 48 | ||
| @@ -50,7 +53,7 @@ static spinlock_t io_lock; | |||
| 50 | /* You must set this - there is no sane way to probe for this board. */ | 53 | /* You must set this - there is no sane way to probe for this board. */ |
| 51 | static int wdt_io = 0x2E; | 54 | static int wdt_io = 0x2E; |
| 52 | module_param(wdt_io, int, 0); | 55 | module_param(wdt_io, int, 0); |
| 53 | MODULE_PARM_DESC(wdt_io, "w83627hf WDT io port (default 0x2E)"); | 56 | MODULE_PARM_DESC(wdt_io, "w83627hf/thf WDT io port (default 0x2E)"); |
| 54 | 57 | ||
| 55 | static int timeout = WATCHDOG_TIMEOUT; /* in seconds */ | 58 | static int timeout = WATCHDOG_TIMEOUT; /* in seconds */ |
| 56 | module_param(timeout, int, 0); | 59 | module_param(timeout, int, 0); |
| @@ -71,9 +74,19 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" _ | |||
| 71 | static void | 74 | static void |
| 72 | w83627hf_select_wd_register(void) | 75 | w83627hf_select_wd_register(void) |
| 73 | { | 76 | { |
| 77 | unsigned char c; | ||
| 74 | outb_p(0x87, WDT_EFER); /* Enter extended function mode */ | 78 | outb_p(0x87, WDT_EFER); /* Enter extended function mode */ |
| 75 | outb_p(0x87, WDT_EFER); /* Again according to manual */ | 79 | outb_p(0x87, WDT_EFER); /* Again according to manual */ |
| 76 | 80 | ||
| 81 | outb(0x20, WDT_EFER); /* check chip version */ | ||
| 82 | c = inb(WDT_EFDR); | ||
| 83 | if (c == 0x82) { /* W83627THF */ | ||
| 84 | outb_p(0x2b, WDT_EFER); /* select GPIO3 */ | ||
| 85 | c = ((inb_p(WDT_EFDR) & 0xf7) | 0x04); /* select WDT0 */ | ||
| 86 | outb_p(0x2b, WDT_EFER); | ||
| 87 | outb_p(c, WDT_EFDR); /* set GPIO3 to WDT0 */ | ||
| 88 | } | ||
| 89 | |||
| 77 | outb_p(0x07, WDT_EFER); /* point to logical device number reg */ | 90 | outb_p(0x07, WDT_EFER); /* point to logical device number reg */ |
| 78 | outb_p(0x08, WDT_EFDR); /* select logical device 8 (GPIO2) */ | 91 | outb_p(0x08, WDT_EFDR); /* select logical device 8 (GPIO2) */ |
| 79 | outb_p(0x30, WDT_EFER); /* select CR30 */ | 92 | outb_p(0x30, WDT_EFER); /* select CR30 */ |
| @@ -311,7 +324,7 @@ wdt_init(void) | |||
| 311 | 324 | ||
| 312 | spin_lock_init(&io_lock); | 325 | spin_lock_init(&io_lock); |
| 313 | 326 | ||
| 314 | printk(KERN_INFO "WDT driver for the Winbond(TM) W83627HF Super I/O chip initialising.\n"); | 327 | printk(KERN_INFO "WDT driver for the Winbond(TM) W83627HF/THF Super I/O chip initialising.\n"); |
| 315 | 328 | ||
| 316 | if (wdt_set_heartbeat(timeout)) { | 329 | if (wdt_set_heartbeat(timeout)) { |
| 317 | wdt_set_heartbeat(WATCHDOG_TIMEOUT); | 330 | wdt_set_heartbeat(WATCHDOG_TIMEOUT); |
| @@ -367,5 +380,5 @@ module_exit(wdt_exit); | |||
| 367 | 380 | ||
| 368 | MODULE_LICENSE("GPL"); | 381 | MODULE_LICENSE("GPL"); |
| 369 | MODULE_AUTHOR("Pádraig Brady <P@draigBrady.com>"); | 382 | MODULE_AUTHOR("Pádraig Brady <P@draigBrady.com>"); |
| 370 | MODULE_DESCRIPTION("w83627hf WDT driver"); | 383 | MODULE_DESCRIPTION("w83627hf/thf WDT driver"); |
| 371 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); | 384 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); |
