[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