Add a way to get_gpio_mux() based on the pinctrl pin offset, use -1 as
banknum to use the pinctrl pin offset mode instead of bank pin offset.

This mode will be used by the gpio driver to ensure a pin used by gpio
request() and get_function() ops always refer to the same pinctrl pin.

Also add verify_config() of banknum and index to avoid an out of range
access of the pin_banks array, i.e. with gpio6 on rk3066a.

Signed-off-by: Jonas Karlman <jo...@kwiboo.se>
Reviewed-by: Kever Yang <kever.y...@rock-chips.com>
---
v2: Collect r-b tag

The pin_to_mux() helper will also be used in the get_pin_muxing() ops
added in next patch to support the pinmux status cmd.
---
 .../pinctrl/rockchip/pinctrl-rockchip-core.c  | 22 ++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/drivers/pinctrl/rockchip/pinctrl-rockchip-core.c 
b/drivers/pinctrl/rockchip/pinctrl-rockchip-core.c
index 894ff74aee98..8ede74da40c9 100644
--- a/drivers/pinctrl/rockchip/pinctrl-rockchip-core.c
+++ b/drivers/pinctrl/rockchip/pinctrl-rockchip-core.c
@@ -193,10 +193,30 @@ static struct rockchip_pin_bank 
*rockchip_pin_to_bank(struct udevice *dev,
        return NULL;
 }
 
+static int rockchip_pin_to_mux(struct udevice *dev, unsigned int pin)
+{
+       struct rockchip_pin_bank *bank;
+
+       bank = rockchip_pin_to_bank(dev, pin);
+       if (!bank)
+               return -EINVAL;
+
+       return rockchip_get_mux(bank, pin - bank->pin_base);
+}
+
 static int rockchip_pinctrl_get_gpio_mux(struct udevice *dev, int banknum,
                                         int index)
-{      struct rockchip_pinctrl_priv *priv = dev_get_priv(dev);
+{
+       struct rockchip_pinctrl_priv *priv = dev_get_priv(dev);
        struct rockchip_pin_ctrl *ctrl = priv->ctrl;
+       int ret;
+
+       if (banknum == -1)
+               return rockchip_pin_to_mux(dev, index);
+
+       ret = rockchip_verify_config(dev, banknum, index);
+       if (ret)
+               return ret;
 
        return rockchip_get_mux(&ctrl->pin_banks[banknum], index);
 }
-- 
2.45.2

Reply via email to