[WATCHDOG] wdt_pci.c: remove #ifdef CONFIG_WDT_501_PCI
authorWim Van Sebroeck <wim@iguana.be>
Fri, 19 Jun 2009 09:32:57 +0000 (09:32 +0000)
committerWim Van Sebroeck <wim@iguana.be>
Tue, 23 Jun 2009 07:13:52 +0000 (07:13 +0000)
Change the wdt_pci.c watchdog driver so that the code is the same for
both the PCI-WDT500 as the PCI-WDT501 card. The selection of the card
is now being done via the module parameter: 'type' instead of the
config option CONFIG_WDT_501_PCI.

Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
drivers/watchdog/Kconfig
drivers/watchdog/wdt_pci.c

index e8d45b6ccef8fe4d94b67c0bffbb68228876c8d1..b1ccc04f3c9ab793705e9df16738578febe8d518 100644 (file)
@@ -1007,24 +1007,16 @@ config WDTPCI
        ---help---
          If you have a PCI-WDT500/501 watchdog board, say Y here, otherwise N.
 
-         To compile this driver as a module, choose M here: the
-         module will be called wdt_pci.
-
-config WDT_501_PCI
-       bool "PCI-WDT501 features"
-       depends on WDTPCI
-       help
-         Saying Y here and creating a character special file /dev/temperature
-         with major number 10 and minor number 131 ("man mknod") will give
-         you a thermometer inside your computer: reading from
-         /dev/temperature yields one byte, the temperature in degrees
-         Fahrenheit. This works only if you have a PCI-WDT501 watchdog board
-         installed.
+         If you have a PCI-WDT501 watchdog board then you can enable the
+         temperature sensor by setting the type parameter to 501.
 
          If you want to enable the Fan Tachometer on the PCI-WDT501, then you
          can do this via the tachometer parameter. Only do this if you have a
          fan tachometer actually set up.
 
+         To compile this driver as a module, choose M here: the
+         module will be called wdt_pci.
+
 #
 # USB-based Watchdog Cards
 #
index c45839a4a34dfd7e7a58c18674bc1cb680d24b64..7a1bdc7c95a98fdbcc7a897190b4b7634b2e2e85 100644 (file)
@@ -2,7 +2,7 @@
  *     Industrial Computer Source PCI-WDT500/501 driver
  *
  *     (c) Copyright 1996-1997 Alan Cox <alan@lxorguk.ukuu.org.uk>,
- *                                              All Rights Reserved.
+ *                                             All Rights Reserved.
  *
  *     This program is free software; you can redistribute it and/or
  *     modify it under the terms of the GNU General Public License
@@ -99,14 +99,16 @@ MODULE_PARM_DESC(nowayout,
                "Watchdog cannot be stopped once started (default="
                                __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
 
-#ifdef CONFIG_WDT_501_PCI
 /* Support for the Fan Tachometer on the PCI-WDT501 */
 static int tachometer;
-
 module_param(tachometer, int, 0);
 MODULE_PARM_DESC(tachometer,
-       "PCI-WDT501 Fan Tachometer support (0=disable, default=0)");
-#endif /* CONFIG_WDT_501_PCI */
+               "PCI-WDT501 Fan Tachometer support (0=disable, default=0)");
+
+static int type = 500;
+module_param(type, int, 0);
+MODULE_PARM_DESC(type,
+               "PCI-WDT501 Card type (500 or 501 , default=500)");
 
 /*
  *     Programming support
@@ -266,22 +268,21 @@ static int wdtpci_get_status(int *status)
                *status |= WDIOF_EXTERN1;
        if (new_status & WDC_SR_ISII1)
                *status |= WDIOF_EXTERN2;
-#ifdef CONFIG_WDT_501_PCI
-       if (!(new_status & WDC_SR_TGOOD))
-               *status |= WDIOF_OVERHEAT;
-       if (!(new_status & WDC_SR_PSUOVER))
-               *status |= WDIOF_POWEROVER;
-       if (!(new_status & WDC_SR_PSUUNDR))
-               *status |= WDIOF_POWERUNDER;
-       if (tachometer) {
-               if (!(new_status & WDC_SR_FANGOOD))
-                       *status |= WDIOF_FANFAULT;
+       if (type == 501) {
+               if (!(new_status & WDC_SR_TGOOD))
+                       *status |= WDIOF_OVERHEAT;
+               if (!(new_status & WDC_SR_PSUOVER))
+                       *status |= WDIOF_POWEROVER;
+               if (!(new_status & WDC_SR_PSUUNDR))
+                       *status |= WDIOF_POWERUNDER;
+               if (tachometer) {
+                       if (!(new_status & WDC_SR_FANGOOD))
+                               *status |= WDIOF_FANFAULT;
+               }
        }
-#endif /* CONFIG_WDT_501_PCI */
        return 0;
 }
 
