ARM: orion5x: convert all board files to use new pci driver

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
diff --git a/arch/arm/mach-orion5x/board-mss2.c b/arch/arm/mach-orion5x/board-mss2.c
index 66f9c3b..8e7add0 100644
--- a/arch/arm/mach-orion5x/board-mss2.c
+++ b/arch/arm/mach-orion5x/board-mss2.c
@@ -28,25 +28,11 @@
 /****************************************************************************
  * PCI setup
  ****************************************************************************/
-static int __init mss2_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
-{
-	int irq;
-
-	/*
-	 * Check for devices with hard-wired IRQs.
-	 */
-	irq = orion5x_pci_map_irq(dev, slot, pin);
-	if (irq != -1)
-		return irq;
-
-	return -1;
-}
-
 static struct hw_pci mss2_pci __initdata = {
-	.nr_controllers = 2,
+	.nr_controllers = 1,
 	.setup		= orion5x_pci_sys_setup,
 	.scan		= orion5x_pci_sys_scan_bus,
-	.map_irq	= mss2_pci_map_irq,
+	.map_irq	= orion5x_pci_map_irq,
 };
 
 static int __init mss2_pci_init(void)
diff --git a/arch/arm/mach-orion5x/board-rd88f5182.c b/arch/arm/mach-orion5x/board-rd88f5182.c
index 270824b..a9d19f1 100644
--- a/arch/arm/mach-orion5x/board-rd88f5182.c
+++ b/arch/arm/mach-orion5x/board-rd88f5182.c
@@ -13,6 +13,7 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/platform_device.h>
+#include <linux/platform_data/pci-orion.h>
 #include <linux/pci.h>
 #include <linux/irq.h>
 #include <asm/mach-types.h>
@@ -71,18 +72,8 @@
 	}
 }
 
-static int __init rd88f5182_pci_map_irq(const struct pci_dev *dev, u8 slot,
-	u8 pin)
+static int rd88f5182_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
-	int irq;
-
-	/*
-	 * Check for devices with hard-wired IRQs.
-	 */
-	irq = orion5x_pci_map_irq(dev, slot, pin);
-	if (irq != -1)
-		return irq;
-
 	/*
 	 * PCI IRQs are connected via GPIOs
 	 */
@@ -98,17 +89,25 @@
 }
 
 static struct hw_pci rd88f5182_pci __initdata = {
-	.nr_controllers	= 2,
-	.preinit	= rd88f5182_pci_preinit,
+	.nr_controllers	= 1,
 	.setup		= orion5x_pci_sys_setup,
 	.scan		= orion5x_pci_sys_scan_bus,
+	.map_irq	= orion5x_pci_map_irq,
+};
+
+static const struct orion_pci_platform_data rd88f5182_pci_pdata __initconst = {
+	.preinit	= rd88f5182_pci_preinit,
 	.map_irq	= rd88f5182_pci_map_irq,
 };
 
 static int __init rd88f5182_pci_init(void)
 {
-	if (of_machine_is_compatible("marvell,rd-88f5182-nas"))
+	if (of_machine_is_compatible("marvell,rd-88f5182-nas")) {
 		pci_common_init(&rd88f5182_pci);
+		platform_device_register_data(NULL, "orion-pci", -1,
+					      &rd88f5182_pci_pdata,
+					      sizeof(rd88f5182_pci_pdata));
+	}
 
 	return 0;
 }
diff --git a/arch/arm/mach-orion5x/db88f5281-setup.c b/arch/arm/mach-orion5x/db88f5281-setup.c
index dc01c4f..4e61893 100644
--- a/arch/arm/mach-orion5x/db88f5281-setup.c
+++ b/arch/arm/mach-orion5x/db88f5281-setup.c
@@ -12,6 +12,7 @@
 #include <linux/gpio.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/platform_data/pci-orion.h>
 #include <linux/platform_device.h>
 #include <linux/pci.h>
 #include <linux/irq.h>
@@ -236,18 +237,8 @@
 	}
 }
 
-static int __init db88f5281_pci_map_irq(const struct pci_dev *dev, u8 slot,
-	u8 pin)
+static int db88f5281_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
-	int irq;
-
-	/*
-	 * Check for devices with hard-wired IRQs.
-	 */
-	irq = orion5x_pci_map_irq(dev, slot, pin);
-	if (irq != -1)
-		return irq;
-
 	/*
 	 * PCI IRQs are connected via GPIOs.
 	 */
@@ -262,19 +253,22 @@
 	}
 }
 
