[PATCH v2 3/4] pinctrl: mediatek: print bias info along with pinmux

Macpaul Lin (林智斌) Macpaul.Lin at mediatek.com
Tue Apr 7 16:43:08 CEST 2026


On Mon, 2026-03-30 at 11:00 -0500, David Lechner wrote:
> Add functionality to be able to print pin bias settings along with
> the
> pinmux setting.
> 
> This can be useful to debug why pins might not be working correctly.
> 
> Signed-off-by: David Lechner <dlechner at baylibre.com>
> ---
>  drivers/pinctrl/mediatek/pinctrl-mtk-common.c | 91
> ++++++++++++++++++++++++++-
>  drivers/pinctrl/mediatek/pinctrl-mtk-common.h |  4 ++
>  2 files changed, 93 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
> b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
> index 1028b8a93f5..cfffbaeef84 100644
> --- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
> +++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
> @@ -237,9 +237,39 @@ static int mtk_get_pin_io_type(struct udevice
> *dev, int pin,
>  	io_type->bias_set = priv->soc->io_type[io_n].bias_set;
>  	io_type->drive_set = priv->soc->io_type[io_n].drive_set;
>  	io_type->input_enable = priv->soc-
> >io_type[io_n].input_enable;
> +	io_type->get_pinconf = priv->soc->io_type[io_n].get_pinconf;
>  
>  	return 0;
>  }
> +
> +static int mtk_pinconf_get(struct udevice *dev, u32 pin, char *buf,
> size_t size)
> +{
> +	struct mtk_io_type_desc io_type;
> +	int err, pos;
> +
> +	/* If we fail to get the type, then we just don't add any
> more info. */
> +	if (mtk_get_pin_io_type(dev, pin, &io_type))
> +		return 0;
> +
> +	pos = snprintf(buf, size, " (%s)", io_type.name);
> +	if (pos >= size)
> +		return pos;
> +
> +	if (io_type.get_pinconf) {
> +		err = io_type.get_pinconf(dev, pin, buf + pos, size
> - pos);
> +		if (err < 0)
> +			return err;
> +
> +		pos += err;
> +	}
> +
> +	return pos;
> +}
> +#else
> +static int mtk_pinconf_get(struct udevice *dev, u32 pin, char *buf,
> size_t size)
> +{
> +	return 0;
> +}
>  #endif
>  
>  static int mtk_get_groups_count(struct udevice *dev)
> @@ -270,12 +300,20 @@ static int mtk_get_pins_count(struct udevice
> *dev)
>  static int mtk_get_pin_muxing(struct udevice *dev, unsigned int
> selector,
>  			      char *buf, int size)
>  {
> -	int val, err;
> +	int val, err, pos;
> +
>  	err = mtk_hw_get_value(dev, selector, PINCTRL_PIN_REG_MODE,
> &val);
>  	if (err)
>  		return err;
>  
> -	snprintf(buf, size, "Aux Func.%d", val);
> +	pos = snprintf(buf, size, "Aux Func.%d", val);
> +	if (pos >= size)
> +		return 0;
> +
> +	err = mtk_pinconf_get(dev, selector, buf + pos, size - pos);
> +	if (err < 0)
> +		return err;
> +
>  	return 0;
>  }
>  
> @@ -670,6 +708,55 @@ static int mtk_pinconf_group_set(struct udevice
> *dev,
>  
>  	return 0;
>  }
> +
> +int mtk_pinconf_get_pu_pd(struct udevice *dev, u32 pin, char *buf,
> size_t size)
> +{
> +	int err, pu, pd;
> +
> +	err = mtk_hw_get_value(dev, pin, PINCTRL_PIN_REG_PU, &pu);
> +	if (err)
> +		return err;
> +
> +	err = mtk_hw_get_value(dev, pin, PINCTRL_PIN_REG_PD, &pd);
> +	if (err)
> +		return err;
> +
> +	return snprintf(buf, size, " PU:%d PD:%d", pu, pd);
> +}
> +
> +int mtk_pinconf_get_pupd_r1_r0(struct udevice *dev, u32 pin, char
> *buf, size_t size)
> +{
> +	int err, r0, r1, pupd;
> +
> +	err = mtk_hw_get_value(dev, pin, PINCTRL_PIN_REG_PUPD,
> &pupd);
> +	if (err)
> +		return err;
> +
> +	err = mtk_hw_get_value(dev, pin, PINCTRL_PIN_REG_R1, &r1);
> +	if (err)
> +		return err;
> +
> +	err = mtk_hw_get_value(dev, pin, PINCTRL_PIN_REG_R0, &r0);
> +	if (err)
> +		return err;
> +
> +	return snprintf(buf, size, " PUPD:%d R1:%d R0:%d", pupd, r1,
> r0);
> +}
> +
> +int mtk_pinconf_get_pu_pd_rsel(struct udevice *dev, u32 pin, char
> *buf, size_t size)
> +{
> +	int pos, err, rsel;
> +
> +	pos = mtk_pinconf_get_pu_pd(dev, pin, buf, size);
> +	if (pos < 0 || pos >= size)
> +		return pos;
> +
> +	err = mtk_hw_get_value(dev, pin, PINCTRL_PIN_REG_RSEL,
> &rsel);
> +	if (err)
> +		return err;
> +
> +	return pos + snprintf(buf + pos, size - pos, " RSEL:%d",
> rsel);
> +}
>  #endif
>  
>  static int mtk_pinctrl_pinmux_property_set(struct udevice *dev, u32
> pinmux_group)
> diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
> b/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
> index 1215fb7094b..bd17964090a 100644
> --- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
> +++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
> @@ -204,6 +204,7 @@ struct mtk_io_type_desc {
>  			bool pullup, u32 val);
>  	int (*drive_set)(struct udevice *dev, u32 pin, u32 arg);
>  	int (*input_enable)(struct udevice *dev, u32 pin, u32 arg);
> +	int (*get_pinconf)(struct udevice *dev, u32 pin, char *buf,
> size_t size);
>  #endif
>  };
>  
> @@ -263,6 +264,9 @@ int mtk_pinconf_bias_set_v1(struct udevice *dev,
> u32 pin, bool disable,
>  int mtk_pinconf_input_enable_v1(struct udevice *dev, u32 pin, u32
> arg);
>  int mtk_pinconf_drive_set_v0(struct udevice *dev, u32 pin, u32 arg);
>  int mtk_pinconf_drive_set_v1(struct udevice *dev, u32 pin, u32 arg);
> +int mtk_pinconf_get_pu_pd(struct udevice *dev, u32 pin, char *buf,
> size_t size);
> +int mtk_pinconf_get_pupd_r1_r0(struct udevice *dev, u32 pin, char
> *buf, size_t size);
> +int mtk_pinconf_get_pu_pd_rsel(struct udevice *dev, u32 pin, char
> *buf, size_t size);
>  
>  #endif
>  
> 


Reviewed-by: Macpaul Lin <macpaul.lin at mediatek.com>

Thanks!
Macpaul Lin


More information about the U-Boot mailing list