diff --git a/drivers/gpio/gpio_stm32.c b/drivers/gpio/gpio_stm32.c index 2718c175e811c..2986b6fc59b8e 100644 --- a/drivers/gpio/gpio_stm32.c +++ b/drivers/gpio/gpio_stm32.c @@ -50,6 +50,10 @@ const int gpio_stm32_flags_to_conf(int flags, int *pincfg) if (direction == GPIO_DIR_OUT) { *pincfg = STM32_PINCFG_MODE_OUTPUT; + if (flags & GPIO_DS_DISCONNECT_HIGH) { + /* open drain */ + *pincfg |= STM32_PINCFG_TYPE_OPEN_DRAIN; + } } else { /* pull-{up,down} maybe? */ *pincfg = STM32_PINCFG_MODE_INPUT; diff --git a/drivers/gpio/gpio_stm32.h b/drivers/gpio/gpio_stm32.h index 2968d3664f4b3..9ee2cc51a754f 100644 --- a/drivers/gpio/gpio_stm32.h +++ b/drivers/gpio/gpio_stm32.h @@ -167,6 +167,7 @@ STM32_PUPD_NO_PULL) #else #define STM32_PINCFG_MODE_OUTPUT STM32_MODER_OUTPUT_MODE +#define STM32_PINCFG_TYPE_OPEN_DRAIN STM32_OTYPER_OPEN_DRAIN #define STM32_PINCFG_MODE_INPUT STM32_MODER_INPUT_MODE #define STM32_PINCFG_PULL_UP STM32_PUPDR_PULL_UP #define STM32_PINCFG_PULL_DOWN STM32_PUPDR_PULL_DOWN