-static struct hw_pci db88f5281_pci __initdata = {
-	.nr_controllers	= 2,
+static const struct orion_pci_platform_data db88f5281_pci_pdata __initconst = {
 	.preinit	= db88f5281_pci_preinit,
+	.map_irq	= db88f5281_pci_map_irq,
+};
+
+static struct hw_pci db88f5281_pci __initdata = {
+	.nr_controllers	= 1,
 	.setup		= orion5x_pci_sys_setup,
 	.scan		= orion5x_pci_sys_scan_bus,
-	.map_irq	= db88f5281_pci_map_irq,
+	.map_irq	= orion5x_pci_map_irq,
 };
 
 static int __init db88f5281_pci_init(void)
 {
 	if (machine_is_db88f5281())
 		pci_common_init(&db88f5281_pci);
-
 	return 0;
 }
 
@@ -364,6 +358,9 @@
 	platform_device_register(&db88f5281_nand_flash);
 
 	i2c_register_board_info(0, &db88f5281_i2c_rtc, 1);
+
+	platform_device_register_data(NULL, "orion-pci", -1, &db88f5281_pci_pdata,
+                                      sizeof(db88f5281_pci_pdata));
 }
 
 MACHINE_START(DB88F5281, "Marvell Orion-2 Development Board")
diff --git a/arch/arm/mach-orion5x/dns323-setup.c b/arch/arm/mach-orion5x/dns323-setup.c
index 09d2a26..b9a2137 100644
--- a/arch/arm/mach-orion5x/dns323-setup.c
+++ b/arch/arm/mach-orion5x/dns323-setup.c
@@ -70,26 +70,11 @@
 /****************************************************************************
  * PCI setup
  */
-
-static int __init dns323_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
-{
-	int irq;
-
-	/*
-	 * Check for devices with hard-wired IRQs.
-	 */
-	irq = orion5x_pci_map_irq(dev, slot, pin);
-	if (irq != -1)
-		return irq;
-
-	return -1;
-}
-
 static struct hw_pci dns323_pci __initdata = {
-	.nr_controllers = 2,
+	.nr_controllers = 1,
 	.setup		= orion5x_pci_sys_setup,
 	.scan		= orion5x_pci_sys_scan_bus,
-	.map_irq	= dns323_pci_map_irq,
+	.map_irq	= orion5x_pci_map_irq,
 };
 
 static int __init dns323_pci_init(void)
diff --git a/arch/arm/mach-orion5x/kurobox_pro-setup.c b/arch/arm/mach-orion5x/kurobox_pro-setup.c
index fe6a48a..ee5c363 100644
--- a/arch/arm/mach-orion5x/kurobox_pro-setup.c
+++ b/arch/arm/mach-orion5x/kurobox_pro-setup.c
@@ -118,35 +118,16 @@
  * PCI
  ****************************************************************************/
 
