Skip to content

Commit

Permalink
serial: MPSC: Stop rx engine when CREAD cleared
Browse files Browse the repository at this point in the history
Currently, the MPSC driver doesn't stop recieving characters when the CREAD
flag in termios->c_cflag is cleared.  It should.  Also, only start receiving
if its not already started.

Signed-off-by: Stephane Chazelas <stephane@artesyncp.com>
Signed-off-by: Mark A. Greer <mgreer@mvista.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Stephane Chazelas authored and Linus Torvalds committed Jul 31, 2007
1 parent 6c1ead5 commit 5797ae3
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions drivers/serial/mpsc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1520,7 +1520,6 @@ mpsc_set_termios(struct uart_port *port, struct ktermios *termios,
mpsc_set_baudrate(pi, baud);

/* Characters/events to read */
pi->rcv_data = 1;
pi->port.read_status_mask = SDMA_DESC_CMDSTAT_OR;

if (termios->c_iflag & INPCK)
Expand All @@ -1544,11 +1543,15 @@ mpsc_set_termios(struct uart_port *port, struct ktermios *termios,
pi->port.ignore_status_mask |= SDMA_DESC_CMDSTAT_OR;
}

/* Ignore all chars if CREAD not set */
if (!(termios->c_cflag & CREAD))
if ((termios->c_cflag & CREAD)) {
if (!pi->rcv_data) {
pi->rcv_data = 1;
mpsc_start_rx(pi);
}
} else if (pi->rcv_data) {
mpsc_stop_rx(port);
pi->rcv_data = 0;
else
mpsc_start_rx(pi);
}

spin_unlock_irqrestore(&pi->port.lock, flags);
return;
Expand Down

0 comments on commit 5797ae3

Please sign in to comment.