[ARM] 4561/1: i.MX/MX1 GPIO parenthes omission and input setup fix
authorPavel Pisa <ppisa@pikron.com>
Wed, 29 Aug 2007 22:23:38 +0000 (23:23 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 30 Aug 2007 09:14:25 +0000 (10:14 +0100)
During GPIO testing on PiMX1 board there has been revealed
problem with some pins input functions. The GIUS bit has
to be set for inputs to work reliably too. It is surprising
that input worked on some inputs with incorrect setup before.
DR is not mandatory, but it ensures stable constant level
on internal traces.

Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-imx/generic.c

index c342595dc318b5cdccb87dc375725d40b9e10fcb..4cfc9d3af28a19edb7c077d82126a604997cd502 100644 (file)
@@ -101,10 +101,11 @@ EXPORT_SYMBOL(imx_gpio_mode);
 
 int imx_gpio_request(unsigned gpio, const char *label)
 {
 
 int imx_gpio_request(unsigned gpio, const char *label)
 {
-       if(gpio >= (GPIO_PORT_MAX + 1) * 32)
+       if(gpio >= (GPIO_PORT_MAX + 1) * 32) {
                printk(KERN_ERR "imx_gpio: Attempt to request nonexistent GPIO %d for \"%s\"\n",
                        gpio, label ? label : "?");
                return -EINVAL;
                printk(KERN_ERR "imx_gpio: Attempt to request nonexistent GPIO %d for \"%s\"\n",
                        gpio, label ? label : "?");
                return -EINVAL;
+       }
 
        if(test_and_set_bit(gpio, imx_gpio_alloc_map)) {
                printk(KERN_ERR "imx_gpio: GPIO %d already used. Allocation for \"%s\" failed\n",
 
        if(test_and_set_bit(gpio, imx_gpio_alloc_map)) {
                printk(KERN_ERR "imx_gpio: GPIO %d already used. Allocation for \"%s\" failed\n",
@@ -129,7 +130,7 @@ EXPORT_SYMBOL(imx_gpio_free);
 
 int imx_gpio_direction_input(unsigned gpio)
 {
 
 int imx_gpio_direction_input(unsigned gpio)
 {
-       imx_gpio_mode(gpio| GPIO_IN);
+       imx_gpio_mode(gpio | GPIO_IN | GPIO_GIUS | GPIO_DR);
        return 0;
 }
 
        return 0;
 }