-static int __init kurobox_pro_pci_map_irq(const struct pci_dev *dev, u8 slot,
-	u8 pin)
-{
-	int irq;
-
-	/*
-	 * Check for devices with hard-wired IRQs.
-	 */
-	irq = orion5x_pci_map_irq(dev, slot, pin);
-	if (irq != -1)
-		return irq;
-
-	/*
-	 * PCI isn't used on the Kuro
-	 */
-	return -1;
-}
-
 static struct hw_pci kurobox_pro_pci __initdata = {
-	.nr_controllers	= 2,
+	.nr_controllers	= 1,
 	.setup		= orion5x_pci_sys_setup,
 	.scan		= orion5x_pci_sys_scan_bus,
-	.map_irq	= kurobox_pro_pci_map_irq,
+	.map_irq	= orion5x_pci_map_irq,
 };
 
 static int __init kurobox_pro_pci_init(void)
 {
 	if (machine_is_kurobox_pro()) {
-		orion5x_pci_disable();
 		pci_common_init(&kurobox_pro_pci);
 	}
 
diff --git a/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c b/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c
index 213b3e1..a2e0e12 100644
--- a/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c
+++ b/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c
@@ -10,6 +10,7 @@
 #include <linux/gpio.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/platform_data/pci-orion.h>
 #include <linux/platform_device.h>
 #include <linux/pci.h>
 #include <linux/irq.h>
@@ -133,15 +134,6 @@
 static int __init
 rd88f5181l_fxo_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
-	int irq;
-
-	/*
-	 * Check for devices with hard-wired IRQs.
-	 */
-	irq = orion5x_pci_map_irq(dev, slot, pin);
-	if (irq != -1)
-		return irq;
-
 	/*
 	 * Mini-PCI / Cardbus slot.
 	 */
@@ -149,17 +141,25 @@
 }
 
 static struct hw_pci rd88f5181l_fxo_pci __initdata = {
-	.nr_controllers	= 2,
+	.nr_controllers	= 1,
 	.setup		= orion5x_pci_sys_setup,
 	.scan		= orion5x_pci_sys_scan_bus,
+	.map_irq	= orion5x_pci_map_irq,
+};
+
+static const struct orion_pci_platform_data rd88f5181l_pci_data = {
+	.cardbus	= true,
 	.map_irq	= rd88f5181l_fxo_pci_map_irq,
 };
 
 static int __init rd88f5181l_fxo_pci_init(void)
 {
 	if (machine_is_rd88f5181l_fxo()) {
-		orion5x_pci_set_cardbus_mode();
 		pci_common_init(&rd88f5181l_fxo_pci);
+
+		platform_device_register_data(NULL, "orion-pci", -1,
+					      &rd88f5181l_pci_data,
+					      sizeof(rd88f5181l_pci_data));
 	}
 
 	return 0;
diff --git a/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c b/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c
index 594800e..8628b6a 100644
--- a/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c
+++ b/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c
@@ -10,6 +10,7 @@
 #include <linux/gpio.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/platform_data/pci-orion.h>
 #include <linux/platform_device.h>
 #include <linux/pci.h>
 #include <linux/irq.h>
@@ -111,6 +112,20 @@
 	I2C_BOARD_INFO("ds1338", 0x68),
 };
 
+static int
+rd88f5181l_ge_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
+{
+	if (pin == 1)
+		return gpio_to_irq(4);
+	else
+		return gpio_to_irq(10);
+}
+
+static const struct orion_pci_platform_data rd88f5181l_ge_pci_data = {
+	.cardbus	= true,
+	.map_irq	= rd88f5181l_ge_pci_map_irq,
+};
+
 static void __init rd88f5181l_ge_init(void)
 {
 	/*
@@ -137,40 +152,22 @@
 	platform_device_register(&rd88f5181l_ge_nor_boot_flash);
 
 	i2c_register_board_info(0, &rd88f5181l_ge_i2c_rtc, 1);
-}
 
-static int __init
-rd88f5181l_ge_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
-{
-	int irq;
-
-	/*
-	 * Check for devices with hard-wired IRQs.
-	 */
-	irq = orion5x_pci_map_irq(dev, slot, pin);
-	if (irq != -1)
-		return irq;
-
-	/*
-	 * Cardbus slot.
-	 */
-	if (pin == 1)
-		return gpio_to_irq(4);
-	else
-		return gpio_to_irq(10);
+	platform_device_register_data(NULL, "orion-pci", -1,
+				      &rd88f5181l_ge_pci_data,
+				      sizeof(rd88f5181l_ge_pci_data));
 }
 
 static struct hw_pci rd88f5181l_ge_pci __initdata = {
-	.nr_controllers	= 2,
+	.nr_controllers	= 1,
 	.setup		= orion5x_pci_sys_setup,
 	.scan		= orion5x_pci_sys_scan_bus,
-	.map_irq	= rd88f5181l_ge_pci_map_irq,
+	.map_irq	= orion5x_pci_map_irq,
 };
 
 static int __init rd88f5181l_ge_pci_init(void)
 {
 	if (machine_is_rd88f5181l_ge()) {
-		orion5x_pci_set_cardbus_mode();
 		pci_common_init(&rd88f5181l_ge_pci);
 	}
 
diff --git a/arch/arm/mach-orion5x/rd88f5182-setup.c b/arch/arm/mach-orion5x/rd88f5182-setup.c
index b576ef5..d51d5b8 100644
--- a/arch/arm/mach-orion5x/rd88f5182-setup.c
+++ b/arch/arm/mach-orion5x/rd88f5182-setup.c
@@ -12,6 +12,7 @@
 #include <linux/gpio.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/platform_data/pci-orion.h>
 #include <linux/platform_device.h>
 #include <linux/pci.h>
 #include <linux/irq.h>
@@ -142,18 +143,8 @@
 	}
 }
 
