diff options
Diffstat (limited to 'drivers/pci/setup-irq.c')
-rw-r--r-- | drivers/pci/setup-irq.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/pci/setup-irq.c b/drivers/pci/setup-irq.c index a251289c9958..568f1877315c 100644 --- a/drivers/pci/setup-irq.c +++ b/drivers/pci/setup-irq.c | |||
@@ -24,7 +24,7 @@ pdev_fixup_irq(struct pci_dev *dev, | |||
24 | int (*map_irq)(struct pci_dev *, u8, u8)) | 24 | int (*map_irq)(struct pci_dev *, u8, u8)) |
25 | { | 25 | { |
26 | u8 pin, slot; | 26 | u8 pin, slot; |
27 | int irq; | 27 | int irq = 0; |
28 | 28 | ||
29 | /* If this device is not on the primary bus, we need to figure out | 29 | /* If this device is not on the primary bus, we need to figure out |
30 | which interrupt pin it will come in on. We know which slot it | 30 | which interrupt pin it will come in on. We know which slot it |
@@ -33,16 +33,18 @@ pdev_fixup_irq(struct pci_dev *dev, | |||
33 | apply the swizzle function. */ | 33 | apply the swizzle function. */ |
34 | 34 | ||
35 | pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); | 35 | pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); |
36 | /* Cope with 0 and illegal. */ | 36 | /* Cope with illegal. */ |
37 | if (pin == 0 || pin > 4) | 37 | if (pin > 4) |
38 | pin = 1; | 38 | pin = 1; |
39 | 39 | ||
40 | /* Follow the chain of bridges, swizzling as we go. */ | 40 | if (pin != 0) { |
41 | slot = (*swizzle)(dev, &pin); | 41 | /* Follow the chain of bridges, swizzling as we go. */ |
42 | slot = (*swizzle)(dev, &pin); | ||
42 | 43 | ||
43 | irq = (*map_irq)(dev, slot, pin); | 44 | irq = (*map_irq)(dev, slot, pin); |
44 | if (irq == -1) | 45 | if (irq == -1) |
45 | irq = 0; | 46 | irq = 0; |
47 | } | ||
46 | dev->irq = irq; | 48 | dev->irq = irq; |
47 | 49 | ||
48 | pr_debug("PCI: fixup irq: (%s) got %d\n", | 50 | pr_debug("PCI: fixup irq: (%s) got %d\n", |