• Linus Walleij's avatar
    gpio: flush direction status in gpiochip_lock_as_irq() · 9c10280d
    Linus Walleij authored
    As irqchip and gpiochip functions are orthogonal, the IRQ
    set-up or something else can have changed the direction of
    the GPIO line from what the GPIO descriptor knows when we
    get into gpiochip_lock_as_irq(). Make sure to re-read the
    direction setting if we have the .get_direction() callback
    enabled for the chip.
    
    Else we get problems like this:
    
    iio iio:device2: interrupts on the rising edge
    gpio gpiochip2: (8012e080.gpio): gpiochip_lock_as_irq:
      tried to flag a GPIO set as output for IRQ
    gpio gpiochip2: (8012e080.gpio): unable to lock HW IRQ 0 for IRQ
    genirq: Failed to request resources for l3g4200d-trigger
      (irq 111) on irqchip nmk1-32-63
    iio iio:device2: failed to request trigger IRQ.
    st-gyro-i2c: probe of 2-0068 failed with error -22
    
    Fixes: 72d32000 ("gpio: set up initial state from .get_direction()")
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    9c10280d
gpiolib.c 82.5 KB