diff options
Diffstat (limited to 'drivers/char')
-rw-r--r-- | drivers/char/watchdog/pcwd_pci.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/drivers/char/watchdog/pcwd_pci.c b/drivers/char/watchdog/pcwd_pci.c index f4872c871063..059ac9f12de7 100644 --- a/drivers/char/watchdog/pcwd_pci.c +++ b/drivers/char/watchdog/pcwd_pci.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Berkshire PCI-PC Watchdog Card Driver | 2 | * Berkshire PCI-PC Watchdog Card Driver |
3 | * | 3 | * |
4 | * (c) Copyright 2003-2005 Wim Van Sebroeck <wim@iguana.be>. | 4 | * (c) Copyright 2003-2007 Wim Van Sebroeck <wim@iguana.be>. |
5 | * | 5 | * |
6 | * Based on source code of the following authors: | 6 | * Based on source code of the following authors: |
7 | * Ken Hollis <kenji@bitgate.com>, | 7 | * Ken Hollis <kenji@bitgate.com>, |
@@ -51,8 +51,8 @@ | |||
51 | #include <asm/io.h> /* For inb/outb/... */ | 51 | #include <asm/io.h> /* For inb/outb/... */ |
52 | 52 | ||
53 | /* Module and version information */ | 53 | /* Module and version information */ |
54 | #define WATCHDOG_VERSION "1.02" | 54 | #define WATCHDOG_VERSION "1.03" |
55 | #define WATCHDOG_DATE "03 Sep 2005" | 55 | #define WATCHDOG_DATE "06 Jan 2007" |
56 | #define WATCHDOG_DRIVER_NAME "PCI-PC Watchdog" | 56 | #define WATCHDOG_DRIVER_NAME "PCI-PC Watchdog" |
57 | #define WATCHDOG_NAME "pcwd_pci" | 57 | #define WATCHDOG_NAME "pcwd_pci" |
58 | #define PFX WATCHDOG_NAME ": " | 58 | #define PFX WATCHDOG_NAME ": " |
@@ -96,6 +96,18 @@ | |||
96 | #define CMD_WRITE_WATCHDOG_TIMEOUT 0x19 | 96 | #define CMD_WRITE_WATCHDOG_TIMEOUT 0x19 |
97 | #define CMD_GET_CLEAR_RESET_COUNT 0x84 | 97 | #define CMD_GET_CLEAR_RESET_COUNT 0x84 |
98 | 98 | ||
99 | /* Watchdog's Dip Switch heartbeat values */ | ||
100 | static const int heartbeat_tbl [] = { | ||
101 | 5, /* OFF-OFF-OFF = 5 Sec */ | ||
102 | 10, /* OFF-OFF-ON = 10 Sec */ | ||
103 | 30, /* OFF-ON-OFF = 30 Sec */ | ||
104 | 60, /* OFF-ON-ON = 1 Min */ | ||
105 | 300, /* ON-OFF-OFF = 5 Min */ | ||
106 | 600, /* ON-OFF-ON = 10 Min */ | ||
107 | 1800, /* ON-ON-OFF = 30 Min */ | ||
108 | 3600, /* ON-ON-ON = 1 hour */ | ||
109 | }; | ||
110 | |||
99 | /* We can only use 1 card due to the /dev/watchdog restriction */ | 111 | /* We can only use 1 card due to the /dev/watchdog restriction */ |
100 | static int cards_found; | 112 | static int cards_found; |
101 | 113 | ||
@@ -119,10 +131,10 @@ static int debug = QUIET; | |||
119 | module_param(debug, int, 0); | 131 | module_param(debug, int, 0); |
120 | MODULE_PARM_DESC(debug, "Debug level: 0=Quiet, 1=Verbose, 2=Debug (default=0)"); | 132 | MODULE_PARM_DESC(debug, "Debug level: 0=Quiet, 1=Verbose, 2=Debug (default=0)"); |
121 | 133 | ||
122 | #define WATCHDOG_HEARTBEAT 2 /* 2 sec default heartbeat */ | 134 | #define WATCHDOG_HEARTBEAT 0 /* default heartbeat = delay-time from dip-switches */ |
123 | static int heartbeat = WATCHDOG_HEARTBEAT; | 135 | static int heartbeat = WATCHDOG_HEARTBEAT; |
124 | module_param(heartbeat, int, 0); | 136 | module_param(heartbeat, int, 0); |
125 | MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. (0<heartbeat<65536, default=" __MODULE_STRING(WATCHDOG_HEARTBEAT) ")"); | 137 | MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. (0<heartbeat<65536 or 0=delay-time from dip-switches, default=" __MODULE_STRING(WATCHDOG_HEARTBEAT) ")"); |
126 | 138 | ||
127 | static int nowayout = WATCHDOG_NOWAYOUT; | 139 | static int nowayout = WATCHDOG_NOWAYOUT; |
128 | module_param(nowayout, int, 0); | 140 | module_param(nowayout, int, 0); |
@@ -711,6 +723,10 @@ static int __devinit pcipcwd_card_init(struct pci_dev *pdev, | |||
711 | /* Show info about the card itself */ | 723 | /* Show info about the card itself */ |
712 | pcipcwd_show_card_info(); | 724 | pcipcwd_show_card_info(); |
713 | 725 | ||
726 | /* If heartbeat = 0 then we use the heartbeat from the dip-switches */ | ||
727 | if (heartbeat == 0) | ||
728 | heartbeat = heartbeat_tbl[(pcipcwd_get_option_switches() & 0x07)]; | ||
729 | |||
714 | /* Check that the heartbeat value is within it's range ; if not reset to the default */ | 730 | /* Check that the heartbeat value is within it's range ; if not reset to the default */ |
715 | if (pcipcwd_set_heartbeat(heartbeat)) { | 731 | if (pcipcwd_set_heartbeat(heartbeat)) { |
716 | pcipcwd_set_heartbeat(WATCHDOG_HEARTBEAT); | 732 | pcipcwd_set_heartbeat(WATCHDOG_HEARTBEAT); |