diff options
34 files changed, 344 insertions, 236 deletions
diff --git a/drivers/watchdog/acquirewdt.c b/drivers/watchdog/acquirewdt.c index 3e57aa4d643a..4d18c874d963 100644 --- a/drivers/watchdog/acquirewdt.c +++ b/drivers/watchdog/acquirewdt.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Acquire Single Board Computer Watchdog Timer driver | 2 | * Acquire Single Board Computer Watchdog Timer driver |
| 3 | * | 3 | * |
| 4 | * Based on wdt.c. Original copyright messages: | 4 | * Based on wdt.c. Original copyright messages: |
| 5 | * | 5 | * |
| 6 | * (c) Copyright 1996 Alan Cox <alan@lxorguk.ukuu.org.uk>, | 6 | * (c) Copyright 1996 Alan Cox <alan@lxorguk.ukuu.org.uk>, |
| 7 | * All Rights Reserved. | 7 | * All Rights Reserved. |
| @@ -17,9 +17,9 @@ | |||
| 17 | * | 17 | * |
| 18 | * (c) Copyright 1995 Alan Cox <alan@lxorguk.ukuu.org.uk> | 18 | * (c) Copyright 1995 Alan Cox <alan@lxorguk.ukuu.org.uk> |
| 19 | * | 19 | * |
| 20 | * 14-Dec-2001 Matt Domsch <Matt_Domsch@dell.com> | 20 | * 14-Dec-2001 Matt Domsch <Matt_Domsch@dell.com> |
| 21 | * Added nowayout module option to override CONFIG_WATCHDOG_NOWAYOUT | 21 | * Added nowayout module option to override CONFIG_WATCHDOG_NOWAYOUT |
| 22 | * Can't add timeout - driver doesn't allow changing value | 22 | * Can't add timeout - driver doesn't allow changing value |
| 23 | */ | 23 | */ |
| 24 | 24 | ||
| 25 | /* | 25 | /* |
diff --git a/drivers/watchdog/advantechwdt.c b/drivers/watchdog/advantechwdt.c index a1d7856ea6e0..824d076a5cd6 100644 --- a/drivers/watchdog/advantechwdt.c +++ b/drivers/watchdog/advantechwdt.c | |||
| @@ -138,7 +138,9 @@ static long advwdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 138 | void __user *argp = (void __user *)arg; | 138 | void __user *argp = (void __user *)arg; |
| 139 | int __user *p = argp; | 139 | int __user *p = argp; |
| 140 | static struct watchdog_info ident = { | 140 | static struct watchdog_info ident = { |
| 141 | .options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT | WDIOF_MAGICCLOSE, | 141 | .options = WDIOF_KEEPALIVEPING | |
| 142 | WDIOF_SETTIMEOUT | | ||
| 143 | WDIOF_MAGICCLOSE, | ||
| 142 | .firmware_version = 1, | 144 | .firmware_version = 1, |
| 143 | .identity = WATCHDOG_NAME, | 145 | .identity = WATCHDOG_NAME, |
| 144 | }; | 146 | }; |
| @@ -259,7 +261,8 @@ static int __devinit advwdt_probe(struct platform_device *dev) | |||
| 259 | goto unreg_stop; | 261 | goto unreg_stop; |
| 260 | } | 262 | } |
| 261 | 263 | ||
| 262 | /* Check that the heartbeat value is within it's range ; if not reset to the default */ | 264 | /* Check that the heartbeat value is within it's range ; |
| 265 | * if not reset to the default */ | ||
| 263 | if (advwdt_set_heartbeat(timeout)) { | 266 | if (advwdt_set_heartbeat(timeout)) { |
| 264 | advwdt_set_heartbeat(WATCHDOG_TIMEOUT); | 267 | advwdt_set_heartbeat(WATCHDOG_TIMEOUT); |
| 265 | printk(KERN_INFO PFX | 268 | printk(KERN_INFO PFX |
diff --git a/drivers/watchdog/alim1535_wdt.c b/drivers/watchdog/alim1535_wdt.c index 2a7690ecf97d..937a80fb61e1 100644 --- a/drivers/watchdog/alim1535_wdt.c +++ b/drivers/watchdog/alim1535_wdt.c | |||
| @@ -60,7 +60,7 @@ static void ali_start(void) | |||
| 60 | 60 | ||
| 61 | pci_read_config_dword(ali_pci, 0xCC, &val); | 61 | pci_read_config_dword(ali_pci, 0xCC, &val); |
| 62 | val &= ~0x3F; /* Mask count */ | 62 | val &= ~0x3F; /* Mask count */ |
| 63 | val |= (1<<25) | ali_timeout_bits; | 63 | val |= (1 << 25) | ali_timeout_bits; |
| 64 | pci_write_config_dword(ali_pci, 0xCC, val); | 64 | pci_write_config_dword(ali_pci, 0xCC, val); |
| 65 | 65 | ||
| 66 | spin_unlock(&ali_lock); | 66 | spin_unlock(&ali_lock); |
| @@ -79,8 +79,8 @@ static void ali_stop(void) | |||
| 79 | spin_lock(&ali_lock); | 79 | spin_lock(&ali_lock); |
| 80 | 80 | ||
| 81 | pci_read_config_dword(ali_pci, 0xCC, &val); | 81 | pci_read_config_dword(ali_pci, 0xCC, &val); |
| 82 | val &= ~0x3F; /* Mask count to zero (disabled) */ | 82 | val &= ~0x3F; /* Mask count to zero (disabled) */ |
| 83 | val &= ~(1<<25);/* and for safety mask the reset enable */ | 83 | val &= ~(1 << 25); /* and for safety mask the reset enable */ |
| 84 | pci_write_config_dword(ali_pci, 0xCC, val); | 84 | pci_write_config_dword(ali_pci, 0xCC, val); |
| 85 | 85 | ||
| 86 | spin_unlock(&ali_lock); | 86 | spin_unlock(&ali_lock); |
| @@ -89,7 +89,7 @@ static void ali_stop(void) | |||
| 89 | /* | 89 | /* |
| 90 | * ali_keepalive - send a keepalive to the watchdog | 90 | * ali_keepalive - send a keepalive to the watchdog |
| 91 | * | 91 | * |
| 92 | * Send a keepalive to the timer (actually we restart the timer). | 92 | * Send a keepalive to the timer (actually we restart the timer). |
| 93 | */ | 93 | */ |
| 94 | 94 | ||
| 95 | static void ali_keepalive(void) | 95 | static void ali_keepalive(void) |
| @@ -109,11 +109,11 @@ static int ali_settimer(int t) | |||
| 109 | if (t < 0) | 109 | if (t < 0) |
| 110 | return -EINVAL; | 110 | return -EINVAL; |
| 111 | else if (t < 60) | 111 | else if (t < 60) |
| 112 | ali_timeout_bits = t|(1<<6); | 112 | ali_timeout_bits = t|(1 << 6); |
| 113 | else if (t < 3600) | 113 | else if (t < 3600) |
| 114 | ali_timeout_bits = (t/60)|(1<<7); | 114 | ali_timeout_bits = (t / 60)|(1 << 7); |
| 115 | else if (t < 18000) | 115 | else if (t < 18000) |
| 116 | ali_timeout_bits = (t/300)|(1<<6)|(1<<7); | 116 | ali_timeout_bits = (t / 300)|(1 << 6)|(1 << 7); |
| 117 | else | 117 | else |
| 118 | return -EINVAL; | 118 | return -EINVAL; |
| 119 | 119 | ||
| @@ -138,7 +138,7 @@ static int ali_settimer(int t) | |||
| 138 | */ | 138 | */ |
| 139 | 139 | ||
| 140 | static ssize_t ali_write(struct file *file, const char __user *data, | 140 | static ssize_t ali_write(struct file *file, const char __user *data, |
| 141 | size_t len, loff_t *ppos) | 141 | size_t len, loff_t *ppos) |
| 142 | { | 142 | { |
| 143 | /* See if we got the magic character 'V' and reload the timer */ | 143 | /* See if we got the magic character 'V' and reload the timer */ |
| 144 | if (len) { | 144 | if (len) { |
| @@ -348,9 +348,9 @@ static int __init ali_find_watchdog(void) | |||
| 348 | /* Timer bits */ | 348 | /* Timer bits */ |
| 349 | wdog &= ~0x3F; | 349 | wdog &= ~0x3F; |
| 350 | /* Issued events */ | 350 | /* Issued events */ |
| 351 | wdog &= ~((1<<27)|(1<<26)|(1<<25)|(1<<24)); | 351 | wdog &= ~((1 << 27)|(1 << 26)|(1 << 25)|(1 << 24)); |
| 352 | /* No monitor bits */ | 352 | /* No monitor bits */ |
| 353 | wdog &= ~((1<<16)|(1<<13)|(1<<12)|(1<<11)|(1<<10)|(1<<9)); | 353 | wdog &= ~((1 << 16)|(1 << 13)|(1 << 12)|(1 << 11)|(1 << 10)|(1 << 9)); |
| 354 | 354 | ||
| 355 | pci_write_config_dword(pdev, 0xCC, wdog); | 355 | pci_write_config_dword(pdev, 0xCC, wdog); |
| 356 | 356 | ||
diff --git a/drivers/watchdog/alim7101_wdt.c b/drivers/watchdog/alim7101_wdt.c index a045ef869439..90f98df5f106 100644 --- a/drivers/watchdog/alim7101_wdt.c +++ b/drivers/watchdog/alim7101_wdt.c | |||
| @@ -355,7 +355,8 @@ static int __init alim7101_wdt_init(void) | |||
| 355 | alim7101_pmu = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M7101, | 355 | alim7101_pmu = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M7101, |
| 356 | NULL); | 356 | NULL); |
| 357 | if (!alim7101_pmu) { | 357 | if (!alim7101_pmu) { |
| 358 | printk(KERN_INFO PFX "ALi M7101 PMU not present - WDT not set\n"); | 358 | printk(KERN_INFO PFX |
| 359 | "ALi M7101 PMU not present - WDT not set\n"); | ||
| 359 | return -EBUSY; | 360 | return -EBUSY; |
| 360 | } | 361 | } |
| 361 | 362 | ||
| @@ -399,7 +400,8 @@ static int __init alim7101_wdt_init(void) | |||
| 399 | 400 | ||
| 400 | rc = misc_register(&wdt_miscdev); | 401 | rc = misc_register(&wdt_miscdev); |
| 401 | if (rc) { | 402 | if (rc) { |
| 402 | printk(KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", | 403 | printk(KERN_ERR PFX |
| 404 | "cannot register miscdev on minor=%d (err=%d)\n", | ||
| 403 | wdt_miscdev.minor, rc); | 405 | wdt_miscdev.minor, rc); |
| 404 | goto err_out_reboot; | 406 | goto err_out_reboot; |
| 405 | } | 407 | } |
diff --git a/drivers/watchdog/at91sam9_wdt.c b/drivers/watchdog/at91sam9_wdt.c index a56ac84381b1..435b0573fb0a 100644 --- a/drivers/watchdog/at91sam9_wdt.c +++ b/drivers/watchdog/at91sam9_wdt.c | |||
| @@ -201,7 +201,7 @@ static long at91_wdt_ioctl(struct file *file, | |||
| 201 | * Pat the watchdog whenever device is written to. | 201 | * Pat the watchdog whenever device is written to. |
| 202 | */ | 202 | */ |
| 203 | static ssize_t at91_wdt_write(struct file *file, const char *data, size_t len, | 203 | static ssize_t at91_wdt_write(struct file *file, const char *data, size_t len, |
| 204 | loff_t *ppos) | 204 | loff_t *ppos) |
| 205 | { | 205 | { |
| 206 | if (!len) | 206 | if (!len) |
| 207 | return 0; | 207 | return 0; |
diff --git a/drivers/watchdog/eurotechwdt.c b/drivers/watchdog/eurotechwdt.c index a171fc6ae1cb..9add3541fb42 100644 --- a/drivers/watchdog/eurotechwdt.c +++ b/drivers/watchdog/eurotechwdt.c | |||
| @@ -8,19 +8,19 @@ | |||
| 8 | * Based on wdt.c. | 8 | * Based on wdt.c. |
| 9 | * Original copyright messages: | 9 | * Original copyright messages: |
| 10 | * | 10 | * |
| 11 | * (c) Copyright 1996-1997 Alan Cox <alan@lxorguk.ukuu.org.uk>, | 11 | * (c) Copyright 1996-1997 Alan Cox <alan@lxorguk.ukuu.org.uk>, |
| 12 | * All Rights Reserved. | 12 | * All Rights Reserved. |
| 13 | * | 13 | * |
| 14 | * This program is free software; you can redistribute it and/or | 14 | * This program is free software; you can redistribute it and/or |
| 15 | * modify it under the terms of the GNU General Public License | 15 | * modify it under the terms of the GNU General Public License |
| 16 | * as published by the Free Software Foundation; either version | 16 | * as published by the Free Software Foundation; either version |
| 17 | * 2 of the License, or (at your option) any later version. | 17 | * 2 of the License, or (at your option) any later version. |
| 18 | * | 18 | * |
| 19 | * Neither Alan Cox nor CymruNet Ltd. admit liability nor provide | 19 | * Neither Alan Cox nor CymruNet Ltd. admit liability nor provide |
| 20 | * warranty for any of this software. This material is provided | 20 | * warranty for any of this software. This material is provided |
| 21 | * "AS-IS" and at no charge. | 21 | * "AS-IS" and at no charge. |
| 22 | * | 22 | * |
| 23 | * (c) Copyright 1995 Alan Cox <alan@lxorguk.ukuu.org.uk>* | 23 | * (c) Copyright 1995 Alan Cox <alan@lxorguk.ukuu.org.uk>* |
| 24 | */ | 24 | */ |
| 25 | 25 | ||
| 26 | /* Changelog: | 26 | /* Changelog: |
| @@ -37,7 +37,7 @@ | |||
| 37 | * add expect_close support | 37 | * add expect_close support |
| 38 | * | 38 | * |
| 39 | * 2002.05.30 - Joel Becker <joel.becker@oracle.com> | 39 | * 2002.05.30 - Joel Becker <joel.becker@oracle.com> |
| 40 | * Added Matt Domsch's nowayout module option. | 40 | * Added Matt Domsch's nowayout module option. |
| 41 | */ | 41 | */ |
| 42 | 42 | ||
| 43 | /* | 43 | /* |
| @@ -151,7 +151,7 @@ static void eurwdt_activate_timer(void) | |||
| 151 | if (irq == 0) | 151 | if (irq == 0) |
| 152 | printk(KERN_INFO ": interrupt disabled\n"); | 152 | printk(KERN_INFO ": interrupt disabled\n"); |
| 153 | 153 | ||
| 154 | eurwdt_write_reg(WDT_TIMER_CFG, irq<<4); | 154 | eurwdt_write_reg(WDT_TIMER_CFG, irq << 4); |
| 155 | 155 | ||
| 156 | eurwdt_write_reg(WDT_UNIT_SEL, WDT_UNIT_SECS); /* we use seconds */ | 156 | eurwdt_write_reg(WDT_UNIT_SEL, WDT_UNIT_SECS); /* we use seconds */ |
| 157 | eurwdt_set_timeout(0); /* the default timeout */ | 157 | eurwdt_set_timeout(0); /* the default timeout */ |
diff --git a/drivers/watchdog/geodewdt.c b/drivers/watchdog/geodewdt.c index 6799a6de66fe..9acf0015a1e7 100644 --- a/drivers/watchdog/geodewdt.c +++ b/drivers/watchdog/geodewdt.c | |||
| @@ -34,11 +34,15 @@ | |||
| 34 | 34 | ||
| 35 | static int timeout = WATCHDOG_TIMEOUT; | 35 | static int timeout = WATCHDOG_TIMEOUT; |
| 36 | module_param(timeout, int, 0); | 36 | module_param(timeout, int, 0); |
| 37 | MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds. 1<= timeout <=131, default=" __MODULE_STRING(WATCHDOG_TIMEOUT) "."); | 37 | MODULE_PARM_DESC(timeout, |
| 38 | "Watchdog timeout in seconds. 1<= timeout <=131, default=" | ||
| 39 | __MODULE_STRING(WATCHDOG_TIMEOUT) "."); | ||
| 38 | 40 | ||
| 39 | static int nowayout = WATCHDOG_NOWAYOUT; | 41 | static int nowayout = WATCHDOG_NOWAYOUT; |
| 40 | module_param(nowayout, int, 0); | 42 | module_param(nowayout, int, 0); |
| 41 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | 43 | MODULE_PARM_DESC(nowayout, |
| 44 | "Watchdog cannot be stopped once started (default=" | ||
| 45 | __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | ||
| 42 | 46 | ||
| 43 | static struct platform_device *geodewdt_platform_device; | 47 | static struct platform_device *geodewdt_platform_device; |
| 44 | static unsigned long wdt_flags; | 48 | static unsigned long wdt_flags; |
| @@ -269,7 +273,8 @@ static int __init geodewdt_init(void) | |||
| 269 | if (ret) | 273 | if (ret) |
| 270 | return ret; | 274 | return ret; |
| 271 | 275 | ||
| 272 | geodewdt_platform_device = platform_device_register_simple(DRV_NAME, -1, NULL, 0); | 276 | geodewdt_platform_device = platform_device_register_simple(DRV_NAME, |
| 277 | -1, NULL, 0); | ||
| 273 | if (IS_ERR(geodewdt_platform_device)) { | 278 | if (IS_ERR(geodewdt_platform_device)) { |
| 274 | ret = PTR_ERR(geodewdt_platform_device); | 279 | ret = PTR_ERR(geodewdt_platform_device); |
| 275 | goto err; | 280 | goto err; |
diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c index 7cf32ad96fd1..6cf155d6b350 100644 --- a/drivers/watchdog/hpwdt.c +++ b/drivers/watchdog/hpwdt.c | |||
| @@ -137,7 +137,8 @@ static struct pci_device_id hpwdt_devices[] = { | |||
| 137 | }; | 137 | }; |
| 138 | MODULE_DEVICE_TABLE(pci, hpwdt_devices); | 138 | MODULE_DEVICE_TABLE(pci, hpwdt_devices); |
| 139 | 139 | ||
| 140 | extern asmlinkage void asminline_call(struct cmn_registers *pi86Regs, unsigned long *pRomEntry); | 140 | extern asmlinkage void asminline_call(struct cmn_registers *pi86Regs, |
| 141 | unsigned long *pRomEntry); | ||
| 141 | 142 | ||
| 142 | #ifndef CONFIG_X86_64 | 143 | #ifndef CONFIG_X86_64 |
| 143 | /* --32 Bit Bios------------------------------------------------------------ */ | 144 | /* --32 Bit Bios------------------------------------------------------------ */ |
diff --git a/drivers/watchdog/i6300esb.c b/drivers/watchdog/i6300esb.c index 74f951c18b90..97ac6bf42224 100644 --- a/drivers/watchdog/i6300esb.c +++ b/drivers/watchdog/i6300esb.c | |||
| @@ -240,7 +240,8 @@ static ssize_t esb_write(struct file *file, const char __user *data, | |||
| 240 | * five months ago... */ | 240 | * five months ago... */ |
| 241 | esb_expect_close = 0; | 241 | esb_expect_close = 0; |
| 242 | 242 | ||
| 243 | /* scan to see whether or not we got the magic character */ | 243 | /* scan to see whether or not we got the |
| 244 | * magic character */ | ||
| 244 | for (i = 0; i != len; i++) { | 245 | for (i = 0; i != len; i++) { |
| 245 | char c; | 246 | char c; |
| 246 | if (get_user(c, data + i)) | 247 | if (get_user(c, data + i)) |
diff --git a/drivers/watchdog/iTCO_vendor_support.c b/drivers/watchdog/iTCO_vendor_support.c index d8264ad0be41..d3c0f6de5523 100644 --- a/drivers/watchdog/iTCO_vendor_support.c +++ b/drivers/watchdog/iTCO_vendor_support.c | |||
| @@ -47,7 +47,8 @@ | |||
| 47 | 47 | ||
| 48 | static int vendorsupport; | 48 | static int vendorsupport; |
| 49 | module_param(vendorsupport, int, 0); | 49 | module_param(vendorsupport, int, 0); |
| 50 | MODULE_PARM_DESC(vendorsupport, "iTCO vendor specific support mode, default=0 (none), 1=SuperMicro Pent3, 2=SuperMicro Pent4+"); | 50 | MODULE_PARM_DESC(vendorsupport, "iTCO vendor specific support mode, default=" |
| 51 | "0 (none), 1=SuperMicro Pent3, 2=SuperMicro Pent4+"); | ||
| 51 | 52 | ||
| 52 | /* | 53 | /* |
| 53 | * Vendor Specific Support | 54 | * Vendor Specific Support |
| @@ -305,7 +306,8 @@ static void __exit iTCO_vendor_exit_module(void) | |||
| 305 | module_init(iTCO_vendor_init_module); | 306 | module_init(iTCO_vendor_init_module); |
| 306 | module_exit(iTCO_vendor_exit_module); | 307 | module_exit(iTCO_vendor_exit_module); |
| 307 | 308 | ||
| 308 | MODULE_AUTHOR("Wim Van Sebroeck <wim@iguana.be>, R. Seretny <lkpatches@paypc.com>"); | 309 | MODULE_AUTHOR("Wim Van Sebroeck <wim@iguana.be>, " |
| 310 | "R. Seretny <lkpatches@paypc.com>"); | ||
| 309 | MODULE_DESCRIPTION("Intel TCO Vendor Specific WatchDog Timer Driver Support"); | 311 | MODULE_DESCRIPTION("Intel TCO Vendor Specific WatchDog Timer Driver Support"); |
| 310 | MODULE_VERSION(DRV_VERSION); | 312 | MODULE_VERSION(DRV_VERSION); |
| 311 | MODULE_LICENSE("GPL"); | 313 | MODULE_LICENSE("GPL"); |
diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c index 352334947ea3..648250b998c4 100644 --- a/drivers/watchdog/iTCO_wdt.c +++ b/drivers/watchdog/iTCO_wdt.c | |||
| @@ -273,7 +273,9 @@ static struct platform_device *iTCO_wdt_platform_device; | |||
| 273 | #define WATCHDOG_HEARTBEAT 30 /* 30 sec default heartbeat */ | 273 | #define WATCHDOG_HEARTBEAT 30 /* 30 sec default heartbeat */ |
| 274 | static int heartbeat = WATCHDOG_HEARTBEAT; /* in seconds */ | 274 | static int heartbeat = WATCHDOG_HEARTBEAT; /* in seconds */ |
| 275 | module_param(heartbeat, int, 0); | 275 | module_param(heartbeat, int, 0); |
| 276 | MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. (2<heartbeat<39 (TCO v1) or 613 (TCO v2), default=" __MODULE_STRING(WATCHDOG_HEARTBEAT) ")"); | 276 | MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. " |
| 277 | "(2<heartbeat<39 (TCO v1) or 613 (TCO v2), default=" | ||
| 278 | __MODULE_STRING(WATCHDOG_HEARTBEAT) ")"); | ||
| 277 | 279 | ||
| 278 | static int nowayout = WATCHDOG_NOWAYOUT; | 280 | static int nowayout = WATCHDOG_NOWAYOUT; |
| 279 | module_param(nowayout, int, 0); | 281 | module_param(nowayout, int, 0); |
| @@ -346,7 +348,8 @@ static int iTCO_wdt_start(void) | |||
| 346 | /* disable chipset's NO_REBOOT bit */ | 348 | /* disable chipset's NO_REBOOT bit */ |
| 347 | if (iTCO_wdt_unset_NO_REBOOT_bit()) { | 349 | if (iTCO_wdt_unset_NO_REBOOT_bit()) { |
| 348 | spin_unlock(&iTCO_wdt_private.io_lock); | 350 | spin_unlock(&iTCO_wdt_private.io_lock); |
| 349 | printk(KERN_ERR PFX "failed to reset NO_REBOOT flag, reboot disabled by hardware\n"); | 351 | printk(KERN_ERR PFX "failed to reset NO_REBOOT flag, " |
| 352 | "reboot disabled by hardware\n"); | ||
| 350 | return -EIO; | 353 | return -EIO; |
| 351 | } | 354 | } |
| 352 | 355 | ||
| @@ -669,7 +672,8 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev, | |||
| 669 | 672 | ||
| 670 | /* Check chipset's NO_REBOOT bit */ | 673 | /* Check chipset's NO_REBOOT bit */ |
| 671 | if (iTCO_wdt_unset_NO_REBOOT_bit() && iTCO_vendor_check_noreboot_on()) { | 674 | if (iTCO_wdt_unset_NO_REBOOT_bit() && iTCO_vendor_check_noreboot_on()) { |
| 672 | printk(KERN_ERR PFX "failed to reset NO_REBOOT flag, reboot disabled by hardware\n"); | 675 | printk(KERN_ERR PFX "failed to reset NO_REBOOT flag, " |
| 676 | "reboot disabled by hardware\n"); | ||
| 673 | ret = -ENODEV; /* Cannot reset NO_REBOOT bit */ | 677 | ret = -ENODEV; /* Cannot reset NO_REBOOT bit */ |
| 674 | goto out; | 678 | goto out; |
| 675 | } | 679 | } |
| @@ -716,8 +720,9 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev, | |||
| 716 | if not reset to the default */ | 720 | if not reset to the default */ |
| 717 | if (iTCO_wdt_set_heartbeat(heartbeat)) { | 721 | if (iTCO_wdt_set_heartbeat(heartbeat)) { |
| 718 | iTCO_wdt_set_heartbeat(WATCHDOG_HEARTBEAT); | 722 | iTCO_wdt_set_heartbeat(WATCHDOG_HEARTBEAT); |
| 719 | printk(KERN_INFO PFX "heartbeat value must be 2 < heartbeat < 39 (TCO v1) or 613 (TCO v2), using %d\n", | 723 | printk(KERN_INFO PFX |
| 720 | heartbeat); | 724 | "heartbeat value must be 2 < heartbeat < 39 (TCO v1) " |
| 725 | "or 613 (TCO v2), using %d\n", heartbeat); | ||
| 721 | } | 726 | } |
| 722 | 727 | ||
| 723 | ret = misc_register(&iTCO_wdt_miscdev); | 728 | ret = misc_register(&iTCO_wdt_miscdev); |
diff --git a/drivers/watchdog/it87_wdt.c b/drivers/watchdog/it87_wdt.c index afb8af397a9f..cc133c531d08 100644 --- a/drivers/watchdog/it87_wdt.c +++ b/drivers/watchdog/it87_wdt.c | |||
| @@ -188,8 +188,8 @@ static inline int superio_inb(int reg) | |||
| 188 | 188 | ||
| 189 | static inline void superio_outb(int val, int reg) | 189 | static inline void superio_outb(int val, int reg) |
| 190 | { | 190 | { |
| 191 | outb(reg, REG); | 191 | outb(reg, REG); |
| 192 | outb(val, VAL); | 192 | outb(val, VAL); |
| 193 | } | 193 | } |
| 194 | 194 | ||
| 195 | static inline int superio_inw(int reg) | 195 | static inline int superio_inw(int reg) |
| @@ -204,10 +204,10 @@ static inline int superio_inw(int reg) | |||
| 204 | 204 | ||
| 205 | static inline void superio_outw(int val, int reg) | 205 | static inline void superio_outw(int val, int reg) |
| 206 | { | 206 | { |
| 207 | outb(reg++, REG); | 207 | outb(reg++, REG); |
| 208 | outb(val >> 8, VAL); | 208 | outb(val >> 8, VAL); |
| 209 | outb(reg, REG); | 209 | outb(reg, REG); |
| 210 | outb(val, VAL); | 210 | outb(val, VAL); |
| 211 | } | 211 | } |
| 212 | 212 | ||
| 213 | /* watchdog timer handling */ | 213 | /* watchdog timer handling */ |
diff --git a/drivers/watchdog/mpc5200_wdt.c b/drivers/watchdog/mpc5200_wdt.c index db91892558f2..465fe36adad4 100644 --- a/drivers/watchdog/mpc5200_wdt.c +++ b/drivers/watchdog/mpc5200_wdt.c | |||
| @@ -9,8 +9,8 @@ | |||
| 9 | #include <asm/mpc52xx.h> | 9 | #include <asm/mpc52xx.h> |
| 10 | 10 | ||
| 11 | 11 | ||
| 12 | #define GPT_MODE_WDT (1<<15) | 12 | #define GPT_MODE_WDT (1 << 15) |
| 13 | #define GPT_MODE_CE (1<<12) | 13 | #define GPT_MODE_CE (1 << 12) |
| 14 | #define GPT_MODE_MS_TIMER (0x4) | 14 | #define GPT_MODE_MS_TIMER (0x4) |
| 15 | 15 | ||
| 16 | 16 | ||
diff --git a/drivers/watchdog/mpcore_wdt.c b/drivers/watchdog/mpcore_wdt.c index 1130ad697ce2..1512ab8b175b 100644 --- a/drivers/watchdog/mpcore_wdt.c +++ b/drivers/watchdog/mpcore_wdt.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | * | 5 | * |
| 6 | * Based on the SoftDog driver: | 6 | * Based on the SoftDog driver: |
| 7 | * (c) Copyright 1996 Alan Cox <alan@lxorguk.ukuu.org.uk>, | 7 | * (c) Copyright 1996 Alan Cox <alan@lxorguk.ukuu.org.uk>, |
| 8 | * All Rights Reserved. | 8 | * All Rights Reserved. |
| 9 | * | 9 | * |
| 10 | * This program is free software; you can redistribute it and/or | 10 | * This program is free software; you can redistribute it and/or |
| 11 | * modify it under the terms of the GNU General Public License | 11 | * modify it under the terms of the GNU General Public License |
diff --git a/drivers/watchdog/mtx-1_wdt.c b/drivers/watchdog/mtx-1_wdt.c index 3acce623f209..539b6f6ba7f1 100644 --- a/drivers/watchdog/mtx-1_wdt.c +++ b/drivers/watchdog/mtx-1_wdt.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | * All Rights Reserved. | 5 | * All Rights Reserved. |
| 6 | * http://www.4g-systems.biz | 6 | * http://www.4g-systems.biz |
| 7 | * | 7 | * |
| 8 | * (C) Copyright 2007 OpenWrt.org, Florian Fainelli <florian@openwrt.org> | 8 | * (C) Copyright 2007 OpenWrt.org, Florian Fainelli <florian@openwrt.org> |
| 9 | * | 9 | * |
| 10 | * This program is free software; you can redistribute it and/or | 10 | * This program is free software; you can redistribute it and/or |
| 11 | * modify it under the terms of the GNU General Public License | 11 | * modify it under the terms of the GNU General Public License |
diff --git a/drivers/watchdog/pc87413_wdt.c b/drivers/watchdog/pc87413_wdt.c index 484c215e9f3f..1a2b916e3f8d 100644 --- a/drivers/watchdog/pc87413_wdt.c +++ b/drivers/watchdog/pc87413_wdt.c | |||
| @@ -536,7 +536,8 @@ static int __init pc87413_init(void) | |||
| 536 | 536 | ||
| 537 | ret = misc_register(&pc87413_miscdev); | 537 | ret = misc_register(&pc87413_miscdev); |
| 538 | if (ret != 0) { | 538 | if (ret != 0) { |
| 539 | printk(KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", | 539 | printk(KERN_ERR PFX |
| 540 | "cannot register miscdev on minor=%d (err=%d)\n", | ||
| 540 | WATCHDOG_MINOR, ret); | 541 | WATCHDOG_MINOR, ret); |
| 541 | unregister_reboot_notifier(&pc87413_notifier); | 542 | unregister_reboot_notifier(&pc87413_notifier); |
| 542 | return ret; | 543 | return ret; |
| @@ -574,7 +575,8 @@ static void __exit pc87413_exit(void) | |||
| 574 | module_init(pc87413_init); | 575 | module_init(pc87413_init); |
| 575 | module_exit(pc87413_exit); | 576 | module_exit(pc87413_exit); |
| 576 | 577 | ||
| 577 | MODULE_AUTHOR("Sven Anders <anders@anduras.de>, Marcus Junker <junker@anduras.de>,"); | 578 | MODULE_AUTHOR("Sven Anders <anders@anduras.de>, " |
| 579 | "Marcus Junker <junker@anduras.de>,"); | ||
| 578 | MODULE_DESCRIPTION("PC87413 WDT driver"); | 580 | MODULE_DESCRIPTION("PC87413 WDT driver"); |
| 579 | MODULE_LICENSE("GPL"); | 581 | MODULE_LICENSE("GPL"); |
| 580 | 582 | ||
diff --git a/drivers/watchdog/pcwd.c b/drivers/watchdog/pcwd.c index 9e1331a3b215..aa9512321f3a 100644 --- a/drivers/watchdog/pcwd.c +++ b/drivers/watchdog/pcwd.c | |||
| @@ -24,25 +24,25 @@ | |||
| 24 | * version reporting. Added read routine for temperature. | 24 | * version reporting. Added read routine for temperature. |
| 25 | * Removed some extra defines, added an autodetect Revision | 25 | * Removed some extra defines, added an autodetect Revision |
| 26 | * routine. | 26 | * routine. |
| 27 | * 961006 Revised some documentation, fixed some cosmetic bugs. Made | 27 | * 961006 Revised some documentation, fixed some cosmetic bugs. Made |
| 28 | * drivers to panic the system if it's overheating at bootup. | 28 | * drivers to panic the system if it's overheating at bootup. |
| 29 | * 961118 Changed some verbiage on some of the output, tidied up | 29 | * 961118 Changed some verbiage on some of the output, tidied up |
| 30 | * code bits, and added compatibility to 2.1.x. | 30 | * code bits, and added compatibility to 2.1.x. |
| 31 | * 970912 Enabled board on open and disable on close. | 31 | * 970912 Enabled board on open and disable on close. |
| 32 | * 971107 Took account of recent VFS changes (broke read). | 32 | * 971107 Took account of recent VFS changes (broke read). |
| 33 | * 971210 Disable board on initialisation in case board already ticking. | 33 | * 971210 Disable board on initialisation in case board already ticking. |
| 34 | * 971222 Changed open/close for temperature handling | 34 | * 971222 Changed open/close for temperature handling |
| 35 | * Michael Meskes <meskes@debian.org>. | 35 | * Michael Meskes <meskes@debian.org>. |
| 36 | * 980112 Used minor numbers from include/linux/miscdevice.h | 36 | * 980112 Used minor numbers from include/linux/miscdevice.h |
| 37 | * 990403 Clear reset status after reading control status register in | 37 | * 990403 Clear reset status after reading control status register in |
| 38 | * pcwd_showprevstate(). [Marc Boucher <marc@mbsi.ca>] | 38 | * pcwd_showprevstate(). [Marc Boucher <marc@mbsi.ca>] |
| 39 | * 990605 Made changes to code to support Firmware 1.22a, added | 39 | * 990605 Made changes to code to support Firmware 1.22a, added |
| 40 | * fairly useless proc entry. | 40 | * fairly useless proc entry. |
| 41 | * 990610 removed said useless proc code for the merge <alan> | 41 | * 990610 removed said useless proc code for the merge <alan> |
| 42 | * 000403 Removed last traces of proc code. <davej> | 42 | * 000403 Removed last traces of proc code. <davej> |
| 43 | * 011214 Added nowayout module option to override | 43 | * 011214 Added nowayout module option to override |
| 44 | * CONFIG_WATCHDOG_NOWAYOUT <Matt_Domsch@dell.com> | 44 | * CONFIG_WATCHDOG_NOWAYOUT <Matt_Domsch@dell.com> |
| 45 | * Added timeout module option to override default | 45 | * Added timeout module option to override default |
| 46 | */ | 46 | */ |
| 47 | 47 | ||
| 48 | /* | 48 | /* |
| @@ -76,8 +76,7 @@ | |||
| 76 | #define WATCHDOG_DRIVER_NAME "ISA-PC Watchdog" | 76 | #define WATCHDOG_DRIVER_NAME "ISA-PC Watchdog" |
| 77 | #define WATCHDOG_NAME "pcwd" | 77 | #define WATCHDOG_NAME "pcwd" |
| 78 | #define PFX WATCHDOG_NAME ": " | 78 | #define PFX WATCHDOG_NAME ": " |
| 79 | #define DRIVER_VERSION WATCHDOG_DRIVER_NAME " driver, v" WATCHDOG_VERSION " (" WATCHDOG_DATE ")\n" | 79 | #define DRIVER_VERSION WATCHDOG_DRIVER_NAME " driver, v" WATCHDOG_VERSION "\n" |
| 80 | #define WD_VER WATCHDOG_VERSION " (" WATCHDOG_DATE ")" | ||
| 81 | 80 | ||
| 82 | /* | 81 | /* |
| 83 | * It should be noted that PCWD_REVISION_B was removed because A and B | 82 | * It should be noted that PCWD_REVISION_B was removed because A and B |
| @@ -200,7 +199,9 @@ MODULE_PARM_DESC(debug, | |||
| 200 | #define WATCHDOG_HEARTBEAT 0 | 199 | #define WATCHDOG_HEARTBEAT 0 |
| 201 | static int heartbeat = WATCHDOG_HEARTBEAT; | 200 | static int heartbeat = WATCHDOG_HEARTBEAT; |
| 202 | module_param(heartbeat, int, 0); | 201 | module_param(heartbeat, int, 0); |
| 203 | MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. (2 <= heartbeat <= 7200 or 0=delay-time from dip-switches, default=" __MODULE_STRING(WATCHDOG_HEARTBEAT) ")"); | 202 | MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. " |
| 203 | "(2 <= heartbeat <= 7200 or 0=delay-time from dip-switches, default=" | ||
| 204 | __MODULE_STRING(WATCHDOG_HEARTBEAT) ")"); | ||
| 204 | 205 | ||
| 205 | static int nowayout = WATCHDOG_NOWAYOUT; | 206 | static int nowayout = WATCHDOG_NOWAYOUT; |
| 206 | module_param(nowayout, int, 0); | 207 | module_param(nowayout, int, 0); |
| @@ -239,7 +240,8 @@ static int send_isa_command(int cmd) | |||
| 239 | } | 240 | } |
| 240 | 241 | ||
| 241 | if (debug >= DEBUG) | 242 | if (debug >= DEBUG) |
| 242 | printk(KERN_DEBUG PFX "received following data for cmd=0x%02x: port0=0x%02x last_port0=0x%02x\n", | 243 | printk(KERN_DEBUG PFX "received following data for " |
| 244 | "cmd=0x%02x: port0=0x%02x last_port0=0x%02x\n", | ||
| 243 | cmd, port0, last_port0); | 245 | cmd, port0, last_port0); |
| 244 | 246 | ||
| 245 | return port0; | 247 | return port0; |
| @@ -339,10 +341,12 @@ static void pcwd_show_card_info(void) | |||
| 339 | pcwd_private.io_addr); | 341 | pcwd_private.io_addr); |
| 340 | else if (pcwd_private.revision == PCWD_REVISION_C) { | 342 | else if (pcwd_private.revision == PCWD_REVISION_C) { |
| 341 | pcwd_get_firmware(); | 343 | pcwd_get_firmware(); |
| 342 | printk(KERN_INFO PFX "ISA-PC Watchdog (REV.C) detected at port 0x%04x (Firmware version: %s)\n", | 344 | printk(KERN_INFO PFX "ISA-PC Watchdog (REV.C) detected at port " |
| 345 | "0x%04x (Firmware version: %s)\n", | ||
| 343 | pcwd_private.io_addr, pcwd_private.fw_ver_str); | 346 | pcwd_private.io_addr, pcwd_private.fw_ver_str); |
| 344 | option_switches = pcwd_get_option_switches(); | 347 | option_switches = pcwd_get_option_switches(); |
| 345 | printk(KERN_INFO PFX "Option switches (0x%02x): Temperature Reset Enable=%s, Power On Delay=%s\n", | 348 | printk(KERN_INFO PFX "Option switches (0x%02x): " |
| 349 | "Temperature Reset Enable=%s, Power On Delay=%s\n", | ||
| 346 | option_switches, | 350 | option_switches, |
| 347 | ((option_switches & 0x10) ? "ON" : "OFF"), | 351 | ((option_switches & 0x10) ? "ON" : "OFF"), |
| 348 | ((option_switches & 0x08) ? "ON" : "OFF")); | 352 | ((option_switches & 0x08) ? "ON" : "OFF")); |
| @@ -358,7 +362,8 @@ static void pcwd_show_card_info(void) | |||
| 358 | printk(KERN_INFO PFX "Temperature Option Detected\n"); | 362 | printk(KERN_INFO PFX "Temperature Option Detected\n"); |
| 359 | 363 | ||
| 360 | if (pcwd_private.boot_status & WDIOF_CARDRESET) | 364 | if (pcwd_private.boot_status & WDIOF_CARDRESET) |
| 361 | printk(KERN_INFO PFX "Previous reboot was caused by the card\n"); | 365 | printk(KERN_INFO PFX |
| 366 | "Previous reboot was caused by the card\n"); | ||
| 362 | 367 | ||
| 363 | if (pcwd_private.boot_status & WDIOF_OVERHEAT) { | 368 | if (pcwd_private.boot_status & WDIOF_OVERHEAT) { |
| 364 | printk(KERN_EMERG PFX | 369 | printk(KERN_EMERG PFX |
| @@ -871,7 +876,7 @@ static int __devinit pcwd_isa_probe(struct device *dev, unsigned int id) | |||
| 871 | cards_found++; | 876 | cards_found++; |
| 872 | if (cards_found == 1) | 877 | if (cards_found == 1) |
| 873 | printk(KERN_INFO PFX "v%s Ken Hollis (kenji@bitgate.com)\n", | 878 | printk(KERN_INFO PFX "v%s Ken Hollis (kenji@bitgate.com)\n", |
| 874 | WD_VER); | 879 | WATCHDOG_VERSION); |
| 875 | 880 | ||
| 876 | if (cards_found > 1) { | 881 | if (cards_found > 1) { |
| 877 | printk(KERN_ERR PFX "This driver only supports 1 device\n"); | 882 | printk(KERN_ERR PFX "This driver only supports 1 device\n"); |
| @@ -1026,7 +1031,8 @@ static void __exit pcwd_cleanup_module(void) | |||
| 1026 | module_init(pcwd_init_module); | 1031 | module_init(pcwd_init_module); |
| 1027 | module_exit(pcwd_cleanup_module); | 1032 | module_exit(pcwd_cleanup_module); |
| 1028 | 1033 | ||
| 1029 | MODULE_AUTHOR("Ken Hollis <kenji@bitgate.com>, Wim Van Sebroeck <wim@iguana.be>"); | 1034 | MODULE_AUTHOR("Ken Hollis <kenji@bitgate.com>, " |
| 1035 | "Wim Van Sebroeck <wim@iguana.be>"); | ||
| 1030 | MODULE_DESCRIPTION("Berkshire ISA-PC Watchdog driver"); | 1036 | MODULE_DESCRIPTION("Berkshire ISA-PC Watchdog driver"); |
| 1031 | MODULE_VERSION(WATCHDOG_VERSION); | 1037 | MODULE_VERSION(WATCHDOG_VERSION); |
| 1032 | MODULE_LICENSE("GPL"); | 1038 | MODULE_LICENSE("GPL"); |
diff --git a/drivers/watchdog/pcwd_pci.c b/drivers/watchdog/pcwd_pci.c index 5d76422c402c..698f51bff1bc 100644 --- a/drivers/watchdog/pcwd_pci.c +++ b/drivers/watchdog/pcwd_pci.c | |||
| @@ -24,7 +24,8 @@ | |||
| 24 | * A bells and whistles driver is available from: | 24 | * A bells and whistles driver is available from: |
| 25 | * http://www.kernel.org/pub/linux/kernel/people/wim/pcwd/pcwd_pci/ | 25 | * http://www.kernel.org/pub/linux/kernel/people/wim/pcwd/pcwd_pci/ |
| 26 | * | 26 | * |
| 27 | * More info available at http://www.berkprod.com/ or http://www.pcwatchdog.com/ | 27 | * More info available at |
| 28 | * http://www.berkprod.com/ or http://www.pcwatchdog.com/ | ||
| 28 | */ | 29 | */ |
| 29 | 30 | ||
| 30 | /* | 31 | /* |
| @@ -51,11 +52,10 @@ | |||
| 51 | 52 | ||
| 52 | /* Module and version information */ | 53 | /* Module and version information */ |
| 53 | #define WATCHDOG_VERSION "1.03" | 54 | #define WATCHDOG_VERSION "1.03" |
| 54 | #define WATCHDOG_DATE "21 Jan 2007" | ||
| 55 | #define WATCHDOG_DRIVER_NAME "PCI-PC Watchdog" | 55 | #define WATCHDOG_DRIVER_NAME "PCI-PC Watchdog" |
| 56 | #define WATCHDOG_NAME "pcwd_pci" | 56 | #define WATCHDOG_NAME "pcwd_pci" |
| 57 | #define PFX WATCHDOG_NAME ": " | 57 | #define PFX WATCHDOG_NAME ": " |
| 58 | #define DRIVER_VERSION WATCHDOG_DRIVER_NAME " driver, v" WATCHDOG_VERSION " (" WATCHDOG_DATE ")\n" | 58 | #define DRIVER_VERSION WATCHDOG_DRIVER_NAME " driver, v" WATCHDOG_VERSION "\n" |
| 59 | 59 | ||
| 60 | /* Stuff for the PCI ID's */ | 60 | /* Stuff for the PCI ID's */ |
| 61 | #ifndef PCI_VENDOR_ID_QUICKLOGIC | 61 | #ifndef PCI_VENDOR_ID_QUICKLOGIC |
| @@ -76,7 +76,8 @@ | |||
| 76 | #define WD_PCI_TTRP 0x04 /* Temperature Trip status */ | 76 | #define WD_PCI_TTRP 0x04 /* Temperature Trip status */ |
| 77 | #define WD_PCI_RL2A 0x08 /* Relay 2 Active */ | 77 | #define WD_PCI_RL2A 0x08 /* Relay 2 Active */ |
| 78 | #define WD_PCI_RL1A 0x10 /* Relay 1 Active */ | 78 | #define WD_PCI_RL1A 0x10 /* Relay 1 Active */ |
| 79 | #define WD_PCI_R2DS 0x40 /* Relay 2 Disable Temperature-trip/reset */ | 79 | #define WD_PCI_R2DS 0x40 /* Relay 2 Disable Temperature-trip / |
| 80 | reset */ | ||
| 80 | #define WD_PCI_RLY2 0x80 /* Activate Relay 2 on the board */ | 81 | #define WD_PCI_RLY2 0x80 /* Activate Relay 2 on the board */ |
| 81 | /* Port 2 : Control Status #2 */ | 82 | /* Port 2 : Control Status #2 */ |
| 82 | #define WD_PCI_WDIS 0x10 /* Watchdog Disable */ | 83 | #define WD_PCI_WDIS 0x10 /* Watchdog Disable */ |
| @@ -114,12 +115,18 @@ static int cards_found; | |||
| 114 | static int temp_panic; | 115 | static int temp_panic; |
| 115 | static unsigned long is_active; | 116 | static unsigned long is_active; |
| 116 | static char expect_release; | 117 | static char expect_release; |
| 117 | static struct { /* this is private data for each PCI-PC watchdog card */ | 118 | /* this is private data for each PCI-PC watchdog card */ |
| 118 | int supports_temp; /* Wether or not the card has a temperature device */ | 119 | static struct { |
| 119 | int boot_status; /* The card's boot status */ | 120 | /* Wether or not the card has a temperature device */ |
| 120 | unsigned long io_addr; /* The cards I/O address */ | 121 | int supports_temp; |
| 121 | spinlock_t io_lock; /* the lock for io operations */ | 122 | /* The card's boot status */ |
| 122 | struct pci_dev *pdev; /* the PCI-device */ | 123 | int boot_status; |
| 124 | /* The cards I/O address */ | ||
| 125 | unsigned long io_addr; | ||
| 126 | /* the lock for io operations */ | ||
| 127 | spinlock_t io_lock; | ||
| 128 | /* the PCI-device */ | ||
| 129 | struct pci_dev *pdev; | ||
| 123 | } pcipcwd_private; | 130 | } pcipcwd_private; |
| 124 | 131 | ||
| 125 | /* module parameters */ | 132 | /* module parameters */ |
| @@ -130,14 +137,18 @@ static int debug = QUIET; | |||
| 130 | module_param(debug, int, 0); | 137 | module_param(debug, int, 0); |
| 131 | MODULE_PARM_DESC(debug, "Debug level: 0=Quiet, 1=Verbose, 2=Debug (default=0)"); | 138 | MODULE_PARM_DESC(debug, "Debug level: 0=Quiet, 1=Verbose, 2=Debug (default=0)"); |
| 132 | 139 | ||
| 133 | #define WATCHDOG_HEARTBEAT 0 /* default heartbeat = delay-time from dip-switches */ | 140 | #define WATCHDOG_HEARTBEAT 0 /* default heartbeat = |
| 141 | delay-time from dip-switches */ | ||
| 134 | static int heartbeat = WATCHDOG_HEARTBEAT; | 142 | static int heartbeat = WATCHDOG_HEARTBEAT; |
| 135 | module_param(heartbeat, int, 0); | 143 | module_param(heartbeat, int, 0); |
| 136 | MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. (0<heartbeat<65536 or 0=delay-time from dip-switches, default=" __MODULE_STRING(WATCHDOG_HEARTBEAT) ")"); | 144 | MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. " |
| 145 | "(0<heartbeat<65536 or 0=delay-time from dip-switches, default=" | ||
| 146 | __MODULE_STRING(WATCHDOG_HEARTBEAT) ")"); | ||
| 137 | 147 | ||
| 138 | static int nowayout = WATCHDOG_NOWAYOUT; | 148 | static int nowayout = WATCHDOG_NOWAYOUT; |
| 139 | module_param(nowayout, int, 0); | 149 | module_param(nowayout, int, 0); |
| 140 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | 150 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" |
| 151 | __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | ||
| 141 | 152 | ||
| 142 | /* | 153 | /* |
| 143 | * Internal functions | 154 | * Internal functions |
| @@ -148,8 +159,8 @@ static int send_command(int cmd, int *msb, int *lsb) | |||
| 148 | int got_response, count; | 159 | int got_response, count; |
| 149 | 160 | ||
| 150 | if (debug >= DEBUG) | 161 | if (debug >= DEBUG) |
| 151 | printk(KERN_DEBUG PFX "sending following data cmd=0x%02x msb=0x%02x lsb=0x%02x\n", | 162 | printk(KERN_DEBUG PFX "sending following data " |
| 152 | cmd, *msb, *lsb); | 163 | "cmd=0x%02x msb=0x%02x lsb=0x%02x\n", cmd, *msb, *lsb); |
| 153 | 164 | ||
| 154 | spin_lock(&pcipcwd_private.io_lock); | 165 | spin_lock(&pcipcwd_private.io_lock); |
| 155 | /* If a command requires data it should be written first. | 166 | /* If a command requires data it should be written first. |
| @@ -166,17 +177,20 @@ static int send_command(int cmd, int *msb, int *lsb) | |||
| 166 | * the WRSP bit in port 2 and give it a max. timeout of | 177 | * the WRSP bit in port 2 and give it a max. timeout of |
| 167 | * PCI_COMMAND_TIMEOUT to process */ | 178 | * PCI_COMMAND_TIMEOUT to process */ |
| 168 | got_response = inb_p(pcipcwd_private.io_addr + 2) & WD_PCI_WRSP; | 179 | got_response = inb_p(pcipcwd_private.io_addr + 2) & WD_PCI_WRSP; |
| 169 | for (count = 0; (count < PCI_COMMAND_TIMEOUT) && (!got_response); count++) { | 180 | for (count = 0; (count < PCI_COMMAND_TIMEOUT) && (!got_response); |
| 181 | count++) { | ||
| 170 | mdelay(1); | 182 | mdelay(1); |
| 171 | got_response = inb_p(pcipcwd_private.io_addr + 2) & WD_PCI_WRSP; | 183 | got_response = inb_p(pcipcwd_private.io_addr + 2) & WD_PCI_WRSP; |
| 172 | } | 184 | } |
| 173 | 185 | ||
| 174 | if (debug >= DEBUG) { | 186 | if (debug >= DEBUG) { |
| 175 | if (got_response) { | 187 | if (got_response) { |
| 176 | printk(KERN_DEBUG PFX "time to process command was: %d ms\n", | 188 | printk(KERN_DEBUG PFX |
| 189 | "time to process command was: %d ms\n", | ||
| 177 | count); | 190 | count); |
| 178 | } else { | 191 | } else { |
| 179 | printk(KERN_DEBUG PFX "card did not respond on command!\n"); | 192 | printk(KERN_DEBUG PFX |
| 193 | "card did not respond on command!\n"); | ||
| 180 | } | 194 | } |
| 181 | } | 195 | } |
| 182 | 196 | ||
| @@ -189,7 +203,8 @@ static int send_command(int cmd, int *msb, int *lsb) | |||
| 189 | inb_p(pcipcwd_private.io_addr + 6); | 203 | inb_p(pcipcwd_private.io_addr + 6); |
| 190 | 204 | ||
| 191 | if (debug >= DEBUG) | 205 | if (debug >= DEBUG) |
| 192 | printk(KERN_DEBUG PFX "received following data for cmd=0x%02x: msb=0x%02x lsb=0x%02x\n", | 206 | printk(KERN_DEBUG PFX "received following data for " |
| 207 | "cmd=0x%02x: msb=0x%02x lsb=0x%02x\n", | ||
| 193 | cmd, *msb, *lsb); | 208 | cmd, *msb, *lsb); |
| 194 | } | 209 | } |
| 195 | 210 | ||
| @@ -218,7 +233,8 @@ static void pcipcwd_show_card_info(void) | |||
| 218 | char fw_ver_str[20]; /* The cards firmware version */ | 233 | char fw_ver_str[20]; /* The cards firmware version */ |
| 219 | int option_switches; | 234 | int option_switches; |
| 220 | 235 | ||
| 221 | got_fw_rev = send_command(CMD_GET_FIRMWARE_VERSION, &fw_rev_major, &fw_rev_minor); | 236 | got_fw_rev = send_command(CMD_GET_FIRMWARE_VERSION, &fw_rev_major, |
| 237 | &fw_rev_minor); | ||
| 222 | if (got_fw_rev) | 238 | if (got_fw_rev) |
| 223 | sprintf(fw_ver_str, "%u.%02u", fw_rev_major, fw_rev_minor); | 239 | sprintf(fw_ver_str, "%u.%02u", fw_rev_major, fw_rev_minor); |
| 224 | else | 240 | else |
| @@ -227,23 +243,27 @@ static void pcipcwd_show_card_info(void) | |||
| 227 | /* Get switch settings */ | 243 | /* Get switch settings */ |
| 228 | option_switches = pcipcwd_get_option_switches(); | 244 | option_switches = pcipcwd_get_option_switches(); |
| 229 | 245 | ||
| 230 | printk(KERN_INFO PFX "Found card at port 0x%04x (Firmware: %s) %s temp option\n", | 246 | printk(KERN_INFO PFX "Found card at port " |
| 247 | "0x%04x (Firmware: %s) %s temp option\n", | ||
| 231 | (int) pcipcwd_private.io_addr, fw_ver_str, | 248 | (int) pcipcwd_private.io_addr, fw_ver_str, |
| 232 | (pcipcwd_private.supports_temp ? "with" : "without")); | 249 | (pcipcwd_private.supports_temp ? "with" : "without")); |
| 233 | 250 | ||
| 234 | printk(KERN_INFO PFX "Option switches (0x%02x): Temperature Reset Enable=%s, Power On Delay=%s\n", | 251 | printk(KERN_INFO PFX "Option switches (0x%02x): " |
| 252 | "Temperature Reset Enable=%s, Power On Delay=%s\n", | ||
| 235 | option_switches, | 253 | option_switches, |
| 236 | ((option_switches & 0x10) ? "ON" : "OFF"), | 254 | ((option_switches & 0x10) ? "ON" : "OFF"), |
| 237 | ((option_switches & 0x08) ? "ON" : "OFF")); | 255 | ((option_switches & 0x08) ? "ON" : "OFF")); |
| 238 | 256 | ||
| 239 | if (pcipcwd_private.boot_status & WDIOF_CARDRESET) | 257 | if (pcipcwd_private.boot_status & WDIOF_CARDRESET) |
| 240 | printk(KERN_INFO PFX "Previous reset was caused by the Watchdog card\n"); | 258 | printk(KERN_INFO PFX |
| 259 | "Previous reset was caused by the Watchdog card\n"); | ||
| 241 | 260 | ||
| 242 | if (pcipcwd_private.boot_status & WDIOF_OVERHEAT) | 261 | if (pcipcwd_private.boot_status & WDIOF_OVERHEAT) |
| 243 | printk(KERN_INFO PFX "Card sensed a CPU Overheat\n"); | 262 | printk(KERN_INFO PFX "Card sensed a CPU Overheat\n"); |
| 244 | 263 | ||
| 245 | if (pcipcwd_private.boot_status == 0) | 264 | if (pcipcwd_private.boot_status == 0) |
| 246 | printk(KERN_INFO PFX "No previous trip detected - Cold boot or reset\n"); | 265 | printk(KERN_INFO PFX |
| 266 | "No previous trip detected - Cold boot or reset\n"); | ||
| 247 | } | 267 | } |
| 248 | 268 | ||
| 249 | static int pcipcwd_start(void) | 269 | static int pcipcwd_start(void) |
| @@ -283,7 +303,8 @@ static int pcipcwd_stop(void) | |||
| 283 | spin_unlock(&pcipcwd_private.io_lock); | 303 | spin_unlock(&pcipcwd_private.io_lock); |
| 284 | 304 | ||
| 285 | if (!(stat_reg & WD_PCI_WDIS)) { | 305 | if (!(stat_reg & WD_PCI_WDIS)) { |
| 286 | printk(KERN_ERR PFX "Card did not acknowledge disable attempt\n"); | 306 | printk(KERN_ERR PFX |
| 307 | "Card did not acknowledge disable attempt\n"); | ||
| 287 | return -1; | 308 | return -1; |
| 288 | } | 309 | } |
| 289 | 310 | ||
| @@ -364,7 +385,8 @@ static int pcipcwd_clear_status(void) | |||
| 364 | } | 385 | } |
| 365 | 386 | ||
| 366 | /* clear trip status & LED and keep mode of relay 2 */ | 387 | /* clear trip status & LED and keep mode of relay 2 */ |
| 367 | outb_p((control_status & WD_PCI_R2DS) | WD_PCI_WTRP, pcipcwd_private.io_addr + 1); | 388 | outb_p((control_status & WD_PCI_R2DS) | WD_PCI_WTRP, |
| 389 | pcipcwd_private.io_addr + 1); | ||
| 368 | 390 | ||
| 369 | /* clear reset counter */ | 391 | /* clear reset counter */ |
| 370 | msb = 0; | 392 | msb = 0; |
| @@ -437,7 +459,8 @@ static ssize_t pcipcwd_write(struct file *file, const char __user *data, | |||
| 437 | * five months ago... */ | 459 | * five months ago... */ |
| 438 | expect_release = 0; | 460 | expect_release = 0; |
| 439 | 461 | ||
| 440 | /* scan to see whether or not we got the magic character */ | 462 | /* scan to see whether or not we got the |
| 463 | * magic character */ | ||
| 441 | for (i = 0; i != len; i++) { | 464 | for (i = 0; i != len; i++) { |
| 442 | char c; | 465 | char c; |
| 443 | if (get_user(c, data + i)) | 466 | if (get_user(c, data + i)) |
| @@ -531,7 +554,7 @@ static long pcipcwd_ioctl(struct file *file, unsigned int cmd, | |||
| 531 | return -EFAULT; | 554 | return -EFAULT; |
| 532 | 555 | ||
| 533 | if (pcipcwd_set_heartbeat(new_heartbeat)) | 556 | if (pcipcwd_set_heartbeat(new_heartbeat)) |
| 534 | return -EINVAL; | 557 | return -EINVAL; |
| 535 | 558 | ||
| 536 | pcipcwd_keepalive(); | 559 | pcipcwd_keepalive(); |
| 537 | /* Fall */ | 560 | /* Fall */ |
| @@ -560,7 +583,8 @@ static int pcipcwd_open(struct inode *inode, struct file *file) | |||
| 560 | /* /dev/watchdog can only be opened once */ | 583 | /* /dev/watchdog can only be opened once */ |
| 561 | if (test_and_set_bit(0, &is_active)) { | 584 | if (test_and_set_bit(0, &is_active)) { |
| 562 | if (debug >= VERBOSE) | 585 | if (debug >= VERBOSE) |
| 563 | printk(KERN_ERR PFX "Attempt to open already opened device.\n"); | 586 | printk(KERN_ERR PFX |
| 587 | "Attempt to open already opened device.\n"); | ||
| 564 | return -EBUSY; | 588 | return -EBUSY; |
| 565 | } | 589 | } |
| 566 | 590 | ||
| @@ -578,7 +602,8 @@ static int pcipcwd_release(struct inode *inode, struct file *file) | |||
| 578 | if (expect_release == 42) { | 602 | if (expect_release == 42) { |
| 579 | pcipcwd_stop(); | 603 | pcipcwd_stop(); |
| 580 | } else { | 604 | } else { |
| 581 | printk(KERN_CRIT PFX "Unexpected close, not stopping watchdog!\n"); | 605 | printk(KERN_CRIT PFX |
| 606 | "Unexpected close, not stopping watchdog!\n"); | ||
| 582 | pcipcwd_keepalive(); | 607 | pcipcwd_keepalive(); |
| 583 | } | 608 | } |
| 584 | expect_release = 0; | 609 | expect_release = 0; |
| @@ -621,7 +646,8 @@ static int pcipcwd_temp_release(struct inode *inode, struct file *file) | |||
| 621 | * Notify system | 646 | * Notify system |
| 622 | */ | 647 | */ |
| 623 | 648 | ||
| 624 | static int pcipcwd_notify_sys(struct notifier_block *this, unsigned long code, void *unused) | 649 | static int pcipcwd_notify_sys(struct notifier_block *this, unsigned long code, |
| 650 | void *unused) | ||
| 625 | { | 651 | { |
| 626 | if (code == SYS_DOWN || code == SYS_HALT) | 652 | if (code == SYS_DOWN || code == SYS_HALT) |
| 627 | pcipcwd_stop(); /* Turn the WDT off */ | 653 | pcipcwd_stop(); /* Turn the WDT off */ |
| @@ -722,34 +748,38 @@ static int __devinit pcipcwd_card_init(struct pci_dev *pdev, | |||
| 722 | 748 | ||
| 723 | /* If heartbeat = 0 then we use the heartbeat from the dip-switches */ | 749 | /* If heartbeat = 0 then we use the heartbeat from the dip-switches */ |
| 724 | if (heartbeat == 0) | 750 | if (heartbeat == 0) |
| 725 | heartbeat = heartbeat_tbl[(pcipcwd_get_option_switches() & 0x07)]; | 751 | heartbeat = |
| 752 | heartbeat_tbl[(pcipcwd_get_option_switches() & 0x07)]; | ||
| 726 | 753 | ||
| 727 | /* Check that the heartbeat value is within it's range ; if not reset to the default */ | 754 | /* Check that the heartbeat value is within it's range ; |
| 755 | * if not reset to the default */ | ||
| 728 | if (pcipcwd_set_heartbeat(heartbeat)) { | 756 | if (pcipcwd_set_heartbeat(heartbeat)) { |
| 729 | pcipcwd_set_heartbeat(WATCHDOG_HEARTBEAT); | 757 | pcipcwd_set_heartbeat(WATCHDOG_HEARTBEAT); |
| 730 | printk(KERN_INFO PFX "heartbeat value must be 0<heartbeat<65536, using %d\n", | 758 | printk(KERN_INFO PFX |
| 759 | "heartbeat value must be 0<heartbeat<65536, using %d\n", | ||
| 731 | WATCHDOG_HEARTBEAT); | 760 | WATCHDOG_HEARTBEAT); |
| 732 | } | 761 | } |
| 733 | 762 | ||
| 734 | ret = register_reboot_notifier(&pcipcwd_notifier); | 763 | ret = register_reboot_notifier(&pcipcwd_notifier); |
| 735 | if (ret != 0) { | 764 | if (ret != 0) { |
| 736 | printk(KERN_ERR PFX "cannot register reboot notifier (err=%d)\n", | 765 | printk(KERN_ERR PFX |
| 737 | ret); | 766 | "cannot register reboot notifier (err=%d)\n", ret); |
| 738 | goto err_out_release_region; | 767 | goto err_out_release_region; |
| 739 | } | 768 | } |
| 740 | 769 | ||
| 741 | if (pcipcwd_private.supports_temp) { | 770 | if (pcipcwd_private.supports_temp) { |
| 742 | ret = misc_register(&pcipcwd_temp_miscdev); | 771 | ret = misc_register(&pcipcwd_temp_miscdev); |
| 743 | if (ret != 0) { | 772 | if (ret != 0) { |
| 744 | printk(KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", | 773 | printk(KERN_ERR PFX "cannot register miscdev on " |
| 745 | TEMP_MINOR, ret); | 774 | "minor=%d (err=%d)\n", TEMP_MINOR, ret); |
| 746 | goto err_out_unregister_reboot; | 775 | goto err_out_unregister_reboot; |
| 747 | } | 776 | } |
| 748 | } | 777 | } |
| 749 | 778 | ||
| 750 | ret = misc_register(&pcipcwd_miscdev); | 779 | ret = misc_register(&pcipcwd_miscdev); |
| 751 | if (ret != 0) { | 780 | if (ret != 0) { |
| 752 | printk(KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", | 781 | printk(KERN_ERR PFX |
| 782 | "cannot register miscdev on minor=%d (err=%d)\n", | ||
| 753 | WATCHDOG_MINOR, ret); | 783 | WATCHDOG_MINOR, ret); |
| 754 | goto err_out_misc_deregister; | 784 | goto err_out_misc_deregister; |
| 755 | } | 785 | } |
diff --git a/drivers/watchdog/pcwd_usb.c b/drivers/watchdog/pcwd_usb.c index b5320a8e7451..052fe451851f 100644 --- a/drivers/watchdog/pcwd_usb.c +++ b/drivers/watchdog/pcwd_usb.c | |||
| @@ -51,12 +51,11 @@ | |||
| 51 | 51 | ||
| 52 | /* Use our own dbg macro */ | 52 | /* Use our own dbg macro */ |
| 53 | #undef dbg | 53 | #undef dbg |
| 54 | #define dbg(format, arg...) do { if (debug) printk(KERN_DEBUG PFX format "\n" , ## arg); } while (0) | 54 | #define dbg(format, arg...) \ |
| 55 | 55 | do { if (debug) printk(KERN_DEBUG PFX format "\n" , ## arg); } while (0) | |
| 56 | 56 | ||
| 57 | /* Module and Version Information */ | 57 | /* Module and Version Information */ |
| 58 | #define DRIVER_VERSION "1.02" | 58 | #define DRIVER_VERSION "1.02" |
| 59 | #define DRIVER_DATE "21 Jan 2007" | ||
| 60 | #define DRIVER_AUTHOR "Wim Van Sebroeck <wim@iguana.be>" | 59 | #define DRIVER_AUTHOR "Wim Van Sebroeck <wim@iguana.be>" |
| 61 | #define DRIVER_DESC "Berkshire USB-PC Watchdog driver" | 60 | #define DRIVER_DESC "Berkshire USB-PC Watchdog driver" |
| 62 | #define DRIVER_LICENSE "GPL" | 61 | #define DRIVER_LICENSE "GPL" |
| @@ -73,14 +72,18 @@ MODULE_ALIAS_MISCDEV(TEMP_MINOR); | |||
| 73 | module_param(debug, int, 0); | 72 | module_param(debug, int, 0); |
| 74 | MODULE_PARM_DESC(debug, "Debug enabled or not"); | 73 | MODULE_PARM_DESC(debug, "Debug enabled or not"); |
| 75 | 74 | ||
| 76 | #define WATCHDOG_HEARTBEAT 0 /* default heartbeat = delay-time from dip-switches */ | 75 | #define WATCHDOG_HEARTBEAT 0 /* default heartbeat = |
| 76 | delay-time from dip-switches */ | ||
| 77 | static int heartbeat = WATCHDOG_HEARTBEAT; | 77 | static int heartbeat = WATCHDOG_HEARTBEAT; |
| 78 | module_param(heartbeat, int, 0); | 78 | module_param(heartbeat, int, 0); |
| 79 | MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. (0<heartbeat<65536 or 0=delay-time from dip-switches, default=" __MODULE_STRING(WATCHDOG_HEARTBEAT) ")"); | 79 | MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. " |
| 80 | "(0<heartbeat<65536 or 0=delay-time from dip-switches, default=" | ||
| 81 | __MODULE_STRING(WATCHDOG_HEARTBEAT) ")"); | ||
| 80 | 82 | ||
| 81 | static int nowayout = WATCHDOG_NOWAYOUT; | 83 | static int nowayout = WATCHDOG_NOWAYOUT; |
| 82 | module_param(nowayout, int, 0); | 84 | module_param(nowayout, int, 0); |
| 83 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | 85 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" |
| 86 | __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | ||
| 84 | 87 | ||
| 85 | /* The vendor and product id's for the USB-PC Watchdog card */ | 88 | /* The vendor and product id's for the USB-PC Watchdog card */ |
| 86 | #define USB_PCWD_VENDOR_ID 0x0c98 | 89 | #define USB_PCWD_VENDOR_ID 0x0c98 |
| @@ -91,20 +94,21 @@ static struct usb_device_id usb_pcwd_table[] = { | |||
| 91 | { USB_DEVICE(USB_PCWD_VENDOR_ID, USB_PCWD_PRODUCT_ID) }, | 94 | { USB_DEVICE(USB_PCWD_VENDOR_ID, USB_PCWD_PRODUCT_ID) }, |
| 92 | { } /* Terminating entry */ | 95 | { } /* Terminating entry */ |
| 93 | }; | 96 | }; |
| 94 | MODULE_DEVICE_TABLE (usb, usb_pcwd_table); | 97 | MODULE_DEVICE_TABLE(usb, usb_pcwd_table); |
| 95 | 98 | ||
| 96 | /* according to documentation max. time to process a command for the USB | 99 | /* according to documentation max. time to process a command for the USB |
| 97 | * watchdog card is 100 or 200 ms, so we give it 250 ms to do it's job */ | 100 | * watchdog card is 100 or 200 ms, so we give it 250 ms to do it's job */ |
| 98 | #define USB_COMMAND_TIMEOUT 250 | 101 | #define USB_COMMAND_TIMEOUT 250 |
| 99 | 102 | ||
| 100 | /* Watchdog's internal commands */ | 103 | /* Watchdog's internal commands */ |
| 101 | #define CMD_READ_TEMP 0x02 /* Read Temperature; Re-trigger Watchdog */ | 104 | #define CMD_READ_TEMP 0x02 /* Read Temperature; |
| 105 | Re-trigger Watchdog */ | ||
| 102 | #define CMD_TRIGGER CMD_READ_TEMP | 106 | #define CMD_TRIGGER CMD_READ_TEMP |
| 103 | #define CMD_GET_STATUS 0x04 /* Get Status Information */ | 107 | #define CMD_GET_STATUS 0x04 /* Get Status Information */ |
| 104 | #define CMD_GET_FIRMWARE_VERSION 0x08 /* Get Firmware Version */ | 108 | #define CMD_GET_FIRMWARE_VERSION 0x08 /* Get Firmware Version */ |
| 105 | #define CMD_GET_DIP_SWITCH_SETTINGS 0x0c /* Get Dip Switch Settings */ | 109 | #define CMD_GET_DIP_SWITCH_SETTINGS 0x0c /* Get Dip Switch Settings */ |
| 106 | #define CMD_READ_WATCHDOG_TIMEOUT 0x18 /* Read Current Watchdog Time */ | 110 | #define CMD_READ_WATCHDOG_TIMEOUT 0x18 /* Read Current Watchdog Time */ |
| 107 | #define CMD_WRITE_WATCHDOG_TIMEOUT 0x19 /* Write Current Watchdog Time */ | 111 | #define CMD_WRITE_WATCHDOG_TIMEOUT 0x19 /* Write Current WatchdogTime */ |
| 108 | #define CMD_ENABLE_WATCHDOG 0x30 /* Enable / Disable Watchdog */ | 112 | #define CMD_ENABLE_WATCHDOG 0x30 /* Enable / Disable Watchdog */ |
| 109 | #define CMD_DISABLE_WATCHDOG CMD_ENABLE_WATCHDOG | 113 | #define CMD_DISABLE_WATCHDOG CMD_ENABLE_WATCHDOG |
| 110 | 114 | ||
| @@ -129,23 +133,36 @@ static char expect_release; | |||
| 129 | 133 | ||
| 130 | /* Structure to hold all of our device specific stuff */ | 134 | /* Structure to hold all of our device specific stuff */ |
| 131 | struct usb_pcwd_private { | 135 | struct usb_pcwd_private { |
| 132 | struct usb_device *udev; /* save off the usb device pointer */ | 136 | /* save off the usb device pointer */ |
| 133 | struct usb_interface *interface; /* the interface for this device */ | 137 | struct usb_device *udev; |
| 134 | 138 | /* the interface for this device */ | |
| 135 | unsigned int interface_number; /* the interface number used for cmd's */ | 139 | struct usb_interface *interface; |
| 136 | 140 | ||
| 137 | unsigned char *intr_buffer; /* the buffer to intr data */ | 141 | /* the interface number used for cmd's */ |
| 138 | dma_addr_t intr_dma; /* the dma address for the intr buffer */ | 142 | unsigned int interface_number; |
| 139 | size_t intr_size; /* the size of the intr buffer */ | 143 | |
| 140 | struct urb *intr_urb; /* the urb used for the intr pipe */ | 144 | /* the buffer to intr data */ |
| 141 | 145 | unsigned char *intr_buffer; | |
| 142 | unsigned char cmd_command; /* The command that is reported back */ | 146 | /* the dma address for the intr buffer */ |
| 143 | unsigned char cmd_data_msb; /* The data MSB that is reported back */ | 147 | dma_addr_t intr_dma; |
| 144 | unsigned char cmd_data_lsb; /* The data LSB that is reported back */ | 148 | /* the size of the intr buffer */ |
| 145 | atomic_t cmd_received; /* true if we received a report after a command */ | 149 | size_t intr_size; |
| 146 | 150 | /* the urb used for the intr pipe */ | |
| 147 | int exists; /* Wether or not the device exists */ | 151 | struct urb *intr_urb; |
| 148 | struct mutex mtx; /* locks this structure */ | 152 | |
| 153 | /* The command that is reported back */ | ||
| 154 | unsigned char cmd_command; | ||
| 155 | /* The data MSB that is reported back */ | ||
| 156 | unsigned char cmd_data_msb; | ||
| 157 | /* The data LSB that is reported back */ | ||
| 158 | unsigned char cmd_data_lsb; | ||
| 159 | /* true if we received a report after a command */ | ||
| 160 | atomic_t cmd_received; | ||
| 161 | |||
| 162 | /* Wether or not the device exists */ | ||
| 163 | int exists; | ||
| 164 | /* locks this structure */ | ||
| 165 | struct mutex mtx; | ||
| 149 | }; | 166 | }; |
| 150 | static struct usb_pcwd_private *usb_pcwd_device; | 167 | static struct usb_pcwd_private *usb_pcwd_device; |
| 151 | 168 | ||
| @@ -153,7 +170,8 @@ static struct usb_pcwd_private *usb_pcwd_device; | |||
| 153 | static DEFINE_MUTEX(disconnect_mutex); | 170 | static DEFINE_MUTEX(disconnect_mutex); |
| 154 | 171 | ||
| 155 | /* local function prototypes */ | 172 | /* local function prototypes */ |
| 156 | static int usb_pcwd_probe(struct usb_interface *interface, const struct usb_device_id *id); | 173 | static int usb_pcwd_probe(struct usb_interface *interface, |
| 174 | const struct usb_device_id *id); | ||
| 157 | static void usb_pcwd_disconnect(struct usb_interface *interface); | 175 | static void usb_pcwd_disconnect(struct usb_interface *interface); |
| 158 | 176 | ||
| 159 | /* usb specific object needed to register this driver with the usb subsystem */ | 177 | /* usb specific object needed to register this driver with the usb subsystem */ |
| @@ -167,7 +185,8 @@ static struct usb_driver usb_pcwd_driver = { | |||
| 167 | 185 | ||
| 168 | static void usb_pcwd_intr_done(struct urb *urb) | 186 | static void usb_pcwd_intr_done(struct urb *urb) |
| 169 | { | 187 | { |
| 170 | struct usb_pcwd_private *usb_pcwd = (struct usb_pcwd_private *)urb->context; | 188 | struct usb_pcwd_private *usb_pcwd = |
| 189 | (struct usb_pcwd_private *)urb->context; | ||
| 171 | unsigned char *data = usb_pcwd->intr_buffer; | 190 | unsigned char *data = usb_pcwd->intr_buffer; |
| 172 | int retval; | 191 | int retval; |
| 173 | 192 | ||
| @@ -178,11 +197,13 @@ static void usb_pcwd_intr_done(struct urb *urb) | |||
| 178 | case -ENOENT: | 197 | case -ENOENT: |
| 179 | case -ESHUTDOWN: | 198 | case -ESHUTDOWN: |
| 180 | /* this urb is terminated, clean up */ | 199 | /* this urb is terminated, clean up */ |
| 181 | dbg("%s - urb shutting down with status: %d", __func__, urb->status); | 200 | dbg("%s - urb shutting down with status: %d", __func__, |
| 201 | urb->status); | ||
| 182 | return; | 202 | return; |
| 183 | /* -EPIPE: should clear the halt */ | 203 | /* -EPIPE: should clear the halt */ |
| 184 | default: /* error */ | 204 | default: /* error */ |
| 185 | dbg("%s - nonzero urb status received: %d", __func__, urb->status); | 205 | dbg("%s - nonzero urb status received: %d", __func__, |
| 206 | urb->status); | ||
| 186 | goto resubmit; | 207 | goto resubmit; |
| 187 | } | 208 | } |
| 188 | 209 | ||
| @@ -199,22 +220,23 @@ static void usb_pcwd_intr_done(struct urb *urb) | |||
| 199 | resubmit: | 220 | resubmit: |
| 200 | retval = usb_submit_urb(urb, GFP_ATOMIC); | 221 | retval = usb_submit_urb(urb, GFP_ATOMIC); |
| 201 | if (retval) | 222 | if (retval) |
| 202 | printk(KERN_ERR PFX "can't resubmit intr, usb_submit_urb failed with result %d\n", | 223 | printk(KERN_ERR PFX "can't resubmit intr, " |
| 203 | retval); | 224 | "usb_submit_urb failed with result %d\n", retval); |
| 204 | } | 225 | } |
| 205 | 226 | ||
| 206 | static int usb_pcwd_send_command(struct usb_pcwd_private *usb_pcwd, unsigned char cmd, | 227 | static int usb_pcwd_send_command(struct usb_pcwd_private *usb_pcwd, |
| 207 | unsigned char *msb, unsigned char *lsb) | 228 | unsigned char cmd, unsigned char *msb, unsigned char *lsb) |
| 208 | { | 229 | { |
| 209 | int got_response, count; | 230 | int got_response, count; |
| 210 | unsigned char buf[6]; | 231 | unsigned char buf[6]; |
| 211 | 232 | ||
| 212 | /* We will not send any commands if the USB PCWD device does not exist */ | 233 | /* We will not send any commands if the USB PCWD device does |
| 234 | * not exist */ | ||
| 213 | if ((!usb_pcwd) || (!usb_pcwd->exists)) | 235 | if ((!usb_pcwd) || (!usb_pcwd->exists)) |
| 214 | return -1; | 236 | return -1; |
| 215 | 237 | ||
| 216 | /* The USB PC Watchdog uses a 6 byte report format. The board currently uses | 238 | /* The USB PC Watchdog uses a 6 byte report format. |
| 217 | * only 3 of the six bytes of the report. */ | 239 | * The board currently uses only 3 of the six bytes of the report. */ |
| 218 | buf[0] = cmd; /* Byte 0 = CMD */ | 240 | buf[0] = cmd; /* Byte 0 = CMD */ |
| 219 | buf[1] = *msb; /* Byte 1 = Data MSB */ | 241 | buf[1] = *msb; /* Byte 1 = Data MSB */ |
| 220 | buf[2] = *lsb; /* Byte 2 = Data LSB */ | 242 | buf[2] = *lsb; /* Byte 2 = Data LSB */ |
| @@ -229,12 +251,14 @@ static int usb_pcwd_send_command(struct usb_pcwd_private *usb_pcwd, unsigned cha | |||
| 229 | HID_REQ_SET_REPORT, HID_DT_REPORT, | 251 | HID_REQ_SET_REPORT, HID_DT_REPORT, |
| 230 | 0x0200, usb_pcwd->interface_number, buf, sizeof(buf), | 252 | 0x0200, usb_pcwd->interface_number, buf, sizeof(buf), |
| 231 | USB_COMMAND_TIMEOUT) != sizeof(buf)) { | 253 | USB_COMMAND_TIMEOUT) != sizeof(buf)) { |
| 232 | dbg("usb_pcwd_send_command: error in usb_control_msg for cmd 0x%x 0x%x 0x%x\n", cmd, *msb, *lsb); | 254 | dbg("usb_pcwd_send_command: error in usb_control_msg for " |
| 255 | "cmd 0x%x 0x%x 0x%x\n", cmd, *msb, *lsb); | ||
| 233 | } | 256 | } |
| 234 | /* wait till the usb card processed the command, | 257 | /* wait till the usb card processed the command, |
| 235 | * with a max. timeout of USB_COMMAND_TIMEOUT */ | 258 | * with a max. timeout of USB_COMMAND_TIMEOUT */ |
| 236 | got_response = 0; | 259 | got_response = 0; |
| 237 | for (count = 0; (count < USB_COMMAND_TIMEOUT) && (!got_response); count++) { | 260 | for (count = 0; (count < USB_COMMAND_TIMEOUT) && (!got_response); |
| 261 | count++) { | ||
| 238 | mdelay(1); | 262 | mdelay(1); |
| 239 | if (atomic_read(&usb_pcwd->cmd_received)) | 263 | if (atomic_read(&usb_pcwd->cmd_received)) |
| 240 | got_response = 1; | 264 | got_response = 1; |
| @@ -256,10 +280,12 @@ static int usb_pcwd_start(struct usb_pcwd_private *usb_pcwd) | |||
| 256 | int retval; | 280 | int retval; |
| 257 | 281 | ||
| 258 | /* Enable Watchdog */ | 282 | /* Enable Watchdog */ |
| 259 | retval = usb_pcwd_send_command(usb_pcwd, CMD_ENABLE_WATCHDOG, &msb, &lsb); | 283 | retval = usb_pcwd_send_command(usb_pcwd, CMD_ENABLE_WATCHDOG, |
| 284 | &msb, &lsb); | ||
| 260 | 285 | ||
| 261 | if ((retval == 0) || (lsb == 0)) { | 286 | if ((retval == 0) || (lsb == 0)) { |
| 262 | printk(KERN_ERR PFX "Card did not acknowledge enable attempt\n"); | 287 | printk(KERN_ERR PFX |
| 288 | "Card did not acknowledge enable attempt\n"); | ||
| 263 | return -1; | 289 | return -1; |
| 264 | } | 290 | } |
| 265 | 291 | ||
| @@ -273,10 +299,12 @@ static int usb_pcwd_stop(struct usb_pcwd_private *usb_pcwd) | |||
| 273 | int retval; | 299 | int retval; |
| 274 | 300 | ||
| 275 | /* Disable Watchdog */ | 301 | /* Disable Watchdog */ |
| 276 | retval = usb_pcwd_send_command(usb_pcwd, CMD_DISABLE_WATCHDOG, &msb, &lsb); | 302 | retval = usb_pcwd_send_command(usb_pcwd, CMD_DISABLE_WATCHDOG, |
| 303 | &msb, &lsb); | ||
| 277 | 304 | ||
| 278 | if ((retval == 0) || (lsb != 0)) { | 305 | if ((retval == 0) || (lsb != 0)) { |
| 279 | printk(KERN_ERR PFX "Card did not acknowledge disable attempt\n"); | 306 | printk(KERN_ERR PFX |
| 307 | "Card did not acknowledge disable attempt\n"); | ||
| 280 | return -1; | 308 | return -1; |
| 281 | } | 309 | } |
| 282 | 310 | ||
| @@ -308,7 +336,8 @@ static int usb_pcwd_set_heartbeat(struct usb_pcwd_private *usb_pcwd, int t) | |||
| 308 | return 0; | 336 | return 0; |
| 309 | } | 337 | } |
| 310 | 338 | ||
| 311 | static int usb_pcwd_get_temperature(struct usb_pcwd_private *usb_pcwd, int *temperature) | 339 | static int usb_pcwd_get_temperature(struct usb_pcwd_private *usb_pcwd, |
| 340 | int *temperature) | ||
| 312 | { | 341 | { |
| 313 | unsigned char msb, lsb; | 342 | unsigned char msb, lsb; |
| 314 | 343 | ||
| @@ -323,7 +352,8 @@ static int usb_pcwd_get_temperature(struct usb_pcwd_private *usb_pcwd, int *temp | |||
| 323 | return 0; | 352 | return 0; |
| 324 | } | 353 | } |
| 325 | 354 | ||
| 326 | static int usb_pcwd_get_timeleft(struct usb_pcwd_private *usb_pcwd, int *time_left) | 355 | static int usb_pcwd_get_timeleft(struct usb_pcwd_private *usb_pcwd, |
| 356 | int *time_left) | ||
| 327 | { | 357 | { |
| 328 | unsigned char msb, lsb; | 358 | unsigned char msb, lsb; |
| 329 | 359 | ||
| @@ -341,7 +371,7 @@ static int usb_pcwd_get_timeleft(struct usb_pcwd_private *usb_pcwd, int *time_le | |||
| 341 | */ | 371 | */ |
| 342 | 372 | ||
| 343 | static ssize_t usb_pcwd_write(struct file *file, const char __user *data, | 373 | static ssize_t usb_pcwd_write(struct file *file, const char __user *data, |
| 344 | size_t len, loff_t *ppos) | 374 | size_t len, loff_t *ppos) |
| 345 | { | 375 | { |
| 346 | /* See if we got the magic character 'V' and reload the timer */ | 376 | /* See if we got the magic character 'V' and reload the timer */ |
| 347 | if (len) { | 377 | if (len) { |
| @@ -352,7 +382,8 @@ static ssize_t usb_pcwd_write(struct file *file, const char __user *data, | |||
| 352 | * five months ago... */ | 382 | * five months ago... */ |
| 353 | expect_release = 0; | 383 | expect_release = 0; |
| 354 | 384 | ||
| 355 | /* scan to see whether or not we got the magic character */ | 385 | /* scan to see whether or not we got the |
| 386 | * magic character */ | ||
| 356 | for (i = 0; i != len; i++) { | 387 | for (i = 0; i != len; i++) { |
| 357 | char c; | 388 | char c; |
| 358 | if (get_user(c, data + i)) | 389 | if (get_user(c, data + i)) |
| @@ -431,7 +462,7 @@ static long usb_pcwd_ioctl(struct file *file, unsigned int cmd, | |||
| 431 | return -EFAULT; | 462 | return -EFAULT; |
| 432 | 463 | ||
| 433 | if (usb_pcwd_set_heartbeat(usb_pcwd_device, new_heartbeat)) | 464 | if (usb_pcwd_set_heartbeat(usb_pcwd_device, new_heartbeat)) |
| 434 | return -EINVAL; | 465 | return -EINVAL; |
| 435 | 466 | ||
| 436 | usb_pcwd_keepalive(usb_pcwd_device); | 467 | usb_pcwd_keepalive(usb_pcwd_device); |
| 437 | /* Fall */ | 468 | /* Fall */ |
| @@ -475,7 +506,8 @@ static int usb_pcwd_release(struct inode *inode, struct file *file) | |||
| 475 | if (expect_release == 42) { | 506 | if (expect_release == 42) { |
| 476 | usb_pcwd_stop(usb_pcwd_device); | 507 | usb_pcwd_stop(usb_pcwd_device); |
| 477 | } else { | 508 | } else { |
| 478 | printk(KERN_CRIT PFX "Unexpected close, not stopping watchdog!\n"); | 509 | printk(KERN_CRIT PFX |
| 510 | "Unexpected close, not stopping watchdog!\n"); | ||
| 479 | usb_pcwd_keepalive(usb_pcwd_device); | 511 | usb_pcwd_keepalive(usb_pcwd_device); |
| 480 | } | 512 | } |
| 481 | expect_release = 0; | 513 | expect_release = 0; |
| @@ -515,7 +547,8 @@ static int usb_pcwd_temperature_release(struct inode *inode, struct file *file) | |||
| 515 | * Notify system | 547 | * Notify system |
| 516 | */ | 548 | */ |
| 517 | 549 | ||
| 518 | static int usb_pcwd_notify_sys(struct notifier_block *this, unsigned long code, void *unused) | 550 | static int usb_pcwd_notify_sys(struct notifier_block *this, unsigned long code, |
| 551 | void *unused) | ||
| 519 | { | 552 | { |
| 520 | if (code == SYS_DOWN || code == SYS_HALT) | 553 | if (code == SYS_DOWN || code == SYS_HALT) |
| 521 | usb_pcwd_stop(usb_pcwd_device); /* Turn the WDT off */ | 554 | usb_pcwd_stop(usb_pcwd_device); /* Turn the WDT off */ |
| @@ -578,7 +611,8 @@ static inline void usb_pcwd_delete(struct usb_pcwd_private *usb_pcwd) | |||
| 578 | * Called by the usb core when a new device is connected that it thinks | 611 | * Called by the usb core when a new device is connected that it thinks |
| 579 | * this driver might be interested in. | 612 | * this driver might be interested in. |
| 580 | */ | 613 | */ |
| 581 | static int usb_pcwd_probe(struct usb_interface *interface, const struct usb_device_id *id) | 614 | static int usb_pcwd_probe(struct usb_interface *interface, |
| 615 | const struct usb_device_id *id) | ||
| 582 | { | 616 | { |
| 583 | struct usb_device *udev = interface_to_usbdev(interface); | 617 | struct usb_device *udev = interface_to_usbdev(interface); |
| 584 | struct usb_host_interface *iface_desc; | 618 | struct usb_host_interface *iface_desc; |
| @@ -602,7 +636,8 @@ static int usb_pcwd_probe(struct usb_interface *interface, const struct usb_devi | |||
| 602 | 636 | ||
| 603 | /* check out that we have a HID device */ | 637 | /* check out that we have a HID device */ |
| 604 | if (!(iface_desc->desc.bInterfaceClass == USB_CLASS_HID)) { | 638 | if (!(iface_desc->desc.bInterfaceClass == USB_CLASS_HID)) { |
| 605 | printk(KERN_ERR PFX "The device isn't a Human Interface Device\n"); | 639 | printk(KERN_ERR PFX |
| 640 | "The device isn't a Human Interface Device\n"); | ||
| 606 | return -ENODEV; | 641 | return -ENODEV; |
| 607 | } | 642 | } |
| 608 | 643 | ||
| @@ -632,10 +667,12 @@ static int usb_pcwd_probe(struct usb_interface *interface, const struct usb_devi | |||
| 632 | usb_pcwd->udev = udev; | 667 | usb_pcwd->udev = udev; |
| 633 | usb_pcwd->interface = interface; | 668 | usb_pcwd->interface = interface; |
| 634 | usb_pcwd->interface_number = iface_desc->desc.bInterfaceNumber; | 669 | usb_pcwd->interface_number = iface_desc->desc.bInterfaceNumber; |
| 635 | usb_pcwd->intr_size = (le16_to_cpu(endpoint->wMaxPacketSize) > 8 ? le16_to_cpu(endpoint->wMaxPacketSize) : 8); | 670 | usb_pcwd->intr_size = (le16_to_cpu(endpoint->wMaxPacketSize) > 8 ? |
| 671 | le16_to_cpu(endpoint->wMaxPacketSize) : 8); | ||
| 636 | 672 | ||
| 637 | /* set up the memory buffer's */ | 673 | /* set up the memory buffer's */ |
| 638 | usb_pcwd->intr_buffer = usb_buffer_alloc(udev, usb_pcwd->intr_size, GFP_ATOMIC, &usb_pcwd->intr_dma); | 674 | usb_pcwd->intr_buffer = usb_buffer_alloc(udev, usb_pcwd->intr_size, |
| 675 | GFP_ATOMIC, &usb_pcwd->intr_dma); | ||
| 639 | if (!usb_pcwd->intr_buffer) { | 676 | if (!usb_pcwd->intr_buffer) { |
| 640 | printk(KERN_ERR PFX "Out of memory\n"); | 677 | printk(KERN_ERR PFX "Out of memory\n"); |
| 641 | goto error; | 678 | goto error; |
| @@ -669,7 +706,8 @@ static int usb_pcwd_probe(struct usb_interface *interface, const struct usb_devi | |||
| 669 | usb_pcwd_stop(usb_pcwd); | 706 | usb_pcwd_stop(usb_pcwd); |
| 670 | 707 | ||
| 671 | /* Get the Firmware Version */ | 708 | /* Get the Firmware Version */ |
| 672 | got_fw_rev = usb_pcwd_send_command(usb_pcwd, CMD_GET_FIRMWARE_VERSION, &fw_rev_major, &fw_rev_minor); | 709 | got_fw_rev = usb_pcwd_send_command(usb_pcwd, CMD_GET_FIRMWARE_VERSION, |
| 710 | &fw_rev_major, &fw_rev_minor); | ||
| 673 | if (got_fw_rev) | 711 | if (got_fw_rev) |
| 674 | sprintf(fw_ver_str, "%u.%02u", fw_rev_major, fw_rev_minor); | 712 | sprintf(fw_ver_str, "%u.%02u", fw_rev_major, fw_rev_minor); |
| 675 | else | 713 | else |
| @@ -679,9 +717,11 @@ static int usb_pcwd_probe(struct usb_interface *interface, const struct usb_devi | |||
| 679 | fw_ver_str); | 717 | fw_ver_str); |
| 680 | 718 | ||
| 681 | /* Get switch settings */ | 719 | /* Get switch settings */ |
| 682 | usb_pcwd_send_command(usb_pcwd, CMD_GET_DIP_SWITCH_SETTINGS, &dummy, &option_switches); | 720 | usb_pcwd_send_command(usb_pcwd, CMD_GET_DIP_SWITCH_SETTINGS, &dummy, |
| 721 | &option_switches); | ||
| 683 | 722 | ||
| 684 | printk(KERN_INFO PFX "Option switches (0x%02x): Temperature Reset Enable=%s, Power On Delay=%s\n", | 723 | printk(KERN_INFO PFX "Option switches (0x%02x): " |
| 724 | "Temperature Reset Enable=%s, Power On Delay=%s\n", | ||
| 685 | option_switches, | 725 | option_switches, |
| 686 | ((option_switches & 0x10) ? "ON" : "OFF"), | 726 | ((option_switches & 0x10) ? "ON" : "OFF"), |
| 687 | ((option_switches & 0x08) ? "ON" : "OFF")); | 727 | ((option_switches & 0x08) ? "ON" : "OFF")); |
| @@ -690,30 +730,35 @@ static int usb_pcwd_probe(struct usb_interface *interface, const struct usb_devi | |||
| 690 | if (heartbeat == 0) | 730 | if (heartbeat == 0) |
| 691 | heartbeat = heartbeat_tbl[(option_switches & 0x07)]; | 731 | heartbeat = heartbeat_tbl[(option_switches & 0x07)]; |
| 692 | 732 | ||
| 693 | /* Check that the heartbeat value is within it's range ; if not reset to the default */ | 733 | /* Check that the heartbeat value is within it's range ; |
| 734 | * if not reset to the default */ | ||
| 694 | if (usb_pcwd_set_heartbeat(usb_pcwd, heartbeat)) { | 735 | if (usb_pcwd_set_heartbeat(usb_pcwd, heartbeat)) { |
| 695 | usb_pcwd_set_heartbeat(usb_pcwd, WATCHDOG_HEARTBEAT); | 736 | usb_pcwd_set_heartbeat(usb_pcwd, WATCHDOG_HEARTBEAT); |
| 696 | printk(KERN_INFO PFX "heartbeat value must be 0<heartbeat<65536, using %d\n", | 737 | printk(KERN_INFO PFX |
| 738 | "heartbeat value must be 0<heartbeat<65536, using %d\n", | ||
| 697 | WATCHDOG_HEARTBEAT); | 739 | WATCHDOG_HEARTBEAT); |
| 698 | } | 740 | } |
| 699 | 741 | ||
| 700 | retval = register_reboot_notifier(&usb_pcwd_notifier); | 742 | retval = register_reboot_notifier(&usb_pcwd_notifier); |
| 701 | if (retval != 0) { | 743 | if (retval != 0) { |
| 702 | printk(KERN_ERR PFX "cannot register reboot notifier (err=%d)\n", | 744 | printk(KERN_ERR PFX |
| 745 | "cannot register reboot notifier (err=%d)\n", | ||
| 703 | retval); | 746 | retval); |
| 704 | goto error; | 747 | goto error; |
| 705 | } | 748 | } |
| 706 | 749 | ||
| 707 | retval = misc_register(&usb_pcwd_temperature_miscdev); | 750 | retval = misc_register(&usb_pcwd_temperature_miscdev); |
| 708 | if (retval != 0) { | 751 | if (retval != 0) { |
| 709 | printk(KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", | 752 | printk(KERN_ERR PFX |
| 753 | "cannot register miscdev on minor=%d (err=%d)\n", | ||
| 710 | TEMP_MINOR, retval); | 754 | TEMP_MINOR, retval); |
| 711 | goto err_out_unregister_reboot; | 755 | goto err_out_unregister_reboot; |
| 712 | } | 756 | } |
| 713 | 757 | ||
| 714 | retval = misc_register(&usb_pcwd_miscdev); | 758 | retval = misc_register(&usb_pcwd_miscdev); |
| 715 | if (retval != 0) { | 759 | if (retval != 0) { |
| 716 | printk(KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", | 760 | printk(KERN_ERR PFX |
| 761 | "cannot register miscdev on minor=%d (err=%d)\n", | ||
| 717 | WATCHDOG_MINOR, retval); | 762 | WATCHDOG_MINOR, retval); |
| 718 | goto err_out_misc_deregister; | 763 | goto err_out_misc_deregister; |
| 719 | } | 764 | } |
| @@ -799,7 +844,7 @@ static int __init usb_pcwd_init(void) | |||
| 799 | return result; | 844 | return result; |
| 800 | } | 845 | } |
| 801 | 846 | ||
| 802 | printk(KERN_INFO PFX DRIVER_DESC " v" DRIVER_VERSION " (" DRIVER_DATE ")\n"); | 847 | printk(KERN_INFO PFX DRIVER_DESC " v" DRIVER_VERSION "\n"); |
| 803 | return 0; | 848 | return 0; |
| 804 | } | 849 | } |
| 805 | 850 | ||
diff --git a/drivers/watchdog/pnx4008_wdt.c b/drivers/watchdog/pnx4008_wdt.c index 6d9f3d4a9987..64135195f827 100644 --- a/drivers/watchdog/pnx4008_wdt.c +++ b/drivers/watchdog/pnx4008_wdt.c | |||
| @@ -54,22 +54,22 @@ | |||
| 54 | 54 | ||
| 55 | /* WDTIM_CTRL bit definitions */ | 55 | /* WDTIM_CTRL bit definitions */ |
| 56 | #define COUNT_ENAB 1 | 56 | #define COUNT_ENAB 1 |
| 57 | #define RESET_COUNT (1<<1) | 57 | #define RESET_COUNT (1 << 1) |
| 58 | #define DEBUG_EN (1<<2) | 58 | #define DEBUG_EN (1 << 2) |
| 59 | 59 | ||
| 60 | /* WDTIM_MCTRL bit definitions */ | 60 | /* WDTIM_MCTRL bit definitions */ |
| 61 | #define MR0_INT 1 | 61 | #define MR0_INT 1 |
| 62 | #undef RESET_COUNT0 | 62 | #undef RESET_COUNT0 |
| 63 | #define RESET_COUNT0 (1<<2) | 63 | #define RESET_COUNT0 (1 << 2) |
| 64 | #define STOP_COUNT0 (1<<2) | 64 | #define STOP_COUNT0 (1 << 2) |
| 65 | #define M_RES1 (1<<3) | 65 | #define M_RES1 (1 << 3) |
| 66 | #define M_RES2 (1<<4) | 66 | #define M_RES2 (1 << 4) |
| 67 | #define RESFRC1 (1<<5) | 67 | #define RESFRC1 (1 << 5) |
| 68 | #define RESFRC2 (1<<6) | 68 | #define RESFRC2 (1 << 6) |
| 69 | 69 | ||
| 70 | /* WDTIM_EMR bit definitions */ | 70 | /* WDTIM_EMR bit definitions */ |
| 71 | #define EXT_MATCH0 1 | 71 | #define EXT_MATCH0 1 |
| 72 | #define MATCH_OUTPUT_HIGH (2<<4) /*a MATCH_CTRL setting */ | 72 | #define MATCH_OUTPUT_HIGH (2 << 4) /*a MATCH_CTRL setting */ |
| 73 | 73 | ||
| 74 | /* WDTIM_RES bit definitions */ | 74 | /* WDTIM_RES bit definitions */ |
| 75 | #define WDOG_RESET 1 /* read only */ | 75 | #define WDOG_RESET 1 /* read only */ |
diff --git a/drivers/watchdog/riowd.c b/drivers/watchdog/riowd.c index 01cc7e39d92f..2cff53310f7b 100644 --- a/drivers/watchdog/riowd.c +++ b/drivers/watchdog/riowd.c | |||
| @@ -146,7 +146,8 @@ static long riowd_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
| 146 | return 0; | 146 | return 0; |
| 147 | } | 147 | } |
| 148 | 148 | ||
| 149 | static ssize_t riowd_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) | 149 | static ssize_t riowd_write(struct file *file, const char __user *buf, |
| 150 | size_t count, loff_t *ppos) | ||
| 150 | { | 151 | { |
| 151 | struct riowd *p = riowd_device; | 152 | struct riowd *p = riowd_device; |
| 152 | 153 | ||
diff --git a/drivers/watchdog/sa1100_wdt.c b/drivers/watchdog/sa1100_wdt.c index e19b45794717..5bd782f27837 100644 --- a/drivers/watchdog/sa1100_wdt.c +++ b/drivers/watchdog/sa1100_wdt.c | |||
| @@ -1,8 +1,8 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Watchdog driver for the SA11x0/PXA2xx | 2 | * Watchdog driver for the SA11x0/PXA2xx |
| 3 | * | 3 | * |
| 4 | * (c) Copyright 2000 Oleg Drokin <green@crimea.edu> | 4 | * (c) Copyright 2000 Oleg Drokin <green@crimea.edu> |
| 5 | * Based on SoftDog driver by Alan Cox <alan@lxorguk.ukuu.org.uk> | 5 | * Based on SoftDog driver by Alan Cox <alan@lxorguk.ukuu.org.uk> |
| 6 | * | 6 | * |
| 7 | * This program is free software; you can redistribute it and/or | 7 | * This program is free software; you can redistribute it and/or |
| 8 | * modify it under the terms of the GNU General Public License | 8 | * modify it under the terms of the GNU General Public License |
| @@ -15,7 +15,7 @@ | |||
| 15 | * | 15 | * |
| 16 | * (c) Copyright 2000 Oleg Drokin <green@crimea.edu> | 16 | * (c) Copyright 2000 Oleg Drokin <green@crimea.edu> |
| 17 | * | 17 | * |
| 18 | * 27/11/2000 Initial release | 18 | * 27/11/2000 Initial release |
| 19 | */ | 19 | */ |
| 20 | #include <linux/module.h> | 20 | #include <linux/module.h> |
| 21 | #include <linux/moduleparam.h> | 21 | #include <linux/moduleparam.h> |
diff --git a/drivers/watchdog/sbc60xxwdt.c b/drivers/watchdog/sbc60xxwdt.c index 3266daaaecf8..d1c390c7155c 100644 --- a/drivers/watchdog/sbc60xxwdt.c +++ b/drivers/watchdog/sbc60xxwdt.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * 60xx Single Board Computer Watchdog Timer driver for Linux 2.2.x | 2 | * 60xx Single Board Computer Watchdog Timer driver for Linux 2.2.x |
| 3 | * | 3 | * |
| 4 | * Based on acquirewdt.c by Alan Cox. | 4 | * Based on acquirewdt.c by Alan Cox. |
| 5 | * | 5 | * |
| 6 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU General Public License | 7 | * modify it under the terms of the GNU General Public License |
diff --git a/drivers/watchdog/sbc8360.c b/drivers/watchdog/sbc8360.c index ae74f6bcfa23..b6e6799ec45d 100644 --- a/drivers/watchdog/sbc8360.c +++ b/drivers/watchdog/sbc8360.c | |||
| @@ -4,12 +4,12 @@ | |||
| 4 | * (c) Copyright 2005 Webcon, Inc. | 4 | * (c) Copyright 2005 Webcon, Inc. |
| 5 | * | 5 | * |
| 6 | * Based on ib700wdt.c, which is based on advantechwdt.c which is based | 6 | * Based on ib700wdt.c, which is based on advantechwdt.c which is based |
| 7 | * on acquirewdt.c which is based on wdt.c. | 7 | * on acquirewdt.c which is based on wdt.c. |
| 8 | * | 8 | * |
| 9 | * (c) Copyright 2001 Charles Howes <chowes@vsol.net> | 9 | * (c) Copyright 2001 Charles Howes <chowes@vsol.net> |
| 10 | * | 10 | * |
| 11 | * Based on advantechwdt.c which is based on acquirewdt.c which | 11 | * Based on advantechwdt.c which is based on acquirewdt.c which |
| 12 | * is based on wdt.c. | 12 | * is based on wdt.c. |
| 13 | * | 13 | * |
| 14 | * (c) Copyright 2000-2001 Marek Michalkiewicz <marekm@linux.org.pl> | 14 | * (c) Copyright 2000-2001 Marek Michalkiewicz <marekm@linux.org.pl> |
| 15 | * | 15 | * |
| @@ -30,9 +30,9 @@ | |||
| 30 | * | 30 | * |
| 31 | * (c) Copyright 1995 Alan Cox <alan@lxorguk.ukuu.org.uk> | 31 | * (c) Copyright 1995 Alan Cox <alan@lxorguk.ukuu.org.uk> |
| 32 | * | 32 | * |
| 33 | * 14-Dec-2001 Matt Domsch <Matt_Domsch@dell.com> | 33 | * 14-Dec-2001 Matt Domsch <Matt_Domsch@dell.com> |
| 34 | * Added nowayout module option to override CONFIG_WATCHDOG_NOWAYOUT | 34 | * Added nowayout module option to override CONFIG_WATCHDOG_NOWAYOUT |
| 35 | * Added timeout module option to override default | 35 | * Added timeout module option to override default |
| 36 | * | 36 | * |
| 37 | */ | 37 | */ |
| 38 | 38 | ||
diff --git a/drivers/watchdog/sbc_epx_c3.c b/drivers/watchdog/sbc_epx_c3.c index 06553debc7bc..e467ddcf796a 100644 --- a/drivers/watchdog/sbc_epx_c3.c +++ b/drivers/watchdog/sbc_epx_c3.c | |||
| @@ -35,7 +35,8 @@ static int epx_c3_alive; | |||
| 35 | 35 | ||
| 36 | static int nowayout = WATCHDOG_NOWAYOUT; | 36 | static int nowayout = WATCHDOG_NOWAYOUT; |
| 37 | module_param(nowayout, int, 0); | 37 | module_param(nowayout, int, 0); |
| 38 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | 38 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" |
| 39 | __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | ||
| 39 | 40 | ||
| 40 | #define EPXC3_WATCHDOG_CTL_REG 0x1ee /* write 1 to enable, 0 to disable */ | 41 | #define EPXC3_WATCHDOG_CTL_REG 0x1ee /* write 1 to enable, 0 to disable */ |
| 41 | #define EPXC3_WATCHDOG_PET_REG 0x1ef /* write anything to pet once enabled */ | 42 | #define EPXC3_WATCHDOG_PET_REG 0x1ef /* write anything to pet once enabled */ |
diff --git a/drivers/watchdog/sc1200wdt.c b/drivers/watchdog/sc1200wdt.c index 23da3ccd832a..b5e19c1820a2 100644 --- a/drivers/watchdog/sc1200wdt.c +++ b/drivers/watchdog/sc1200wdt.c | |||
| @@ -71,7 +71,7 @@ | |||
| 71 | #define UART2_IRQ 0x04 /* Serial1 */ | 71 | #define UART2_IRQ 0x04 /* Serial1 */ |
| 72 | /* 5 -7 are reserved */ | 72 | /* 5 -7 are reserved */ |
| 73 | 73 | ||
| 74 | static char banner[] __initdata = KERN_INFO PFX SC1200_MODULE_VER; | 74 | static char banner[] __initdata = PFX SC1200_MODULE_VER; |
| 75 | static int timeout = 1; | 75 | static int timeout = 1; |
| 76 | static int io = -1; | 76 | static int io = -1; |
| 77 | static int io_len = 2; /* for non plug and play */ | 77 | static int io_len = 2; /* for non plug and play */ |
| @@ -392,7 +392,7 @@ static int __init sc1200wdt_init(void) | |||
| 392 | { | 392 | { |
| 393 | int ret; | 393 | int ret; |
| 394 | 394 | ||
| 395 | printk("%s\n", banner); | 395 | printk(KERN_INFO "%s\n", banner); |
| 396 | 396 | ||
| 397 | #if defined CONFIG_PNP | 397 | #if defined CONFIG_PNP |
| 398 | if (isapnp) { | 398 | if (isapnp) { |
| @@ -477,6 +477,7 @@ module_init(sc1200wdt_init); | |||
| 477 | module_exit(sc1200wdt_exit); | 477 | module_exit(sc1200wdt_exit); |
| 478 | 478 | ||
| 479 | MODULE_AUTHOR("Zwane Mwaikambo <zwane@commfireservices.com>"); | 479 | MODULE_AUTHOR("Zwane Mwaikambo <zwane@commfireservices.com>"); |
| 480 | MODULE_DESCRIPTION("Driver for National Semiconductor PC87307/PC97307 watchdog component"); | 480 | MODULE_DESCRIPTION( |
| 481 | "Driver for National Semiconductor PC87307/PC97307 watchdog component"); | ||
| 481 | MODULE_LICENSE("GPL"); | 482 | MODULE_LICENSE("GPL"); |
| 482 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); | 483 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); |
diff --git a/drivers/watchdog/sc520_wdt.c b/drivers/watchdog/sc520_wdt.c index a2b6c1067ec5..52b63f2f0dac 100644 --- a/drivers/watchdog/sc520_wdt.c +++ b/drivers/watchdog/sc520_wdt.c | |||
| @@ -1,8 +1,8 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * AMD Elan SC520 processor Watchdog Timer driver | 2 | * AMD Elan SC520 processor Watchdog Timer driver |
| 3 | * | 3 | * |
| 4 | * Based on acquirewdt.c by Alan Cox, | 4 | * Based on acquirewdt.c by Alan Cox, |
| 5 | * and sbc60xxwdt.c by Jakob Oestergaard <jakob@unthought.net> | 5 | * and sbc60xxwdt.c by Jakob Oestergaard <jakob@unthought.net> |
| 6 | * | 6 | * |
| 7 | * This program is free software; you can redistribute it and/or | 7 | * This program is free software; you can redistribute it and/or |
| 8 | * modify it under the terms of the GNU General Public License | 8 | * modify it under the terms of the GNU General Public License |
| @@ -11,7 +11,7 @@ | |||
| 11 | * | 11 | * |
| 12 | * The authors do NOT admit liability nor provide warranty for | 12 | * The authors do NOT admit liability nor provide warranty for |
| 13 | * any of this software. This material is provided "AS-IS" in | 13 | * any of this software. This material is provided "AS-IS" in |
| 14 | * the hope that it may be useful for others. | 14 | * the hope that it may be useful for others. |
| 15 | * | 15 | * |
| 16 | * (c) Copyright 2001 Scott Jennings <linuxdrivers@oro.net> | 16 | * (c) Copyright 2001 Scott Jennings <linuxdrivers@oro.net> |
| 17 | * 9/27 - 2001 [Initial release] | 17 | * 9/27 - 2001 [Initial release] |
| @@ -438,6 +438,7 @@ module_init(sc520_wdt_init); | |||
| 438 | module_exit(sc520_wdt_unload); | 438 | module_exit(sc520_wdt_unload); |
| 439 | 439 | ||
| 440 | MODULE_AUTHOR("Scott and Bill Jennings"); | 440 | MODULE_AUTHOR("Scott and Bill Jennings"); |
| 441 | MODULE_DESCRIPTION("Driver for watchdog timer in AMD \"Elan\" SC520 uProcessor"); | 441 | MODULE_DESCRIPTION( |
| 442 | "Driver for watchdog timer in AMD \"Elan\" SC520 uProcessor"); | ||
| 442 | MODULE_LICENSE("GPL"); | 443 | MODULE_LICENSE("GPL"); |
| 443 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); | 444 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); |
diff --git a/drivers/watchdog/smsc37b787_wdt.c b/drivers/watchdog/smsc37b787_wdt.c index 2e56cad77d19..8a1f0bc3e271 100644 --- a/drivers/watchdog/smsc37b787_wdt.c +++ b/drivers/watchdog/smsc37b787_wdt.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * SMsC 37B787 Watchdog Timer driver for Linux 2.6.x.x | 2 | * SMsC 37B787 Watchdog Timer driver for Linux 2.6.x.x |
| 3 | * | 3 | * |
| 4 | * Based on acquirewdt.c by Alan Cox <alan@lxorguk.ukuu.org.uk> | 4 | * Based on acquirewdt.c by Alan Cox <alan@lxorguk.ukuu.org.uk> |
| 5 | * and some other existing drivers | 5 | * and some other existing drivers |
| 6 | * | 6 | * |
| 7 | * This program is free software; you can redistribute it and/or | 7 | * This program is free software; you can redistribute it and/or |
| 8 | * modify it under the terms of the GNU General Public License | 8 | * modify it under the terms of the GNU General Public License |
| @@ -11,7 +11,7 @@ | |||
| 11 | * | 11 | * |
| 12 | * The authors do NOT admit liability nor provide warranty for | 12 | * The authors do NOT admit liability nor provide warranty for |
| 13 | * any of this software. This material is provided "AS-IS" in | 13 | * any of this software. This material is provided "AS-IS" in |
| 14 | * the hope that it may be useful for others. | 14 | * the hope that it may be useful for others. |
| 15 | * | 15 | * |
| 16 | * (C) Copyright 2003-2006 Sven Anders <anders@anduras.de> | 16 | * (C) Copyright 2003-2006 Sven Anders <anders@anduras.de> |
| 17 | * | 17 | * |
| @@ -22,19 +22,19 @@ | |||
| 22 | * | 22 | * |
| 23 | * Theory of operation: | 23 | * Theory of operation: |
| 24 | * | 24 | * |
| 25 | * A Watchdog Timer (WDT) is a hardware circuit that can | 25 | * A Watchdog Timer (WDT) is a hardware circuit that can |
| 26 | * reset the computer system in case of a software fault. | 26 | * reset the computer system in case of a software fault. |
| 27 | * You probably knew that already. | 27 | * You probably knew that already. |
| 28 | * | 28 | * |
| 29 | * Usually a userspace daemon will notify the kernel WDT driver | 29 | * Usually a userspace daemon will notify the kernel WDT driver |
| 30 | * via the /dev/watchdog special device file that userspace is | 30 | * via the /dev/watchdog special device file that userspace is |
| 31 | * still alive, at regular intervals. When such a notification | 31 | * still alive, at regular intervals. When such a notification |
| 32 | * occurs, the driver will usually tell the hardware watchdog | 32 | * occurs, the driver will usually tell the hardware watchdog |
| 33 | * that everything is in order, and that the watchdog should wait | 33 | * that everything is in order, and that the watchdog should wait |
| 34 | * for yet another little while to reset the system. | 34 | * for yet another little while to reset the system. |
| 35 | * If userspace fails (RAM error, kernel bug, whatever), the | 35 | * If userspace fails (RAM error, kernel bug, whatever), the |
| 36 | * notifications cease to occur, and the hardware watchdog will | 36 | * notifications cease to occur, and the hardware watchdog will |
| 37 | * reset the system (causing a reboot) after the timeout occurs. | 37 | * reset the system (causing a reboot) after the timeout occurs. |
| 38 | * | 38 | * |
| 39 | * Create device with: | 39 | * Create device with: |
| 40 | * mknod /dev/watchdog c 10 130 | 40 | * mknod /dev/watchdog c 10 130 |
| @@ -485,7 +485,7 @@ static long wb_smsc_wdt_ioctl(struct file *file, | |||
| 485 | case WDIOC_GETTIMEOUT: | 485 | case WDIOC_GETTIMEOUT: |
| 486 | new_timeout = timeout; | 486 | new_timeout = timeout; |
| 487 | if (unit == UNIT_MINUTE) | 487 | if (unit == UNIT_MINUTE) |
| 488 | new_timeout *= 60; | 488 | new_timeout *= 60; |
| 489 | return put_user(new_timeout, uarg.i); | 489 | return put_user(new_timeout, uarg.i); |
| 490 | default: | 490 | default: |
| 491 | return -ENOTTY; | 491 | return -ENOTTY; |
diff --git a/drivers/watchdog/softdog.c b/drivers/watchdog/softdog.c index 7204f9662114..ebcc9cea5e99 100644 --- a/drivers/watchdog/softdog.c +++ b/drivers/watchdog/softdog.c | |||
| @@ -1,7 +1,8 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * SoftDog 0.07: A Software Watchdog Device | 2 | * SoftDog 0.07: A Software Watchdog Device |
| 3 | * | 3 | * |
| 4 | * (c) Copyright 1996 Alan Cox <alan@lxorguk.ukuu.org.uk>, All Rights Reserved. | 4 | * (c) Copyright 1996 Alan Cox <alan@lxorguk.ukuu.org.uk>, |
| 5 | * All Rights Reserved. | ||
| 5 | * | 6 | * |
| 6 | * This program is free software; you can redistribute it and/or | 7 | * This program is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU General Public License | 8 | * modify it under the terms of the GNU General Public License |
| @@ -32,7 +33,7 @@ | |||
| 32 | * Added WDIOC_GETTIMEOUT and WDIOC_SETTIMOUT. | 33 | * Added WDIOC_GETTIMEOUT and WDIOC_SETTIMOUT. |
| 33 | * | 34 | * |
| 34 | * 20020530 Joel Becker <joel.becker@oracle.com> | 35 | * 20020530 Joel Becker <joel.becker@oracle.com> |
| 35 | * Added Matt Domsch's nowayout module option. | 36 | * Added Matt Domsch's nowayout module option. |
| 36 | */ | 37 | */ |
| 37 | 38 | ||
| 38 | #include <linux/module.h> | 39 | #include <linux/module.h> |
diff --git a/drivers/watchdog/w83697hf_wdt.c b/drivers/watchdog/w83697hf_wdt.c index 3c7aa412b1f3..a9c7f352fcbf 100644 --- a/drivers/watchdog/w83697hf_wdt.c +++ b/drivers/watchdog/w83697hf_wdt.c | |||
| @@ -462,6 +462,7 @@ module_init(wdt_init); | |||
| 462 | module_exit(wdt_exit); | 462 | module_exit(wdt_exit); |
| 463 | 463 | ||
| 464 | MODULE_LICENSE("GPL"); | 464 | MODULE_LICENSE("GPL"); |
| 465 | MODULE_AUTHOR("Marcus Junker <junker@anduras.de>, Samuel Tardieu <sam@rfc1149.net>"); | 465 | MODULE_AUTHOR("Marcus Junker <junker@anduras.de>, " |
| 466 | "Samuel Tardieu <sam@rfc1149.net>"); | ||
| 466 | MODULE_DESCRIPTION("w83697hf/hg WDT driver"); | 467 | MODULE_DESCRIPTION("w83697hf/hg WDT driver"); |
| 467 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); | 468 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); |
diff --git a/drivers/watchdog/w83697ug_wdt.c b/drivers/watchdog/w83697ug_wdt.c index 6972c0a1e4d6..883b5f79673a 100644 --- a/drivers/watchdog/w83697ug_wdt.c +++ b/drivers/watchdog/w83697ug_wdt.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * w83697ug/uf WDT driver | 2 | * w83697ug/uf WDT driver |
| 3 | * | 3 | * |
| 4 | * (c) Copyright 2008 Flemming Fransen <ff@nrvissing.net> | 4 | * (c) Copyright 2008 Flemming Fransen <ff@nrvissing.net> |
| 5 | * reused original code to supoprt w83697ug/uf. | 5 | * reused original code to support w83697ug/uf. |
| 6 | * | 6 | * |
| 7 | * Based on w83627hf_wdt.c which is based on advantechwdt.c | 7 | * Based on w83627hf_wdt.c which is based on advantechwdt.c |
| 8 | * which is based on wdt.c. | 8 | * which is based on wdt.c. |
diff --git a/drivers/watchdog/w83977f_wdt.c b/drivers/watchdog/w83977f_wdt.c index 2525da5080ca..0560182a1d09 100644 --- a/drivers/watchdog/w83977f_wdt.c +++ b/drivers/watchdog/w83977f_wdt.c | |||
| @@ -426,7 +426,7 @@ static long wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 426 | return -EFAULT; | 426 | return -EFAULT; |
| 427 | 427 | ||
| 428 | if (wdt_set_timeout(new_timeout)) | 428 | if (wdt_set_timeout(new_timeout)) |
| 429 | return -EINVAL; | 429 | return -EINVAL; |
| 430 | 430 | ||
| 431 | wdt_keepalive(); | 431 | wdt_keepalive(); |
| 432 | /* Fall */ | 432 | /* Fall */ |
diff --git a/drivers/watchdog/wd501p.h b/drivers/watchdog/wd501p.h index db34853c28ae..0e3a497d5626 100644 --- a/drivers/watchdog/wd501p.h +++ b/drivers/watchdog/wd501p.h | |||
| @@ -11,9 +11,9 @@ | |||
| 11 | * | 11 | * |
| 12 | * http://www.cymru.net | 12 | * http://www.cymru.net |
| 13 | * | 13 | * |
| 14 | * This driver is provided under the GNU General Public License, incorporated | 14 | * This driver is provided under the GNU General Public License, |
| 15 | * herein by reference. The driver is provided without warranty or | 15 | * incorporated herein by reference. The driver is provided without |
| 16 | * support. | 16 | * warranty or support. |
| 17 | * | 17 | * |
| 18 | * Release 0.04. | 18 | * Release 0.04. |
| 19 | * | 19 | * |
| @@ -39,13 +39,13 @@ | |||
| 39 | /* programmable outputs: */ | 39 | /* programmable outputs: */ |
| 40 | #define WDT_PROGOUT (io+15) /* wr=enable, rd=disable */ | 40 | #define WDT_PROGOUT (io+15) /* wr=enable, rd=disable */ |
| 41 | 41 | ||
| 42 | /* FAN 501 500 */ | 42 | /* FAN 501 500 */ |
| 43 | #define WDC_SR_WCCR 1 /* Active low */ /* X X X */ | 43 | #define WDC_SR_WCCR 1 /* Active low */ /* X X X */ |
| 44 | #define WDC_SR_TGOOD 2 /* X X - */ | 44 | #define WDC_SR_TGOOD 2 /* X X - */ |
| 45 | #define WDC_SR_ISOI0 4 /* X X X */ | 45 | #define WDC_SR_ISOI0 4 /* X X X */ |
| 46 | #define WDC_SR_ISII1 8 /* X X X */ | 46 | #define WDC_SR_ISII1 8 /* X X X */ |
| 47 | #define WDC_SR_FANGOOD 16 /* X - - */ | 47 | #define WDC_SR_FANGOOD 16 /* X - - */ |
| 48 | #define WDC_SR_PSUOVER 32 /* Active low */ /* X X - */ | 48 | #define WDC_SR_PSUOVER 32 /* Active low */ /* X X - */ |
| 49 | #define WDC_SR_PSUUNDR 64 /* Active low */ /* X X - */ | 49 | #define WDC_SR_PSUUNDR 64 /* Active low */ /* X X - */ |
| 50 | #define WDC_SR_IRQ 128 /* Active low */ /* X X X */ | 50 | #define WDC_SR_IRQ 128 /* Active low */ /* X X X */ |
| 51 | 51 | ||
diff --git a/drivers/watchdog/wdt977.c b/drivers/watchdog/wdt977.c index 60e28d49ff52..90ef70eb47d7 100644 --- a/drivers/watchdog/wdt977.c +++ b/drivers/watchdog/wdt977.c | |||
| @@ -401,7 +401,7 @@ static long wdt977_ioctl(struct file *file, unsigned int cmd, | |||
| 401 | return -EFAULT; | 401 | return -EFAULT; |
| 402 | 402 | ||
| 403 | if (wdt977_set_timeout(new_timeout)) | 403 | if (wdt977_set_timeout(new_timeout)) |
| 404 | return -EINVAL; | 404 | return -EINVAL; |
| 405 | 405 | ||
| 406 | wdt977_keepalive(); | 406 | wdt977_keepalive(); |
| 407 | /* Fall */ | 407 | /* Fall */ |
