Re: [PATCH 10/20] gpio: pca953x: Add optional reset gpio control
Hi Linus, Lothar, On 12/30/2016 05:17 AM, Linus Walleij wrote: On Thu, Dec 29, 2016 at 11:27 PM, Steve Longerbeam wrote: Add optional reset-gpios pin control. If present, de-assert the specified reset gpio pin to bring the chip out of reset. Signed-off-by: Steve Longerbeam Cc: Linus Walleij Cc: Alexandre Courbot Cc: linux-g...@vger.kernel.org Cc: linux-ker...@vger.kernel.org This seems like a separate patch from the other 19 patches so please send it separately so I can handle logistics easier in the future. Ok, I'll send the next version separately. @@ -133,6 +134,7 @@ struct pca953x_chip { const char *const *names; unsigned long driver_data; struct regulator *regulator; + struct gpio_desc *reset_gpio; Why do you even keep this around in the device state container? As you only use it in the probe() function, use a local variable. The descriptor will be free():ed by the devm infrastructure anyways. I think my reasoning for putting the gpio handle into the device struct was for possibly using it for run-time reset control at some point. But that could be done later if needed, so I'll go ahead and make it local. + /* see if we need to de-assert a reset pin */ + chip->reset_gpio = devm_gpiod_get_optional(&client->dev, + "reset", + GPIOD_OUT_LOW); + if (IS_ERR(chip->reset_gpio)) { + dev_err(&client->dev, "request for reset pin failed\n"); + return PTR_ERR(chip->reset_gpio); + } Nice. + if (chip->reset_gpio) { + /* bring chip out of reset */ + dev_info(&client->dev, "releasing reset\n"); + gpiod_set_value(chip->reset_gpio, 0); + } Is this really needed given that you set it low in the devm_gpiod_get_optional()? Yep, this is left over from a previous iteration, but it isn't needed now. I'll remove it. Steve ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH 10/20] gpio: pca953x: Add optional reset gpio control
On Thu, Dec 29, 2016 at 11:27 PM, Steve Longerbeam wrote: > Add optional reset-gpios pin control. If present, de-assert the > specified reset gpio pin to bring the chip out of reset. > > Signed-off-by: Steve Longerbeam > Cc: Linus Walleij > Cc: Alexandre Courbot > Cc: linux-g...@vger.kernel.org > Cc: linux-ker...@vger.kernel.org This seems like a separate patch from the other 19 patches so please send it separately so I can handle logistics easier in the future. > @@ -133,6 +134,7 @@ struct pca953x_chip { > const char *const *names; > unsigned long driver_data; > struct regulator *regulator; > + struct gpio_desc *reset_gpio; Why do you even keep this around in the device state container? As you only use it in the probe() function, use a local variable. The descriptor will be free():ed by the devm infrastructure anyways. > + /* see if we need to de-assert a reset pin */ > + chip->reset_gpio = devm_gpiod_get_optional(&client->dev, > + "reset", > + GPIOD_OUT_LOW); > + if (IS_ERR(chip->reset_gpio)) { > + dev_err(&client->dev, "request for reset pin > failed\n"); > + return PTR_ERR(chip->reset_gpio); > + } Nice. > + if (chip->reset_gpio) { > + /* bring chip out of reset */ > + dev_info(&client->dev, "releasing reset\n"); > + gpiod_set_value(chip->reset_gpio, 0); > + } Is this really needed given that you set it low in the devm_gpiod_get_optional()? Yours, Linus Walleij ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH 10/20] gpio: pca953x: Add optional reset gpio control
Hi, On Thu, 29 Dec 2016 14:27:25 -0800 Steve Longerbeam wrote: > Add optional reset-gpios pin control. If present, de-assert the > specified reset gpio pin to bring the chip out of reset. > > Signed-off-by: Steve Longerbeam > Cc: Linus Walleij > Cc: Alexandre Courbot > Cc: linux-g...@vger.kernel.org > Cc: linux-ker...@vger.kernel.org > > --- > > v2: > - documented optional reset-gpios property in > Documentation/devicetree/bindings/gpio/gpio-pca953x.txt. > --- > Documentation/devicetree/bindings/gpio/gpio-pca953x.txt | 4 > drivers/gpio/gpio-pca953x.c | 17 > + > 2 files changed, 21 insertions(+) > > diff --git a/Documentation/devicetree/bindings/gpio/gpio-pca953x.txt > b/Documentation/devicetree/bindings/gpio/gpio-pca953x.txt > index 08dd15f..da54f4c 100644 > --- a/Documentation/devicetree/bindings/gpio/gpio-pca953x.txt > +++ b/Documentation/devicetree/bindings/gpio/gpio-pca953x.txt > @@ -29,6 +29,10 @@ Required properties: > onsemi,pca9654 > exar,xra1202 > > +Optional properties: > + - reset-gpios: GPIO specification for the RESET input > + > + > Example: > > > diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c > index d5d72d8..d1c0bd5 100644 > --- a/drivers/gpio/gpio-pca953x.c > +++ b/drivers/gpio/gpio-pca953x.c > @@ -22,6 +22,7 @@ > #include > #include > #include > +#include > > #define PCA953X_INPUT0 > #define PCA953X_OUTPUT 1 > @@ -133,6 +134,7 @@ struct pca953x_chip { > const char *const *names; > unsigned long driver_data; > struct regulator *regulator; > + struct gpio_desc *reset_gpio; > > const struct pca953x_reg_config *regs; > > @@ -756,6 +758,21 @@ static int pca953x_probe(struct i2c_client *client, > } else { > chip->gpio_start = -1; > irq_base = 0; > + > + /* see if we need to de-assert a reset pin */ > + chip->reset_gpio = devm_gpiod_get_optional(&client->dev, > +"reset", > +GPIOD_OUT_LOW); > + if (IS_ERR(chip->reset_gpio)) { > + dev_err(&client->dev, "request for reset pin failed\n"); > + return PTR_ERR(chip->reset_gpio); > + } > + > + if (chip->reset_gpio) { > + /* bring chip out of reset */ > + dev_info(&client->dev, "releasing reset\n"); > + gpiod_set_value(chip->reset_gpio, 0); > The pin is already initialized to the inactive state thru the GPIOD_OUT_LOW flag in devm_gpiod_get_optional(), so this call to gpiod_set_value() is useless. Lothar Waßmann ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel