gpio: rcar: Add GPIO hole support
authorBiju Das <biju.das@bp.renesas.com>
Tue, 7 Aug 2018 07:57:02 +0000 (08:57 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 29 Aug 2018 08:46:41 +0000 (10:46 +0200)
GPIO hole is present in RZ/G1C SoC. Valid GPIO pins on bank3 are in the
range GP3_0 to GP3_16 and GP3_27 to GP3_29. The GPIO pins between GP3_17
to GP3_26 are unused. Add support for handling unused GPIO's.

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

index 55cc61086d99d10c8921320abe3e3e9c69bdacd7..3c82bb3c20304982ca68692028bf82861d2e95ee 100644 (file)
@@ -321,6 +321,9 @@ static void gpio_rcar_set_multiple(struct gpio_chip *chip, unsigned long *mask,
        u32 val, bankmask;
 
        bankmask = mask[0] & GENMASK(chip->ngpio - 1, 0);
+       if (chip->valid_mask)
+               bankmask &= chip->valid_mask[0];
+
        if (!bankmask)
                return;
 
@@ -558,6 +561,9 @@ static int gpio_rcar_resume(struct device *dev)
        u32 mask;
 
        for (offset = 0; offset < p->gpio_chip.ngpio; offset++) {
+               if (!gpiochip_line_is_valid(&p->gpio_chip, offset))
+                       continue;
+
                mask = BIT(offset);
                /* I/O pin */
                if (!(p->bank_info.iointsel & mask)) {