]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/pci/hotplug/cpcihp_generic.c
PCI hotplug: pciehp: message refinement
[linux-2.6-omap-h63xx.git] / drivers / pci / hotplug / cpcihp_generic.c
index 2d4639d6841f4a6c93e29d6d3a2c9d5713ca3309..148fb463b81ccc522ad76be7b48b75b369d89390 100644 (file)
@@ -34,7 +34,6 @@
  * Send feedback to <scottm@somanetworks.com>
  */
 
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/errno.h>
@@ -85,7 +84,7 @@ static int __init validate_parameters(void)
 
        if(!bridge) {
                info("not configured, disabling.");
-               return 1;
+               return -EINVAL;
        }
        str = bridge;
        if(!*str)
@@ -148,19 +147,25 @@ static int __init cpcihp_generic_init(void)
 
        info(DRIVER_DESC " version: " DRIVER_VERSION);
        status = validate_parameters();
-       if(status != 0)
+       if (status)
                return status;
 
        r = request_region(port, 1, "#ENUM hotswap signal register");
        if(!r)
                return -EBUSY;
 
-       dev = pci_find_slot(bridge_busnr, PCI_DEVFN(bridge_slot, 0));
+       bus = pci_find_bus(0, bridge_busnr);
+       if (!bus) {
+               err("Invalid bus number %d", bridge_busnr);
+               return -EINVAL;
+       }
+       dev = pci_get_slot(bus, PCI_DEVFN(bridge_slot, 0));
        if(!dev || dev->hdr_type != PCI_HEADER_TYPE_BRIDGE) {
                err("Invalid bridge device %s", bridge);
                return -EINVAL;
        }
        bus = dev->subordinate;
+       pci_dev_put(dev);
 
        memset(&generic_hpc, 0, sizeof (struct cpci_hp_controller));
        generic_hpc_ops.query_enum = query_enum;