From: Patrick Delaunay <patrick.delau...@st.com> Allow to display alternate function index using "gpio" command. Example, display all gpio state :
gpio status -a GPIOD2: func: 12 GPIOD3: func: 9 GPIOE3: func: 9 GPIOG6: func: 10 It's useful to control pin configuration Signed-off-by: Patrick Delaunay <patrick.delau...@st.com> Reviewed-by: Simon Glass <s...@chromium.org> Signed-off-by: Patrice Chotard <patrice.chot...@st.com> --- Changes in v3: - Rename get_alternate_function to get_alt_function in drivers/gpio/stm32f7_gpio.c Changes in v2: - Rename get_function_number to get_alternate_function in drivers/gpio/stm32f7_gpio.c drivers/gpio/stm32f7_gpio.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/gpio/stm32f7_gpio.c b/drivers/gpio/stm32f7_gpio.c index 55e121699022..d9a6c1dc6f1e 100644 --- a/drivers/gpio/stm32f7_gpio.c +++ b/drivers/gpio/stm32f7_gpio.c @@ -85,12 +85,28 @@ static int stm32_gpio_get_function(struct udevice *dev, unsigned int offset) return GPIOF_FUNC; } +static int stm32_gpio_get_alt_function(struct udevice *dev, + unsigned int offset) +{ + struct stm32_gpio_priv *priv = dev_get_priv(dev); + struct stm32_gpio_regs *regs = priv->regs; + u32 af; + u32 alt_shift = (offset % 8) * 4; + u32 alt_index = offset / 8; + + af = (readl(®s->afr[alt_index]) & + GENMASK(alt_shift + 3, alt_shift)) >> alt_shift; + + return af; +} + static const struct dm_gpio_ops gpio_stm32_ops = { .direction_input = stm32_gpio_direction_input, .direction_output = stm32_gpio_direction_output, .get_value = stm32_gpio_get_value, .set_value = stm32_gpio_set_value, .get_function = stm32_gpio_get_function, + .get_alt_function = stm32_gpio_get_alt_function, }; static int gpio_stm32_probe(struct udevice *dev) -- 1.9.1 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot