serial: sirf: add serial loopback function support
Signed-off-by: Qipan Li <Qipan.Li@csr.com> Signed-off-by: Barry Song <Baohua.Song@csr.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d9e8e976fa
commit
7f60f2fe16
|
@ -108,6 +108,26 @@ static void sirfsoc_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
|
|||
unsigned int val = assert ? SIRFUART_AFC_CTRL_RX_THD : 0x0;
|
||||
unsigned int current_val;
|
||||
|
||||
if (mctrl & TIOCM_LOOP) {
|
||||
if (sirfport->uart_reg->uart_type == SIRF_REAL_UART)
|
||||
wr_regl(port, ureg->sirfsoc_line_ctrl,
|
||||
rd_regl(port, ureg->sirfsoc_line_ctrl) |
|
||||
SIRFUART_LOOP_BACK);
|
||||
else
|
||||
wr_regl(port, ureg->sirfsoc_mode1,
|
||||
rd_regl(port, ureg->sirfsoc_mode1) |
|
||||
SIRFSOC_USP_LOOP_BACK_CTRL);
|
||||
} else {
|
||||
if (sirfport->uart_reg->uart_type == SIRF_REAL_UART)
|
||||
wr_regl(port, ureg->sirfsoc_line_ctrl,
|
||||
rd_regl(port, ureg->sirfsoc_line_ctrl) &
|
||||
~SIRFUART_LOOP_BACK);
|
||||
else
|
||||
wr_regl(port, ureg->sirfsoc_mode1,
|
||||
rd_regl(port, ureg->sirfsoc_mode1) &
|
||||
~SIRFSOC_USP_LOOP_BACK_CTRL);
|
||||
}
|
||||
|
||||
if (!sirfport->hw_flow_ctrl || !sirfport->ms_enabled)
|
||||
return;
|
||||
if (sirfport->uart_reg->uart_type == SIRF_REAL_UART) {
|
||||
|
|
|
@ -322,7 +322,7 @@ struct sirfsoc_uart_register sirfsoc_uart = {
|
|||
#define SIRFSOC_USP_RX_CLK_DIVISOR_OFFSET 24
|
||||
#define SIRFSOC_USP_ASYNC_DIV2_MASK 0x3f
|
||||
#define SIRFSOC_USP_ASYNC_DIV2_OFFSET 16
|
||||
|
||||
#define SIRFSOC_USP_LOOP_BACK_CTRL BIT(2)
|
||||
/* USP-UART Common */
|
||||
#define SIRFSOC_UART_RX_TIMEOUT(br, to) (((br) * (((to) + 999) / 1000)) / 1000)
|
||||
#define SIRFUART_RECV_TIMEOUT_VALUE(x) \
|
||||
|
|
Loading…
Reference in New Issue