linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] gpio: twl4030: fix regression for twl gpio outputs for led pins
@ 2013-12-13 16:47 Nishanth Menon
  2013-12-13 17:28 ` Tony Lindgren
  0 siblings, 1 reply; 3+ messages in thread
From: Nishanth Menon @ 2013-12-13 16:47 UTC (permalink / raw)
  To: Tony Lindgren, Linus Walleij
  Cc: Peter Ujfalusi, Roger Quadros, linux-gpio, linux-kernel,
	linux-omap, Nishanth Menon

Commit 0b2aa8b (gpio: twl4030: Fix regression for twl gpio output)
introduces yet another regression by ignoring the fact that we use twl
gpio even for LED. For example, leda (offset 18) is used for USB port2
power on beagleboard-xm.

The original logic was supposed to setup the TWL4030 GPIO direction
if the offset was < TWL4030_GPIO_MAX, and anything greater used
twl4030_led_set_value as part of twl_set to setup the LED pin. However,
with the commit mentioned above, LEDa pin request will result in fail
as the GPIO number for LEDa is equal to TWL4030_GPIO_MAX and USB fails
to function on beagleboard-xm. This is reported in the log as:
hsusb2_vbus: Failed to request enable GPIO510: -22

To fix this, we should handle the fail case of
twl4030_set_gpio_direction independent of the offset < TWL4030_GPIO_MAX
check.

Signed-off-by: Nishanth Menon <nm@ti.com>
---
Applies on v3.13-rc3

Tested on beagleboard-xm which uses ethernet over usb:
before the patch (USB regression): http://pastebin.mozilla.org/3769443
After this patch: http://pastebin.mozilla.org/3769454

 drivers/gpio/gpio-twl4030.c |    9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/gpio/gpio-twl4030.c b/drivers/gpio/gpio-twl4030.c
index b97d6a6..9242276 100644
--- a/drivers/gpio/gpio-twl4030.c
+++ b/drivers/gpio/gpio-twl4030.c
@@ -354,11 +354,16 @@ static void twl_set(struct gpio_chip *chip, unsigned offset, int value)
 static int twl_direction_out(struct gpio_chip *chip, unsigned offset, int value)
 {
 	struct gpio_twl4030_priv *priv = to_gpio_twl4030(chip);
-	int ret = -EINVAL;
+	int ret = 0;
 
 	mutex_lock(&priv->mutex);
-	if (offset < TWL4030_GPIO_MAX)
+	if (offset < TWL4030_GPIO_MAX) {
 		ret = twl4030_set_gpio_direction(offset, 0);
+		if (ret) {
+			mutex_unlock(&priv->mutex);
+			return ret;
+		}
+	}
 
 	priv->direction |= BIT(offset);
 	mutex_unlock(&priv->mutex);
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] gpio: twl4030: fix regression for twl gpio outputs for led pins
  2013-12-13 16:47 [PATCH] gpio: twl4030: fix regression for twl gpio outputs for led pins Nishanth Menon
@ 2013-12-13 17:28 ` Tony Lindgren
  2013-12-13 17:36   ` Nishanth Menon
  0 siblings, 1 reply; 3+ messages in thread
From: Tony Lindgren @ 2013-12-13 17:28 UTC (permalink / raw)
  To: Nishanth Menon
  Cc: Linus Walleij, Peter Ujfalusi, Roger Quadros, linux-gpio,
	linux-kernel, linux-omap

* Nishanth Menon <nm@ti.com> [131213 08:48]:
> Commit 0b2aa8b (gpio: twl4030: Fix regression for twl gpio output)
> introduces yet another regression by ignoring the fact that we use twl
> gpio even for LED. For example, leda (offset 18) is used for USB port2
> power on beagleboard-xm.
> 
> The original logic was supposed to setup the TWL4030 GPIO direction
> if the offset was < TWL4030_GPIO_MAX, and anything greater used
> twl4030_led_set_value as part of twl_set to setup the LED pin. However,
> with the commit mentioned above, LEDa pin request will result in fail
> as the GPIO number for LEDa is equal to TWL4030_GPIO_MAX and USB fails
> to function on beagleboard-xm. This is reported in the log as:
> hsusb2_vbus: Failed to request enable GPIO510: -22
> 
> To fix this, we should handle the fail case of
> twl4030_set_gpio_direction independent of the offset < TWL4030_GPIO_MAX
> check.

Heh again :) Linus has already queued a similar fix, see
"[PATCH v2 1/1] gpio: twl4030: Fix regression for twl gpio LED output".

Regards,

Tony



 
> Signed-off-by: Nishanth Menon <nm@ti.com>
> ---
> Applies on v3.13-rc3
> 
> Tested on beagleboard-xm which uses ethernet over usb:
> before the patch (USB regression): http://pastebin.mozilla.org/3769443
> After this patch: http://pastebin.mozilla.org/3769454
> 
>  drivers/gpio/gpio-twl4030.c |    9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpio/gpio-twl4030.c b/drivers/gpio/gpio-twl4030.c
> index b97d6a6..9242276 100644
> --- a/drivers/gpio/gpio-twl4030.c
> +++ b/drivers/gpio/gpio-twl4030.c
> @@ -354,11 +354,16 @@ static void twl_set(struct gpio_chip *chip, unsigned offset, int value)
>  static int twl_direction_out(struct gpio_chip *chip, unsigned offset, int value)
>  {
>  	struct gpio_twl4030_priv *priv = to_gpio_twl4030(chip);
> -	int ret = -EINVAL;
> +	int ret = 0;
>  
>  	mutex_lock(&priv->mutex);
> -	if (offset < TWL4030_GPIO_MAX)
> +	if (offset < TWL4030_GPIO_MAX) {
>  		ret = twl4030_set_gpio_direction(offset, 0);
> +		if (ret) {
> +			mutex_unlock(&priv->mutex);
> +			return ret;
> +		}
> +	}
>  
>  	priv->direction |= BIT(offset);
>  	mutex_unlock(&priv->mutex);
> -- 
> 1.7.9.5
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] gpio: twl4030: fix regression for twl gpio outputs for led pins
  2013-12-13 17:28 ` Tony Lindgren
