diff options
Diffstat (limited to 'drivers/usb/class/cdc-acm.c')
| -rw-r--r-- | drivers/usb/class/cdc-acm.c | 18 | 
1 files changed, 7 insertions, 11 deletions
| diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index c2ecfa3c8349..73f9476774ae 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c @@ -1520,6 +1520,12 @@ skip_countries:  			goto err_remove_files;  	} +	if (quirks & CLEAR_HALT_CONDITIONS) { +		/* errors intentionally ignored */ +		usb_clear_halt(usb_dev, acm->in); +		usb_clear_halt(usb_dev, acm->out); +	} +  	tty_dev = tty_port_register_device(&acm->port, acm_tty_driver, minor,  			&control_interface->dev);  	if (IS_ERR(tty_dev)) { @@ -1527,11 +1533,6 @@ skip_countries:  		goto err_release_data_interface;  	} -	if (quirks & CLEAR_HALT_CONDITIONS) { -		usb_clear_halt(usb_dev, acm->in); -		usb_clear_halt(usb_dev, acm->out); -	} -  	dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);  	return 0; @@ -1571,7 +1572,6 @@ err_put_port:  static void acm_disconnect(struct usb_interface *intf)  {  	struct acm *acm = usb_get_intfdata(intf); -	struct tty_struct *tty;  	int i;  	/* sibling interface is already cleaning up */ @@ -1598,11 +1598,7 @@ static void acm_disconnect(struct usb_interface *intf)  	usb_set_intfdata(acm->data, NULL);  	mutex_unlock(&acm->mutex); -	tty = tty_port_tty_get(&acm->port); -	if (tty) { -		tty_vhangup(tty); -		tty_kref_put(tty); -	} +	tty_port_tty_vhangup(&acm->port);  	cancel_delayed_work_sync(&acm->dwork); | 
