On Fri 28 Aug 09:44 PDT 2015, Bjorn Andersson wrote: > It's possible to have gpio chips hanging off unreliable remote buses > where the get() operation will fail to acquire a readout of the current > gpio state. Propagate these errors to the consumer so that they can > act on, retry or ignore these failing reads, instead of treating them as > the line being held high. > > Signed-off-by: Bjorn Andersson <bjorn.andersson@xxxxxxxxxxxxxx> > --- > drivers/gpio/gpiolib.c | 21 ++++++++++++++------- > 1 file changed, 14 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c > index 3b5e516298e0..dc17dbf8c234 100644 > --- a/drivers/gpio/gpiolib.c > +++ b/drivers/gpio/gpiolib.c > @@ -1173,15 +1173,16 @@ EXPORT_SYMBOL_GPL(gpiod_is_active_low); > * that the GPIO was actually requested. > */ > > -static bool _gpiod_get_raw_value(const struct gpio_desc *desc) > +static int _gpiod_get_raw_value(const struct gpio_desc *desc) > { > struct gpio_chip *chip; > - bool value; > int offset; > + int value; > > chip = desc->chip; > offset = gpio_chip_hwgpio(desc); > - value = chip->get ? chip->get(chip, offset) : false; > + value = chip->get ? chip->get(chip, offset) : -EIO; Linus, Alexandre, please feel free to apply this with -ENOTSUPP in accordance to Alexandre's comment in [1], if you prefer that. I picked -EIO as that's what's used in most other places when the get() op is missing. Maybe we should follow up with separate patch to make that consistent? [1] https://lkml.org/lkml/2015/8/31/8 > + value = value < 0 ? value : !!value; > trace_gpio_value(desc_to_gpio(desc), 1, value); > return value; > } Regards, Bjorn -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html