-static int __init rd88f5182_pci_map_irq(const struct pci_dev *dev, u8 slot,
-	u8 pin)
+static int rd88f5182_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
-	int irq;
-
-	/*
-	 * Check for devices with hard-wired IRQs.
-	 */
-	irq = orion5x_pci_map_irq(dev, slot, pin);
-	if (irq != -1)
-		return irq;
-
 	/*
 	 * PCI IRQs are connected via GPIOs
 	 */
@@ -168,12 +159,16 @@
 	}
 }
 
-static struct hw_pci rd88f5182_pci __initdata = {
-	.nr_controllers	= 2,
+static const struct orion_pci_platform_data rd88f5182_pci_pdata __initconst = {
 	.preinit	= rd88f5182_pci_preinit,
+	.map_irq	= rd88f5182_pci_map_irq,
+};
+
+static struct hw_pci rd88f5182_pci __initdata = {
+	.nr_controllers	= 1,
 	.setup		= orion5x_pci_sys_setup,
 	.scan		= orion5x_pci_sys_scan_bus,
-	.map_irq	= rd88f5182_pci_map_irq,
+	.map_irq	= orion5x_pci_map_irq,
 };
 
 static int __init rd88f5182_pci_init(void)
@@ -276,6 +271,10 @@
 	platform_device_register(&rd88f5182_gpio_leds);
 
 	i2c_register_board_info(0, &rd88f5182_i2c_rtc, 1);
+
+	platform_device_register_data(NULL, "orion-pci", -1,
+				      &rd88f5182_pci_pdata,
+				      sizeof(rd88f5182_pci_pdata));
 }
 
 MACHINE_START(RD88F5182, "Marvell Orion-NAS Reference Design")
diff --git a/arch/arm/mach-orion5x/rd88f6183ap-ge-setup.c b/arch/arm/mach-orion5x/rd88f6183ap-ge-setup.c
index 78a1e6a..b1988578 100644
--- a/arch/arm/mach-orion5x/rd88f6183ap-ge-setup.c
+++ b/arch/arm/mach-orion5x/rd88f6183ap-ge-setup.c
@@ -99,7 +99,7 @@
 }
 
 static struct hw_pci rd88f6183ap_ge_pci __initdata = {
-	.nr_controllers	= 2,
+	.nr_controllers	= 1,
 	.setup		= orion5x_pci_sys_setup,
 	.scan		= orion5x_pci_sys_scan_bus,
 	.map_irq	= orion5x_pci_map_irq,
@@ -107,10 +107,8 @@
 
 static int __init rd88f6183ap_ge_pci_init(void)
 {
-	if (machine_is_rd88f6183ap_ge()) {
-		orion5x_pci_disable();
+	if (machine_is_rd88f6183ap_ge())
 		pci_common_init(&rd88f6183ap_ge_pci);
-	}
 
 	return 0;
 }
diff --git a/arch/arm/mach-orion5x/terastation_pro2-setup.c b/arch/arm/mach-orion5x/terastation_pro2-setup.c
index 1208674..9e55d0a 100644
--- a/arch/arm/mach-orion5x/terastation_pro2-setup.c
+++ b/arch/arm/mach-orion5x/terastation_pro2-setup.c
@@ -11,6 +11,7 @@
 #include <linux/gpio.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/platform_data/pci-orion.h>
 #include <linux/platform_device.h>
 #include <linux/pci.h>
 #include <linux/irq.h>
@@ -99,32 +100,26 @@
 	}
 }
 
-static int __init tsp2_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
+static int tsp2_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
-	int irq;
-
-	/*
-	 * Check for devices with hard-wired IRQs.
-	 */
-	irq = orion5x_pci_map_irq(dev, slot, pin);
-	if (irq != -1)
-		return irq;
-
 	/*
 	 * PCI IRQs are connected via GPIOs.
 	 */
 	if (slot == TSP2_PCI_SLOT0_OFFS)
 		return gpio_to_irq(TSP2_PCI_SLOT0_IRQ_PIN);
-
 	return -1;
 }
 
-static struct hw_pci tsp2_pci __initdata = {
-	.nr_controllers = 2,
+static const struct orion_pci_platform_data tsp2_pci_data __initconst = {
 	.preinit        = tsp2_pci_preinit,
+	.map_irq        = tsp2_pci_map_irq,
+};
+
+static struct hw_pci tsp2_pci __initdata = {
+	.nr_controllers = 1,
 	.setup          = orion5x_pci_sys_setup,
 	.scan           = orion5x_pci_sys_scan_bus,
-	.map_irq        = tsp2_pci_map_irq,
+	.map_irq	= orion5x_pci_map_irq,
 };
 
 static int __init tsp2_pci_init(void)
@@ -354,6 +349,9 @@
 
 	/* register Terastation Pro II specific power-off method */
 	pm_power_off = tsp2_power_off;
+
+	platform_device_register_data(NULL, "orion-pci", -1, &tsp2_pci_data,
+				      sizeof(tsp2_pci_data));
 }
 
 MACHINE_START(TERASTATION_PRO2, "Buffalo Terastation Pro II/Live")
