tty/serial/8250: fix RS485 half-duplex RX

When in half-duplex mode RX will be disabled before TX, but not
enabled after deactivating transmitter. This patch enables
UART_IER_RLSI and UART_IER_RDI interrupts after TX is over.

Cc: Matwey V. Kornilov <matwey@sai.msu.ru>
Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>
Fixes: e490c9144c ("tty: Add software emulated RS485 support for 8250")
Acked-by: Matwey V. Kornilov <matwey@sai.msu.ru>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Yegor Yefremov 2016-03-24 09:03:45 +01:00 committed by Greg Kroah-Hartman
parent 9220ebffda
commit 0c66940d58
1 changed files with 10 additions and 1 deletions

View File

@ -1403,9 +1403,18 @@ static void __do_stop_tx_rs485(struct uart_8250_port *p)
/* /*
* Empty the RX FIFO, we are not interested in anything * Empty the RX FIFO, we are not interested in anything
* received during the half-duplex transmission. * received during the half-duplex transmission.
* Enable previously disabled RX interrupts.
*/ */
if (!(p->port.rs485.flags & SER_RS485_RX_DURING_TX)) if (!(p->port.rs485.flags & SER_RS485_RX_DURING_TX)) {
serial8250_clear_fifos(p); serial8250_clear_fifos(p);
serial8250_rpm_get(p);
p->ier |= UART_IER_RLSI | UART_IER_RDI;
serial_port_out(&p->port, UART_IER, p->ier);
serial8250_rpm_put(p);
}
} }
static void serial8250_em485_handle_stop_tx(unsigned long arg) static void serial8250_em485_handle_stop_tx(unsigned long arg)