Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph...
[pandora-kernel.git] / arch / arm / mach-mx2 / devices.c
index 3956d82..b91e412 100644 (file)
  * - i.MX21: 2 channel
  * - i.MX27: 3 channel
  */
-static struct resource mxc_spi_resources0[] = {
-       {
-              .start = CSPI1_BASE_ADDR,
-              .end = CSPI1_BASE_ADDR + SZ_4K - 1,
-              .flags = IORESOURCE_MEM,
-       }, {
-              .start = MXC_INT_CSPI1,
-              .end = MXC_INT_CSPI1,
-              .flags = IORESOURCE_IRQ,
-       },
-};
-
-static struct resource mxc_spi_resources1[] = {
-       {
-               .start = CSPI2_BASE_ADDR,
-               .end = CSPI2_BASE_ADDR + SZ_4K - 1,
-               .flags = IORESOURCE_MEM,
-       }, {
-               .start = MXC_INT_CSPI2,
-               .end = MXC_INT_CSPI2,
-               .flags = IORESOURCE_IRQ,
-       },
-};
-
-#ifdef CONFIG_MACH_MX27
-static struct resource mxc_spi_resources2[] = {
-       {
-               .start = CSPI3_BASE_ADDR,
-               .end = CSPI3_BASE_ADDR + SZ_4K - 1,
-               .flags = IORESOURCE_MEM,
-       }, {
-               .start = MXC_INT_CSPI3,
-               .end = MXC_INT_CSPI3,
-               .flags = IORESOURCE_IRQ,
-       },
-};
-#endif
-
-struct platform_device mxc_spi_device0 = {
-       .name = "spi_imx",
-       .id = 0,
-       .num_resources = ARRAY_SIZE(mxc_spi_resources0),
-       .resource = mxc_spi_resources0,
-};
+#define DEFINE_IMX_SPI_DEVICE(n, baseaddr, irq)                                        \
+       static struct resource mxc_spi_resources ## n[] = {                     \
+               {                                                               \
+                       .start = baseaddr,                                      \
+                       .end = baseaddr + SZ_4K - 1,                            \
+                       .flags = IORESOURCE_MEM,                                \
+               }, {                                                            \
+                       .start = irq,                                           \
+                       .end = irq,                                             \
+                       .flags = IORESOURCE_IRQ,                                \
+               },                                                              \
+       };                                                                      \
+                                                                               \
+       struct platform_device mxc_spi_device ## n = {                          \
+               .name = "spi_imx",                                              \
+               .id = n,                                                        \
+               .num_resources = ARRAY_SIZE(mxc_spi_resources ## n),            \
+               .resource = mxc_spi_resources ## n,                             \
+       }
 
-struct platform_device mxc_spi_device1 = {
-       .name = "spi_imx",
-       .id = 1,
-       .num_resources = ARRAY_SIZE(mxc_spi_resources1),
-       .resource = mxc_spi_resources1,
-};
+DEFINE_IMX_SPI_DEVICE(0, MX2x_CSPI1_BASE_ADDR, MX2x_INT_CSPI1);
+DEFINE_IMX_SPI_DEVICE(1, MX2x_CSPI2_BASE_ADDR, MX2x_INT_CSPI2);
 
 #ifdef CONFIG_MACH_MX27
-struct platform_device mxc_spi_device2 = {
-       .name = "spi_imx",
-       .id = 2,
-       .num_resources = ARRAY_SIZE(mxc_spi_resources2),
-       .resource = mxc_spi_resources2,
-};
+DEFINE_IMX_SPI_DEVICE(2, MX27_CSPI3_BASE_ADDR, MX27_INT_CSPI3);
 #endif
 
 /*
@@ -113,104 +79,34 @@ struct platform_device mxc_spi_device2 = {
  * - i.MX21: 3 timers
  * - i.MX27: 6 timers
  */
