[PATCH] pinctrl: pinctrl_stm32: Add slew rate support for stm32_pinctrl_get_pin_muxing()
Patrice CHOTARD
patrice.chotard at foss.st.com
Wed Apr 19 09:51:02 CEST 2023
On 3/30/23 13:29, Patrick DELAUNAY wrote:
> Hi,
>
> On 3/27/23 09:46, Patrice Chotard wrote:
>> For debug purpose, it should be useful to indicate the slew rate for
>> each pins.
>> Add ospeed register information for pins which are configured in
>> either alternate function or gpio output.
>>
>> Signed-off-by: Patrice Chotard <patrice.chotard at foss.st.com>
>> ---
>>
>> drivers/pinctrl/pinctrl_stm32.c | 19 +++++++++++++++----
>> 1 file changed, 15 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/pinctrl/pinctrl_stm32.c b/drivers/pinctrl/pinctrl_stm32.c
>> index b755fa42b4f..b06da50b2cd 100644
>> --- a/drivers/pinctrl/pinctrl_stm32.c
>> +++ b/drivers/pinctrl/pinctrl_stm32.c
>> @@ -61,6 +61,13 @@ static const char * const pinmux_otype[] = {
>> [STM32_GPIO_OTYPE_OD] = "open-drain",
>> };
>> +static const char * const pinmux_speed[] = {
>> + [STM32_GPIO_SPEED_2M] = "Low speed",
>> + [STM32_GPIO_SPEED_25M] = "Medium speed",
>> + [STM32_GPIO_SPEED_50M] = "High speed",
>> + [STM32_GPIO_SPEED_100M] = "Very-high speed",
>> +};
>> +
>> static int stm32_pinctrl_get_af(struct udevice *dev, unsigned int offset)
>> {
>> struct stm32_gpio_priv *priv = dev_get_priv(dev);
>> @@ -201,6 +208,7 @@ static int stm32_pinctrl_get_pin_muxing(struct udevice *dev,
>> int af_num;
>> unsigned int gpio_idx;
>> u32 pupd, otype;
>> + u8 speed;
>> /* look up for the bank which owns the requested pin */
>> gpio_dev = stm32_pinctrl_get_gpio_dev(dev, selector, &gpio_idx);
>> @@ -214,6 +222,7 @@ static int stm32_pinctrl_get_pin_muxing(struct udevice *dev,
>> priv = dev_get_priv(gpio_dev);
>> pupd = (readl(&priv->regs->pupdr) >> (gpio_idx * 2)) & PUPD_MASK;
>> otype = (readl(&priv->regs->otyper) >> gpio_idx) & OTYPE_MSK;
>> + speed = (readl(&priv->regs->ospeedr) >> gpio_idx * 2) & OSPEED_MASK;
>> switch (mode) {
>> case GPIOF_UNKNOWN:
>> @@ -222,13 +231,15 @@ static int stm32_pinctrl_get_pin_muxing(struct udevice *dev,
>> break;
>> case GPIOF_FUNC:
>> af_num = stm32_pinctrl_get_af(gpio_dev, gpio_idx);
>> - snprintf(buf, size, "%s %d %s %s", pinmux_mode[mode], af_num,
>> - pinmux_otype[otype], pinmux_bias[pupd]);
>> + snprintf(buf, size, "%s %d %s %s %s", pinmux_mode[mode], af_num,
>> + pinmux_otype[otype], pinmux_bias[pupd],
>> + pinmux_speed[speed]);
>> break;
>> case GPIOF_OUTPUT:
>> - snprintf(buf, size, "%s %s %s %s",
>> + snprintf(buf, size, "%s %s %s %s %s",
>> pinmux_mode[mode], pinmux_otype[otype],
>> - pinmux_bias[pupd], label ? label : "");
>> + pinmux_bias[pupd], label ? label : "",
>> + pinmux_speed[speed]);
>> break;
>> case GPIOF_INPUT:
>> snprintf(buf, size, "%s %s %s", pinmux_mode[mode],
>
>
>
> Reviewed-by: Patrick Delaunay <patrick.delaunay at foss.st.com>
>
> Thanks
> Patrick
>
Applied on u-boot-stm/master, thanks.
Patrice
More information about the U-Boot
mailing list