On 27/05/2020 16:07, Linus Walleij wrote: > We provided the right semantics on open drain lines being > by definition output but incidentally the irq set up function > would only allow IRQs on lines that were "not output". > > Fix the semantics to allow output open drain lines to be used > for IRQs. > > Reported-by: Hans Verkuil <hverkuil@xxxxxxxxx> Tested-by: Hans Verkuil <hverkuil@xxxxxxxxx> Whether this is the right/best fix or not, I cannot tell, but it certainly fixes the cec-gpio driver! Regards, Hans > Cc: Russell King <linux@xxxxxxxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > Fixes: 256efaea1fdc ("gpiolib: fix up emulated open drain outputs") > Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> > --- > drivers/gpio/gpiolib.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c > index b4b5792fe2ff..edd74ff31cea 100644 > --- a/drivers/gpio/gpiolib.c > +++ b/drivers/gpio/gpiolib.c > @@ -4220,7 +4220,9 @@ int gpiochip_lock_as_irq(struct gpio_chip *gc, unsigned int offset) > } > } > > - if (test_bit(FLAG_IS_OUT, &desc->flags)) { > + /* To be valid for IRQ the line needs to be input or open drain */ > + if (test_bit(FLAG_IS_OUT, &desc->flags) && > + !test_bit(FLAG_OPEN_DRAIN, &desc->flags)) { > chip_err(gc, > "%s: tried to flag a GPIO set as output for IRQ\n", > __func__); >