diff options
Diffstat (limited to 'arch/arm/plat-mxc/gpio.c')
-rwxr-xr-x | arch/arm/plat-mxc/gpio.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/arm/plat-mxc/gpio.c b/arch/arm/plat-mxc/gpio.c index 0a4743a355da..cd9958d51b66 100755 --- a/arch/arm/plat-mxc/gpio.c +++ b/arch/arm/plat-mxc/gpio.c @@ -305,9 +305,10 @@ static int mxc_gpio_direction_output(struct gpio_chip *chip, */ static struct lock_class_key gpio_lock_class; -int __init mxc_gpio_init(struct mxc_gpio_port *port, int cnt) +int mxc_gpio_init(struct mxc_gpio_port *port, int cnt) { int i, j; + static bool initialed; /* save for local usage */ mxc_gpio_ports = port; @@ -337,8 +338,9 @@ int __init mxc_gpio_init(struct mxc_gpio_port *port, int cnt) spin_lock_init(&port[i].lock); - /* its a serious configuration bug when it fails */ - BUG_ON( gpiochip_add(&port[i].chip) < 0 ); + if (!initialed) + /* its a serious configuration bug when it fails */ + BUG_ON(gpiochip_add(&port[i].chip) < 0); if (cpu_is_mx1() || cpu_is_mx3() || cpu_is_mx25() || cpu_is_mx51() || cpu_is_mx53() || cpu_is_mx6q()) { @@ -355,7 +357,7 @@ int __init mxc_gpio_init(struct mxc_gpio_port *port, int cnt) } } } - + initialed = true; if (cpu_is_mx2()) { /* setup one handler for all GPIO interrupts */ irq_set_chained_handler(port[0].irq, mx2_gpio_irq_handler); |