diff options
author | Jiri Slaby <jslaby@suse.cz> | 2011-03-30 00:10:55 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-04-19 16:32:20 -0700 |
commit | c7d7abff40c27f82fe78b1091ab3fad69b2546f9 (patch) | |
tree | 0463d5b5c97d148f160450ff0a8aa06deaea760c /drivers | |
parent | 7c31bdb6b2a7118150df1668444fd1b7f1df3b85 (diff) | |
download | linux-c7d7abff40c27f82fe78b1091ab3fad69b2546f9.tar.gz linux-c7d7abff40c27f82fe78b1091ab3fad69b2546f9.tar.bz2 linux-c7d7abff40c27f82fe78b1091ab3fad69b2546f9.zip |
serial: core, move termios handling to uart_startup
We should not fiddle with speed and cflags in .dtr_rts hook. Actually
we might not have tty at that moment already.
So move the console cflag copy and speed setup into uart_startup.
Actually the speed setup is already there, but we need to call it
unconditionally (uart_startup is called from uart_open with hw_init =
0).
This means we move uart_change_speed before dtr/rts setup in .dtr_rts.
But this should not matter as the setup should be called after
uart_change_speed anyway.
Before: After:
dtr/rts setup (dtr_rts) uart_change_speed (startup)
uart_change_speed (update_termios) dtr/rts setup (dtr_rts)
dtr/rts setup (update_termios) dtr/rts setup (update_termios)
The second setup will dismiss with the next patch.
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/tty/serial/serial_core.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c index d6e724034492..47657cf4f8b9 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -172,12 +172,16 @@ static int uart_startup(struct tty_struct *tty, struct uart_state *state, int in retval = uport->ops->startup(uport); if (retval == 0) { - if (init_hw) { - /* - * Initialise the hardware port settings. - */ - uart_change_speed(tty, state, NULL); + if (uart_console(uport) && uport->cons->cflag) { + tty->termios->c_cflag = uport->cons->cflag; + uport->cons->cflag = 0; + } + /* + * Initialise the hardware port settings. + */ + uart_change_speed(tty, state, NULL); + if (init_hw) { /* * Setup the RTS and DTR signals once the * port is open and ready to respond. @@ -1481,11 +1485,6 @@ static void uart_update_termios(struct tty_struct *tty, { struct uart_port *port = state->uart_port; - if (uart_console(port) && port->cons->cflag) { - tty->termios->c_cflag = port->cons->cflag; - port->cons->cflag = 0; - } - /* * If the device failed to grab its irq resources, * or some other error occurred, don't try to talk @@ -1493,11 +1492,6 @@ static void uart_update_termios(struct tty_struct *tty, */ if (!(tty->flags & (1 << TTY_IO_ERROR))) { /* - * Make termios settings take effect. - */ - uart_change_speed(tty, state, NULL); - - /* * And finally enable the RTS and DTR signals. */ if (tty->termios->c_cflag & CBAUD) |