aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty/serial/omap-serial.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/tty/serial/omap-serial.c')
-rw-r--r--drivers/tty/serial/omap-serial.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
index 77f035158d6c..dd8b1a5458ff 100644
--- a/drivers/tty/serial/omap-serial.c
+++ b/drivers/tty/serial/omap-serial.c
@@ -342,7 +342,14 @@ static void serial_omap_stop_tx(struct uart_port *port)
342 342
343 if ((up->rs485.flags & SER_RS485_ENABLED) && 343 if ((up->rs485.flags & SER_RS485_ENABLED) &&
344 !(up->rs485.flags & SER_RS485_RX_DURING_TX)) { 344 !(up->rs485.flags & SER_RS485_RX_DURING_TX)) {
345 up->ier = UART_IER_RLSI | UART_IER_RDI; 345 /*
346 * Empty the RX FIFO, we are not interested in anything
347 * received during the half-duplex transmission.
348 */
349 serial_out(up, UART_FCR, up->fcr | UART_FCR_CLEAR_RCVR);
350 /* Re-enable RX interrupts */
351 up->ier |= UART_IER_RLSI | UART_IER_RDI;
352 up->port.read_status_mask |= UART_LSR_DR;
346 serial_out(up, UART_IER, up->ier); 353 serial_out(up, UART_IER, up->ier);
347 } 354 }
348 355
@@ -355,7 +362,7 @@ static void serial_omap_stop_rx(struct uart_port *port)
355 struct uart_omap_port *up = to_uart_omap_port(port); 362 struct uart_omap_port *up = to_uart_omap_port(port);
356 363
357 pm_runtime_get_sync(up->dev); 364 pm_runtime_get_sync(up->dev);
358 up->ier &= ~UART_IER_RLSI; 365 up->ier &= ~(UART_IER_RLSI | UART_IER_RDI);
359 up->port.read_status_mask &= ~UART_LSR_DR; 366 up->port.read_status_mask &= ~UART_LSR_DR;
360 serial_out(up, UART_IER, up->ier); 367 serial_out(up, UART_IER, up->ier);
361 pm_runtime_mark_last_busy(up->dev); 368 pm_runtime_mark_last_busy(up->dev);