-
-/* We use gpt0 as system timer, so do not add a device for this one */
-
-static struct resource timer1_resources[] = {
-       {
-               .start  = GPT2_BASE_ADDR,
-               .end    = GPT2_BASE_ADDR + 0x17,
-               .flags  = IORESOURCE_MEM,
-       }, {
-               .start   = MXC_INT_GPT2,
-               .end     = MXC_INT_GPT2,
-               .flags   = IORESOURCE_IRQ,
-       }
-};
-
-struct platform_device mxc_gpt1 = {
-       .name = "imx_gpt",
-       .id = 1,
-       .num_resources = ARRAY_SIZE(timer1_resources),
-       .resource = timer1_resources,
-};
-
-static struct resource timer2_resources[] = {
-       {
-               .start  = GPT3_BASE_ADDR,
-               .end    = GPT3_BASE_ADDR + 0x17,
-               .flags  = IORESOURCE_MEM,
-       }, {
-               .start   = MXC_INT_GPT3,
-               .end     = MXC_INT_GPT3,
-               .flags   = IORESOURCE_IRQ,
+#define DEFINE_IMX_GPT_DEVICE(n, baseaddr, irq)                                \
+       static struct resource timer ## n ##_resources[] = {            \
+               {                                                       \
+                       .start = baseaddr,                              \
+                       .end = baseaddr + SZ_4K - 1,                    \
+                       .flags = IORESOURCE_MEM,                        \
+               }, {                                                    \
+                       .start = irq,                                   \
+                       .end = irq,                                     \
+                       .flags = IORESOURCE_IRQ,                        \
+               }                                                       \
+       };                                                              \
+                                                                       \
+       struct platform_device mxc_gpt ## n = {                         \
+               .name = "imx_gpt",                                      \
+               .id = n,                                                \
+               .num_resources = ARRAY_SIZE(timer ## n ## _resources),  \
+               .resource = timer ## n ## _resources,                   \
        }
-};
 
-struct platform_device mxc_gpt2 = {
-       .name = "imx_gpt",
-       .id = 2,
-       .num_resources = ARRAY_SIZE(timer2_resources),
-       .resource = timer2_resources,
-};
+/* We use gpt1 as system timer, so do not add a device for this one */
+DEFINE_IMX_GPT_DEVICE(1, MX2x_GPT2_BASE_ADDR, MX2x_INT_GPT2);
+DEFINE_IMX_GPT_DEVICE(2, MX2x_GPT3_BASE_ADDR, MX2x_INT_GPT3);
 
 #ifdef CONFIG_MACH_MX27
-static struct resource timer3_resources[] = {
-       {
-               .start  = GPT4_BASE_ADDR,
-               .end    = GPT4_BASE_ADDR + 0x17,
-               .flags  = IORESOURCE_MEM,
-       }, {
-               .start   = MXC_INT_GPT4,
-               .end     = MXC_INT_GPT4,
-               .flags   = IORESOURCE_IRQ,
-       }
-};
-
-struct platform_device mxc_gpt3 = {
-       .name = "imx_gpt",
-       .id = 3,
-       .num_resources = ARRAY_SIZE(timer3_resources),
-       .resource = timer3_resources,
-};
-
-static struct resource timer4_resources[] = {
-       {
-               .start  = GPT5_BASE_ADDR,
-               .end    = GPT5_BASE_ADDR + 0x17,
-               .flags  = IORESOURCE_MEM,
-       }, {
-               .start   = MXC_INT_GPT5,
-               .end     = MXC_INT_GPT5,
-               .flags   = IORESOURCE_IRQ,
-       }
-};
-
-struct platform_device mxc_gpt4 = {
-       .name = "imx_gpt",
-       .id = 4,
-       .num_resources = ARRAY_SIZE(timer4_resources),
-       .resource = timer4_resources,
-};
-
-static struct resource timer5_resources[] = {
-       {
-               .start  = GPT6_BASE_ADDR,
-               .end    = GPT6_BASE_ADDR + 0x17,
-               .flags  = IORESOURCE_MEM,
-       }, {
-               .start   = MXC_INT_GPT6,
-               .end     = MXC_INT_GPT6,
-               .flags   = IORESOURCE_IRQ,
-       }
-};
-
-struct platform_device mxc_gpt5 = {
-       .name = "imx_gpt",
-       .id = 5,
-       .num_resources = ARRAY_SIZE(timer5_resources),
-       .resource = timer5_resources,
-};
+DEFINE_IMX_GPT_DEVICE(3, MX27_GPT4_BASE_ADDR, MX27_INT_GPT4);
+DEFINE_IMX_GPT_DEVICE(4, MX27_GPT5_BASE_ADDR, MX27_INT_GPT5);
+DEFINE_IMX_GPT_DEVICE(5, MX27_GPT6_BASE_ADDR, MX27_INT_GPT6);
 #endif
 
 /*
@@ -221,9 +117,9 @@ struct platform_device mxc_gpt5 = {
  */
 static struct resource mxc_wdt_resources[] = {
        {
-               .start  = WDOG_BASE_ADDR,
-               .end    = WDOG_BASE_ADDR + 0x30,
-               .flags  = IORESOURCE_MEM,
+               .start = MX2x_WDOG_BASE_ADDR,
+               .end = MX2x_WDOG_BASE_ADDR + SZ_4K - 1,
+               .flags = IORESOURCE_MEM,
        },
 };
 
