summaryrefslogtreecommitdiffstats
path: root/drivers/tty
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2012-10-06 10:04:03 +0200
committerRussell King <rmk+kernel@arm.linux.org.uk>2012-11-04 13:29:32 +0100
commit1fe8aa8803536b8030375525a07a152ba8f15363 (patch)
tree6aafac17cc4dec662dc3d5506499a428bd770142 /drivers/tty
parentSERIAL: omap: serial_omap_configure_xonxoff() contents into set_termios (diff)
downloadlinux-1fe8aa8803536b8030375525a07a152ba8f15363.tar.xz
linux-1fe8aa8803536b8030375525a07a152ba8f15363.zip
SERIAL: omap: don't read back LCR/MCR/EFR
There's really no reason to read back these registers while setting the termios modes, provided we keep our cached copies up to date. Remove these readbacks. This has the benefit that we know that the EFR_ECB and MCR_TCRTLR bits will always be clear, so we don't need to keep masking these bits throughout the code. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/tty')
-rw-r--r--drivers/tty/serial/omap-serial.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
index 4888bd1ab322..6d588e20c648 100644
--- a/drivers/tty/serial/omap-serial.c
+++ b/drivers/tty/serial/omap-serial.c
@@ -912,8 +912,11 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios,
/* Enable AUTORTS and AUTOCTS */
up->efr |= UART_EFR_CTS | UART_EFR_RTS;
+ /* Ensure MCR RTS is asserted */
+ up->mcr |= UART_MCR_RTS;
+
/* Disable access to TCR/TLR */
- serial_out(up, UART_MCR, up->mcr | UART_MCR_RTS);
+ serial_out(up, UART_MCR, up->mcr);
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
serial_out(up, UART_EFR, up->efr);
serial_out(up, UART_LCR, cval);
@@ -928,10 +931,8 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios,
/* Software Flow Control Configuration */
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_EFR, up->efr);
serial_out(up, UART_XON1, termios->c_cc[VSTART]);
serial_out(up, UART_XOFF1, termios->c_cc[VSTOP]);
@@ -958,8 +959,6 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios,
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.
@@ -975,7 +974,7 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios,
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_MCR, up->mcr);
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
serial_out(up, UART_EFR, up->efr);
serial_out(up, UART_LCR, up->lcr);