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@xs4all.nl
Tested-by: Hans Verkuil hverkuil@xs4all.nl
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@armlinux.org.uk Cc: stable@vger.kernel.org Fixes: 256efaea1fdc ("gpiolib: fix up emulated open drain outputs") Signed-off-by: Linus Walleij linus.walleij@linaro.org
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) &&
chip_err(gc, "%s: tried to flag a GPIO set as output for IRQ\n", __func__);!test_bit(FLAG_OPEN_DRAIN, &desc->flags)) {