diff --git a/arch/arm/mach-orion5x/ts209-setup.c b/arch/arm/mach-orion5x/ts209-setup.c
index c725b7c..1f394101 100644
--- a/arch/arm/mach-orion5x/ts209-setup.c
+++ b/arch/arm/mach-orion5x/ts209-setup.c
@@ -11,6 +11,7 @@
 #include <linux/gpio.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/platform_data/pci-orion.h>
 #include <linux/platform_device.h>
 #include <linux/pci.h>
 #include <linux/irq.h>
@@ -142,18 +143,8 @@
 	}
 }
 
-static int __init qnap_ts209_pci_map_irq(const struct pci_dev *dev, u8 slot,
-	u8 pin)
+static int qnap_ts209_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
-	int irq;
-
-	/*
-	 * Check for devices with hard-wired IRQs.
-	 */
-	irq = orion5x_pci_map_irq(dev, slot, pin);
-	if (irq != -1)
-		return irq;
-
 	/*
 	 * PCI IRQs are connected via GPIOs.
 	 */
@@ -167,12 +158,16 @@
 	}
 }
 
-static struct hw_pci qnap_ts209_pci __initdata = {
-	.nr_controllers	= 2,
+static const struct orion_pci_platform_data qnap_ts209_pci_data __initconst = {
 	.preinit	= qnap_ts209_pci_preinit,
+	.map_irq	= qnap_ts209_pci_map_irq,
+};
+
+static struct hw_pci qnap_ts209_pci __initdata = {
+	.nr_controllers	= 1,
 	.setup		= orion5x_pci_sys_setup,
 	.scan		= orion5x_pci_sys_scan_bus,
-	.map_irq	= qnap_ts209_pci_map_irq,
+	.map_irq	= orion5x_pci_map_irq,
 };
 
 static int __init qnap_ts209_pci_init(void)
@@ -319,6 +314,9 @@
 
 	/* register tsx09 specific power-off method */
 	pm_power_off = qnap_tsx09_power_off;
+
+	platform_device_register_data(NULL, "orion-pci", -1, &qnap_ts209_pci_data,
+				      sizeof(qnap_ts209_pci_data));
 }
 
 MACHINE_START(TS209, "QNAP TS-109/TS-209")
diff --git a/arch/arm/mach-orion5x/ts409-setup.c b/arch/arm/mach-orion5x/ts409-setup.c
index cf2ab53..f33df16 100644
--- a/arch/arm/mach-orion5x/ts409-setup.c
+++ b/arch/arm/mach-orion5x/ts409-setup.c
@@ -120,29 +120,11 @@
  * PCI
  ****************************************************************************/
 
-static int __init qnap_ts409_pci_map_irq(const struct pci_dev *dev, u8 slot,
-	u8 pin)
-{
-	int irq;
-
-	/*
-	 * Check for devices with hard-wired IRQs.
-	 */
-	irq = orion5x_pci_map_irq(dev, slot, pin);
-	if (irq != -1)
-		return irq;
-
-	/*
-	 * PCI isn't used on the TS-409
-	 */
-	return -1;
-}
-
 static struct hw_pci qnap_ts409_pci __initdata = {
-	.nr_controllers	= 2,
+	.nr_controllers	= 1,
 	.setup		= orion5x_pci_sys_setup,
 	.scan		= orion5x_pci_sys_scan_bus,
-	.map_irq	= qnap_ts409_pci_map_irq,
+	.map_irq	= orion5x_pci_map_irq,
 };
 
 static int __init qnap_ts409_pci_init(void)
diff --git a/arch/arm/mach-orion5x/wnr854t-setup.c b/arch/arm/mach-orion5x/wnr854t-setup.c
index 80a56ee..54f7bf7e 100644
--- a/arch/arm/mach-orion5x/wnr854t-setup.c
+++ b/arch/arm/mach-orion5x/wnr854t-setup.c
@@ -8,6 +8,7 @@
 #include <linux/gpio.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/platform_data/pci-orion.h>
 #include <linux/platform_device.h>
 #include <linux/pci.h>
 #include <linux/irq.h>
