aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLu Baolu <baolu.lu@linux.intel.com>2016-01-06 02:10:04 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-01-25 00:06:21 -0500
commitffdb1e369a73b380fce95b05f8498d92c43842b4 (patch)
tree93d4c35376045b1fa564b42d8883af4ce6bef697
parent19454462acb1bdef80542061bdc9b410e4ed1ff6 (diff)
usb: cdc-acm: send zero packet for intel 7260 modem
For Intel 7260 modem, it is needed for host side to send zero packet if the BULK OUT size is equal to USB endpoint max packet length. Otherwise, modem side may still wait for more data and cannot give response to host side. Signed-off-by: Konrad Leszczynski <konrad.leszczynski@intel.com> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/class/cdc-acm.c6
-rw-r--r--drivers/usb/class/cdc-acm.h1
2 files changed, 7 insertions, 0 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index 8cd193bbd044..e4c70dce3e7c 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -1405,6 +1405,8 @@ made_compressed_probe:
1405 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress), 1405 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1406 NULL, acm->writesize, acm_write_bulk, snd); 1406 NULL, acm->writesize, acm_write_bulk, snd);
1407 snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 1407 snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1408 if (quirks & SEND_ZERO_PACKET)
1409 snd->urb->transfer_flags |= URB_ZERO_PACKET;
1408 snd->instance = acm; 1410 snd->instance = acm;
1409 } 1411 }
1410 1412
@@ -1862,6 +1864,10 @@ static const struct usb_device_id acm_ids[] = {
1862 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, 1864 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1863 USB_CDC_ACM_PROTO_AT_CDMA) }, 1865 USB_CDC_ACM_PROTO_AT_CDMA) },
1864 1866
1867 { USB_DEVICE(0x1519, 0x0452), /* Intel 7260 modem */
1868 .driver_info = SEND_ZERO_PACKET,
1869 },
1870
1865 { } 1871 { }
1866}; 1872};
1867 1873
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 {
134#define IGNORE_DEVICE BIT(5) 134#define IGNORE_DEVICE BIT(5)
135#define QUIRK_CONTROL_LINE_STATE BIT(6) 135#define QUIRK_CONTROL_LINE_STATE BIT(6)
136#define CLEAR_HALT_CONDITIONS BIT(7) 136#define CLEAR_HALT_CONDITIONS BIT(7)
137#define SEND_ZERO_PACKET BIT(8)