gpiolib: Avoid calling chip->request() for unused gpios
authorBiju Das <biju.das@bp.renesas.com>
Tue, 7 Aug 2018 07:15:18 +0000 (08:15 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Fri, 10 Aug 2018 21:19:17 +0000 (23:19 +0200)
Add a check for unused gpios to avoid chip->request() call to client
driver for unused gpios.

Signed-off-by: Biju Das <biju.das@bp.renesas.com>
Reviewed-by: Fabrizio Castro <fabrizio.castro@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpiolib.c

index 2c457e6..e8f8a19 100644 (file)
@@ -2267,6 +2267,7 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label)
        struct gpio_chip        *chip = desc->gdev->chip;
        int                     status;
        unsigned long           flags;
+       unsigned                offset;
 
        spin_lock_irqsave(&gpio_lock, flags);
 
@@ -2285,7 +2286,11 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label)
        if (chip->request) {
                /* chip->request may sleep */
                spin_unlock_irqrestore(&gpio_lock, flags);
-               status = chip->request(chip, gpio_chip_hwgpio(desc));
+               offset = gpio_chip_hwgpio(desc);
+               if (gpiochip_line_is_valid(chip, offset))
+                       status = chip->request(chip, offset);
+               else
+                       status = -EINVAL;
                spin_lock_irqsave(&gpio_lock, flags);
 
                if (status < 0) {