mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 16:52:14 +02:00
pinctrl: rockchip: Update get_gpio_mux() ops
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 <jonas@kwiboo.se> Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
This commit is contained in:
committed by
Ondrej Jirman
parent
f1515d498e
commit
f6c146e6eb
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user