diff options
Diffstat (limited to 'drivers/usb/class')
| -rw-r--r-- | drivers/usb/class/cdc-acm.c | 14 | ||||
| -rw-r--r-- | drivers/usb/class/cdc-acm.h | 1 | 
2 files changed, 14 insertions, 1 deletions
| diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index 26ca4f910cb0..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,11 @@ 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, @@ -1861,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, +	}, +  	{ }  }; diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h index dd9af38e7cda..ccfaba9ab4e4 100644 --- a/drivers/usb/class/cdc-acm.h +++ b/drivers/usb/class/cdc-acm.h @@ -134,3 +134,4 @@ struct acm {  #define IGNORE_DEVICE			BIT(5)  #define QUIRK_CONTROL_LINE_STATE	BIT(6)  #define CLEAR_HALT_CONDITIONS		BIT(7) +#define SEND_ZERO_PACKET		BIT(8) | 