@ 2013-12-13 17:36   ` Nishanth Menon
  0 siblings, 0 replies; 3+ messages in thread
From: Nishanth Menon @ 2013-12-13 17:36 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: Linus Walleij, Peter Ujfalusi, Roger Quadros, linux-gpio,
	linux-kernel, linux-omap

On 12/13/2013 11:28 AM, Tony Lindgren wrote:
> * Nishanth Menon <nm@ti.com> [131213 08:48]:
>> Commit 0b2aa8b (gpio: twl4030: Fix regression for twl gpio output)
>> introduces yet another regression by ignoring the fact that we use twl
>> gpio even for LED. For example, leda (offset 18) is used for USB port2
>> power on beagleboard-xm.
>>
>> The original logic was supposed to setup the TWL4030 GPIO direction
>> if the offset was < TWL4030_GPIO_MAX, and anything greater used
>> twl4030_led_set_value as part of twl_set to setup the LED pin. However,
>> with the commit mentioned above, LEDa pin request will result in fail
>> as the GPIO number for LEDa is equal to TWL4030_GPIO_MAX and USB fails
>> to function on beagleboard-xm. This is reported in the log as:
>> hsusb2_vbus: Failed to request enable GPIO510: -22
>>
>> To fix this, we should handle the fail case of
>> twl4030_set_gpio_direction independent of the offset < TWL4030_GPIO_MAX
>> check.
> 
> Heh again :) Linus has already queued a similar fix, see
> "[PATCH v2 1/1] gpio: twl4030: Fix regression for twl gpio LED output".
> 

Alrite, I admit it, I need a vacation ;).. Sigh..
http://marc.info/?l=linux-gpio&w=2&r=1&s=twl4030&q=t is not good
enough :(..


-- 
Regards,
Nishanth Menon

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-12-13 17:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-13 16:47 [PATCH] gpio: twl4030: fix regression for twl gpio outputs for led pins Nishanth Menon
2013-12-13 17:28 ` Tony Lindgren
2013-12-13 17:36   ` Nishanth Menon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).