diff options
Diffstat (limited to 'arch/arm/mach-mx2')
-rw-r--r-- | arch/arm/mach-mx2/devices.c | 72 |
1 files changed, 44 insertions, 28 deletions
diff --git a/arch/arm/mach-mx2/devices.c b/arch/arm/mach-mx2/devices.c index cda4aced7a39..a4b809b82fa3 100644 --- a/arch/arm/mach-mx2/devices.c +++ b/arch/arm/mach-mx2/devices.c | |||
@@ -432,36 +432,52 @@ DEFINE_IMX_SSI_DEVICE(0, 1, MX2x_SSI1_BASE_ADDR, MX2x_INT_SSI1); | |||
432 | DEFINE_IMX_SSI_DEVICE(1, 2, MX2x_SSI1_BASE_ADDR, MX2x_INT_SSI1); | 432 | DEFINE_IMX_SSI_DEVICE(1, 2, MX2x_SSI1_BASE_ADDR, MX2x_INT_SSI1); |
433 | 433 | ||
434 | /* GPIO port description */ | 434 | /* GPIO port description */ |
435 | static struct mxc_gpio_port imx_gpio_ports[] = { | 435 | #define DEFINE_MXC_GPIO_PORT_IRQ(SOC, n, _irq) \ |
436 | { | 436 | { \ |
437 | .chip.label = "gpio-0", | 437 | .chip.label = "gpio-" #n, \ |
438 | .irq = MX2x_INT_GPIO, | 438 | .irq = _irq, \ |
439 | .base = IO_ADDRESS(MX2x_GPIO_BASE_ADDR), | 439 | .base = SOC ## _IO_ADDRESS(MX2x_GPIO_BASE_ADDR + \ |
440 | .virtual_irq_start = MXC_GPIO_IRQ_START, | 440 | n * 0x100), \ |
441 | }, { | 441 | .virtual_irq_start = MXC_GPIO_IRQ_START + n * 32, \ |
442 | .chip.label = "gpio-1", | 442 | } |
443 | .base = IO_ADDRESS(MX2x_GPIO_BASE_ADDR + 0x100), | 443 | |
444 | .virtual_irq_start = MXC_GPIO_IRQ_START + 32, | 444 | #define DEFINE_MXC_GPIO_PORT(SOC, n) \ |
445 | }, { | 445 | { \ |
446 | .chip.label = "gpio-2", | 446 | .chip.label = "gpio-" #n, \ |
447 | .base = IO_ADDRESS(MX2x_GPIO_BASE_ADDR + 0x200), | 447 | .base = SOC ## _IO_ADDRESS(MX2x_GPIO_BASE_ADDR + \ |
448 | .virtual_irq_start = MXC_GPIO_IRQ_START + 64, | 448 | n * 0x100), \ |
449 | }, { | 449 | .virtual_irq_start = MXC_GPIO_IRQ_START + n * 32, \ |
450 | .chip.label = "gpio-3", | ||
451 | .base = IO_ADDRESS(MX2x_GPIO_BASE_ADDR + 0x300), | ||
452 | .virtual_irq_start = MXC_GPIO_IRQ_START + 96, | ||
453 | }, { | ||
454 | .chip.label = "gpio-4", | ||
455 | .base = IO_ADDRESS(MX2x_GPIO_BASE_ADDR + 0x400), | ||
456 | .virtual_irq_start = MXC_GPIO_IRQ_START + 128, | ||
457 | }, { | ||
458 | .chip.label = "gpio-5", | ||
459 | .base = IO_ADDRESS(MX2x_GPIO_BASE_ADDR + 0x500), | ||
460 | .virtual_irq_start = MXC_GPIO_IRQ_START + 160, | ||
461 | } | 450 | } |
462 | }; | 451 | |
452 | #define DEFINE_MXC_GPIO_PORTS(SOC, pfx) \ | ||
453 | static struct mxc_gpio_port pfx ## _gpio_ports[] = { \ | ||
454 | DEFINE_MXC_GPIO_PORT_IRQ(SOC, 0, SOC ## _INT_GPIO), \ | ||
455 | DEFINE_MXC_GPIO_PORT(SOC, 1), \ | ||
456 | DEFINE_MXC_GPIO_PORT(SOC, 2), \ | ||
457 | DEFINE_MXC_GPIO_PORT(SOC, 3), \ | ||
458 | DEFINE_MXC_GPIO_PORT(SOC, 4), \ | ||
459 | DEFINE_MXC_GPIO_PORT(SOC, 5), \ | ||
460 | } | ||
461 | |||
462 | #ifdef CONFIG_MACH_MX21 | ||
463 | DEFINE_MXC_GPIO_PORTS(MX21, imx21); | ||
464 | #endif | ||
465 | |||
466 | #ifdef CONFIG_MACH_MX27 | ||
467 | DEFINE_MXC_GPIO_PORTS(MX27, imx27); | ||
468 | #endif | ||
463 | 469 | ||
464 | int __init mxc_register_gpios(void) | 470 | int __init mxc_register_gpios(void) |
465 | { | 471 | { |
466 | return mxc_gpio_init(imx_gpio_ports, ARRAY_SIZE(imx_gpio_ports)); | 472 | #ifdef CONFIG_MACH_MX21 |
473 | if (cpu_is_mx21()) | ||
474 | return mxc_gpio_init(imx21_gpio_ports, ARRAY_SIZE(imx21_gpio_ports)); | ||
475 | else | ||
476 | #endif | ||
477 | #ifdef CONFIG_MACH_MX27 | ||
478 | if (cpu_is_mx27()) | ||
479 | return mxc_gpio_init(imx27_gpio_ports, ARRAY_SIZE(imx27_gpio_ports)); | ||
480 | else | ||
481 | #endif | ||
482 | return 0; | ||
467 | } | 483 | } |