The generic IRQ helper library just checks if the IRQ line is
set as input before activating it for interrupts. As we
recently started to check things better with .get_dir() it
turns out that it's good to try to convince the line to become
an input before attempting to lock it as IRQ.
Reviewed-by: Björn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
if (!try_module_get(chip->gpiodev->owner))
return -ENODEV;
+ /*
+ * If it is possible to switch this GPIO to an input
+ * this is a good time to do it.
+ */
+ if (chip->direction_input) {
+ struct gpio_desc *desc;
+ int ret;
+
+ desc = gpiochip_get_desc(chip, d->hwirq);
+ if (IS_ERR(desc))
+ return PTR_ERR(desc);
+
+ ret = chip->direction_input(chip, d->hwirq);
+ if (ret)
+ return ret;
+
+ clear_bit(FLAG_IS_OUT, &desc->flags);
+ }
+
if (gpiochip_lock_as_irq(chip, d->hwirq)) {
chip_err(chip,
"unable to lock HW IRQ %lu for IRQ\n",