diff options
author | Bjorn Helgaas <bjorn.helgaas@hp.com> | 2008-12-09 05:31:11 +0100 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2008-12-31 03:39:22 +0100 |
commit | ee40136313323db1096b17df7b436d22a24ef2be (patch) | |
tree | dbe544334f1caf25cc01f7327366372e36486a41 /drivers/acpi/pci_irq.c | |
parent | ACPI: PCI: use positive logic to simplify code (diff) | |
download | linux-ee40136313323db1096b17df7b436d22a24ef2be.tar.xz linux-ee40136313323db1096b17df7b436d22a24ef2be.zip |
ACPI: PCI: follow typical PCI INTx swizzling pattern
No functional change; this just uses the typical pattern of
PCI INTx swizzling done on other architectures.
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/pci_irq.c')
-rw-r--r-- | drivers/acpi/pci_irq.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/acpi/pci_irq.c b/drivers/acpi/pci_irq.c index e42481f64495..b35e64d71409 100644 --- a/drivers/acpi/pci_irq.c +++ b/drivers/acpi/pci_irq.c @@ -399,7 +399,7 @@ static struct acpi_prt_entry * acpi_pci_irq_derive(struct pci_dev *dev, int pin) { struct acpi_prt_entry *entry = NULL; - struct pci_dev *bridge = dev; + struct pci_dev *bridge; u8 bridge_pin = 0, orig_pin = pin; @@ -407,9 +407,9 @@ acpi_pci_irq_derive(struct pci_dev *dev, int pin) * Attempt to derive an IRQ for this device from a parent bridge's * PCI interrupt routing entry (eg. yenta bridge and add-in card bridge). */ - while (bridge->bus->self) { - pin = (((pin - 1) + PCI_SLOT(bridge->devfn)) % 4) + 1; - bridge = bridge->bus->self; + bridge = dev->bus->self; + while (bridge) { + pin = (((pin - 1) + PCI_SLOT(dev->devfn)) % 4) + 1; if ((bridge->class >> 8) == PCI_CLASS_BRIDGE_CARDBUS) { /* PC card has the same IRQ as its cardbridge */ @@ -431,6 +431,9 @@ acpi_pci_irq_derive(struct pci_dev *dev, int pin) pci_name(bridge))); return entry; } + + dev = bridge; + bridge = dev->bus->self; } dev_warn(&dev->dev, "can't derive routing for PCI INT %c\n", |