70f1680675
SVN-Revision: 31573
77 lines
1.7 KiB
Diff
77 lines
1.7 KiB
Diff
--- a/arch/mips/pci/pci-bcm47xx.c
|
|
+++ b/arch/mips/pci/pci-bcm47xx.c
|
|
@@ -25,6 +25,7 @@
|
|
#include <linux/types.h>
|
|
#include <linux/pci.h>
|
|
#include <linux/ssb/ssb.h>
|
|
+#include <linux/bcma/bcma.h>
|
|
#include <bcm47xx.h>
|
|
|
|
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
|
@@ -32,15 +33,12 @@ int __init pcibios_map_irq(const struct
|
|
return 0;
|
|
}
|
|
|
|
-int pcibios_plat_dev_init(struct pci_dev *dev)
|
|
-{
|
|
#ifdef CONFIG_BCM47XX_SSB
|
|
+static int bcm47xx_pcibios_plat_dev_init_ssb(struct pci_dev *dev)
|
|
+{
|
|
int res;
|
|
u8 slot, pin;
|
|
|
|
- if (bcm47xx_bus_type != BCM47XX_BUS_TYPE_SSB)
|
|
- return 0;
|
|
-
|
|
res = ssb_pcibios_plat_dev_init(dev);
|
|
if (res < 0) {
|
|
printk(KERN_ALERT "PCI: Failed to init device %s\n",
|
|
@@ -60,6 +58,47 @@ int pcibios_plat_dev_init(struct pci_dev
|
|
}
|
|
|
|
dev->irq = res;
|
|
+ return 0;
|
|
+}
|
|
#endif
|
|
+
|
|
+#ifdef CONFIG_BCM47XX_BCMA
|
|
+static int bcm47xx_pcibios_plat_dev_init_bcma(struct pci_dev *dev)
|
|
+{
|
|
+ int res;
|
|
+
|
|
+ res = bcma_core_pci_plat_dev_init(dev);
|
|
+ if (res < 0) {
|
|
+ printk(KERN_ALERT "PCI: Failed to init device %s\n",
|
|
+ pci_name(dev));
|
|
+ return res;
|
|
+ }
|
|
+
|
|
+ res = bcma_core_pci_pcibios_map_irq(dev);
|
|
+
|
|
+ /* IRQ-0 and IRQ-1 are software interrupts. */
|
|
+ if (res < 2) {
|
|
+ printk(KERN_ALERT "PCI: Failed to map IRQ of device %s\n",
|
|
+ pci_name(dev));
|
|
+ return res;
|
|
+ }
|
|
+
|
|
+ dev->irq = res;
|
|
return 0;
|
|
}
|
|
+#endif
|
|
+
|
|
+int pcibios_plat_dev_init(struct pci_dev *dev)
|
|
+{
|
|
+#ifdef CONFIG_BCM47XX_SSB
|
|
+ if (bcm47xx_bus_type == BCM47XX_BUS_TYPE_SSB)
|
|
+ return bcm47xx_pcibios_plat_dev_init_ssb(dev);
|
|
+ else
|
|
+#endif
|
|
+#ifdef CONFIG_BCM47XX_BCMA
|
|
+ if (bcm47xx_bus_type == BCM47XX_BUS_TYPE_BCMA)
|
|
+ return bcm47xx_pcibios_plat_dev_init_bcma(dev);
|
|
+ else
|
|
+#endif
|
|
+ return 0;
|
|
+}
|