Browse Source

SERIAL: omap: always set TCR

We always setup the TCR register in the software flow control path,
and when hardware flow control is enabled.  Remove this redundant
setup, and place it before we setup any hardware flow control.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Russell King 13 years ago
parent
commit
c7d059cae3
1 changed files with 11 additions and 17 deletions
  1. 11 17
      drivers/tty/serial/omap-serial.c

+ 11 - 17
drivers/tty/serial/omap-serial.c

@@ -898,31 +898,30 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios,
 	else
 	else
 		serial_out(up, UART_OMAP_MDR1, up->mdr1);
 		serial_out(up, UART_OMAP_MDR1, up->mdr1);
 
 
-	/* Hardware Flow Control Configuration */
+	/* Enable access to TCR/TLR */
+	serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
+	serial_out(up, UART_EFR, up->efr | UART_EFR_ECB);
+	serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
+	serial_out(up, UART_MCR, up->mcr | UART_MCR_TCRTLR);
 
 
-	if (termios->c_cflag & CRTSCTS && up->port.flags & UPF_HARD_FLOW) {
-		/* Enable access to TCR/TLR */
-		serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
-		serial_out(up, UART_EFR, up->efr | UART_EFR_ECB);
-		serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
-		serial_out(up, UART_MCR, up->mcr | UART_MCR_TCRTLR);
+	serial_out(up, UART_TI752_TCR, OMAP_UART_TCR_TRIG);
 
 
-		serial_out(up, UART_TI752_TCR, OMAP_UART_TCR_TRIG);
+	/* Hardware Flow Control Configuration */
 
 
+	if (termios->c_cflag & CRTSCTS && up->port.flags & UPF_HARD_FLOW) {
 		/* Enable AUTORTS and AUTOCTS */
 		/* Enable AUTORTS and AUTOCTS */
 		up->efr |= UART_EFR_CTS | UART_EFR_RTS;
 		up->efr |= UART_EFR_CTS | UART_EFR_RTS;
 
 
 		/* Ensure MCR RTS is asserted */
 		/* Ensure MCR RTS is asserted */
 		up->mcr |= UART_MCR_RTS;
 		up->mcr |= UART_MCR_RTS;
-
-		/* Disable access to TCR/TLR */
-		serial_out(up, UART_MCR, up->mcr);
 	} else {
 	} else {
 		/* Disable AUTORTS and AUTOCTS */
 		/* Disable AUTORTS and AUTOCTS */
 		up->efr &= ~(UART_EFR_CTS | UART_EFR_RTS);
 		up->efr &= ~(UART_EFR_CTS | UART_EFR_RTS);
 	}
 	}
 
 
 	if (up->port.flags & UPF_SOFT_FLOW) {
 	if (up->port.flags & UPF_SOFT_FLOW) {
+		/* Disable access to TCR/TLR */
+		serial_out(up, UART_MCR, up->mcr);
 		serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
 		serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
 		serial_out(up, UART_EFR, up->efr);
 		serial_out(up, UART_EFR, up->efr);
 
 
@@ -961,14 +960,9 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios,
 			up->mcr |= UART_MCR_XONANY;
 			up->mcr |= UART_MCR_XONANY;
 		else
 		else
 			up->mcr &= ~UART_MCR_XONANY;
 			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);
 	}
 	}
 
 
+	serial_out(up, UART_MCR, up->mcr);
 	serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
 	serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
 	serial_out(up, UART_EFR, up->efr);
 	serial_out(up, UART_EFR, up->efr);
 	serial_out(up, UART_LCR, up->lcr);
 	serial_out(up, UART_LCR, up->lcr);