@@ -236,8 +132,8 @@ struct platform_device mxc_wdt = {
 
 static struct resource mxc_w1_master_resources[] = {
        {
-               .start = OWIRE_BASE_ADDR,
-               .end   = OWIRE_BASE_ADDR + SZ_4K - 1,
+               .start = MX2x_OWIRE_BASE_ADDR,
+               .end = MX2x_OWIRE_BASE_ADDR + SZ_4K - 1,
                .flags = IORESOURCE_MEM,
        },
 };
@@ -249,24 +145,33 @@ struct platform_device mxc_w1_master_device = {
        .resource = mxc_w1_master_resources,
 };
 
-static struct resource mxc_nand_resources[] = {
-       {
-               .start  = NFC_BASE_ADDR,
-               .end    = NFC_BASE_ADDR + 0xfff,
-               .flags  = IORESOURCE_MEM,
-       }, {
-               .start  = MXC_INT_NANDFC,
-               .end    = MXC_INT_NANDFC,
-               .flags  = IORESOURCE_IRQ,
-       },
-};
+#define DEFINE_MXC_NAND_DEVICE(pfx, baseaddr, irq)                     \
+       static struct resource pfx ## _nand_resources[] = {             \
+               {                                                       \
+                       .start = baseaddr,                              \
+                       .end = baseaddr + SZ_4K - 1,                    \
+                       .flags = IORESOURCE_MEM,                        \
+               }, {                                                    \
+                       .start = irq,                                   \
+                       .end = irq,                                     \
+                       .flags = IORESOURCE_IRQ,                        \
+               },                                                      \
+       };                                                              \
+                                                                       \
+       struct platform_device pfx ## _nand_device = {                  \
+               .name = "mxc_nand",                                     \
+               .id = 0,                                                \
+               .num_resources = ARRAY_SIZE(pfx ## _nand_resources),    \
+               .resource = pfx ## _nand_resources,                     \
+       }
 
-struct platform_device mxc_nand_device = {
-       .name = "mxc_nand",
-       .id = 0,
-       .num_resources = ARRAY_SIZE(mxc_nand_resources),
-       .resource = mxc_nand_resources,
-};
+#ifdef CONFIG_MACH_MX21
+DEFINE_MXC_NAND_DEVICE(imx21, MX21_NFC_BASE_ADDR, MX21_INT_NANDFC);
+#endif
+
+#ifdef CONFIG_MACH_MX27
+DEFINE_MXC_NAND_DEVICE(imx27, MX27_NFC_BASE_ADDR, MX27_INT_NANDFC);
+#endif
 
 /*
  * lcdc:
@@ -276,12 +181,12 @@ struct platform_device mxc_nand_device = {
  */
 static struct resource mxc_fb[] = {
        {
-               .start = LCDC_BASE_ADDR,
-               .end   = LCDC_BASE_ADDR + 0xFFF,
+               .start = MX2x_LCDC_BASE_ADDR,
+               .end = MX2x_LCDC_BASE_ADDR + SZ_4K - 1,
                .flags = IORESOURCE_MEM,
        }, {
-               .start = MXC_INT_LCDC,
-               .end   = MXC_INT_LCDC,
+               .start = MX2x_INT_LCDC,
+               .end = MX2x_INT_LCDC,
                .flags = IORESOURCE_IRQ,
        }
 };
