diff options
Diffstat (limited to 'drivers/tty/serial/omap-serial.c')
-rw-r--r-- | drivers/tty/serial/omap-serial.c | 11 |
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); |