@@ -111,6 +112,22 @@
 	.chip		= &wnr854t_switch_chip_data,
 };
 
+static int wnr854t_pci_map_irq(const struct pci_dev *dev, u8 slot,
+	u8 pin)
+{
+	/*
+	 * Mini-PCI slot.
+	 */
+	if (slot == 7)
+		return gpio_to_irq(4);
+
+	return -1;
+}
+
+static const struct orion_pci_platform_data wnr854t_pci_data __initconst = {
+	.map_irq	= wnr854t_pci_map_irq,
+};
+
 static void __init wnr854t_init(void)
 {
 	/*
@@ -132,34 +149,15 @@
 				    WNR854T_NOR_BOOT_BASE,
 				    WNR854T_NOR_BOOT_SIZE);
 	platform_device_register(&wnr854t_nor_flash);
-}
-
-static int __init wnr854t_pci_map_irq(const struct pci_dev *dev, u8 slot,
-	u8 pin)
-{
-	int irq;
-
-	/*
-	 * Check for devices with hard-wired IRQs.
-	 */
-	irq = orion5x_pci_map_irq(dev, slot, pin);
-	if (irq != -1)
-		return irq;
-
-	/*
-	 * Mini-PCI slot.
-	 */
-	if (slot == 7)
-		return gpio_to_irq(4);
-
-	return -1;
+	platform_device_register_data(NULL, "orion-pci", -1, &wnr854t_pci_data,
+				      sizeof(wnr854t_pci_data));
 }
 
 static struct hw_pci wnr854t_pci __initdata = {
-	.nr_controllers	= 2,
+	.nr_controllers	= 1,
 	.setup		= orion5x_pci_sys_setup,
 	.scan		= orion5x_pci_sys_scan_bus,
-	.map_irq	= wnr854t_pci_map_irq,
+	.map_irq	= orion5x_pci_map_irq,
 };
 
 static int __init wnr854t_pci_init(void)
diff --git a/arch/arm/mach-orion5x/wrt350n-v2-setup.c b/arch/arm/mach-orion5x/wrt350n-v2-setup.c
index 670e30d..87a2b87 100644
--- a/arch/arm/mach-orion5x/wrt350n-v2-setup.c
+++ b/arch/arm/mach-orion5x/wrt350n-v2-setup.c
@@ -8,6 +8,7 @@
 #include <linux/gpio.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/platform_data/pci-orion.h>
 #include <linux/platform_device.h>
 #include <linux/pci.h>
 #include <linux/irq.h>
@@ -196,6 +197,21 @@
 	.chip		= &wrt350n_v2_switch_chip_data,
 };
 
+static int wrt350n_v2_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
+{
+	/*
+	 * Mini-PCI slot.
+	 */
+	if (slot == 7)
+		return gpio_to_irq(4);
+
+	return -1;
+}
+
+static const struct orion_pci_platform_data wrt350n_v2_pci_data = {
+	.map_irq	= wrt350n_v2_pci_map_irq,
+};
+
 static void __init wrt350n_v2_init(void)
 {
 	/*
@@ -220,34 +236,15 @@
 	platform_device_register(&wrt350n_v2_nor_flash);
 	platform_device_register(&wrt350n_v2_leds);
 	platform_device_register(&wrt350n_v2_button_device);
-}
-
-static int __init wrt350n_v2_pci_map_irq(const struct pci_dev *dev, u8 slot,
-	u8 pin)
-{
-	int irq;
-
-	/*
-	 * Check for devices with hard-wired IRQs.
-	 */
-	irq = orion5x_pci_map_irq(dev, slot, pin);
-	if (irq != -1)
-		return irq;
-
-	/*
-	 * Mini-PCI slot.
-	 */
-	if (slot == 7)
-		return gpio_to_irq(4);
-
-	return -1;
+	platform_device_register_data(NULL, "orion-pci", -1, &wrt350n_v2_pci_data,
+				      sizeof(wrt350n_v2_pci_data));
 }
 
 static struct hw_pci wrt350n_v2_pci __initdata = {
-	.nr_controllers	= 2,
+	.nr_controllers	= 1,
 	.setup		= orion5x_pci_sys_setup,
 	.scan		= orion5x_pci_sys_scan_bus,
-	.map_irq	= wrt350n_v2_pci_map_irq,
+	.map_irq	= orion5x_pci_map_irq,
 };
 
 static int __init wrt350n_v2_pci_init(void)