]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
serial: max310x: Fix tx_empty() callback
authorAlexander Shiyan <shc_work@mail.ru>
Wed, 19 Dec 2018 11:19:20 +0000 (14:19 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 5 Dec 2019 08:20:40 +0000 (09:20 +0100)
[ Upstream commit a8da3c7873ea57acb8f9cea58c0af477522965aa ]

Function max310x_tx_empty() accesses the IRQSTS register, which is
cleared by IC when reading, so if there is an interrupt status, we
will lose it. This patch implement the transmitter check only by
the current FIFO level.

Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/tty/serial/max310x.c

index bd3e6cf81af5cfb61d82d70e13dd59015a623aee..0c35c3c5e37349953df8fe1daff97a0b94bd1394 100644 (file)
@@ -844,12 +844,9 @@ static void max310x_wq_proc(struct work_struct *ws)
 
 static unsigned int max310x_tx_empty(struct uart_port *port)
 {
-       unsigned int lvl, sts;
+       u8 lvl = max310x_port_read(port, MAX310X_TXFIFOLVL_REG);
 
-       lvl = max310x_port_read(port, MAX310X_TXFIFOLVL_REG);
-       sts = max310x_port_read(port, MAX310X_IRQSTS_REG);
-
-       return ((sts & MAX310X_IRQ_TXEMPTY_BIT) && !lvl) ? TIOCSER_TEMT : 0;
+       return lvl ? 0 : TIOCSER_TEMT;
 }
 
 static unsigned int max310x_get_mctrl(struct uart_port *port)