gpio/gpiolib: Forbid irqchip default trigger if probed over DT
authorMarc Zyngier <marc.zyngier@arm.com>
Wed, 7 Sep 2016 08:12:11 +0000 (09:12 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 12 Sep 2016 09:05:03 +0000 (11:05 +0200)
Using a default trigger is a bad idea if using DT to configure
interrupts, as the device's interrupt specifier will always contain
the trigger configuration.

Let's warn about that particular situation, and revert to not
having a default. Hopefully, the couple of drivers still using
this feature will quickly be fixed.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpiolib.c

index deaf4d4dc68e9a22f449b085d274386c17119a36..e183ee2f5f659ff553cba0ab01a71f046c2be537 100644 (file)
@@ -1613,6 +1613,15 @@ int _gpiochip_irqchip_add(struct gpio_chip *gpiochip,
        if (gpiochip->of_node)
                of_node = gpiochip->of_node;
 #endif
+       /*
+        * Specifying a default trigger is a terrible idea if DT is
+        * used to configure the interrupts, as you may end-up with
+        * conflicting triggers. Tell the user, and reset to NONE.
+        */
+       if (WARN(of_node && type != IRQ_TYPE_NONE,
+                "%s: Ignoring %d default trigger\n", of_node->full_name, type))
+               type = IRQ_TYPE_NONE;
+
        gpiochip->irqchip = irqchip;
        gpiochip->irq_handler = handler;
        gpiochip->irq_default_type = type;