|
@@ -432,36 +432,52 @@ 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 = MX2x_INT_GPIO,
|
|
|
- .base = IO_ADDRESS(MX2x_GPIO_BASE_ADDR),
|
|
|
- .virtual_irq_start = MXC_GPIO_IRQ_START,
|
|
|
- }, {
|
|
|
- .chip.label = "gpio-1",
|
|
|
- .base = IO_ADDRESS(MX2x_GPIO_BASE_ADDR + 0x100),
|
|
|
- .virtual_irq_start = MXC_GPIO_IRQ_START + 32,
|
|
|
- }, {
|
|
|
- .chip.label = "gpio-2",
|
|
|
- .base = IO_ADDRESS(MX2x_GPIO_BASE_ADDR + 0x200),
|
|
|
- .virtual_irq_start = MXC_GPIO_IRQ_START + 64,
|
|
|
- }, {
|
|
|
- .chip.label = "gpio-3",
|
|
|
- .base = IO_ADDRESS(MX2x_GPIO_BASE_ADDR + 0x300),
|
|
|
- .virtual_irq_start = MXC_GPIO_IRQ_START + 96,
|
|
|
- }, {
|
|
|
- .chip.label = "gpio-4",
|
|
|
- .base = IO_ADDRESS(MX2x_GPIO_BASE_ADDR + 0x400),
|
|
|
- .virtual_irq_start = MXC_GPIO_IRQ_START + 128,
|
|
|
- }, {
|
|
|
- .chip.label = "gpio-5",
|
|
|
- .base = IO_ADDRESS(MX2x_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;
|
|
|
}
|