[PATCH 12/20] pinctrl: rockchip: support rk3576 pinctrl

Jonas Karlman jonas at kwiboo.se
Fri Jan 31 00:23:19 CET 2025


Hi Heiko,

On 2024-11-21 15:27, Heiko Stuebner wrote:
> From: Steven Liu <steven.liu at rock-chips.com>
> 
> Add support for the rk3576 variant of pinctrl.
> 
> Signed-off-by: Steven Liu <steven.liu at rock-chips.com>
> [adapted to mainline u-boot]
> Signed-off-by: Heiko Stuebner <heiko at sntech.de>
> ---
>  drivers/pinctrl/rockchip/Makefile           |   1 +
>  drivers/pinctrl/rockchip/pinctrl-rk3576.c   | 287 ++++++++++++++++++++
>  drivers/pinctrl/rockchip/pinctrl-rockchip.h |   3 +
>  3 files changed, 291 insertions(+)
>  create mode 100644 drivers/pinctrl/rockchip/pinctrl-rk3576.c
> 
> diff --git a/drivers/pinctrl/rockchip/Makefile b/drivers/pinctrl/rockchip/Makefile
> index c91f650b043..468840913dd 100644
> --- a/drivers/pinctrl/rockchip/Makefile
> +++ b/drivers/pinctrl/rockchip/Makefile
> @@ -15,6 +15,7 @@ obj-$(CONFIG_ROCKCHIP_RK3328) += pinctrl-rk3328.o
>  obj-$(CONFIG_ROCKCHIP_RK3368) += pinctrl-rk3368.o
>  obj-$(CONFIG_ROCKCHIP_RK3399) += pinctrl-rk3399.o
>  obj-$(CONFIG_ROCKCHIP_RK3568) += pinctrl-rk3568.o
> +obj-$(CONFIG_ROCKCHIP_RK3576) += pinctrl-rk3576.o
>  obj-$(CONFIG_ROCKCHIP_RK3588) += pinctrl-rk3588.o
>  obj-$(CONFIG_ROCKCHIP_RV1108) += pinctrl-rv1108.o
>  obj-$(CONFIG_ROCKCHIP_RV1126) += pinctrl-rv1126.o
> diff --git a/drivers/pinctrl/rockchip/pinctrl-rk3576.c b/drivers/pinctrl/rockchip/pinctrl-rk3576.c
> new file mode 100644
> index 00000000000..9399540ed4a
> --- /dev/null
> +++ b/drivers/pinctrl/rockchip/pinctrl-rk3576.c
> @@ -0,0 +1,287 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * (C) Copyright 2024 Rockchip Electronics Co., Ltd
> + */
> +
> +#include <dm.h>
> +#include <dm/pinctrl.h>
> +#include <regmap.h>
> +#include <syscon.h>
> +
> +#include "pinctrl-rockchip.h"
> +#include <dt-bindings/pinctrl/rockchip.h>
> +
> +static int rk3576_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
> +{
> +	struct rockchip_pinctrl_priv *priv = bank->priv;
> +	int iomux_num = (pin / 8);
> +	struct regmap *regmap;
> +	int reg, ret, mask;
> +	u8 bit;
> +	u32 data;
> +
> +	debug("setting mux of GPIO%d-%d to %d\n", bank->bank_num, pin, mux);

This and the debug() below is not really needed, pinctrl-rockchip-core.c
already has similar debug() calls.

> +
> +	regmap = priv->regmap_base;
> +	reg = bank->iomux[iomux_num].offset;
> +	if ((pin % 8) >= 4)
> +		reg += 0x4;
> +	bit = (pin % 4) * 4;
> +	mask = 0xf;
> +
> +	data = (mask << (bit + 16));
> +	data |= (mux & mask) << bit;
> +
> +	if (bank->bank_num == 0 && pin >= RK_PB4 && pin <= RK_PB7)
> +		reg += 0x1FF4; /* GPIO0_IOC_GPIO0B_IOMUX_SEL_H */
> +
> +	debug("iomux write reg = %x data = %x\n", reg, data);
> +
> +	ret = regmap_write(regmap, reg, data);

We should use regmap_update_bits() similar to Linux kernel.

Please feel free to squash "fixup: pinctrl: rockchip: support rk3576
pinctrl" at [1] if you agree.

[1] https://github.com/Kwiboo/u-boot-rockchip/commits/rk3576-2025.04-wip/

Regards,
Jonas

> +
> +	return ret;
> +}

[snip]


More information about the U-Boot mailing list