diff options
Diffstat (limited to 'drivers/usb/serial/ftdi_sio.c')
| -rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 14 | 
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 8fe034d2d3e..bd4298bb675 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c @@ -2104,13 +2104,19 @@ static void ftdi_set_termios(struct tty_struct *tty,  	cflag = termios->c_cflag; -	/* FIXME -For this cut I don't care if the line is really changing or -	   not  - so just do the change regardless  - should be able to -	   compare old_termios and tty->termios */ +	if (old_termios->c_cflag == termios->c_cflag +	    && old_termios->c_ispeed == termios->c_ispeed +	    && old_termios->c_ospeed == termios->c_ospeed) +		goto no_c_cflag_changes; +  	/* NOTE These routines can get interrupted by  	   ftdi_sio_read_bulk_callback  - need to examine what this means -  	   don't see any problems yet */ +	if ((old_termios->c_cflag & (CSIZE|PARODD|PARENB|CMSPAR|CSTOPB)) == +	    (termios->c_cflag & (CSIZE|PARODD|PARENB|CMSPAR|CSTOPB))) +		goto no_data_parity_stop_changes; +  	/* Set number of data bits, parity, stop bits */  	urb_value = 0; @@ -2151,6 +2157,7 @@ static void ftdi_set_termios(struct tty_struct *tty,  	}  	/* Now do the baudrate */ +no_data_parity_stop_changes:  	if ((cflag & CBAUD) == B0) {  		/* Disable flow control */  		if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), @@ -2178,6 +2185,7 @@ static void ftdi_set_termios(struct tty_struct *tty,  	/* Set flow control */  	/* Note device also supports DTR/CD (ugh) and Xon/Xoff in hardware */ +no_c_cflag_changes:  	if (cflag & CRTSCTS) {  		dbg("%s Setting to CRTSCTS flow control", __func__);  		if (usb_control_msg(dev,  |