diff --git a/drivers/serial/uart_mcux.c b/drivers/serial/uart_mcux.c index 703fc0db684..b62953df943 100644 --- a/drivers/serial/uart_mcux.c +++ b/drivers/serial/uart_mcux.c @@ -132,16 +132,17 @@ static int uart_mcux_irq_tx_complete(struct device *dev) const struct uart_mcux_config *config = dev->config_info; uint32_t flags = UART_GetStatusFlags(config->base); - return (flags & kUART_TxDataRegEmptyFlag) != 0U; + return (flags & kUART_TransmissionCompleteFlag) != 0U; } static int uart_mcux_irq_tx_ready(struct device *dev) { const struct uart_mcux_config *config = dev->config_info; uint32_t mask = kUART_TxDataRegEmptyInterruptEnable; + uint32_t flags = UART_GetStatusFlags(config->base); return (UART_GetEnabledInterrupts(config->base) & mask) - && uart_mcux_irq_tx_complete(dev); + && (flags & kUART_TxDataRegEmptyFlag); } static void uart_mcux_irq_rx_enable(struct device *dev) diff --git a/drivers/serial/uart_mcux_flexcomm.c b/drivers/serial/uart_mcux_flexcomm.c index 88a92ba4fae..1924fd1c35e 100644 --- a/drivers/serial/uart_mcux_flexcomm.c +++ b/drivers/serial/uart_mcux_flexcomm.c @@ -142,18 +142,18 @@ static void mcux_flexcomm_irq_tx_disable(struct device *dev) static int mcux_flexcomm_irq_tx_complete(struct device *dev) { const struct mcux_flexcomm_config *config = dev->config_info; - uint32_t flags = USART_GetStatusFlags(config->base); - return (flags & kUSART_TxFifoEmptyFlag) != 0U; + return (config->base->STAT & USART_STAT_TXIDLE_MASK) != 0; } static int mcux_flexcomm_irq_tx_ready(struct device *dev) { const struct mcux_flexcomm_config *config = dev->config_info; uint32_t mask = kUSART_TxLevelInterruptEnable; + uint32_t flags = USART_GetStatusFlags(config->base); return (USART_GetEnabledInterrupts(config->base) & mask) - && mcux_flexcomm_irq_tx_complete(dev); + && (flags & kUSART_TxFifoEmptyFlag); } static void mcux_flexcomm_irq_rx_enable(struct device *dev) diff --git a/drivers/serial/uart_mcux_lpsci.c b/drivers/serial/uart_mcux_lpsci.c index 7e8d1fef10b..b7c2bc43f1d 100644 --- a/drivers/serial/uart_mcux_lpsci.c +++ b/drivers/serial/uart_mcux_lpsci.c @@ -134,16 +134,17 @@ static int mcux_lpsci_irq_tx_complete(struct device *dev) const struct mcux_lpsci_config *config = dev->config_info; uint32_t flags = LPSCI_GetStatusFlags(config->base); - return (flags & kLPSCI_TxDataRegEmptyFlag) != 0U; + return (flags & kLPSCI_TransmissionCompleteFlag) != 0U; } static int mcux_lpsci_irq_tx_ready(struct device *dev) { const struct mcux_lpsci_config *config = dev->config_info; uint32_t mask = kLPSCI_TxDataRegEmptyInterruptEnable; + uint32_t flags = LPSCI_GetStatusFlags(config->base); return (LPSCI_GetEnabledInterrupts(config->base) & mask) - && mcux_lpsci_irq_tx_complete(dev); + && (flags & kLPSCI_TxDataRegEmptyFlag); } static void mcux_lpsci_irq_rx_enable(struct device *dev)