aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn Guo <shawn.guo@linaro.org>2011-12-01 01:49:29 -0500
committerShawn Guo <shawn.guo@linaro.org>2011-12-01 03:15:15 -0500
commit04aafd713bae8a75933c7821dc012b0ec9046bca (patch)
tree5d0a8b41980b7e229e12510c9d24e27573cf6a8a
parent2a3267a489f1dc4284b64a4b88c62011946dc7ff (diff)
arm/imx: fix irq_base for gpio
When gpio core dynamically allocate gpio number for a port, it starts from the end of the total range, 0 ~ ARCH_NR_GPIOS. That said, the earlier a port gets probed, the bigger gpio number it gets assigned. To match this, the irq_base for gpio should be assigned from 'MXC_GPIO_IRQ_START + ARCH_NR_GPIOS' decreasingly. Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
-rw-r--r--arch/arm/mach-imx/mach-imx6q.c5
-rw-r--r--arch/arm/mach-mx5/imx51-dt.c5
-rw-r--r--arch/arm/mach-mx5/imx53-dt.c5
3 files changed, 6 insertions, 9 deletions
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
index eb7531bdfed7..22aa54aa9b2a 100644
--- a/arch/arm/mach-imx/mach-imx6q.c
+++ b/arch/arm/mach-imx/mach-imx6q.c
@@ -39,11 +39,10 @@ static void __init imx6q_map_io(void)
39static int __init imx6q_gpio_add_irq_domain(struct device_node *np, 39static int __init imx6q_gpio_add_irq_domain(struct device_node *np,
40 struct device_node *interrupt_parent) 40 struct device_node *interrupt_parent)
41{ 41{
42 static int gpio_irq_base = MXC_GPIO_IRQ_START + ARCH_NR_GPIOS - 42 static int gpio_irq_base = MXC_GPIO_IRQ_START + ARCH_NR_GPIOS;
43 32 * 7; /* imx6q gets 7 gpio ports */
44 43
44 gpio_irq_base -= 32;
45 irq_domain_add_simple(np, gpio_irq_base); 45 irq_domain_add_simple(np, gpio_irq_base);
46 gpio_irq_base += 32;
47 46
48 return 0; 47 return 0;
49} 48}
diff --git a/arch/arm/mach-mx5/imx51-dt.c b/arch/arm/mach-mx5/imx51-dt.c
index 3451a463a79a..596edd967dbf 100644
--- a/arch/arm/mach-mx5/imx51-dt.c
+++ b/arch/arm/mach-mx5/imx51-dt.c
@@ -54,11 +54,10 @@ static int __init imx51_tzic_add_irq_domain(struct device_node *np,
54static int __init imx51_gpio_add_irq_domain(struct device_node *np, 54static int __init imx51_gpio_add_irq_domain(struct device_node *np,
55 struct device_node *interrupt_parent) 55 struct device_node *interrupt_parent)
56{ 56{
57 static int gpio_irq_base = MXC_GPIO_IRQ_START + ARCH_NR_GPIOS - 57 static int gpio_irq_base = MXC_GPIO_IRQ_START + ARCH_NR_GPIOS;
58 32 * 4; /* imx51 gets 4 gpio ports */
59 58
59 gpio_irq_base -= 32;
60 irq_domain_add_simple(np, gpio_irq_base); 60 irq_domain_add_simple(np, gpio_irq_base);
61 gpio_irq_base += 32;
62 61
63 return 0; 62 return 0;
64} 63}
diff --git a/arch/arm/mach-mx5/imx53-dt.c b/arch/arm/mach-mx5/imx53-dt.c
index 022bc0364b5f..85bfd5ff21b0 100644
--- a/arch/arm/mach-mx5/imx53-dt.c
+++ b/arch/arm/mach-mx5/imx53-dt.c
@@ -58,11 +58,10 @@ static int __init imx53_tzic_add_irq_domain(struct device_node *np,
58static int __init imx53_gpio_add_irq_domain(struct device_node *np, 58static int __init imx53_gpio_add_irq_domain(struct device_node *np,
59 struct device_node *interrupt_parent) 59 struct device_node *interrupt_parent)
60{ 60{
61 static int gpio_irq_base = MXC_GPIO_IRQ_START + ARCH_NR_GPIOS - 61 static int gpio_irq_base = MXC_GPIO_IRQ_START + ARCH_NR_GPIOS;
62 32 * 7; /* imx53 gets 7 gpio ports */
63 62
63 gpio_irq_base -= 32;
64 irq_domain_add_simple(np, gpio_irq_base); 64 irq_domain_add_simple(np, gpio_irq_base);
65 gpio_irq_base += 32;
66 65
67 return 0; 66 return 0;
68} 67}