]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/char/ipmi/ipmi_si_intf.c
Merge branch 'linux-2.6'
[linux-2.6-omap-h63xx.git] / drivers / char / ipmi / ipmi_si_intf.c
index a323cc7a0265a9fcbbba1913526cc7ad9dc3569d..1dd3a065f57ba50b40bd365aeb35c5d942f00fac 100644 (file)
@@ -1915,10 +1915,10 @@ static __devinit int try_init_acpi(struct SPMITable *spmi)
 
        if (spmi->addr.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
                info->io_setup = mem_setup;
-               info->io.addr_type = IPMI_IO_ADDR_SPACE;
+               info->io.addr_type = IPMI_MEM_ADDR_SPACE;
        } else if (spmi->addr.space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
                info->io_setup = port_setup;
-               info->io.addr_type = IPMI_MEM_ADDR_SPACE;
+               info->io.addr_type = IPMI_IO_ADDR_SPACE;
        } else {
                kfree(info);
                printk("ipmi_si: Unknown ACPI I/O Address type\n");
@@ -2050,6 +2050,7 @@ static __devinit void try_init_dmi(struct dmi_ipmi_data *ipmi_data)
                info->si_type = SI_BT;
                break;
        default:
+               kfree(info);
                return;
        }
 
@@ -2189,12 +2190,15 @@ static int __devinit ipmi_pci_probe(struct pci_dev *pdev,
                info->irq_setup = std_irq_setup;
 
        info->dev = &pdev->dev;
+       pci_set_drvdata(pdev, info);
 
        return try_smi_init(info);
 }
 
 static void __devexit ipmi_pci_remove(struct pci_dev *pdev)
 {
+       struct smi_info *info = pci_get_drvdata(pdev);
+       cleanup_one_si(info);
 }
 
 #ifdef CONFIG_PM
@@ -2211,7 +2215,8 @@ static int ipmi_pci_resume(struct pci_dev *pdev)
 
 static struct pci_device_id ipmi_pci_devices[] = {
        { PCI_DEVICE(PCI_HP_VENDOR_ID, PCI_MMC_DEVICE_ID) },
-       { PCI_DEVICE_CLASS(PCI_ERMC_CLASSCODE, PCI_ERMC_CLASSCODE_MASK) }
+       { PCI_DEVICE_CLASS(PCI_ERMC_CLASSCODE, PCI_ERMC_CLASSCODE_MASK) },
+       { 0, }
 };
 MODULE_DEVICE_TABLE(pci, ipmi_pci_devices);
 
@@ -2247,19 +2252,19 @@ static int __devinit ipmi_of_probe(struct of_device *dev,
                return ret;
        }
 
-       regsize = get_property(np, "reg-size", &proplen);
+       regsize = of_get_property(np, "reg-size", &proplen);
        if (regsize && proplen != 4) {
                dev_warn(&dev->dev, PFX "invalid regsize from OF\n");
                return -EINVAL;
        }
 
-       regspacing = get_property(np, "reg-spacing", &proplen);
+       regspacing = of_get_property(np, "reg-spacing", &proplen);
        if (regspacing && proplen != 4) {
                dev_warn(&dev->dev, PFX "invalid regspacing from OF\n");
                return -EINVAL;
        }
 
-       regshift = get_property(np, "reg-shift", &proplen);
+       regshift = of_get_property(np, "reg-shift", &proplen);
        if (regshift && proplen != 4) {
                dev_warn(&dev->dev, PFX "invalid regshift from OF\n");
                return -EINVAL;
@@ -2288,7 +2293,7 @@ static int __devinit ipmi_of_probe(struct of_device *dev,
        info->irq               = irq_of_parse_and_map(dev->node, 0);
        info->dev               = &dev->dev;
 
-       dev_dbg(&dev->dev, "addr 0x%lx regsize %ld spacing %ld irq %x\n",
+       dev_dbg(&dev->dev, "addr 0x%lx regsize %d spacing %d irq %x\n",
                info->io.addr_data, info->io.regsize, info->io.regspacing,
                info->irq);
 
@@ -2854,7 +2859,7 @@ static int try_smi_init(struct smi_info *new_smi)
 
        mutex_unlock(&smi_infos_lock);
 
-       printk(IPMI %s interface initialized\n",si_to_str[new_smi->si_type]);
+       printk(KERN_INFO "IPMI %s interface initialized\n",si_to_str[new_smi->si_type]);
 
        return 0;
 
@@ -2971,6 +2976,10 @@ static __devinit int init_ipmi_si(void)
 #ifdef CONFIG_PCI
                pci_unregister_driver(&ipmi_pci_driver);
 #endif
+
+#ifdef CONFIG_PPC_OF
+               of_unregister_platform_driver(&ipmi_of_platform_driver);
+#endif
                driver_unregister(&ipmi_driver);
                printk("ipmi_si: Unable to find any System Interface(s)\n");
                return -ENODEV;