mxc_gpio: Correct the GPIO handling in gpio_direction_output()
authorDirk Behme <dirk.behme@de.bosch.com>
Mon, 15 Jul 2013 13:58:27 +0000 (15:58 +0200)
committerStefano Babic <sbabic@denx.de>
Wed, 24 Jul 2013 11:01:18 +0000 (13:01 +0200)
Setting the direction and an output value should be done by

First, set the desired output value.

Then, switch to output.

If this is done in the inverse order, like at the moment,
there can be a glitch on the GPIO line while switching first
the old output value and aftwards the new one.

Fix this by inverting the order of the direction/set_value
calls.

Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
Acked-by: Stefano Babic <sbabic@denx.de>
drivers/gpio/mxc_gpio.c

index a3880641f0a8c73e64896b5b3512dc9dfbbf4297..1d820d4c3ef63201be241c2c4c0e634b3d8c332c 100644 (file)
@@ -143,10 +143,10 @@ int gpio_direction_input(unsigned gpio)
 
 int gpio_direction_output(unsigned gpio, int value)
 {
-       int ret = mxc_gpio_direction(gpio, MXC_GPIO_DIRECTION_OUT);
+       int ret = gpio_set_value(gpio, value);
 
        if (ret < 0)
                return ret;
 
-       return gpio_set_value(gpio, value);
+       return mxc_gpio_direction(gpio, MXC_GPIO_DIRECTION_OUT);
 }