Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 92d2c5e4 authored by Jason Wessel's avatar Jason Wessel Committed by Greg Kroah-Hartman
Browse files

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: default avatarJason Wessel <jason.wessel@windriver.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent aae86e8a
Loading
Loading
Loading
Loading
+10 −12
Original line number Diff line number Diff line
@@ -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);