-#ifdef CONFIG_WDT_501_PCI
 /**
  *     wdtpci_get_temperature:
  *
@@ -300,7 +301,6 @@ static int wdtpci_get_temperature(int *temperature)
        *temperature = (c * 11 / 15) + 7;
        return 0;
 }
-#endif /* CONFIG_WDT_501_PCI */
 
 /**
  *     wdtpci_interrupt:
@@ -327,22 +327,22 @@ static irqreturn_t wdtpci_interrupt(int irq, void *dev_id)
 
        printk(KERN_CRIT PFX "status %d\n", status);
 
-#ifdef CONFIG_WDT_501_PCI
-       if (!(status & WDC_SR_TGOOD)) {
-               u8 alarm = inb(WDT_RT);
-               printk(KERN_CRIT PFX "Overheat alarm.(%d)\n", alarm);
-               udelay(8);
-       }
-       if (!(status & WDC_SR_PSUOVER))
-               printk(KERN_CRIT PFX "PSU over voltage.\n");
-       if (!(status & WDC_SR_PSUUNDR))
-               printk(KERN_CRIT PFX "PSU under voltage.\n");
-       if (tachometer) {
-               if (!(status & WDC_SR_FANGOOD))
-                       printk(KERN_CRIT PFX "Possible fan fault.\n");
+       if (type == 501) {
+               if (!(status & WDC_SR_TGOOD)) {
+                       printk(KERN_CRIT PFX "Overheat alarm.(%d)\n",
+                                                               inb(WDT_RT));
+                       udelay(8);
+               }
+               if (!(status & WDC_SR_PSUOVER))
+                       printk(KERN_CRIT PFX "PSU over voltage.\n");
+               if (!(status & WDC_SR_PSUUNDR))
+                       printk(KERN_CRIT PFX "PSU under voltage.\n");
+               if (tachometer) {
+                       if (!(status & WDC_SR_FANGOOD))
+                               printk(KERN_CRIT PFX "Possible fan fault.\n");
+               }
        }
-#endif /* CONFIG_WDT_501_PCI */
-       if (!(status&WDC_SR_WCCR)) {
+       if (!(status & WDC_SR_WCCR)) {
 #ifdef SOFTWARE_REBOOT
 #ifdef ONLY_TESTING
                printk(KERN_CRIT PFX "Would Reboot.\n");
@@ -371,12 +371,13 @@ static irqreturn_t wdtpci_interrupt(int irq, void *dev_id)
  */
 
 static ssize_t wdtpci_write(struct file *file, const char __user *buf,
-                                       size_t count, loff_t *ppos)
+                                               size_t count, loff_t *ppos)
 {
        if (count) {
                if (!nowayout) {
                        size_t i;
 
+                       /* In case it was set long ago */
                        expect_close = 0;
 
                        for (i = 0; i != count; i++) {
@@ -406,10 +407,10 @@ static ssize_t wdtpci_write(struct file *file, const char __user *buf,
 static long wdtpci_ioctl(struct file *file, unsigned int cmd,
                                                        unsigned long arg)
 {
-       int new_heartbeat;
-       int status;
        void __user *argp = (void __user *)arg;
        int __user *p = argp;
+       int new_heartbeat;
+       int status;
 
        static struct watchdog_info ident = {
                .options =              WDIOF_SETTIMEOUT|
@@ -421,11 +422,12 @@ static long wdtpci_ioctl(struct file *file, unsigned int cmd,
 
        /* Add options according to the card we have */
        ident.options |= (WDIOF_EXTERN1|WDIOF_EXTERN2);
-#ifdef CONFIG_WDT_501_PCI
-       ident.options |= (WDIOF_OVERHEAT|WDIOF_POWERUNDER|WDIOF_POWEROVER);
-       if (tachometer)
-               ident.options |= WDIOF_FANFAULT;
-#endif /* CONFIG_WDT_501_PCI */
+       if (type == 501) {
+               ident.options |= (WDIOF_OVERHEAT|WDIOF_POWERUNDER|
+                                                       WDIOF_POWEROVER);
+               if (tachometer)
+                       ident.options |= WDIOF_FANFAULT;
+       }
 
        switch (cmd) {
        case WDIOC_GETSUPPORT:
@@ -503,7 +505,6 @@ static int wdtpci_release(struct inode *inode, struct file *file)
        return 0;
 }
 
-#ifdef CONFIG_WDT_501_PCI
 /**
  *     wdtpci_temp_read:
  *     @file: file handle to the watchdog board
@@ -554,7 +555,6 @@ static int wdtpci_temp_release(struct inode *inode, struct file *file)
 {
        return 0;
 }
-#endif /* CONFIG_WDT_501_PCI */
 
 /**
  *     notify_sys:
@@ -596,7 +596,6 @@ static struct miscdevice wdtpci_miscdev = {
        .fops   = &wdtpci_fops,
 };
 
-#ifdef CONFIG_WDT_501_PCI
 static const struct file_operations wdtpci_temp_fops = {
        .owner          = THIS_MODULE,
        .llseek         = no_llseek,
@@ -610,7 +609,6 @@ static struct miscdevice temp_miscdev = {
        .name   = "temperature",
        .fops   = &wdtpci_temp_fops,
 };
-#endif /* CONFIG_WDT_501_PCI */
 
 /*
  *     The WDT card needs to learn about soft shutdowns in order to
@@ -633,6 +631,11 @@ static int __devinit wdtpci_init_one(struct pci_dev *dev,
                return -ENODEV;
        }
 
+       if (type != 500 && type != 501) {
+               printk(KERN_ERR PFX "unknown card type '%d'.\n", type);
+               return -ENODEV;
+       }
+
        if (pci_enable_device(dev)) {
                printk(KERN_ERR PFX "Not possible to enable PCI Device\n");
                return -ENODEV;
@@ -678,15 +681,15 @@ static int __devinit wdtpci_init_one(struct pci_dev *dev,
                goto out_irq;
        }
 
-#ifdef CONFIG_WDT_501_PCI
-       ret = misc_register(&temp_miscdev);
-       if (ret) {
-               printk(KERN_ERR PFX
+       if (type == 501) {
+               ret = misc_register(&temp_miscdev);
+               if (ret) {
+                       printk(KERN_ERR PFX
                        "cannot register miscdev on minor=%d (err=%d)\n",
-                                       TEMP_MINOR, ret);
-               goto out_rbt;
+                                                       TEMP_MINOR, ret);
+                       goto out_rbt;
+               }
        }
-#endif /* CONFIG_WDT_501_PCI */
 
        ret = misc_register(&wdtpci_miscdev);
        if (ret) {
@@ -698,20 +701,18 @@ static int __devinit wdtpci_init_one(struct pci_dev *dev,
 
        printk(KERN_INFO PFX "initialized. heartbeat=%d sec (nowayout=%d)\n",
                heartbeat, nowayout);
-#ifdef CONFIG_WDT_501_PCI
-       printk(KERN_INFO "wdt: Fan Tachometer is %s\n",
+       if (type == 501)
+               printk(KERN_INFO "wdt: Fan Tachometer is %s\n",
                                (tachometer ? "Enabled" : "Disabled"));
-#endif /* CONFIG_WDT_501_PCI */
 
        ret = 0;
 out:
        return ret;
 
 out_misc:
-#ifdef CONFIG_WDT_501_PCI
-       misc_deregister(&temp_miscdev);
+       if (type == 501)
+               misc_deregister(&temp_miscdev);
 out_rbt:
-#endif /* CONFIG_WDT_501_PCI */
        unregister_reboot_notifier(&wdtpci_notifier);
 out_irq:
        free_irq(irq, &wdtpci_miscdev);
@@ -728,9 +729,8 @@ static void __devexit wdtpci_remove_one(struct pci_dev *pdev)
        /* here we assume only one device will ever have
         * been picked up and registered by probe function */
        misc_deregister(&wdtpci_miscdev);
-#ifdef CONFIG_WDT_501_PCI
-       misc_deregister(&temp_miscdev);
-#endif /* CONFIG_WDT_501_PCI */
+       if (type == 501)
+               misc_deregister(&temp_miscdev);
        unregister_reboot_notifier(&wdtpci_notifier);
        free_irq(irq, &wdtpci_miscdev);
        release_region(io, 16);