]> 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)
committerLuis Henriques <luis.henriques@canonical.com>
Wed, 17 Feb 2016 10:22:30 +0000 (10:22 +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: Luis Henriques <luis.henriques@canonical.com>
drivers/usb/class/cdc-acm.c
drivers/usb/class/cdc-acm.h

index 9cda90098a57d81147893eae5927429b44823551..868852fd1f703fc5b38e501d787aeab583472a80 100644 (file)
@@ -1418,6 +1418,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;
        }
 
@@ -1880,6 +1882,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 9cca2e7280bb7cc0309d500eaeb193627c060a86..70d24d7e9dc517994e244cd0d2e6f0a585e7a1fd 100644 (file)
@@ -135,3 +135,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)