Hi Heiko,

On 2024-11-21 15:27, Heiko Stuebner wrote:
> From: Steven Liu <steven....@rock-chips.com>
> 
> Add support for the rk3576 variant of pinctrl.
> 
> Signed-off-by: Steven Liu <steven....@rock-chips.com>
> [adapted to mainline u-boot]
> Signed-off-by: Heiko Stuebner <he...@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]

Reply via email to