From 51e92da83b11b458db8962cb5943238f10d8d3ba Mon Sep 17 00:00:00 2001 From: Paul Mundt Date: Fri, 2 Dec 2011 19:02:06 +0900 Subject: [PATCH] --- yaml --- r: 283583 b: refs/heads/master c: 73c3d53f38e0a8e6c67b0d12d77a8e77c082cd03 h: refs/heads/master i: 283581: c967164e54d6af120deef83b2f1f49e1dd593406 283579: abf11f84001ae02f1859a4c2c667c1044faef2c0 283575: fccdbad915bb446264ba0415c928b7a2c3efeb4f 283567: 87ad0e57db63efd89dccac036f246c0919374e6d 283551: 2ea21319735cbfad5b93844148c2c3e8e41072bd 283519: f303c8b3a980d884776f688ac7ce7a5d2bef6fed v: v3 --- [refs] | 2 +- trunk/drivers/tty/serial/sh-sci.c | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 684708093a87..29a95166bc21 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: faf02f8fee5563ea7f950b3f5f08c654aa6c4525 +refs/heads/master: 73c3d53f38e0a8e6c67b0d12d77a8e77c082cd03 diff --git a/trunk/drivers/tty/serial/sh-sci.c b/trunk/drivers/tty/serial/sh-sci.c index fd60d72eac89..761a800cb483 100644 --- a/trunk/drivers/tty/serial/sh-sci.c +++ b/trunk/drivers/tty/serial/sh-sci.c @@ -1771,18 +1771,25 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, sci_init_pins(port, termios->c_cflag); - if (s->cfg->capabilities & SCIx_HAVE_RTSCTS) { - reg = sci_getreg(port, SCFCR); - if (reg->size) { - unsigned short ctrl; + reg = sci_getreg(port, SCFCR); + if (reg->size) { + unsigned short ctrl = sci_in(port, SCFCR); - ctrl = sci_in(port, SCFCR); + if (s->cfg->capabilities & SCIx_HAVE_RTSCTS) { if (termios->c_cflag & CRTSCTS) ctrl |= SCFCR_MCE; else ctrl &= ~SCFCR_MCE; - sci_out(port, SCFCR, ctrl); } + + /* + * As we've done a sci_reset() above, ensure we don't + * interfere with the FIFOs while toggling MCE. As the + * reset values could still be set, simply mask them out. + */ + ctrl &= ~(SCFCR_RFRST | SCFCR_TFRST); + + sci_out(port, SCFCR, ctrl); } sci_out(port, SCSCR, s->cfg->scscr);