]> git.ipfire.org Git - thirdparty/kernel/stable.git/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)
committerSasha Levin <sasha.levin@oracle.com>
Mon, 15 Feb 2016 20:45:20 +0000 (15:45 -0500)
[ Upstream commit ffdb1e369a73b380fce95b05f8498d92c43842b4 ]

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>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
drivers/usb/class/cdc-acm.c
drivers/usb/class/cdc-acm.h

index 2bf51b27959b590e4b82d861c1209c7f3a111cd6..8bfcf208c61970b2e0bc8e33dad1f38a139abf0b 100644 (file)
@@ -1415,6 +1415,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;
        }
 
@@ -1872,6 +1874,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 b3b6c9db6fe5bd30711faa8a834f2233f859c708..ac830e0ae38ba46a6d21e54e71c6301b61c5d263 100644 (file)
@@ -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)