]> git.hungrycats.org Git - linux/commitdiff
usb: cdc-acm: send zero packet for intel 7260 modem
authorLu Baolu <baolu.lu@linux.intel.com>
Wed, 6 Jan 2016 07:10:04 +0000 (15:10 +0800)
committerBen Hutchings <ben@decadent.org.uk>
Sat, 27 Feb 2016 14:28:42 +0000 (14:28 +0000)
commit ffdb1e369a73b380fce95b05f8498d92c43842b4 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/usb/class/cdc-acm.c
drivers/usb/class/cdc-acm.h

index 660c3349ea73cb66600400e2fb461c41fe5f0259..50a38e90e89b3aa3e8a56f3002356645c5f9ddb8 100644 (file)
@@ -1237,6 +1237,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;
        }
 
@@ -1689,6 +1691,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,
+       },
+
        { }
 };
 
index 9af5ad24c7b914e56a8f764e047c95de8194ef47..dfd66bb5977aa5b639bcf17541be6fb8117bb422 100644 (file)
@@ -129,3 +129,4 @@ struct acm {
 #define NO_DATA_INTERFACE              16
 #define IGNORE_DEVICE                  32
 #define CLEAR_HALT_CONDITIONS          BIT(7)
+#define SEND_ZERO_PACKET               BIT(8)