@@ -300,13 +205,13 @@ struct platform_device mxc_fb_device = {
 #ifdef CONFIG_MACH_MX27
 static struct resource mxc_fec_resources[] = {
        {
-               .start  = FEC_BASE_ADDR,
-               .end    = FEC_BASE_ADDR + 0xfff,
-               .flags  = IORESOURCE_MEM,
+               .start = MX27_FEC_BASE_ADDR,
+               .end = MX27_FEC_BASE_ADDR + SZ_4K - 1,
+               .flags = IORESOURCE_MEM,
        }, {
-               .start  = MXC_INT_FEC,
-               .end    = MXC_INT_FEC,
-               .flags  = IORESOURCE_IRQ,
+               .start = MX27_INT_FEC,
+               .end = MX27_INT_FEC,
+               .flags = IORESOURCE_IRQ,
        },
 };
 
@@ -318,55 +223,41 @@ struct platform_device mxc_fec_device = {
 };
 #endif
 
-static struct resource mxc_i2c_1_resources[] = {
-       {
-               .start  = I2C_BASE_ADDR,
-               .end    = I2C_BASE_ADDR + 0x0fff,
-               .flags  = IORESOURCE_MEM,
-       }, {
-               .start  = MXC_INT_I2C,
-               .end    = MXC_INT_I2C,
-               .flags  = IORESOURCE_IRQ,
+#define DEFINE_IMX_I2C_DEVICE(n, baseaddr, irq)                                \
+       static struct resource mxc_i2c_resources ## n[] = {             \
+               {                                                       \
+                       .start = baseaddr,                              \
+                       .end = baseaddr + SZ_4K - 1,                    \
+                       .flags = IORESOURCE_MEM,                        \
+               }, {                                                    \
+                       .start = irq,                                   \
+                       .end = irq,                                     \
+                       .flags = IORESOURCE_IRQ,                        \
+               }                                                       \
+       };                                                              \
+                                                                       \
+       struct platform_device mxc_i2c_device ## n = {                  \
+               .name = "imx-i2c",                                      \
+               .id = n,                                                \
+               .num_resources = ARRAY_SIZE(mxc_i2c_resources ## n),    \
+               .resource = mxc_i2c_resources ## n,                     \
        }
-};
 
-struct platform_device mxc_i2c_device0 = {
-       .name = "imx-i2c",
-       .id = 0,
-       .num_resources = ARRAY_SIZE(mxc_i2c_1_resources),
-       .resource = mxc_i2c_1_resources,
-};
+DEFINE_IMX_I2C_DEVICE(0, MX2x_I2C_BASE_ADDR, MX2x_INT_I2C);
 
 #ifdef CONFIG_MACH_MX27
-static struct resource mxc_i2c_2_resources[] = {
-       {
-               .start  = I2C2_BASE_ADDR,
-               .end    = I2C2_BASE_ADDR + 0x0fff,
-               .flags  = IORESOURCE_MEM,
-       }, {
-               .start  = MXC_INT_I2C2,
-               .end    = MXC_INT_I2C2,
-               .flags  = IORESOURCE_IRQ,
-       }
-};
-
-struct platform_device mxc_i2c_device1 = {
-       .name = "imx-i2c",
-       .id = 1,
-       .num_resources = ARRAY_SIZE(mxc_i2c_2_resources),
-       .resource = mxc_i2c_2_resources,
-};
+DEFINE_IMX_I2C_DEVICE(1, MX27_I2C2_BASE_ADDR, MX27_INT_I2C2);
 #endif
 
 static struct resource mxc_pwm_resources[] = {
        {
-               .start  = PWM_BASE_ADDR,
-               .end    = PWM_BASE_ADDR + 0x0fff,
-               .flags  = IORESOURCE_MEM,
+               .start = MX2x_PWM_BASE_ADDR,
+               .end = MX2x_PWM_BASE_ADDR + SZ_4K - 1,
+               .flags = IORESOURCE_MEM,
        }, {
-               .start   = MXC_INT_PWM,
-               .end     = MXC_INT_PWM,
-               .flags   = IORESOURCE_IRQ,
+               .start = MX2x_INT_PWM,
+               .end = MX2x_INT_PWM,
+               .flags = IORESOURCE_IRQ,
        }
 };
 
@@ -377,77 +268,49 @@ struct platform_device mxc_pwm_device = {
        .resource = mxc_pwm_resources,
 };
 
-/*
- * Resource definition for the MXC SDHC
- */
-static struct resource mxc_sdhc1_resources[] = {
-       {
-               .start = SDHC1_BASE_ADDR,
-               .end   = SDHC1_BASE_ADDR + SZ_4K - 1,
-               .flags = IORESOURCE_MEM,
-       }, {
-               .start = MXC_INT_SDHC1,
-               .end   = MXC_INT_SDHC1,
-               .flags = IORESOURCE_IRQ,
-       }, {
-               .start  = DMA_REQ_SDHC1,
-               .end    = DMA_REQ_SDHC1,
-               .flags  = IORESOURCE_DMA,
-       },
-};
-
-static u64 mxc_sdhc1_dmamask = DMA_BIT_MASK(32);
-
-struct platform_device mxc_sdhc_device0 = {
-       .name           = "mxc-mmc",
-       .id             = 0,
-       .dev            = {
-               .dma_mask = &mxc_sdhc1_dmamask,
-               .coherent_dma_mask = DMA_BIT_MASK(32),
-       },
-       .num_resources  = ARRAY_SIZE(mxc_sdhc1_resources),
-       .resource       = mxc_sdhc1_resources,
-};
-
-static struct resource mxc_sdhc2_resources[] = {
-       {
-               .start = SDHC2_BASE_ADDR,
-               .end   = SDHC2_BASE_ADDR + SZ_4K - 1,
-               .flags = IORESOURCE_MEM,
-       }, {
-               .start = MXC_INT_SDHC2,
-               .end   = MXC_INT_SDHC2,
-               .flags = IORESOURCE_IRQ,
-       }, {
-               .start  = DMA_REQ_SDHC2,
-               .end    = DMA_REQ_SDHC2,
-               .flags  = IORESOURCE_DMA,
-       },
-};
-
-static u64 mxc_sdhc2_dmamask = DMA_BIT_MASK(32);
+#define DEFINE_MXC_MMC_DEVICE(n, baseaddr, irq, dmareq)                        \
+       static struct resource mxc_sdhc_resources ## n[] = {            \
+               {                                                       \
+                       .start = baseaddr,                              \
+                       .end = baseaddr + SZ_4K - 1,                    \
+                       .flags = IORESOURCE_MEM,                        \
+               }, {                                                    \
+                       .start = irq,                                   \
+                       .end = irq,                                     \
+                       .flags = IORESOURCE_IRQ,                        \
+               }, {                                                    \
+                       .start = dmareq,                                \
+                       .end = dmareq,                                  \
+                       .flags = IORESOURCE_DMA,                        \
+               },                                                      \
+       };                                                              \
+                                                                       \
+       static u64 mxc_sdhc ## n ## _dmamask = DMA_BIT_MASK(32);        \
+                                                                       \
+       struct platform_device mxc_sdhc_device ## n = {                 \
+               .name = "mxc-mmc",                                      \
+               .id = n,                                                \
+               .dev = {                                                \
+                       .dma_mask = &mxc_sdhc ## n ## _dmamask,         \
+                       .coherent_dma_mask = DMA_BIT_MASK(32),          \
+               },                                                      \
+               .num_resources = ARRAY_SIZE(mxc_sdhc_resources ## n),   \
+               .resource = mxc_sdhc_resources ## n,            \
+       }
 
