From 0302642234d846477560329737e9210836199e0d Mon Sep 17 00:00:00 2001 From: Bernardo Perez Priego Date: Fri, 30 Aug 2024 13:02:24 -0700 Subject: [PATCH] serial: mchp_xec: Fix `uart_xec_irq_tx_complete` function This function is only checking for byte current byte being transmitted. This patch ensures that function returns `1` until TX is disabled and no byte is being transmitted. Signed-off-by: Bernardo Perez Priego --- drivers/serial/uart_mchp_xec.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/serial/uart_mchp_xec.c b/drivers/serial/uart_mchp_xec.c index a41f24dcd7a46ac..7e3754c5fe2e333 100644 --- a/drivers/serial/uart_mchp_xec.c +++ b/drivers/serial/uart_mchp_xec.c @@ -749,8 +749,10 @@ static int uart_xec_irq_tx_complete(const struct device *dev) struct uart_regs *regs = dev_cfg->regs; k_spinlock_key_t key = k_spin_lock(&dev_data->lock); - int ret = ((regs->LSR & (LSR_TEMT | LSR_THRE)) - == (LSR_TEMT | LSR_THRE)) ? 1 : 0; + int ret = (((regs->IER & IER_TBE) == 0) && + ((regs->LSR & (LSR_TEMT | LSR_THRE)) == (LSR_TEMT | LSR_THRE))) + ? 1 + : 0; k_spin_unlock(&dev_data->lock, key);