mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-18 16:44:27 +08:00
tty: serial: Fix termios/port flags mismatch
Uart port drivers may reconfigure termios settings based on available hardware support; set/clear ASYNC_CTS_FLOW and ASYNC_CHECK_CD _after_ calling the port driver's .set_termios method. Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7c6d340f4f
commit
c18b55fd17
@ -450,6 +450,7 @@ static void uart_change_speed(struct tty_struct *tty, struct uart_state *state,
|
||||
return;
|
||||
|
||||
termios = &tty->termios;
|
||||
uport->ops->set_termios(uport, termios, old_termios);
|
||||
|
||||
/*
|
||||
* Set flags based on termios cflag
|
||||
@ -463,8 +464,6 @@ static void uart_change_speed(struct tty_struct *tty, struct uart_state *state,
|
||||
clear_bit(ASYNCB_CHECK_CD, &port->flags);
|
||||
else
|
||||
set_bit(ASYNCB_CHECK_CD, &port->flags);
|
||||
|
||||
uport->ops->set_termios(uport, termios, old_termios);
|
||||
}
|
||||
|
||||
static inline int __uart_put_char(struct uart_port *port,
|
||||
@ -1282,6 +1281,8 @@ static void uart_set_termios(struct tty_struct *tty,
|
||||
}
|
||||
|
||||
uart_change_speed(tty, state, old_termios);
|
||||
/* reload cflag from termios; port driver may have overriden flags */
|
||||
cflag = tty->termios.c_cflag;
|
||||
|
||||
/* Handle transition to B0 status */
|
||||
if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD))
|
||||
|
Loading…
Reference in New Issue
Block a user