-struct platform_device mxc_sdhc_device1 = {
-       .name           = "mxc-mmc",
-       .id             = 1,
-       .dev            = {
-               .dma_mask = &mxc_sdhc2_dmamask,
-               .coherent_dma_mask = DMA_BIT_MASK(32),
-       },
-       .num_resources  = ARRAY_SIZE(mxc_sdhc2_resources),
-       .resource       = mxc_sdhc2_resources,
-};
+DEFINE_MXC_MMC_DEVICE(0, MX2x_SDHC1_BASE_ADDR, MX2x_INT_SDHC1, MX2x_DMA_REQ_SDHC1);
+DEFINE_MXC_MMC_DEVICE(1, MX2x_SDHC2_BASE_ADDR, MX2x_INT_SDHC2, MX2x_DMA_REQ_SDHC2);
 
 #ifdef CONFIG_MACH_MX27
 static struct resource otg_resources[] = {
        {
-               .start  = OTG_BASE_ADDR,
-               .end    = OTG_BASE_ADDR + 0x1ff,
-               .flags  = IORESOURCE_MEM,
+               .start = MX27_USBOTG_BASE_ADDR,
+               .end = MX27_USBOTG_BASE_ADDR + 0x1ff,
+               .flags = IORESOURCE_MEM,
        }, {
-               .start  = MXC_INT_USB3,
-               .end    = MXC_INT_USB3,
-               .flags  = IORESOURCE_IRQ,
+               .start = MX27_INT_USB3,
+               .end = MX27_INT_USB3,
+               .flags = IORESOURCE_IRQ,
        },
 };
 
