Re: [PATCH v2 1/1] gpio: twl4030: Fix regression for twl gpio LED output

2013-12-10 Thread Linus Walleij
On Thu, Dec 5, 2013 at 10:23 AM, Roger Quadros rog...@ti.com wrote:

 Commit 0b2aa8be introduced a regression that causes failure
 in setting LED GPO direction to OUT.

 This causes USB host probe failures for Beagleboard C4.

 [2.075469] platform usb_phy_gen_xceiv.2: Driver usb_phy_gen_xceiv 
 requests probe deferral
 [2.090454] hsusb2_vcc: Failed to request enable GPIO510: -22
 [2.100982] reg-fixed-voltage reg-fixed-voltage.0.auto: Failed to register 
 regulator: -22
 [2.109954] reg-fixed-voltage: probe of reg-fixed-voltage.0.auto failed 
 with error -22

 direction_out/direction_in must return 0 if the operation succeeded.

 Also, don't update direction flag and output data if 
 twl4030_set_gpio_direction()
 failed inside twl_direction_out();

 Signed-off-by: Roger Quadros rog...@ti.com

Patch applied for fixes with Tony's ACK.

Thanks!
Linus Walleij
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 1/1] gpio: twl4030: Fix regression for twl gpio LED output

2013-12-05 Thread Roger Quadros
Commit 0b2aa8be introduced a regression that causes failure
in setting LED GPO direction to OUT.

This causes USB host probe failures for Beagleboard C4.

[2.075469] platform usb_phy_gen_xceiv.2: Driver usb_phy_gen_xceiv requests 
probe deferral
[2.090454] hsusb2_vcc: Failed to request enable GPIO510: -22
[2.100982] reg-fixed-voltage reg-fixed-voltage.0.auto: Failed to register 
regulator: -22
[2.109954] reg-fixed-voltage: probe of reg-fixed-voltage.0.auto failed with 
error -22

direction_out/direction_in must return 0 if the operation succeeded.

Also, don't update direction flag and output data if 
twl4030_set_gpio_direction()
failed inside twl_direction_out();

Signed-off-by: Roger Quadros rog...@ti.com
---
 drivers/gpio/gpio-twl4030.c | 15 ---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/gpio/gpio-twl4030.c b/drivers/gpio/gpio-twl4030.c
index b97d6a6..f999689 100644
--- a/drivers/gpio/gpio-twl4030.c
+++ b/drivers/gpio/gpio-twl4030.c
@@ -300,7 +300,7 @@ static int twl_direction_in(struct gpio_chip *chip, 
unsigned offset)
if (offset  TWL4030_GPIO_MAX)
ret = twl4030_set_gpio_direction(offset, 1);
else
-   ret = -EINVAL;
+   ret = -EINVAL;  /* LED outputs can't be set as input */
 
if (!ret)
priv-direction = ~BIT(offset);
@@ -354,11 +354,20 @@ 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;
+   }
+   }
+
+   /*
+*  LED gpios i.e. offset = TWL4030_GPIO_MAX are always output
+*/
 
priv-direction |= BIT(offset);
mutex_unlock(priv-mutex);
-- 
1.8.3.2

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/1] gpio: twl4030: Fix regression for twl gpio LED output

2013-12-05 Thread Tony Lindgren
* Roger Quadros rog...@ti.com [131205 01:24]:
 Commit 0b2aa8be introduced a regression that causes failure
 in setting LED GPO direction to OUT.
 
 This causes USB host probe failures for Beagleboard C4.
 
 [2.075469] platform usb_phy_gen_xceiv.2: Driver usb_phy_gen_xceiv 
 requests probe deferral
 [2.090454] hsusb2_vcc: Failed to request enable GPIO510: -22
 [2.100982] reg-fixed-voltage reg-fixed-voltage.0.auto: Failed to register 
 regulator: -22
 [2.109954] reg-fixed-voltage: probe of reg-fixed-voltage.0.auto failed 
 with error -22
 
 direction_out/direction_in must return 0 if the operation succeeded.
 
 Also, don't update direction flag and output data if 
 twl4030_set_gpio_direction()
 failed inside twl_direction_out();
 
 Signed-off-by: Roger Quadros rog...@ti.com

Acked-by: Tony Lindgren t...@atomide.com

Linus, commit 0b2aa8be is in mainline now, so feel free to pick this one
up if it looks OK to you. This should be also Cc stable as 0b2aa8be has
that.

Regards,

Tony

 ---
  drivers/gpio/gpio-twl4030.c | 15 ---
  1 file changed, 12 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/gpio/gpio-twl4030.c b/drivers/gpio/gpio-twl4030.c
 index b97d6a6..f999689 100644
 --- a/drivers/gpio/gpio-twl4030.c
 +++ b/drivers/gpio/gpio-twl4030.c
 @@ -300,7 +300,7 @@ static int twl_direction_in(struct gpio_chip *chip, 
 unsigned offset)
   if (offset  TWL4030_GPIO_MAX)
   ret = twl4030_set_gpio_direction(offset, 1);
   else
 - ret = -EINVAL;
 + ret = -EINVAL;  /* LED outputs can't be set as input */
  
   if (!ret)
   priv-direction = ~BIT(offset);
 @@ -354,11 +354,20 @@ 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;
 + }
 + }
 +
 + /*
 +  *  LED gpios i.e. offset = TWL4030_GPIO_MAX are always output
 +  */
  
   priv-direction |= BIT(offset);
   mutex_unlock(priv-mutex);
 -- 
 1.8.3.2
 
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html