diff options
Diffstat (limited to 'drivers/usb/serial/oti6858.c')
| -rw-r--r-- | drivers/usb/serial/oti6858.c | 10 | 
1 files changed, 6 insertions, 4 deletions
| diff --git a/drivers/usb/serial/oti6858.c b/drivers/usb/serial/oti6858.c index a958fd41b5b..87c71ccfee8 100644 --- a/drivers/usb/serial/oti6858.c +++ b/drivers/usb/serial/oti6858.c @@ -188,7 +188,6 @@ struct oti6858_private {  	u8 setup_done;  	struct delayed_work delayed_setup_work; -	wait_queue_head_t intr_wait;  	struct usb_serial_port *port;   /* USB port with which associated */  }; @@ -339,7 +338,6 @@ static int oti6858_port_probe(struct usb_serial_port *port)  		return -ENOMEM;  	spin_lock_init(&priv->lock); -	init_waitqueue_head(&priv->intr_wait);  	priv->port = port;  	INIT_DELAYED_WORK(&priv->delayed_setup_work, setup_line);  	INIT_DELAYED_WORK(&priv->delayed_write_work, send_data); @@ -664,11 +662,15 @@ static int wait_modem_info(struct usb_serial_port *port, unsigned int arg)  	spin_unlock_irqrestore(&priv->lock, flags);  	while (1) { -		wait_event_interruptible(priv->intr_wait, +		wait_event_interruptible(port->delta_msr_wait, +					port->serial->disconnected ||  					priv->status.pin_state != prev);  		if (signal_pending(current))  			return -ERESTARTSYS; +		if (port->serial->disconnected) +			return -EIO; +  		spin_lock_irqsave(&priv->lock, flags);  		status = priv->status.pin_state & PIN_MASK;  		spin_unlock_irqrestore(&priv->lock, flags); @@ -763,7 +765,7 @@ static void oti6858_read_int_callback(struct urb *urb)  		if (!priv->transient) {  			if (xs->pin_state != priv->status.pin_state) -				wake_up_interruptible(&priv->intr_wait); +				wake_up_interruptible(&port->delta_msr_wait);  			memcpy(&priv->status, xs, OTI6858_CTRL_PKT_SIZE);  		} |