@@ -483,12 +346,12 @@ static u64 usbh1_dmamask = DMA_BIT_MASK(32);
 
 static struct resource mxc_usbh1_resources[] = {
        {
-               .start = OTG_BASE_ADDR + 0x200,
-               .end = OTG_BASE_ADDR + 0x3ff,
+               .start = MX27_USBOTG_BASE_ADDR + 0x200,
+               .end = MX27_USBOTG_BASE_ADDR + 0x3ff,
                .flags = IORESOURCE_MEM,
        }, {
-               .start = MXC_INT_USB1,
-               .end = MXC_INT_USB1,
+               .start = MX27_INT_USB1,
+               .end = MX27_INT_USB1,
                .flags = IORESOURCE_IRQ,
        },
 };
@@ -509,12 +372,12 @@ static u64 usbh2_dmamask = DMA_BIT_MASK(32);
 
 static struct resource mxc_usbh2_resources[] = {
        {
-               .start = OTG_BASE_ADDR + 0x400,
-               .end = OTG_BASE_ADDR + 0x5ff,
+               .start = MX27_USBOTG_BASE_ADDR + 0x400,
+               .end = MX27_USBOTG_BASE_ADDR + 0x5ff,
                .flags = IORESOURCE_MEM,
        }, {
-               .start = MXC_INT_USB2,
-               .end = MXC_INT_USB2,
+               .start = MX27_INT_USB2,
+               .end = MX27_INT_USB2,
                .flags = IORESOURCE_IRQ,
        },
 };
@@ -531,129 +394,102 @@ struct platform_device mxc_usbh2 = {
 };
 #endif
 
