lkml.org 
[lkml]   [2016]   [Apr]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 38/78] USB: qmi_wwan: Add quirk for Quectel EC20 Mini PCIe module
    Date
    From: Petr Štetiar <ynezz@true.cz>

    3.12-stable review patch. If anyone has any objections, please let me know.

    ===============

    commit b3d8cf019fb9dd28389b08da7bf54ffabf453ed3 upstream.

    This device has same vendor and product IDs as G2K devices, but it has
    different number of interfaces(4 vs 5) and also different interface
    layout where EC20 has QMI on interface 4 instead of 0.

    lsusb output:

    Bus 002 Device 003: ID 05c6:9215 Qualcomm, Inc. Acer Gobi 2000
    Device Descriptor:
    bLength 18
    bDescriptorType 1
    bcdUSB 2.00
    bDeviceClass 0 (Defined at Interface level)
    bDeviceSubClass 0
    bDeviceProtocol 0
    bMaxPacketSize0 64
    idVendor 0x05c6 Qualcomm, Inc.
    idProduct 0x9215 Acer Gobi 2000 Wireless Modem
    bcdDevice 2.32
    iManufacturer 1 Quectel
    iProduct 2 Quectel LTE Module
    iSerial 0
    bNumConfigurations 1
    Configuration Descriptor:
    bLength 9
    bDescriptorType 2
    wTotalLength 209
    bNumInterfaces 5
    bConfigurationValue 1
    iConfiguration 0
    bmAttributes 0xa0
    (Bus Powered)
    Remote Wakeup
    MaxPower 500mA

    Signed-off-by: Petr Štetiar <ynezz@true.cz>
    Acked-by: Bjørn Mork <bjorn@mork.no>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    ---
    drivers/net/usb/qmi_wwan.c | 21 +++++++++++++++++++++
    1 file changed, 21 insertions(+)

    diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
    index 3e146ee2f2a9..18101e3fcd04 100644
    --- a/drivers/net/usb/qmi_wwan.c
    +++ b/drivers/net/usb/qmi_wwan.c
    @@ -817,6 +817,7 @@ static const struct usb_device_id products[] = {
    {QMI_GOBI_DEVICE(0x05c6, 0x9245)}, /* Samsung Gobi 2000 Modem device (VL176) */
    {QMI_GOBI_DEVICE(0x03f0, 0x251d)}, /* HP Gobi 2000 Modem device (VP412) */
    {QMI_GOBI_DEVICE(0x05c6, 0x9215)}, /* Acer Gobi 2000 Modem device (VP413) */
    + {QMI_FIXED_INTF(0x05c6, 0x9215, 4)}, /* Quectel EC20 Mini PCIe */
    {QMI_GOBI_DEVICE(0x05c6, 0x9265)}, /* Asus Gobi 2000 Modem device (VR305) */
    {QMI_GOBI_DEVICE(0x05c6, 0x9235)}, /* Top Global Gobi 2000 Modem device (VR306) */
    {QMI_GOBI_DEVICE(0x05c6, 0x9275)}, /* iRex Technologies Gobi 2000 Modem device (VR307) */
    @@ -848,9 +849,23 @@ static const struct usb_device_id products[] = {
    };
    MODULE_DEVICE_TABLE(usb, products);

    +static bool quectel_ec20_detected(struct usb_interface *intf)
    +{
    + struct usb_device *dev = interface_to_usbdev(intf);
    +
    + if (dev->actconfig &&
    + le16_to_cpu(dev->descriptor.idVendor) == 0x05c6 &&
    + le16_to_cpu(dev->descriptor.idProduct) == 0x9215 &&
    + dev->actconfig->desc.bNumInterfaces == 5)
    + return true;
    +
    + return false;
    +}
    +
    static int qmi_wwan_probe(struct usb_interface *intf, const struct usb_device_id *prod)
    {
    struct usb_device_id *id = (struct usb_device_id *)prod;
    + struct usb_interface_descriptor *desc = &intf->cur_altsetting->desc;

    /* Workaround to enable dynamic IDs. This disables usbnet
    * blacklisting functionality. Which, if required, can be
    @@ -862,6 +877,12 @@ static int qmi_wwan_probe(struct usb_interface *intf, const struct usb_device_id
    id->driver_info = (unsigned long)&qmi_wwan_info;
    }

    + /* Quectel EC20 quirk where we've QMI on interface 4 instead of 0 */
    + if (quectel_ec20_detected(intf) && desc->bInterfaceNumber == 0) {
    + dev_dbg(&intf->dev, "Quectel EC20 quirk, skipping interface 0\n");
    + return -ENODEV;
    + }
    +
    return usbnet_probe(intf, id);
    }

    --
    2.8.1
    \
     
     \ /
      Last update: 2016-04-22 13:41    [W:5.176 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site