This patch adds gpio get_function ops support.
This function reports the state of a gpio.

Signed-off-by: Christophe Kerello <christophe.kere...@st.com>
Reviewed-by: Simon Glass <s...@chromium.org>
Signed-off-by: Patrice Chotard <patrice.chot...@st.com>
---

Changes in v4: None
Changes in v3: None
Changes in v2: None

 drivers/gpio/stm32f7_gpio.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/gpio/stm32f7_gpio.c b/drivers/gpio/stm32f7_gpio.c
index 4c0786fff88d..82c8b8d23ae6 100644
--- a/drivers/gpio/stm32f7_gpio.c
+++ b/drivers/gpio/stm32f7_gpio.c
@@ -65,11 +65,31 @@ static int stm32_gpio_set_value(struct udevice *dev, 
unsigned offset, int value)
        return 0;
 }
 
+static int stm32_gpio_get_function(struct udevice *dev, unsigned int offset)
+{
+       struct stm32_gpio_priv *priv = dev_get_priv(dev);
+       struct stm32_gpio_regs *regs = priv->regs;
+       int bits_index = MODE_BITS(offset);
+       int mask = MODE_BITS_MASK << bits_index;
+       u32 mode;
+
+       mode = (readl(&regs->moder) & mask) >> bits_index;
+       if (mode == STM32_GPIO_MODE_OUT)
+               return GPIOF_OUTPUT;
+       if (mode == STM32_GPIO_MODE_IN)
+               return GPIOF_INPUT;
+       if (mode == STM32_GPIO_MODE_AN)
+               return GPIOF_UNUSED;
+
+       return GPIOF_FUNC;
+}
+
 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,
 };
 
 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

Reply via email to