-static struct resource imx_ssi_resources0[] = {
-       {
-               .start  = SSI1_BASE_ADDR,
-               .end    = SSI1_BASE_ADDR + 0x6F,
-               .flags  = IORESOURCE_MEM,
-       }, {
-               .start  = MXC_INT_SSI1,
-               .end    = MXC_INT_SSI1,
-               .flags  = IORESOURCE_IRQ,
-       }, {
-               .name   = "tx0",
-               .start  = DMA_REQ_SSI1_TX0,
-               .end    = DMA_REQ_SSI1_TX0,
-               .flags  = IORESOURCE_DMA,
-       }, {
-               .name   = "rx0",
-               .start  = DMA_REQ_SSI1_RX0,
-               .end    = DMA_REQ_SSI1_RX0,
-               .flags  = IORESOURCE_DMA,
-       }, {
-               .name   = "tx1",
-               .start  = DMA_REQ_SSI1_TX1,
-               .end    = DMA_REQ_SSI1_TX1,
-               .flags  = IORESOURCE_DMA,
-       }, {
-               .name   = "rx1",
-               .start  = DMA_REQ_SSI1_RX1,
-               .end    = DMA_REQ_SSI1_RX1,
-               .flags  = IORESOURCE_DMA,
-       },
-};
-
-static struct resource imx_ssi_resources1[] = {
-       {
-               .start  = SSI2_BASE_ADDR,
-               .end    = SSI2_BASE_ADDR + 0x6F,
-               .flags  = IORESOURCE_MEM,
-       }, {
-               .start  = MXC_INT_SSI2,
-               .end    = MXC_INT_SSI2,
-               .flags  = IORESOURCE_IRQ,
-       }, {
-               .name   = "tx0",
-               .start  = DMA_REQ_SSI2_TX0,
-               .end    = DMA_REQ_SSI2_TX0,
-               .flags  = IORESOURCE_DMA,
-       }, {
-               .name   = "rx0",
-               .start  = DMA_REQ_SSI2_RX0,
-               .end    = DMA_REQ_SSI2_RX0,
-               .flags  = IORESOURCE_DMA,
-       }, {
-               .name   = "tx1",
-               .start  = DMA_REQ_SSI2_TX1,
-               .end    = DMA_REQ_SSI2_TX1,
-               .flags  = IORESOURCE_DMA,
-       }, {
-               .name   = "rx1",
-               .start  = DMA_REQ_SSI2_RX1,
-               .end    = DMA_REQ_SSI2_RX1,
-               .flags  = IORESOURCE_DMA,
-       },
-};
+#define DEFINE_IMX_SSI_DMARES(_name, ssin, suffix)                     \
+       {                                                               \
+               .name = _name,                                          \
+               .start = MX2x_DMA_REQ_SSI ## ssin ## _ ## suffix,       \
+               .end = MX2x_DMA_REQ_SSI ## ssin ## _ ## suffix,         \
+               .flags = IORESOURCE_DMA,                                \
+       }
 
-struct platform_device imx_ssi_device0 = {
-       .name = "imx-ssi",
-       .id = 0,
-       .num_resources = ARRAY_SIZE(imx_ssi_resources0),
-       .resource = imx_ssi_resources0,
-};
+#define DEFINE_IMX_SSI_DEVICE(n, ssin, baseaddr, irq)                  \
+       static struct resource imx_ssi_resources ## n[] = {             \
+               {                                                       \
+                       .start = MX2x_SSI ## ssin ## _BASE_ADDR,        \
+                       .end = MX2x_SSI ## ssin ## _BASE_ADDR + 0x6f,   \
+                       .flags = IORESOURCE_MEM,                        \
+               }, {                                                    \
+                       .start = MX2x_INT_SSI1,                         \
+                       .end = MX2x_INT_SSI1,                           \
+                       .flags = IORESOURCE_IRQ,                        \
+               },                                                      \
+               DEFINE_IMX_SSI_DMARES("tx0", ssin, TX0),                \
+               DEFINE_IMX_SSI_DMARES("rx0", ssin, RX0),                \
+               DEFINE_IMX_SSI_DMARES("tx1", ssin, TX1),                \
+               DEFINE_IMX_SSI_DMARES("rx1", ssin, RX1),                \
+       };                                                              \
+                                                                       \
+       struct platform_device imx_ssi_device ## n = {                  \
+               .name = "imx-ssi",                                      \
+               .id = n,                                                \
+               .num_resources = ARRAY_SIZE(imx_ssi_resources ## n),    \
+               .resource = imx_ssi_resources ## n,                     \
+       }
 
-struct platform_device imx_ssi_device1 = {
-       .name = "imx-ssi",
-       .id = 1,
-       .num_resources = ARRAY_SIZE(imx_ssi_resources1),
-       .resource = imx_ssi_resources1,
-};
+DEFINE_IMX_SSI_DEVICE(0, 1, MX2x_SSI1_BASE_ADDR, MX2x_INT_SSI1);
+DEFINE_IMX_SSI_DEVICE(1, 2, MX2x_SSI1_BASE_ADDR, MX2x_INT_SSI1);
 
 /* GPIO port description */
