diff mbox

[U-Boot] mxc_gpio: Correct the GPIO handling in gpio_direction_output()

Message ID 1373896707-4204-1-git-send-email-dirk.behme@de.bosch.com
State Awaiting Upstream
Delegated to: Stefano Babic
Headers show

Commit Message

Dirk Behme July 15, 2013, 1:58 p.m. UTC
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>
---
 drivers/gpio/mxc_gpio.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Stefano Babic July 16, 2013, 7:22 a.m. UTC | #1
On 15/07/2013 15:58, Dirk Behme wrote:
> 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.

Right, thanks to fix this !

> 
> Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
> ---
>  drivers/gpio/mxc_gpio.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpio/mxc_gpio.c b/drivers/gpio/mxc_gpio.c
> index a388064..1d820d4 100644
> --- a/drivers/gpio/mxc_gpio.c
> +++ b/drivers/gpio/mxc_gpio.c
> @@ -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);
>  }
> 

Acked-by: Stefano Babic <sbabic@denx.de>

Best regards,
Stefano Babic
Stefano Babic July 24, 2013, 11:02 a.m. UTC | #2
On 15/07/2013 15:58, Dirk Behme wrote:
> 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>
> ---

Applied to u-boot-imx, thanks !

Best regards,
SWtefano Babic
diff mbox

Patch

diff --git a/drivers/gpio/mxc_gpio.c b/drivers/gpio/mxc_gpio.c
index a388064..1d820d4 100644
--- a/drivers/gpio/mxc_gpio.c
+++ b/drivers/gpio/mxc_gpio.c
@@ -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);
 }