[PATCH v2 02/10] pinctrl: rockchip: Add a pin_to_bank() helper

Kever Yang kever.yang at rock-chips.com
Fri Aug 9 11:35:35 CEST 2024


On 2024/8/3 06:56, Jonas Karlman wrote:
> Add a pin_to_bank() helper that can locate a pin bank based on the pin
> offset, to be used in get_gpio_mux() and gpio_request_enable() ops.
>
> Reset ctrl->nr_pins to 0 so that pin_to_bank() can locate a bank after
> the second probe in U-Boot proper.
>
> Signed-off-by: Jonas Karlman <jonas at kwiboo.se>
Reviewed-by: Kever Yang <kever.yang at rock-chips.com>

Thanks,
- Kever
> ---
> v2: New patch split from "pinctrl: rockchip: Add gpio_request_enable()
>      ops" of "rockchip: Add gpio request() ops" series
> ---
>   .../pinctrl/rockchip/pinctrl-rockchip-core.c   | 18 ++++++++++++++++++
>   1 file changed, 18 insertions(+)
>
> diff --git a/drivers/pinctrl/rockchip/pinctrl-rockchip-core.c b/drivers/pinctrl/rockchip/pinctrl-rockchip-core.c
> index f6af22501c36..894ff74aee98 100644
> --- a/drivers/pinctrl/rockchip/pinctrl-rockchip-core.c
> +++ b/drivers/pinctrl/rockchip/pinctrl-rockchip-core.c
> @@ -176,6 +176,23 @@ static int rockchip_get_mux(struct rockchip_pin_bank *bank, int pin)
>   	return ((val >> bit) & mask);
>   }
>   
> +static struct rockchip_pin_bank *rockchip_pin_to_bank(struct udevice *dev,
> +						      unsigned int pin)
> +{
> +	struct rockchip_pinctrl_priv *priv = dev_get_priv(dev);
> +	struct rockchip_pin_ctrl *ctrl = priv->ctrl;
> +	struct rockchip_pin_bank *bank = ctrl->pin_banks;
> +	int i;
> +
> +	for (i = 0; i < ctrl->nr_banks; ++i, ++bank) {
> +		if (pin >= bank->pin_base &&
> +		    pin < bank->pin_base + bank->nr_pins)
> +			return bank;
> +	}
> +
> +	return NULL;
> +}
> +
>   static int rockchip_pinctrl_get_gpio_mux(struct udevice *dev, int banknum,
>   					 int index)
>   {	struct rockchip_pinctrl_priv *priv = dev_get_priv(dev);
> @@ -539,6 +556,7 @@ static struct rockchip_pin_ctrl *rockchip_pinctrl_get_soc_data(struct udevice *d
>   	drv_pmu_offs = ctrl->pmu_drv_offset;
>   	drv_grf_offs = ctrl->grf_drv_offset;
>   	bank = ctrl->pin_banks;
> +	ctrl->nr_pins = 0;
>   
>   	for (i = 0; i < ctrl->nr_banks; ++i, ++bank) {
>   		int bank_pins = 0;


More information about the U-Boot mailing list