diff options
Diffstat (limited to 'drivers/usb/serial/sierra.c')
| -rw-r--r-- | drivers/usb/serial/sierra.c | 47 | 
1 files changed, 19 insertions, 28 deletions
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c index c13f6e74774..8894665cd61 100644 --- a/drivers/usb/serial/sierra.c +++ b/drivers/usb/serial/sierra.c @@ -628,7 +628,6 @@ static void sierra_instat_callback(struct urb *urb)  			unsigned char signals = *((unsigned char *)  					urb->transfer_buffer +  					sizeof(struct usb_ctrlrequest)); -			struct tty_struct *tty;  			dev_dbg(&port->dev, "%s: signal x%x\n", __func__,  				signals); @@ -639,11 +638,8 @@ static void sierra_instat_callback(struct urb *urb)  			portdata->dsr_state = ((signals & 0x02) ? 1 : 0);  			portdata->ri_state = ((signals & 0x08) ? 1 : 0); -			tty = tty_port_tty_get(&port->port); -			if (tty && !C_CLOCAL(tty) && -					old_dcd_state && !portdata->dcd_state) -				tty_hangup(tty); -			tty_kref_put(tty); +			if (old_dcd_state && !portdata->dcd_state) +				tty_port_tty_hangup(&port->port, true);  		} else {  			dev_dbg(&port->dev, "%s: type %x req %x\n",  				__func__, req_pkt->bRequestType, @@ -778,30 +774,25 @@ static void sierra_close(struct usb_serial_port *port)  	portdata->rts_state = 0;  	portdata->dtr_state = 0; -	if (serial->dev) { -		mutex_lock(&serial->disc_mutex); -		if (!serial->disconnected) { -			serial->interface->needs_remote_wakeup = 0; -			/* odd error handling due to pm counters */ -			if (!usb_autopm_get_interface(serial->interface)) -				sierra_send_setup(port); -			else -				usb_autopm_get_interface_no_resume(serial->interface); -				 -		} -		mutex_unlock(&serial->disc_mutex); -		spin_lock_irq(&intfdata->susp_lock); -		portdata->opened = 0; -		spin_unlock_irq(&intfdata->susp_lock); +	mutex_lock(&serial->disc_mutex); +	if (!serial->disconnected) { +		serial->interface->needs_remote_wakeup = 0; +		/* odd error handling due to pm counters */ +		if (!usb_autopm_get_interface(serial->interface)) +			sierra_send_setup(port); +		else +			usb_autopm_get_interface_no_resume(serial->interface); +	} +	mutex_unlock(&serial->disc_mutex); +	spin_lock_irq(&intfdata->susp_lock); +	portdata->opened = 0; +	spin_unlock_irq(&intfdata->susp_lock); -		/* Stop reading urbs */ -		sierra_stop_rx_urbs(port); -		/* .. and release them */ -		for (i = 0; i < portdata->num_in_urbs; i++) { -			sierra_release_urb(portdata->in_urbs[i]); -			portdata->in_urbs[i] = NULL; -		} +	sierra_stop_rx_urbs(port); +	for (i = 0; i < portdata->num_in_urbs; i++) { +		sierra_release_urb(portdata->in_urbs[i]); +		portdata->in_urbs[i] = NULL;  	}  }  |