diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index 8647dc6..e901902 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c @@ -160,6 +160,8 @@ pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, void __weak pcibios_resource_survey_bus(struct pci_bus *bus) { } +void __weak pcibios_irq_setup(struct device *dev) { } + /** * pci_bus_add_device - start driver for a single device * @dev: device to add @@ -170,6 +172,9 @@ int pci_bus_add_device(struct pci_dev *dev) { int retval; + /* need to after bridge is scanned */ + pcibios_irq_setup(&dev->dev); + /* * Can not put in pci_device_add yet because resources * are not assigned yet for some devices. diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c index ba4545f..87bd80b 100644 --- a/drivers/pci/pci-acpi.c +++ b/drivers/pci/pci-acpi.c @@ -302,14 +302,16 @@ static int acpi_pci_find_device(struct device *dev, acpi_handle *handle) return 0; } -static void pci_acpi_setup(struct device *dev) +void pcibios_irq_setup(struct device *dev) { struct pci_dev *pci_dev = to_pci_dev(dev); acpi_handle handle = ACPI_HANDLE(dev); - struct acpi_device *adev; acpi_status status; acpi_handle dummy; + if (acpi_disabled || acpi_pci_disabled) + return; + /* * Evaluate and parse _PRT, if exists. This code allows parsing of * _PRT objects within the scope of non-bridge devices. Note that @@ -326,6 +328,13 @@ static void pci_acpi_setup(struct device *dev) pci_dev->subordinate->number : pci_dev->bus->number; acpi_pci_irq_add_prt(handle, pci_domain_nr(pci_dev->bus), bus); } +} + +static void pci_acpi_setup(struct device *dev) +{ + struct pci_dev *pci_dev = to_pci_dev(dev); + acpi_handle handle = ACPI_HANDLE(dev); + struct acpi_device *adev; if (acpi_bus_get_device(handle, &adev) || !adev->wakeup.flags.valid) return;