]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/serial/bfin_sport_uart.c
serial: bfin_sport_uart: shorten the SPORT TX waiting loop
[net-next-2.6.git] / drivers / serial / bfin_sport_uart.c
index c88f8ad3ff821d16fef218c5021adede8c9c6cf1..6991c3605f9cec662bba10132407377ef4fc6623 100644 (file)
@@ -271,7 +271,13 @@ static void sport_uart_tx_chars(struct sport_uart_port *up)
        }
 
        if (uart_circ_empty(xmit) || uart_tx_stopped(&up->port)) {
-               sport_stop_tx(&up->port);
+               /* The waiting loop to stop SPORT TX from TX interrupt is
+                * too long. This may block SPORT RX interrupts and cause
+                * RX FIFO overflow. So, do stop sport TX only after the last
+                * char in TX FIFO is moved into the shift register.
+                */
+               if (SPORT_GET_STAT(up) & TXHRE)
+                       sport_stop_tx(&up->port);
                return;
        }