-static struct mxc_gpio_port imx_gpio_ports[] = {
-       {
-               .chip.label = "gpio-0",
-               .irq = MXC_INT_GPIO,
-               .base = IO_ADDRESS(GPIO_BASE_ADDR),
-               .virtual_irq_start = MXC_GPIO_IRQ_START,
-       }, {
-               .chip.label = "gpio-1",
-               .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x100),
-               .virtual_irq_start = MXC_GPIO_IRQ_START + 32,
-       }, {
-               .chip.label = "gpio-2",
-               .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x200),
-               .virtual_irq_start = MXC_GPIO_IRQ_START + 64,
-       }, {
-               .chip.label = "gpio-3",
-               .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x300),
-               .virtual_irq_start = MXC_GPIO_IRQ_START + 96,
-       }, {
-               .chip.label = "gpio-4",
-               .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x400),
-               .virtual_irq_start = MXC_GPIO_IRQ_START + 128,
-       }, {
-               .chip.label = "gpio-5",
-               .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x500),
-               .virtual_irq_start = MXC_GPIO_IRQ_START + 160,
+#define DEFINE_MXC_GPIO_PORT_IRQ(SOC, n, _irq)                         \
+       {                                                               \
+               .chip.label = "gpio-" #n,                               \
+               .irq = _irq,                                            \
+               .base = SOC ## _IO_ADDRESS(MX2x_GPIO_BASE_ADDR +        \
+                               n * 0x100),                             \
+               .virtual_irq_start = MXC_GPIO_IRQ_START + n * 32,       \
        }
-};
+
+#define DEFINE_MXC_GPIO_PORT(SOC, n)                                   \
+       {                                                               \
+               .chip.label = "gpio-" #n,                               \
+               .base = SOC ## _IO_ADDRESS(MX2x_GPIO_BASE_ADDR +        \
+                               n * 0x100),                             \
+               .virtual_irq_start = MXC_GPIO_IRQ_START + n * 32,       \
+       }
+
+#define DEFINE_MXC_GPIO_PORTS(SOC, pfx)                                        \
+       static struct mxc_gpio_port pfx ## _gpio_ports[] = {            \
+               DEFINE_MXC_GPIO_PORT_IRQ(SOC, 0, SOC ## _INT_GPIO),     \
+               DEFINE_MXC_GPIO_PORT(SOC, 1),                           \
+               DEFINE_MXC_GPIO_PORT(SOC, 2),                           \
+               DEFINE_MXC_GPIO_PORT(SOC, 3),                           \
+               DEFINE_MXC_GPIO_PORT(SOC, 4),                           \
+               DEFINE_MXC_GPIO_PORT(SOC, 5),                           \
+       }
+
+#ifdef CONFIG_MACH_MX21
+DEFINE_MXC_GPIO_PORTS(MX21, imx21);
+#endif
+
+#ifdef CONFIG_MACH_MX27
+DEFINE_MXC_GPIO_PORTS(MX27, imx27);
+#endif
 
 int __init mxc_register_gpios(void)
 {
-       return mxc_gpio_init(imx_gpio_ports, ARRAY_SIZE(imx_gpio_ports));
+#ifdef CONFIG_MACH_MX21
+       if (cpu_is_mx21())
+               return mxc_gpio_init(imx21_gpio_ports, ARRAY_SIZE(imx21_gpio_ports));
+       else
+#endif
+#ifdef CONFIG_MACH_MX27
+       if (cpu_is_mx27())
+               return mxc_gpio_init(imx27_gpio_ports, ARRAY_SIZE(imx27_gpio_ports));
+       else
+#endif
+               return 0;
 }
 
 #ifdef CONFIG_MACH_MX21
 static struct resource mx21_usbhc_resources[] = {
        {
-               .start  = USBOTG_BASE_ADDR,
-               .end    = USBOTG_BASE_ADDR + 0x1FFF,
+               .start  = MX21_BASE_ADDR,
+               .end    = MX21_BASE_ADDR + 0x1FFF,
                .flags  = IORESOURCE_MEM,
        },
        {
-               .start          = MXC_INT_USBHOST,
-               .end            = MXC_INT_USBHOST,
+               .start          = MX21_INT_USBHOST,
+               .end            = MX21_INT_USBHOST,
                .flags          = IORESOURCE_IRQ,
        },
 };