diff options
Diffstat (limited to 'arch/arm/plat-mxc/gpio.c')
-rw-r--r-- | arch/arm/plat-mxc/gpio.c | 58 |
1 files changed, 35 insertions, 23 deletions
diff --git a/arch/arm/plat-mxc/gpio.c b/arch/arm/plat-mxc/gpio.c index 2c00d9bf0a6..e59fb973a77 100644 --- a/arch/arm/plat-mxc/gpio.c +++ b/arch/arm/plat-mxc/gpio.c | |||
@@ -350,17 +350,17 @@ int __init mxc_gpio_init(struct mxc_gpio_port *port, int cnt) | |||
350 | return 0; | 350 | return 0; |
351 | } | 351 | } |
352 | 352 | ||
353 | #define DEFINE_IMX_GPIO_PORT_IRQ(soc, n, _irq) \ | 353 | #define DEFINE_IMX_GPIO_PORT_IRQ(soc, _id, _hwid, _irq) \ |
354 | { \ | 354 | { \ |
355 | .chip.label = "gpio-" #n, \ | 355 | .chip.label = "gpio-" #_id, \ |
356 | .irq = _irq, \ | 356 | .irq = _irq, \ |
357 | .base = soc ## _IO_ADDRESS(soc ## _GPIO_BASE_ADDR + \ | 357 | .base = soc ## _IO_ADDRESS( \ |
358 | (n) * SZ_256), \ | 358 | soc ## _GPIO ## _hwid ## _BASE_ADDR), \ |
359 | .virtual_irq_start = MXC_GPIO_IRQ_START + (n) * 32, \ | 359 | .virtual_irq_start = MXC_GPIO_IRQ_START + (_id) * 32, \ |
360 | } | 360 | } |
361 | 361 | ||
362 | #define DEFINE_IMX_GPIO_PORT(soc, n) \ | 362 | #define DEFINE_IMX_GPIO_PORT(soc, _id, _hwid) \ |
363 | DEFINE_IMX_GPIO_PORT_IRQ(soc, n, 0) | 363 | DEFINE_IMX_GPIO_PORT_IRQ(soc, _id, _hwid, 0) |
364 | 364 | ||
365 | #define DEFINE_REGISTER_FUNCTION(prefix) \ | 365 | #define DEFINE_REGISTER_FUNCTION(prefix) \ |
366 | int __init prefix ## _register_gpios(void) \ | 366 | int __init prefix ## _register_gpios(void) \ |
@@ -371,10 +371,10 @@ int __init prefix ## _register_gpios(void) \ | |||
371 | 371 | ||
372 | #if defined(CONFIG_SOC_IMX1) | 372 | #if defined(CONFIG_SOC_IMX1) |
373 | static struct mxc_gpio_port imx1_gpio_ports[] = { | 373 | static struct mxc_gpio_port imx1_gpio_ports[] = { |
374 | DEFINE_IMX_GPIO_PORT_IRQ(MX1, 0, MX1_GPIO_INT_PORTA), | 374 | DEFINE_IMX_GPIO_PORT_IRQ(MX1, 0, 1, MX1_GPIO_INT_PORTA), |
375 | DEFINE_IMX_GPIO_PORT_IRQ(MX1, 1, MX1_GPIO_INT_PORTB), | 375 | DEFINE_IMX_GPIO_PORT_IRQ(MX1, 1, 2, MX1_GPIO_INT_PORTB), |
376 | DEFINE_IMX_GPIO_PORT_IRQ(MX1, 2, MX1_GPIO_INT_PORTC), | 376 | DEFINE_IMX_GPIO_PORT_IRQ(MX1, 2, 3, MX1_GPIO_INT_PORTC), |
377 | DEFINE_IMX_GPIO_PORT_IRQ(MX1, 3, MX1_GPIO_INT_PORTD), | 377 | DEFINE_IMX_GPIO_PORT_IRQ(MX1, 3, 4, MX1_GPIO_INT_PORTD), |
378 | }; | 378 | }; |
379 | 379 | ||
380 | DEFINE_REGISTER_FUNCTION(imx1) | 380 | DEFINE_REGISTER_FUNCTION(imx1) |
@@ -383,26 +383,38 @@ DEFINE_REGISTER_FUNCTION(imx1) | |||
383 | 383 | ||
384 | #if defined(CONFIG_SOC_IMX21) | 384 | #if defined(CONFIG_SOC_IMX21) |
385 | static struct mxc_gpio_port imx21_gpio_ports[] = { | 385 | static struct mxc_gpio_port imx21_gpio_ports[] = { |
386 | DEFINE_IMX_GPIO_PORT_IRQ(MX21, 0, MX21_INT_GPIO), | 386 | DEFINE_IMX_GPIO_PORT_IRQ(MX21, 0, 1, MX21_INT_GPIO), |
387 | DEFINE_IMX_GPIO_PORT(MX21, 1), | 387 | DEFINE_IMX_GPIO_PORT(MX21, 1, 2), |
388 | DEFINE_IMX_GPIO_PORT(MX21, 2), | 388 | DEFINE_IMX_GPIO_PORT(MX21, 2, 3), |
389 | DEFINE_IMX_GPIO_PORT(MX21, 3), | 389 | DEFINE_IMX_GPIO_PORT(MX21, 3, 4), |
390 | DEFINE_IMX_GPIO_PORT(MX21, 4), | 390 | DEFINE_IMX_GPIO_PORT(MX21, 4, 5), |
391 | DEFINE_IMX_GPIO_PORT(MX21, 5), | 391 | DEFINE_IMX_GPIO_PORT(MX21, 5, 6), |
392 | }; | 392 | }; |
393 | 393 | ||
394 | DEFINE_REGISTER_FUNCTION(imx21) | 394 | DEFINE_REGISTER_FUNCTION(imx21) |
395 | 395 | ||
396 | #endif /* if defined(CONFIG_SOC_IMX21) */ | 396 | #endif /* if defined(CONFIG_SOC_IMX21) */ |
397 | 397 | ||
398 | #if defined(CONFIG_ARCH_MX25) | ||
399 | static struct mxc_gpio_port imx25_gpio_ports[] = { | ||
400 | DEFINE_IMX_GPIO_PORT_IRQ(MX25, 0, 1, MX25_INT_GPIO1), | ||
401 | DEFINE_IMX_GPIO_PORT_IRQ(MX25, 1, 2, MX25_INT_GPIO2), | ||
402 | DEFINE_IMX_GPIO_PORT_IRQ(MX25, 2, 3, MX25_INT_GPIO3), | ||
403 | DEFINE_IMX_GPIO_PORT_IRQ(MX25, 3, 4, MX25_INT_GPIO4), | ||
404 | }; | ||
405 | |||
406 | DEFINE_REGISTER_FUNCTION(imx25) | ||
407 | |||
408 | #endif /* if defined(CONFIG_ARCH_MX25) */ | ||
409 | |||
398 | #if defined(CONFIG_SOC_IMX27) | 410 | #if defined(CONFIG_SOC_IMX27) |
399 | static struct mxc_gpio_port imx27_gpio_ports[] = { | 411 | static struct mxc_gpio_port imx27_gpio_ports[] = { |
400 | DEFINE_IMX_GPIO_PORT_IRQ(MX27, 0, MX27_INT_GPIO), | 412 | DEFINE_IMX_GPIO_PORT_IRQ(MX27, 0, 1, MX27_INT_GPIO), |
401 | DEFINE_IMX_GPIO_PORT(MX27, 1), | 413 | DEFINE_IMX_GPIO_PORT(MX27, 1, 2), |
402 | DEFINE_IMX_GPIO_PORT(MX27, 2), | 414 | DEFINE_IMX_GPIO_PORT(MX27, 2, 3), |
403 | DEFINE_IMX_GPIO_PORT(MX27, 3), | 415 | DEFINE_IMX_GPIO_PORT(MX27, 3, 4), |
404 | DEFINE_IMX_GPIO_PORT(MX27, 4), | 416 | DEFINE_IMX_GPIO_PORT(MX27, 4, 5), |
405 | DEFINE_IMX_GPIO_PORT(MX27, 5), | 417 | DEFINE_IMX_GPIO_PORT(MX27, 5, 6), |
406 | }; | 418 | }; |
407 | 419 | ||
408 | DEFINE_REGISTER_FUNCTION(imx27) | 420 | DEFINE_REGISTER_FUNCTION(imx27) |