| From 4152017313a71f210dca72c91694767bfd28c3aa Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 21 May 2019 17:45:44 +0200 |
| Subject: serial: stm32: fix transmit_chars when tx is stopped |
| |
| From: Erwan Le Ray <erwan.leray@st.com> |
| |
| [ Upstream commit b83b957c91f68e53f0dc596e129e8305761f2a32 ] |
| |
| Disables the tx irq when the transmission is ended and updates stop_tx |
| conditions for code cleanup. |
| |
| Fixes: 48a6092fb41f ("serial: stm32-usart: Add STM32 USART Driver") |
| Signed-off-by: Erwan Le Ray <erwan.leray@st.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/tty/serial/stm32-usart.c | 11 +++-------- |
| 1 file changed, 3 insertions(+), 8 deletions(-) |
| |
| diff --git a/drivers/tty/serial/stm32-usart.c b/drivers/tty/serial/stm32-usart.c |
| index 033856287ca21..ea8b591dd46f4 100644 |
| --- a/drivers/tty/serial/stm32-usart.c |
| +++ b/drivers/tty/serial/stm32-usart.c |
| @@ -293,13 +293,8 @@ static void stm32_transmit_chars(struct uart_port *port) |
| return; |
| } |
| |
| - if (uart_tx_stopped(port)) { |
| - stm32_stop_tx(port); |
| - return; |
| - } |
| - |
| - if (uart_circ_empty(xmit)) { |
| - stm32_stop_tx(port); |
| + if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { |
| + stm32_clr_bits(port, ofs->cr1, USART_CR1_TXEIE); |
| return; |
| } |
| |
| @@ -312,7 +307,7 @@ static void stm32_transmit_chars(struct uart_port *port) |
| uart_write_wakeup(port); |
| |
| if (uart_circ_empty(xmit)) |
| - stm32_stop_tx(port); |
| + stm32_clr_bits(port, ofs->cr1, USART_CR1_TXEIE); |
| } |
| |
| static irqreturn_t stm32_interrupt(int irq, void *ptr) |
| -- |
| 2.20.1 |
| |