diff options
| author | David S. Miller <davem@davemloft.net> | 2010-03-22 20:05:26 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2010-03-22 20:05:26 -0700 | 
| commit | 91c030b4d6445ebe9fbddb86d584441f300df15c (patch) | |
| tree | e8a48e3ad9e0448c690268175e555fa651983546 /drivers/usb/serial/ftdi_sio.c | |
| parent | 7c3456fdb503071787f7f972de1069b9cacd16f0 (diff) | |
| parent | ae6be51ed01d6c4aaf249a207b4434bc7785853b (diff) | |
Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
Diffstat (limited to 'drivers/usb/serial/ftdi_sio.c')
| -rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 7 | 
1 files changed, 5 insertions, 2 deletions
| diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 6af0dfa5f5ac..1d7c4fac02e8 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c @@ -91,7 +91,7 @@ struct ftdi_private {  	unsigned long tx_outstanding_bytes;  	unsigned long tx_outstanding_urbs;  	unsigned short max_packet_size; -	struct mutex cfg_lock; /* Avoid mess by parallel calls of config ioctl() */ +	struct mutex cfg_lock; /* Avoid mess by parallel calls of config ioctl() and change_speed() */  };  /* struct ftdi_sio_quirk is used by devices requiring special attention. */ @@ -658,6 +658,7 @@ static struct usb_device_id id_table_combined [] = {  	{ USB_DEVICE(EVOLUTION_VID, EVOLUTION_ER1_PID) },  	{ USB_DEVICE(EVOLUTION_VID, EVO_HYBRID_PID) },  	{ USB_DEVICE(EVOLUTION_VID, EVO_RCM4_PID) }, +	{ USB_DEVICE(CONTEC_VID, CONTEC_COM1USBH_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_ARTEMIS_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16C_PID) }, @@ -1272,8 +1273,8 @@ check_and_exit:  	     (priv->flags & ASYNC_SPD_MASK)) ||  	    (((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST) &&  	     (old_priv.custom_divisor != priv->custom_divisor))) { -		mutex_unlock(&priv->cfg_lock);  		change_speed(tty, port); +		mutex_unlock(&priv->cfg_lock);  	}  	else  		mutex_unlock(&priv->cfg_lock); @@ -2264,9 +2265,11 @@ static void ftdi_set_termios(struct tty_struct *tty,  		clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);  	} else {  		/* set the baudrate determined before */ +		mutex_lock(&priv->cfg_lock);  		if (change_speed(tty, port))  			dev_err(&port->dev, "%s urb failed to set baudrate\n",  				__func__); +		mutex_unlock(&priv->cfg_lock);  		/* Ensure RTS and DTR are raised when baudrate changed from 0 */  		if (!old_termios || (old_termios->c_cflag & CBAUD) == B0)  			set_mctrl(port, TIOCM_DTR | TIOCM_RTS); | 
