SERIAL: omap: fix MCR TCRTLR bit handling
authorRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 5 Oct 2012 12:54:53 +0000 (13:54 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 4 Nov 2012 11:54:31 +0000 (11:54 +0000)
commit08bd4903c20d9d4bea64b1751386a478faa24ab0
tree79659e2199785262744720805ba6ca641df893cb
parent9363f8fa8930db6383b4089036799a276257fdb7
SERIAL: omap: fix MCR TCRTLR bit handling

The MCR TCRTLR bit can only be changed when ECB is set in the EFR.
Unfortunately, several places were trying to alter this bit while ECB
was clear:

- serial_omap_configure_xonxoff() was attempting to clear the bit after
  explicitly clearing the ECB bit.
- serial_omap_set_termios() was trying the same trick after setting the
  SCR, and when trying to change the TCR register when hardware flow
  control was enabled.

Fix this by ensuring that we always have ECB set whenever the TCRTLR bit
is changed.

Moreover, we start out by reading the EFR and MCR registers, which may
have indeterminent bit settings for the ECB and TCRTLR bits.  Ensure
that these bits always start off in a known state.

In order to avoid any undesired behaviour appearing through fixing this,
we also ensure that hardware assisted flow control is disabled while new
driver specific parts are not in place.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/tty/serial/omap-serial.c