diff --git a/drivers/serial/uart_stm32.c b/drivers/serial/uart_stm32.c index 9243b10d7e7..8cf10e6a151 100644 --- a/drivers/serial/uart_stm32.c +++ b/drivers/serial/uart_stm32.c @@ -23,6 +23,7 @@ #include #include #include +#include #ifdef CONFIG_UART_ASYNC_API #include @@ -671,6 +672,11 @@ static void uart_stm32_poll_out_visitor(const struct device *dev, void *out, pol */ uart_stm32_pm_policy_state_lock_get(dev); + /* Resume device if needed before enabling IT */ + if (pm_device_runtime_is_enabled(dev)) { + (void)pm_device_runtime_get(dev); + } + /* Enable TC interrupt so we can release suspend * constraint when done */ @@ -1263,6 +1269,11 @@ static void uart_stm32_isr(const struct device *dev) async_evt_tx_done(data); #ifdef CONFIG_PM + /* Device can now be released */ + if (pm_device_runtime_is_enabled(dev)) { + (void)pm_device_runtime_put(dev); + } + uart_stm32_pm_policy_state_lock_put(dev); #endif } else if (LL_USART_IsEnabledIT_RXNE(config->usart) &&