| From dd113313012f24ce28055529a719897bf7a49a79 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 19 Dec 2018 14:19:20 +0300 |
| Subject: serial: max310x: Fix tx_empty() callback |
| |
| From: Alexander Shiyan <shc_work@mail.ru> |
| |
| [ 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 | 7 ++----- |
| 1 file changed, 2 insertions(+), 5 deletions(-) |
| |
| diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c |
| index bacc7e284c0c1..80ab672d61cc4 100644 |
| --- a/drivers/tty/serial/max310x.c |
| +++ b/drivers/tty/serial/max310x.c |
| @@ -769,12 +769,9 @@ static void max310x_start_tx(struct uart_port *port) |
| |
| 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) |
| -- |
| 2.20.1 |
| |