aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2012-10-06 04:04:03 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2012-11-04 07:29:32 -0500
commit1fe8aa8803536b8030375525a07a152ba8f15363 (patch)
tree6aafac17cc4dec662dc3d5506499a428bd770142
parent01d70bb37ccb74a1b5c9e3e08c9a69eacc8d84f4 (diff)
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>
-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,
912 /* Enable AUTORTS and AUTOCTS */ 912 /* Enable AUTORTS and AUTOCTS */
913 up->efr |= UART_EFR_CTS | UART_EFR_RTS; 913 up->efr |= UART_EFR_CTS | UART_EFR_RTS;
914 914
915 /* Ensure MCR RTS is asserted */
916 up->mcr |= UART_MCR_RTS;
917
915 /* Disable access to TCR/TLR */ 918 /* Disable access to TCR/TLR */
916 serial_out(up, UART_MCR, up->mcr | UART_MCR_RTS); 919 serial_out(up, UART_MCR, up->mcr);
917 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); 920 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
918 serial_out(up, UART_EFR, up->efr); 921 serial_out(up, UART_EFR, up->efr);
919 serial_out(up, UART_LCR, cval); 922 serial_out(up, UART_LCR, cval);
@@ -928,10 +931,8 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios,
928 931
929 /* Software Flow Control Configuration */ 932 /* Software Flow Control Configuration */
930 if (up->port.flags & UPF_SOFT_FLOW) { 933 if (up->port.flags & UPF_SOFT_FLOW) {
931 up->lcr = serial_in(up, UART_LCR);
932 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); 934 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
933 up->efr = serial_in(up, UART_EFR); 935 serial_out(up, UART_EFR, up->efr);
934 serial_out(up, UART_EFR, up->efr & ~UART_EFR_ECB);
935 936
936 serial_out(up, UART_XON1, termios->c_cc[VSTART]); 937 serial_out(up, UART_XON1, termios->c_cc[VSTART]);
937 serial_out(up, UART_XOFF1, termios->c_cc[VSTOP]); 938 serial_out(up, UART_XOFF1, termios->c_cc[VSTOP]);
@@ -958,8 +959,6 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios,
958 serial_out(up, UART_EFR, up->efr | UART_EFR_ECB); 959 serial_out(up, UART_EFR, up->efr | UART_EFR_ECB);
959 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); 960 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
960 961
961 up->mcr = serial_in(up, UART_MCR);
962
963 /* 962 /*
964 * IXANY Flag: 963 * IXANY Flag:
965 * Enable any character to restart output. 964 * Enable any character to restart output.
@@ -975,7 +974,7 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios,
975 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); 974 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
976 serial_out(up, UART_TI752_TCR, OMAP_UART_TCR_TRIG); 975 serial_out(up, UART_TI752_TCR, OMAP_UART_TCR_TRIG);
977 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); 976 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
978 serial_out(up, UART_MCR, up->mcr & ~UART_MCR_TCRTLR); 977 serial_out(up, UART_MCR, up->mcr);
979 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); 978 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
980 serial_out(up, UART_EFR, up->efr); 979 serial_out(up, UART_EFR, up->efr);
981 serial_out(up, UART_LCR, up->lcr); 980 serial_out(up, UART_LCR, up->lcr);