void            *private_data;  /* platform controller private data     */
 };
 
-/*
- * This is the standard PCI-PCI bridge swizzling algorithm.
- */
-#define pci_std_swizzle pci_common_swizzle
-
 /*
  * Call this with your hw_pci struct to initialise the PCI system.
  */
 
 #endif
 
 /*
- * Swizzle the device pin each time we cross a bridge.
- * This might update pin and returns the slot number.
+ * Swizzle the device pin each time we cross a bridge.  If a platform does
+ * not provide a swizzle function, we perform the standard PCI swizzling.
+ *
+ * The default swizzling walks up the bus tree one level at a time, applying
+ * the standard swizzle function at each step, stopping when it finds the PCI
+ * root bus.  This will return the slot number of the bridge device on the
+ * root bus and the interrupt pin on that device which should correspond
+ * with the downstream device interrupt.
+ *
+ * Platforms may override this, in which case the slot and pin returned
+ * depend entirely on the platform code.  However, please note that the
+ * PCI standard swizzle is implemented on plug-in cards and Cardbus based
+ * PCI extenders, so it can not be ignored.
  */
 static u8 __devinit pcibios_swizzle(struct pci_dev *dev, u8 *pin)
 {
        struct pci_sys_data *sys = dev->sysdata;
-       int slot = 0, oldpin = *pin;
+       int slot, oldpin = *pin;
 
        if (sys->swizzle)
                slot = sys->swizzle(dev, pin);
+       else
+               slot = pci_common_swizzle(dev, pin);
 
        if (debug_pci)
                printk("PCI: %s swizzling pin %d => pin %d slot %d\n",
 
                .irqs = { IRQ_CNS3XXX_PCIE0_RC, IRQ_CNS3XXX_PCIE0_DEVICE, },
                .hw_pci = {
                        .domain = 0,
-                       .swizzle = pci_std_swizzle,
                        .nr_controllers = 1,
                        .setup = cns3xxx_pci_setup,
                        .scan = cns3xxx_pci_scan_bus,
                .irqs = { IRQ_CNS3XXX_PCIE1_RC, IRQ_CNS3XXX_PCIE1_DEVICE, },
                .hw_pci = {
                        .domain = 1,
-                       .swizzle = pci_std_swizzle,
                        .nr_controllers = 1,
                        .setup = cns3xxx_pci_setup,
                        .scan = cns3xxx_pci_scan_bus,
 
 
 static struct hw_pci dove_pci __initdata = {
        .nr_controllers = 2,
-       .swizzle        = pci_std_swizzle,
        .setup          = dove_pcie_setup,
        .scan           = dove_pcie_scan_bus,
        .map_irq        = dove_pcie_map_irq,
 
 }
 
 static struct hw_pci ebsa285_pci __initdata = {
-       .swizzle                = pci_std_swizzle,
        .map_irq                = ebsa285_map_irq,
        .nr_controllers         = 1,
        .setup                  = dc21285_setup,
 
 }
 
 static struct hw_pci netwinder_pci __initdata = {
-       .swizzle                = pci_std_swizzle,
        .map_irq                = netwinder_map_irq,
        .nr_controllers         = 1,
        .setup                  = dc21285_setup,
 
 }
 
 static struct hw_pci iq81340mc_pci __initdata = {
-       .swizzle        = pci_std_swizzle,
        .nr_controllers = 0,
        .setup          = iop13xx_pci_setup,
        .map_irq        = iq81340mc_pcix_map_irq,
 
 }
 
 static struct hw_pci iq81340sc_pci __initdata = {
-       .swizzle        = pci_std_swizzle,
        .nr_controllers = 0,
        .setup          = iop13xx_pci_setup,
        .scan           = iop13xx_scan_bus,
 
 }
 
 static struct hw_pci em7210_pci __initdata = {
-       .swizzle        = pci_std_swizzle,
        .nr_controllers = 1,
        .setup          = iop3xx_pci_setup,
        .preinit        = iop3xx_pci_preinit,
 
 }
 
 static struct hw_pci glantank_pci __initdata = {
-       .swizzle        = pci_std_swizzle,
        .nr_controllers = 1,
        .setup          = iop3xx_pci_setup,
        .preinit        = iop3xx_pci_preinit,
 
 }
 
 static struct hw_pci ep80219_pci __initdata = {
-       .swizzle        = pci_std_swizzle,
        .nr_controllers = 1,
        .setup          = iop3xx_pci_setup,
        .preinit        = iop3xx_pci_preinit,
 }
 
 static struct hw_pci iq31244_pci __initdata = {
-       .swizzle        = pci_std_swizzle,
        .nr_controllers = 1,
        .setup          = iop3xx_pci_setup,
        .preinit        = iop3xx_pci_preinit,
 
 }
 
 static struct hw_pci iq80321_pci __initdata = {
-       .swizzle        = pci_std_swizzle,
        .nr_controllers = 1,
        .setup          = iop3xx_pci_setup,
        .preinit        = iop3xx_pci_preinit_cond,
 
 }
 
 static struct hw_pci n2100_pci __initdata = {
-       .swizzle        = pci_std_swizzle,
        .nr_controllers = 1,
        .setup          = iop3xx_pci_setup,
        .preinit        = iop3xx_pci_preinit,
 
 }
 
 static struct hw_pci iq80331_pci __initdata = {
-       .swizzle        = pci_std_swizzle,
        .nr_controllers = 1,
        .setup          = iop3xx_pci_setup,
        .preinit        = iop3xx_pci_preinit_cond,
 
 }
 
 static struct hw_pci iq80332_pci __initdata = {
-       .swizzle        = pci_std_swizzle,
        .nr_controllers = 1,
        .setup          = iop3xx_pci_setup,
        .preinit        = iop3xx_pci_preinit_cond,
 
 struct hw_pci avila_pci __initdata = {
        .nr_controllers = 1,
        .preinit        = avila_pci_preinit,
-       .swizzle        = pci_std_swizzle,
        .setup          = ixp4xx_setup,
        .scan           = ixp4xx_scan_bus,
        .map_irq        = avila_map_irq,
 
 struct hw_pci coyote_pci __initdata = {
        .nr_controllers = 1,
        .preinit =        coyote_pci_preinit,
-       .swizzle =        pci_std_swizzle,
        .setup =          ixp4xx_setup,
        .scan =           ixp4xx_scan_bus,
        .map_irq =        coyote_map_irq,
 
 struct hw_pci __initdata dsmg600_pci = {
        .nr_controllers = 1,
        .preinit        = dsmg600_pci_preinit,
-       .swizzle        = pci_std_swizzle,
        .setup          = ixp4xx_setup,
        .scan           = ixp4xx_scan_bus,
        .map_irq        = dsmg600_map_irq,
 
 struct hw_pci fsg_pci __initdata = {
        .nr_controllers = 1,
        .preinit =        fsg_pci_preinit,
-       .swizzle =        pci_std_swizzle,
        .setup =          ixp4xx_setup,
        .scan =           ixp4xx_scan_bus,
        .map_irq =        fsg_map_irq,
 
 struct hw_pci gateway7001_pci __initdata = {
        .nr_controllers = 1,
        .preinit =        gateway7001_pci_preinit,
-       .swizzle =        pci_std_swizzle,
        .setup =          ixp4xx_setup,
        .scan =           ixp4xx_scan_bus,
        .map_irq =        gateway7001_map_irq,
 
        .nr_controllers = 1,
        .preinit        = gmlr_pci_preinit,
        .postinit       = gmlr_pci_postinit,
-       .swizzle        = pci_std_swizzle,
        .setup          = ixp4xx_setup,
        .scan           = ixp4xx_scan_bus,
        .map_irq        = gmlr_map_irq,
 
 struct hw_pci gtwx5715_pci __initdata = {
        .nr_controllers = 1,
        .preinit =        gtwx5715_pci_preinit,
-       .swizzle =        pci_std_swizzle,
        .setup =          ixp4xx_setup,
        .scan =           ixp4xx_scan_bus,
        .map_irq =        gtwx5715_map_irq,
 
 struct hw_pci ixdp425_pci __initdata = {
        .nr_controllers = 1,
        .preinit        = ixdp425_pci_preinit,
-       .swizzle        = pci_std_swizzle,
        .setup          = ixp4xx_setup,
        .scan           = ixp4xx_scan_bus,
        .map_irq        = ixdp425_map_irq,
 
 struct hw_pci ixdpg425_pci __initdata = {
        .nr_controllers = 1,
        .preinit =        ixdpg425_pci_preinit,
-       .swizzle =        pci_std_swizzle,
        .setup =          ixp4xx_setup,
        .scan =           ixp4xx_scan_bus,
        .map_irq =        ixdpg425_map_irq,
 
 struct hw_pci miccpt_pci __initdata = {
        .nr_controllers = 1,
        .preinit        = miccpt_pci_preinit,
-       .swizzle        = pci_std_swizzle,
        .setup          = ixp4xx_setup,
        .scan           = ixp4xx_scan_bus,
        .map_irq        = miccpt_map_irq,
 
 struct hw_pci __initdata nas100d_pci = {
        .nr_controllers = 1,
        .preinit        = nas100d_pci_preinit,
-       .swizzle        = pci_std_swizzle,
        .setup          = ixp4xx_setup,
        .scan           = ixp4xx_scan_bus,
        .map_irq        = nas100d_map_irq,
 
 struct hw_pci __initdata nslu2_pci = {
        .nr_controllers = 1,
        .preinit        = nslu2_pci_preinit,
-       .swizzle        = pci_std_swizzle,
        .setup          = ixp4xx_setup,
        .scan           = ixp4xx_scan_bus,
        .map_irq        = nslu2_map_irq,
 
 struct hw_pci vulcan_pci __initdata = {
        .nr_controllers = 1,
        .preinit        = vulcan_pci_preinit,
-       .swizzle        = pci_std_swizzle,
        .setup          = ixp4xx_setup,
        .scan           = ixp4xx_scan_bus,
        .map_irq        = vulcan_map_irq,
 
 struct hw_pci wg302v2_pci __initdata = {
        .nr_controllers = 1,
        .preinit =        wg302v2_pci_preinit,
-       .swizzle =        pci_std_swizzle,
        .setup =          ixp4xx_setup,
        .scan =           ixp4xx_scan_bus,
        .map_irq =        wg302v2_map_irq,
 
 }
 
 static struct hw_pci kirkwood_pci __initdata = {
-       .swizzle        = pci_std_swizzle,
        .setup          = kirkwood_pcie_setup,
        .scan           = kirkwood_pcie_scan_bus,
        .map_irq        = kirkwood_pcie_map_irq,
 
        .setup          = ks8695_pci_setup,
        .scan           = ks8695_pci_scan_bus,
        .postinit       = NULL,
-       .swizzle        = pci_std_swizzle,
        .map_irq        = NULL,
 };
 
 
 static struct hw_pci mv78xx0_pci __initdata = {
        .nr_controllers = 8,
        .preinit        = mv78xx0_pcie_preinit,
-       .swizzle        = pci_std_swizzle,
        .setup          = mv78xx0_pcie_setup,
        .scan           = mv78xx0_pcie_scan_bus,
        .map_irq        = mv78xx0_pcie_map_irq,
 
 static struct hw_pci db88f5281_pci __initdata = {
        .nr_controllers = 2,
        .preinit        = db88f5281_pci_preinit,
-       .swizzle        = pci_std_swizzle,
        .setup          = orion5x_pci_sys_setup,
        .scan           = orion5x_pci_sys_scan_bus,
        .map_irq        = db88f5281_pci_map_irq,
 
 
 static struct hw_pci dns323_pci __initdata = {
        .nr_controllers = 2,
-       .swizzle        = pci_std_swizzle,
        .setup          = orion5x_pci_sys_setup,
        .scan           = orion5x_pci_sys_scan_bus,
        .map_irq        = dns323_pci_map_irq,
 
 
 static struct hw_pci kurobox_pro_pci __initdata = {
        .nr_controllers = 2,
-       .swizzle        = pci_std_swizzle,
        .setup          = orion5x_pci_sys_setup,
        .scan           = orion5x_pci_sys_scan_bus,
        .map_irq        = kurobox_pro_pci_map_irq,
 
 
 static struct hw_pci mss2_pci __initdata = {
        .nr_controllers = 2,
-       .swizzle        = pci_std_swizzle,
        .setup          = orion5x_pci_sys_setup,
        .scan           = orion5x_pci_sys_scan_bus,
        .map_irq        = mss2_pci_map_irq,
 
 
 static struct hw_pci rd88f5181l_fxo_pci __initdata = {
        .nr_controllers = 2,
-       .swizzle        = pci_std_swizzle,
        .setup          = orion5x_pci_sys_setup,
        .scan           = orion5x_pci_sys_scan_bus,
        .map_irq        = rd88f5181l_fxo_pci_map_irq,
 
 
 static struct hw_pci rd88f5181l_ge_pci __initdata = {
        .nr_controllers = 2,
-       .swizzle        = pci_std_swizzle,
        .setup          = orion5x_pci_sys_setup,
        .scan           = orion5x_pci_sys_scan_bus,
        .map_irq        = rd88f5181l_ge_pci_map_irq,
 
 static struct hw_pci rd88f5182_pci __initdata = {
        .nr_controllers = 2,
        .preinit        = rd88f5182_pci_preinit,
-       .swizzle        = pci_std_swizzle,
        .setup          = orion5x_pci_sys_setup,
        .scan           = orion5x_pci_sys_scan_bus,
        .map_irq        = rd88f5182_pci_map_irq,
 
 
 static struct hw_pci rd88f6183ap_ge_pci __initdata = {
        .nr_controllers = 2,
-       .swizzle        = pci_std_swizzle,
        .setup          = orion5x_pci_sys_setup,
        .scan           = orion5x_pci_sys_scan_bus,
        .map_irq        = orion5x_pci_map_irq,
 
 static struct hw_pci tsp2_pci __initdata = {
        .nr_controllers = 2,
        .preinit        = tsp2_pci_preinit,
-       .swizzle        = pci_std_swizzle,
        .setup          = orion5x_pci_sys_setup,
        .scan           = orion5x_pci_sys_scan_bus,
        .map_irq        = tsp2_pci_map_irq,
 
 static struct hw_pci qnap_ts209_pci __initdata = {
        .nr_controllers = 2,
        .preinit        = qnap_ts209_pci_preinit,
-       .swizzle        = pci_std_swizzle,
        .setup          = orion5x_pci_sys_setup,
        .scan           = orion5x_pci_sys_scan_bus,
        .map_irq        = qnap_ts209_pci_map_irq,
 
 
 static struct hw_pci qnap_ts409_pci __initdata = {
        .nr_controllers = 2,
-       .swizzle        = pci_std_swizzle,
        .setup          = orion5x_pci_sys_setup,
        .scan           = orion5x_pci_sys_scan_bus,
        .map_irq        = qnap_ts409_pci_map_irq,
 
 
 static struct hw_pci wnr854t_pci __initdata = {
        .nr_controllers = 2,
-       .swizzle        = pci_std_swizzle,
        .setup          = orion5x_pci_sys_setup,
        .scan           = orion5x_pci_sys_scan_bus,
        .map_irq        = wnr854t_pci_map_irq,
 
 
 static struct hw_pci wrt350n_v2_pci __initdata = {
        .nr_controllers = 2,
-       .swizzle        = pci_std_swizzle,
        .setup          = orion5x_pci_sys_setup,
        .scan           = orion5x_pci_sys_scan_bus,
        .map_irq        = wrt350n_v2_pci_map_irq,
 
 }
 
 static struct hw_pci cmx2xx_pci __initdata = {
-       .swizzle        = pci_std_swizzle,
        .map_irq        = cmx2xx_pci_map_irq,
        .nr_controllers = 1,
        .setup          = it8152_pci_setup,
 
 
 static struct hw_pci shark_pci __initdata = {
        .setup          = via82c505_setup,
-       .swizzle        = pci_std_swizzle,
        .map_irq        = shark_map_irq,
        .nr_controllers = 1,
        .scan           = via82c505_scan_bus,
 
        .nr_controllers = 2,
        .setup          = tegra_pcie_setup,
        .scan           = tegra_pcie_scan_bus,
-       .swizzle        = pci_std_swizzle,
        .map_irq        = tegra_pcie_map_irq,
 };
 
 
 }
 
 static struct hw_pci versatile_pci __initdata = {
-       .swizzle                = pci_std_swizzle,
        .map_irq                = versatile_map_irq,
        .nr_controllers         = 1,
        .setup                  = pci_versatile_setup,