From 21756751997543fa6946d67415dce1f176f36d60 Mon Sep 17 00:00:00 2001 From: Andy Liu Date: Tue, 9 Jun 2020 18:10:32 +0800 Subject: [PATCH] drivers: serial: Fix "mcux_lpuart_irq_tx_complete" returns wrong result Use "kLPUART_TransmissionCompleteFlag" instead of "kLPUART_TxDataRegEmptyFlag" to check if the tx transmition is finished. The "kLPUART_TxDataRegEmptyFlag" would give a wrong result even if the transmition isn't over. Signed-off-by: Andy Liu --- drivers/serial/uart_mcux_lpuart.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/serial/uart_mcux_lpuart.c b/drivers/serial/uart_mcux_lpuart.c index fd6bafb87aa..40d544a4f20 100644 --- a/drivers/serial/uart_mcux_lpuart.c +++ b/drivers/serial/uart_mcux_lpuart.c @@ -134,16 +134,17 @@ static int mcux_lpuart_irq_tx_complete(struct device *dev) const struct mcux_lpuart_config *config = dev->config_info; uint32_t flags = LPUART_GetStatusFlags(config->base); - return (flags & kLPUART_TxDataRegEmptyFlag) != 0U; + return (flags & kLPUART_TransmissionCompleteFlag) != 0U; } static int mcux_lpuart_irq_tx_ready(struct device *dev) { const struct mcux_lpuart_config *config = dev->config_info; uint32_t mask = kLPUART_TxDataRegEmptyInterruptEnable; + uint32_t flags = LPUART_GetStatusFlags(config->base); return (LPUART_GetEnabledInterrupts(config->base) & mask) - && mcux_lpuart_irq_tx_complete(dev); + && (flags & kLPUART_TxDataRegEmptyFlag); } static void mcux_lpuart_irq_rx_enable(struct device *dev)