diff options
| -rw-r--r-- | drivers/usb/serial/usb-serial.c | 11 | 
1 files changed, 7 insertions, 4 deletions
| diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index 7e89efbf2c28..676c296103a2 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c @@ -164,9 +164,9 @@ void usb_serial_put(struct usb_serial *serial)   * @driver: the driver (USB in our case)   * @tty: the tty being created   * - * Create the termios objects for this tty.  We use the default + * Initialise the termios structure for this tty.  We use the default   * USB serial settings but permit them to be overridden by - * serial->type->init_termios. + * serial->type->init_termios on first open.   *   * This is the first place a new tty gets used.  Hence this is where we   * acquire references to the usb_serial structure and the driver module, @@ -178,6 +178,7 @@ static int serial_install(struct tty_driver *driver, struct tty_struct *tty)  	int idx = tty->index;  	struct usb_serial *serial;  	struct usb_serial_port *port; +	bool init_termios;  	int retval = -ENODEV;  	port = usb_serial_port_get_by_minor(idx); @@ -192,14 +193,16 @@ static int serial_install(struct tty_driver *driver, struct tty_struct *tty)  	if (retval)  		goto error_get_interface; +	init_termios = (driver->termios[idx] == NULL); +  	retval = tty_standard_install(driver, tty);  	if (retval)  		goto error_init_termios;  	mutex_unlock(&serial->disc_mutex); -	/* allow the driver to update the settings */ -	if (serial->type->init_termios) +	/* allow the driver to update the initial settings */ +	if (init_termios && serial->type->init_termios)  		serial->type->init_termios(tty);  	tty->driver_data = port; | 
