RE: [PATCH 2/2] gpio: 74x164: handling enable-gpios
> > + 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
> > + 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
On Mon, Aug 7, 2017 at 9:27 AM, Peng Fanwrote: > + 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
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
Hi Peng, On Mon, Aug 7, 2017 at 9:27 AM, Peng Fanwrote: > 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
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