pinctrl: renesas: rzg2l: Add validation of GPIO pin in rzg2l_gpio_request()
authorLad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Mon, 25 Sep 2023 15:45:48 +0000 (16:45 +0100)
committerGeert Uytterhoeven <geert+renesas@glider.be>
Fri, 13 Oct 2023 07:38:04 +0000 (09:38 +0200)
Validate the GPIO pin request in the rzg2l_gpio_request() callback using
the rzg2l_validate_gpio_pin() function.  This stops any accidental usage
of GPIO pins which are not supported by the SoC.

Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Tested-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Link: https://lore.kernel.org/r/20230925154548.27048-1-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
drivers/pinctrl/renesas/pinctrl-rzg2l.c

index 03b36c6b2b6df323010c834b8f680b302e3e3a21..402419484e1d1fdb3123cdccd739a30afabd6239 100644 (file)
@@ -795,12 +795,18 @@ static const struct pinconf_ops rzg2l_pinctrl_confops = {
 static int rzg2l_gpio_request(struct gpio_chip *chip, unsigned int offset)
 {
        struct rzg2l_pinctrl *pctrl = gpiochip_get_data(chip);
+       const struct pinctrl_pin_desc *pin_desc = &pctrl->desc.pins[offset];
        u32 port = RZG2L_PIN_ID_TO_PORT(offset);
        u8 bit = RZG2L_PIN_ID_TO_PIN(offset);
+       u32 *pin_data = pin_desc->drv_data;
        unsigned long flags;
        u8 reg8;
        int ret;
 
+       ret = rzg2l_validate_gpio_pin(pctrl, *pin_data, port, bit);
+       if (ret)
+               return ret;
+
        ret = pinctrl_gpio_request(chip->base + offset);
        if (ret)
                return ret;