|
@@ -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);
|