RE: [PATCH 2/2] gpio: 74x164: handling enable-gpios

2017-08-07 Thread Peng Fan
> > +   chip->enable_gpio = devm_gpiod_get(>dev, "enable",
> GPIOD_OUT_LOW);
> > +   if (IS_ERR(chip->enable_gpio)) {
> > +   dev_dbg(>dev, "No enable-gpios property\n");
> > +   chip->enable_gpio = NULL;
> 
> Also, the error handling here is not correct as it will never propagate
> EPROBE_DEFER.
> 
> I will submit my version of the patch if you don't mind.

That's ok if you have a better patch.

Regards,
Peng.


RE: [PATCH 2/2] gpio: 74x164: handling enable-gpios

2017-08-07 Thread Peng Fan
> > +   chip->enable_gpio = devm_gpiod_get(>dev, "enable",
> GPIOD_OUT_LOW);
> > +   if (IS_ERR(chip->enable_gpio)) {
> > +   dev_dbg(>dev, "No enable-gpios property\n");
> > +   chip->enable_gpio = NULL;
> 
> Also, the error handling here is not correct as it will never propagate
> EPROBE_DEFER.
> 
> I will submit my version of the patch if you don't mind.

That's ok if you have a better patch.

Regards,
Peng.


Re: [PATCH 2/2] gpio: 74x164: handling enable-gpios

2017-08-07 Thread Fabio Estevam
On Mon, Aug 7, 2017 at 9:27 AM, Peng Fan  wrote:

> +   chip->enable_gpio = devm_gpiod_get(>dev, "enable", 
> GPIOD_OUT_LOW);
> +   if (IS_ERR(chip->enable_gpio)) {
> +   dev_dbg(>dev, "No enable-gpios property\n");
> +   chip->enable_gpio = NULL;

Also, the error handling here is not correct as it will never
propagate EPROBE_DEFER.

I will submit my version of the patch if you don't mind.


Re: [PATCH 2/2] gpio: 74x164: handling enable-gpios

2017-08-07 Thread Fabio Estevam
On Mon, Aug 7, 2017 at 9:27 AM, Peng Fan  wrote:

> +   chip->enable_gpio = devm_gpiod_get(>dev, "enable", 
> GPIOD_OUT_LOW);
> +   if (IS_ERR(chip->enable_gpio)) {
> +   dev_dbg(>dev, "No enable-gpios property\n");
> +   chip->enable_gpio = NULL;

Also, the error handling here is not correct as it will never
propagate EPROBE_DEFER.

I will submit my version of the patch if you don't mind.


Re: [PATCH 2/2] gpio: 74x164: handling enable-gpios

2017-08-07 Thread Fabio Estevam
Hi Peng,

On Mon, Aug 7, 2017 at 9:27 AM, Peng Fan  wrote:
> To 74hc595 and 74lv595, there is an OE(low active) input pin.
> To some boards, this pin is controller by GPIO, so handling
> this pin in driver. When driver probe, use GPIOD_OUT_LOW flag
> when requesting the gpio, so OE is set to low when probe.

Well, this depends of the GPIO polarity.

>
> Signed-off-by: Peng Fan 
> Cc: Linus Walleij 
> ---
>  drivers/gpio/gpio-74x164.c | 9 +
>  1 file changed, 9 insertions(+)
>
> diff --git a/drivers/gpio/gpio-74x164.c b/drivers/gpio/gpio-74x164.c
> index a6607fa..e44422c 100644
> --- a/drivers/gpio/gpio-74x164.c
> +++ b/drivers/gpio/gpio-74x164.c
> @@ -23,6 +23,7 @@ struct gen_74x164_chip {
> struct gpio_chipgpio_chip;
> struct mutexlock;
> u32 registers;
> +   struct gpio_desc*enable_gpio;
> /*
>  * Since the registers are chained, every byte sent will make
>  * the previous byte shift to the next register in the
> @@ -142,6 +143,12 @@ static int gen_74x164_probe(struct spi_device *spi)
> chip->gpio_chip.parent = >dev;
> chip->gpio_chip.owner = THIS_MODULE;
>
> +   chip->enable_gpio = devm_gpiod_get(>dev, "enable", 
> GPIOD_OUT_LOW);

It would be better to use devm_gpiod_get_optional instead.

> +   if (IS_ERR(chip->enable_gpio)) {
> +   dev_dbg(>dev, "No enable-gpios property\n");
> +   chip->enable_gpio = NULL;
> +   }
> +
> mutex_init(>lock);
>
> ret = __gen_74x164_write_config(chip);
> @@ -164,6 +171,8 @@ static int gen_74x164_remove(struct spi_device *spi)
>  {
> struct gen_74x164_chip *chip = spi_get_drvdata(spi);
>
> +   if (chip->enable_gpio)
> +   gpiod_set_value(chip->enable_gpio, 0);

It would be better to use the cansleep variant instead.

Actually I have worked on adding this optional property, but haven't
submitted yet:
https://pastebin.com/u839DVD3


Re: [PATCH 2/2] gpio: 74x164: handling enable-gpios

2017-08-07 Thread Fabio Estevam
Hi Peng,

On Mon, Aug 7, 2017 at 9:27 AM, Peng Fan  wrote:
> To 74hc595 and 74lv595, there is an OE(low active) input pin.
> To some boards, this pin is controller by GPIO, so handling
> this pin in driver. When driver probe, use GPIOD_OUT_LOW flag
> when requesting the gpio, so OE is set to low when probe.

Well, this depends of the GPIO polarity.

>
> Signed-off-by: Peng Fan 
> Cc: Linus Walleij 
> ---
>  drivers/gpio/gpio-74x164.c | 9 +
>  1 file changed, 9 insertions(+)
>
> diff --git a/drivers/gpio/gpio-74x164.c b/drivers/gpio/gpio-74x164.c
> index a6607fa..e44422c 100644
> --- a/drivers/gpio/gpio-74x164.c
> +++ b/drivers/gpio/gpio-74x164.c
> @@ -23,6 +23,7 @@ struct gen_74x164_chip {
> struct gpio_chipgpio_chip;
> struct mutexlock;
> u32 registers;
> +   struct gpio_desc*enable_gpio;
> /*
>  * Since the registers are chained, every byte sent will make
>  * the previous byte shift to the next register in the
> @@ -142,6 +143,12 @@ static int gen_74x164_probe(struct spi_device *spi)
> chip->gpio_chip.parent = >dev;
> chip->gpio_chip.owner = THIS_MODULE;
>
> +   chip->enable_gpio = devm_gpiod_get(>dev, "enable", 
> GPIOD_OUT_LOW);

It would be better to use devm_gpiod_get_optional instead.

> +   if (IS_ERR(chip->enable_gpio)) {
> +   dev_dbg(>dev, "No enable-gpios property\n");
> +   chip->enable_gpio = NULL;
> +   }
> +
> mutex_init(>lock);
>
> ret = __gen_74x164_write_config(chip);
> @@ -164,6 +171,8 @@ static int gen_74x164_remove(struct spi_device *spi)
>  {
> struct gen_74x164_chip *chip = spi_get_drvdata(spi);
>
> +   if (chip->enable_gpio)
> +   gpiod_set_value(chip->enable_gpio, 0);

It would be better to use the cansleep variant instead.

Actually I have worked on adding this optional property, but haven't
submitted yet:
https://pastebin.com/u839DVD3