Add a check for unused gpios to avoid chip->request() call to client
driver for unused gpios.

Signed-off-by: Biju Das <[email protected]>
Reviewed-by: Fabrizio Castro <[email protected]>
---
 drivers/gpio/gpiolib.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 20fe531..1ffe17b 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -2261,6 +2261,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);
 
@@ -2279,7 +2280,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) {
-- 
2.7.4

Reply via email to