mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
usb-console: pass baud from console to the initial tty open
The usb console code has had a long standing problem of not being able to pass the baud rate from the kernel argument console=ttyUSB0,BAUD down to the initial tty open, unless you were willing to settle for 9600 baud. The solution is to directly use tty_init_termios() in usb_console_setup() as this will preserve any changes to the initial termios setting on future opens. CC: Alan Cox <alan@linux.intel.com> CC: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Jason Wessel <jason.wessel@windriver.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
aae86e8adb
commit
92d2c5e4ba
1 changed files with 10 additions and 12 deletions
|
@ -66,7 +66,7 @@ static int usb_console_setup(struct console *co, char *options)
|
|||
struct usb_serial_port *port;
|
||||
int retval;
|
||||
struct tty_struct *tty = NULL;
|
||||
struct ktermios *termios = NULL, dummy;
|
||||
struct ktermios dummy;
|
||||
|
||||
dbg("%s", __func__);
|
||||
|
||||
|
@ -141,15 +141,14 @@ static int usb_console_setup(struct console *co, char *options)
|
|||
goto reset_open_count;
|
||||
}
|
||||
kref_init(&tty->kref);
|
||||
termios = kzalloc(sizeof(*termios), GFP_KERNEL);
|
||||
if (!termios) {
|
||||
tty_port_tty_set(&port->port, tty);
|
||||
tty->driver = usb_serial_tty_driver;
|
||||
tty->index = co->index;
|
||||
if (tty_init_termios(tty)) {
|
||||
retval = -ENOMEM;
|
||||
err("no more memory");
|
||||
goto free_tty;
|
||||
}
|
||||
memset(&dummy, 0, sizeof(struct ktermios));
|
||||
tty->termios = termios;
|
||||
tty_port_tty_set(&port->port, tty);
|
||||
}
|
||||
|
||||
/* only call the device specific open if this
|
||||
|
@ -161,16 +160,16 @@ static int usb_console_setup(struct console *co, char *options)
|
|||
|
||||
if (retval) {
|
||||
err("could not open USB console port");
|
||||
goto free_termios;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (serial->type->set_termios) {
|
||||
termios->c_cflag = cflag;
|
||||
tty_termios_encode_baud_rate(termios, baud, baud);
|
||||
tty->termios->c_cflag = cflag;
|
||||
tty_termios_encode_baud_rate(tty->termios, baud, baud);
|
||||
memset(&dummy, 0, sizeof(struct ktermios));
|
||||
serial->type->set_termios(tty, port, &dummy);
|
||||
|
||||
tty_port_tty_set(&port->port, NULL);
|
||||
kfree(termios);
|
||||
kfree(tty);
|
||||
}
|
||||
set_bit(ASYNCB_INITIALIZED, &port->port.flags);
|
||||
|
@ -185,8 +184,7 @@ static int usb_console_setup(struct console *co, char *options)
|
|||
mutex_unlock(&serial->disc_mutex);
|
||||
return retval;
|
||||
|
||||
free_termios:
|
||||
kfree(termios);
|
||||
fail:
|
||||
tty_port_tty_set(&port->port, NULL);
|
||||
free_tty:
|
||||
kfree(tty);
|
||||
|
|
Loading…
Reference in a new issue