gpio: make gpiod_to_irq() return negative for NO_IRQ
authorLinus Walleij <linus.walleij@linaro.org>
Mon, 2 May 2016 11:13:10 +0000 (13:13 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 2 May 2016 11:34:21 +0000 (13:34 +0200)
If a translation returns zero, that means NO_IRQ, so we
should return an error since the function is documented to
return a negative code on error.

Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpiolib.c

index 340b021..a68c6d7 100644 (file)
@@ -1999,13 +1999,22 @@ EXPORT_SYMBOL_GPL(gpiod_cansleep);
  */
 int gpiod_to_irq(const struct gpio_desc *desc)
 {
-       struct gpio_chip        *chip;
-       int                     offset;
+       struct gpio_chip *chip;
+       int offset;
 
        VALIDATE_DESC(desc);
        chip = desc->gdev->chip;
        offset = gpio_chip_hwgpio(desc);
-       return chip->to_irq ? chip->to_irq(chip, offset) : -ENXIO;
+       if (chip->to_irq) {
+               int retirq = chip->to_irq(chip, offset);
+
+               /* Zero means NO_IRQ */
+               if (!retirq)
+                       return -ENXIO;
+
+               return retirq;
+       }
+       return -ENXIO;
 }
 EXPORT_SYMBOL_GPL(gpiod_to_irq);