]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/watchdog/iTCO_wdt.c
Merge branch 'for-linus' of git://git.infradead.org/users/eparis/notify
[karo-tx-linux.git] / drivers / watchdog / iTCO_wdt.c
index 69de8713b8e49ccb474e798748e4f0aca59ac9ee..f7e90fe47b71fb823620ed06496370cfcf6b3c30 100644 (file)
@@ -146,6 +146,7 @@ enum iTCO_chipsets {
        TCO_CPT29,      /* Cougar Point */
        TCO_CPT30,      /* Cougar Point */
        TCO_CPT31,      /* Cougar Point */
+       TCO_PBG,        /* Patsburg */
 };
 
 static struct {
@@ -233,6 +234,7 @@ static struct {
        {"Cougar Point", 2},
        {"Cougar Point", 2},
        {"Cougar Point", 2},
+       {"Patsburg", 2},
        {NULL, 0}
 };
 
@@ -348,6 +350,7 @@ static struct pci_device_id iTCO_wdt_pci_tbl[] = {
        { ITCO_PCI_DEVICE(0x1c5d,                               TCO_CPT29)},
        { ITCO_PCI_DEVICE(0x1c5e,                               TCO_CPT30)},
        { ITCO_PCI_DEVICE(0x1c5f,                               TCO_CPT31)},
+       { ITCO_PCI_DEVICE(0x1d40,                               TCO_PBG)},
        { 0, },                 /* End of list */
 };
 MODULE_DEVICE_TABLE(pci, iTCO_wdt_pci_tbl);
@@ -374,7 +377,7 @@ static char expect_release;
 static struct {                /* this is private data for the iTCO_wdt device */
        /* TCO version/generation */
        unsigned int iTCO_version;
-       /* The cards ACPIBASE address (TCOBASE = ACPIBASE+0x60) */
+       /* The device's ACPIBASE address (TCOBASE = ACPIBASE+0x60) */
        unsigned long ACPIBASE;
        /* NO_REBOOT flag is Memory-Mapped GCS register bit 5 (TCO version 2)*/
        unsigned long __iomem *gcs;
@@ -467,7 +470,7 @@ static int iTCO_wdt_start(void)
        if (iTCO_wdt_unset_NO_REBOOT_bit()) {
                spin_unlock(&iTCO_wdt_private.io_lock);
                printk(KERN_ERR PFX "failed to reset NO_REBOOT flag, "
-                                       "reboot disabled by hardware\n");
+                                       "reboot disabled by hardware/BIOS\n");
                return -EIO;
        }
 
@@ -781,8 +784,8 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev,
        base_address &= 0x0000ff80;
        if (base_address == 0x00000000) {
                /* Something's wrong here, ACPIBASE has to be set */
-               printk(KERN_ERR PFX "failed to get TCOBASE address\n");
-               pci_dev_put(pdev);
+               printk(KERN_ERR PFX "failed to get TCOBASE address, "
+                                       "device disabled by hardware/BIOS\n");
                return -ENODEV;
        }
        iTCO_wdt_private.iTCO_version =
@@ -797,7 +800,8 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev,
        if (iTCO_wdt_private.iTCO_version == 2) {
                pci_read_config_dword(pdev, 0xf0, &base_address);
                if ((base_address & 1) == 0) {
-                       printk(KERN_ERR PFX "RCBA is disabled by hardware\n");
+                       printk(KERN_ERR PFX "RCBA is disabled by hardware"
+                                               "/BIOS, device disabled\n");
                        ret = -ENODEV;
                        goto out;
                }
@@ -808,7 +812,7 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev,
        /* Check chipset's NO_REBOOT bit */
        if (iTCO_wdt_unset_NO_REBOOT_bit() && iTCO_vendor_check_noreboot_on()) {
                printk(KERN_INFO PFX "unable to reset NO_REBOOT flag, "
-                                       "platform may have disabled it\n");
+                                       "device disabled by hardware/BIOS\n");
                ret = -ENODEV;  /* Cannot reset NO_REBOOT bit */
                goto out_unmap;
        }
@@ -819,7 +823,8 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev,
        /* The TCO logic uses the TCO_EN bit in the SMI_EN register */
        if (!request_region(SMI_EN, 4, "iTCO_wdt")) {
                printk(KERN_ERR PFX
-                       "I/O address 0x%04lx already in use\n", SMI_EN);
+                       "I/O address 0x%04lx already in use, "
+                                               "device disabled\n", SMI_EN);
                ret = -EIO;
                goto out_unmap;
        }
@@ -831,8 +836,8 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev,
        /* The TCO I/O registers reside in a 32-byte range pointed to
           by the TCOBASE value */
        if (!request_region(TCOBASE, 0x20, "iTCO_wdt")) {
-               printk(KERN_ERR PFX "I/O address 0x%04lx already in use\n",
-                       TCOBASE);
+               printk(KERN_ERR PFX "I/O address 0x%04lx already in use "
+                                               "device disabled\n", TCOBASE);
                ret = -EIO;
                goto unreg_smi_en;
        }
@@ -880,7 +885,6 @@ out_unmap:
        if (iTCO_wdt_private.iTCO_version == 2)
                iounmap(iTCO_wdt_private.gcs);
 out:
-       pci_dev_put(iTCO_wdt_private.pdev);
        iTCO_wdt_private.ACPIBASE = 0;
        return ret;
 }
@@ -921,7 +925,7 @@ static int __devinit iTCO_wdt_probe(struct platform_device *dev)
        }
 
        if (!found)
-               printk(KERN_INFO PFX "No card detected\n");
+               printk(KERN_INFO PFX "No device detected.\n");
 
        return ret;
 }