diff options
Diffstat (limited to 'drivers/usb/class/cdc-acm.c')
| -rw-r--r-- | drivers/usb/class/cdc-acm.c | 19 | 
1 files changed, 18 insertions, 1 deletions
| diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index b30e7423549b..fa4e23930614 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c @@ -428,7 +428,8 @@ static void acm_read_bulk_callback(struct urb *urb)  		set_bit(rb->index, &acm->read_urbs_free);  		dev_dbg(&acm->data->dev, "%s - non-zero urb status: %d\n",  							__func__, status); -		return; +		if ((status != -ENOENT) || (urb->actual_length == 0)) +			return;  	}  	usb_mark_last_busy(acm->dev); @@ -1404,6 +1405,8 @@ made_compressed_probe:  				usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),  				NULL, acm->writesize, acm_write_bulk, snd);  		snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; +		if (quirks & SEND_ZERO_PACKET) +			snd->urb->transfer_flags |= URB_ZERO_PACKET;  		snd->instance = acm;  	} @@ -1838,6 +1841,16 @@ static const struct usb_device_id acm_ids[] = {  	},  #endif +	/*Samsung phone in firmware update mode */ +	{ USB_DEVICE(0x04e8, 0x685d), +	.driver_info = IGNORE_DEVICE, +	}, + +	/* Exclude Infineon Flash Loader utility */ +	{ USB_DEVICE(0x058b, 0x0041), +	.driver_info = IGNORE_DEVICE, +	}, +  	/* control interfaces without any protocol set */  	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,  		USB_CDC_PROTO_NONE) }, @@ -1856,6 +1869,10 @@ static const struct usb_device_id acm_ids[] = {  	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,  		USB_CDC_ACM_PROTO_AT_CDMA) }, +	{ USB_DEVICE(0x1519, 0x0452), /* Intel 7260 modem */ +	.driver_info = SEND_ZERO_PACKET, +	}, +  	{ }  }; | 
