[ar71xx] add AR7240 specific fixes for the ag71xx driver
[openwrt/svn-archive/archive.git] / target / linux / ar71xx / files / arch / mips / ar71xx / pci.c
index 7e18d8b2db332dccb7323a9d2404b6519f7fbeed..6a07697f0ddcdde023fcd11bde3d04e220b4bdcf 100644 (file)
  *  by the Free Software Foundation.
  */
 
+#include <linux/kernel.h>
+
+#include <asm/traps.h>
+
 #include <asm/mach-ar71xx/ar71xx.h>
 #include <asm/mach-ar71xx/pci.h>
 
@@ -38,15 +42,48 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
 
 int __init pcibios_map_irq(const struct pci_dev *dev, uint8_t slot, uint8_t pin)
 {
-       return ar71xx_pcibios_map_irq(dev, slot, pin);
+       int ret = 0;
+
+       switch (ar71xx_soc) {
+       case AR71XX_SOC_AR7130:
+       case AR71XX_SOC_AR7141:
+       case AR71XX_SOC_AR7161:
+               ret = ar71xx_pcibios_map_irq(dev, slot, pin);
+               break;
+
+       case AR71XX_SOC_AR7240:
+               ret = ar724x_pcibios_map_irq(dev, slot, pin);
+               break;
+
+       default:
+               break;
+       }
+
+       return ret;
 }
 
 int __init ar71xx_pci_init(unsigned nr_irqs, struct ar71xx_pci_irq *map)
 {
+       int ret = 0;
+
+       switch (ar71xx_soc) {
+       case AR71XX_SOC_AR7130:
+       case AR71XX_SOC_AR7141:
+       case AR71XX_SOC_AR7161:
+               board_be_handler = ar71xx_be_handler;
+               ret = ar71xx_pcibios_init();
+               break;
+
+       case AR71XX_SOC_AR7240:
+               ret = ar724x_pcibios_init();
+               break;
+
+       default:
+               return 0;
+       }
+
        ar71xx_pci_nr_irqs = nr_irqs;
        ar71xx_pci_irq_map = map;
 
-       board_be_handler = ar71xx_be_handler;
-
-       return ar71xx_pcibios_init();
+       return ret;
 }