SERIAL: omap: serial_omap_configure_xonxoff() contents into set_termios
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
820344fe3d
commit
01d70bb37c
1 changed files with 53 additions and 59 deletions
|
@ -707,63 +707,6 @@ static void serial_omap_shutdown(struct uart_port *port)
|
|||
free_irq(up->port.irq, up);
|
||||
}
|
||||
|
||||
static inline void
|
||||
serial_omap_configure_xonxoff
|
||||
(struct uart_omap_port *up, struct ktermios *termios)
|
||||
{
|
||||
up->lcr = serial_in(up, UART_LCR);
|
||||
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
|
||||
up->efr = serial_in(up, UART_EFR);
|
||||
serial_out(up, UART_EFR, up->efr & ~UART_EFR_ECB);
|
||||
|
||||
serial_out(up, UART_XON1, termios->c_cc[VSTART]);
|
||||
serial_out(up, UART_XOFF1, termios->c_cc[VSTOP]);
|
||||
|
||||
/* clear SW control mode bits */
|
||||
up->efr &= OMAP_UART_SW_CLR;
|
||||
|
||||
/*
|
||||
* IXON Flag:
|
||||
* Enable XON/XOFF flow control on output.
|
||||
* Transmit XON1, XOFF1
|
||||
*/
|
||||
if (termios->c_iflag & IXON)
|
||||
up->efr |= OMAP_UART_SW_TX;
|
||||
|
||||
/*
|
||||
* IXOFF Flag:
|
||||
* Enable XON/XOFF flow control on input.
|
||||
* Receiver compares XON1, XOFF1.
|
||||
*/
|
||||
if (termios->c_iflag & IXOFF)
|
||||
up->efr |= OMAP_UART_SW_RX;
|
||||
|
||||
serial_out(up, UART_EFR, up->efr | UART_EFR_ECB);
|
||||
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
|
||||
|
||||
up->mcr = serial_in(up, UART_MCR);
|
||||
|
||||
/*
|
||||
* IXANY Flag:
|
||||
* Enable any character to restart output.
|
||||
* Operation resumes after receiving any
|
||||
* character after recognition of the XOFF character
|
||||
*/
|
||||
if (termios->c_iflag & IXANY)
|
||||
up->mcr |= UART_MCR_XONANY;
|
||||
else
|
||||
up->mcr &= ~UART_MCR_XONANY;
|
||||
|
||||
serial_out(up, UART_MCR, up->mcr | UART_MCR_TCRTLR);
|
||||
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
|
||||
serial_out(up, UART_TI752_TCR, OMAP_UART_TCR_TRIG);
|
||||
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
|
||||
serial_out(up, UART_MCR, up->mcr & ~UART_MCR_TCRTLR);
|
||||
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
|
||||
serial_out(up, UART_EFR, up->efr);
|
||||
serial_out(up, UART_LCR, up->lcr);
|
||||
}
|
||||
|
||||
static void serial_omap_uart_qos_work(struct work_struct *work)
|
||||
{
|
||||
struct uart_omap_port *up = container_of(work, struct uart_omap_port,
|
||||
|
@ -984,8 +927,59 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios,
|
|||
}
|
||||
|
||||
/* Software Flow Control Configuration */
|
||||
if (up->port.flags & UPF_SOFT_FLOW)
|
||||
serial_omap_configure_xonxoff(up, termios);
|
||||
if (up->port.flags & UPF_SOFT_FLOW) {
|
||||
up->lcr = serial_in(up, UART_LCR);
|
||||
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
|
||||
up->efr = serial_in(up, UART_EFR);
|
||||
serial_out(up, UART_EFR, up->efr & ~UART_EFR_ECB);
|
||||
|
||||
serial_out(up, UART_XON1, termios->c_cc[VSTART]);
|
||||
serial_out(up, UART_XOFF1, termios->c_cc[VSTOP]);
|
||||
|
||||
/* clear SW control mode bits */
|
||||
up->efr &= OMAP_UART_SW_CLR;
|
||||
|
||||
/*
|
||||
* IXON Flag:
|
||||
* Enable XON/XOFF flow control on output.
|
||||
* Transmit XON1, XOFF1
|
||||
*/
|
||||
if (termios->c_iflag & IXON)
|
||||
up->efr |= OMAP_UART_SW_TX;
|
||||
|
||||
/*
|
||||
* IXOFF Flag:
|
||||
* Enable XON/XOFF flow control on input.
|
||||
* Receiver compares XON1, XOFF1.
|
||||
*/
|
||||
if (termios->c_iflag & IXOFF)
|
||||
up->efr |= OMAP_UART_SW_RX;
|
||||
|
||||
serial_out(up, UART_EFR, up->efr | UART_EFR_ECB);
|
||||
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
|
||||
|
||||
up->mcr = serial_in(up, UART_MCR);
|
||||
|
||||
/*
|
||||
* IXANY Flag:
|
||||
* Enable any character to restart output.
|
||||
* Operation resumes after receiving any
|
||||
* character after recognition of the XOFF character
|
||||
*/
|
||||
if (termios->c_iflag & IXANY)
|
||||
up->mcr |= UART_MCR_XONANY;
|
||||
else
|
||||
up->mcr &= ~UART_MCR_XONANY;
|
||||
|
||||
serial_out(up, UART_MCR, up->mcr | UART_MCR_TCRTLR);
|
||||
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
|
||||
serial_out(up, UART_TI752_TCR, OMAP_UART_TCR_TRIG);
|
||||
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
|
||||
serial_out(up, UART_MCR, up->mcr & ~UART_MCR_TCRTLR);
|
||||
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
|
||||
serial_out(up, UART_EFR, up->efr);
|
||||
serial_out(up, UART_LCR, up->lcr);
|
||||
}
|
||||
|
||||
serial_omap_set_mctrl(&up->port, up->port.mctrl);
|
||||
|
||||
|
|
Loading…
Reference in a new issue