lkml.org 
[lkml]   [2020]   [Jan]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 044/222] USB: serial: option: Add support for Quectel RM500Q
    Date
    From: Kristian Evensen <kristian.evensen@gmail.com>

    commit accf227de4d211b52c830a58b2df00d5739f2389 upstream.

    RM500Q is a 5G module from Quectel, supporting both standalone and
    non-standalone modes. Unlike other recent Quectel modems, it is possible
    to identify the diagnostic interface (bInterfaceProtocol is unique).
    Thus, there is no need to check for the number of endpoints or reserve
    interfaces. The interface number is still dynamic though, so matching on
    interface number is not possible and two entries have to be added to the
    table.

    Output from usb-devices with all interfaces enabled (order is diag,
    nmea, at_port, modem, rmnet and adb):

    Bus 004 Device 007: ID 2c7c:0800 Quectel Wireless Solutions Co., Ltd.
    Device Descriptor:
    bLength 18
    bDescriptorType 1
    bcdUSB 3.20
    bDeviceClass 0 (Defined at Interface level)
    bDeviceSubClass 0
    bDeviceProtocol 0
    bMaxPacketSize0 9
    idVendor 0x2c7c Quectel Wireless Solutions Co., Ltd.
    idProduct 0x0800
    bcdDevice 4.14
    iManufacturer 1 Quectel
    iProduct 2 LTE-A Module
    iSerial 3 40046d60
    bNumConfigurations 1
    Configuration Descriptor:
    bLength 9
    bDescriptorType 2
    wTotalLength 328
    bNumInterfaces 6
    bConfigurationValue 1
    iConfiguration 4 DIAG_SER_RMNET
    bmAttributes 0xa0
    (Bus Powered)
    Remote Wakeup
    MaxPower 224mA
    Interface Descriptor:
    bLength 9
    bDescriptorType 4
    bInterfaceNumber 0
    bAlternateSetting 0
    bNumEndpoints 2
    bInterfaceClass 255 Vendor Specific Class
    bInterfaceSubClass 255 Vendor Specific Subclass
    bInterfaceProtocol 48
    iInterface 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x81 EP 1 IN
    bmAttributes 2
    Transfer Type Bulk
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0400 1x 1024 bytes
    bInterval 0
    bMaxBurst 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x01 EP 1 OUT
    bmAttributes 2
    Transfer Type Bulk
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0400 1x 1024 bytes
    bInterval 0
    bMaxBurst 0
    Interface Descriptor:
    bLength 9
    bDescriptorType 4
    bInterfaceNumber 1
    bAlternateSetting 0
    bNumEndpoints 3
    bInterfaceClass 255 Vendor Specific Class
    bInterfaceSubClass 0
    bInterfaceProtocol 0
    iInterface 0
    ** UNRECOGNIZED: 05 24 00 10 01
    ** UNRECOGNIZED: 05 24 01 00 00
    ** UNRECOGNIZED: 04 24 02 02
    ** UNRECOGNIZED: 05 24 06 00 00
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x83 EP 3 IN
    bmAttributes 3
    Transfer Type Interrupt
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x000a 1x 10 bytes
    bInterval 9
    bMaxBurst 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x82 EP 2 IN
    bmAttributes 2
    Transfer Type Bulk
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0400 1x 1024 bytes
    bInterval 0
    bMaxBurst 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x02 EP 2 OUT
    bmAttributes 2
    Transfer Type Bulk
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0400 1x 1024 bytes
    bInterval 0
    bMaxBurst 0
    Interface Descriptor:
    bLength 9
    bDescriptorType 4
    bInterfaceNumber 2
    bAlternateSetting 0
    bNumEndpoints 3
    bInterfaceClass 255 Vendor Specific Class
    bInterfaceSubClass 0
    bInterfaceProtocol 0
    iInterface 0
    ** UNRECOGNIZED: 05 24 00 10 01
    ** UNRECOGNIZED: 05 24 01 00 00
    ** UNRECOGNIZED: 04 24 02 02
    ** UNRECOGNIZED: 05 24 06 00 00
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x85 EP 5 IN
    bmAttributes 3
    Transfer Type Interrupt
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x000a 1x 10 bytes
    bInterval 9
    bMaxBurst 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x84 EP 4 IN
    bmAttributes 2
    Transfer Type Bulk
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0400 1x 1024 bytes
    bInterval 0
    bMaxBurst 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x03 EP 3 OUT
    bmAttributes 2
    Transfer Type Bulk
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0400 1x 1024 bytes
    bInterval 0
    bMaxBurst 0
    Interface Descriptor:
    bLength 9
    bDescriptorType 4
    bInterfaceNumber 3
    bAlternateSetting 0
    bNumEndpoints 3
    bInterfaceClass 255 Vendor Specific Class
    bInterfaceSubClass 0
    bInterfaceProtocol 0
    iInterface 0
    ** UNRECOGNIZED: 05 24 00 10 01
    ** UNRECOGNIZED: 05 24 01 00 00
    ** UNRECOGNIZED: 04 24 02 02
    ** UNRECOGNIZED: 05 24 06 00 00
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x87 EP 7 IN
    bmAttributes 3
    Transfer Type Interrupt
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x000a 1x 10 bytes
    bInterval 9
    bMaxBurst 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x86 EP 6 IN
    bmAttributes 2
    Transfer Type Bulk
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0400 1x 1024 bytes
    bInterval 0
    bMaxBurst 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x04 EP 4 OUT
    bmAttributes 2
    Transfer Type Bulk
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0400 1x 1024 bytes
    bInterval 0
    bMaxBurst 0
    Interface Descriptor:
    bLength 9
    bDescriptorType 4
    bInterfaceNumber 4
    bAlternateSetting 0
    bNumEndpoints 3
    bInterfaceClass 255 Vendor Specific Class
    bInterfaceSubClass 255 Vendor Specific Subclass
    bInterfaceProtocol 255 Vendor Specific Protocol
    iInterface 5 CDEV Serial
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x88 EP 8 IN
    bmAttributes 3
    Transfer Type Interrupt
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0008 1x 8 bytes
    bInterval 9
    bMaxBurst 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x8e EP 14 IN
    bmAttributes 2
    Transfer Type Bulk
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0400 1x 1024 bytes
    bInterval 0
    bMaxBurst 6
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x0f EP 15 OUT
    bmAttributes 2
    Transfer Type Bulk
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0400 1x 1024 bytes
    bInterval 0
    bMaxBurst 2
    Interface Descriptor:
    bLength 9
    bDescriptorType 4
    bInterfaceNumber 5
    bAlternateSetting 0
    bNumEndpoints 2
    bInterfaceClass 255 Vendor Specific Class
    bInterfaceSubClass 66
    bInterfaceProtocol 1
    iInterface 6 ADB Interface
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x05 EP 5 OUT
    bmAttributes 2
    Transfer Type Bulk
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0400 1x 1024 bytes
    bInterval 0
    bMaxBurst 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x89 EP 9 IN
    bmAttributes 2
    Transfer Type Bulk
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0400 1x 1024 bytes
    bInterval 0
    bMaxBurst 0
    Binary Object Store Descriptor:
    bLength 5
    bDescriptorType 15
    wTotalLength 42
    bNumDeviceCaps 3
    USB 2.0 Extension Device Capability:
    bLength 7
    bDescriptorType 16
    bDevCapabilityType 2
    bmAttributes 0x00000006
    Link Power Management (LPM) Supported
    SuperSpeed USB Device Capability:
    bLength 10
    bDescriptorType 16
    bDevCapabilityType 3
    bmAttributes 0x00
    wSpeedsSupported 0x000f
    Device can operate at Low Speed (1Mbps)
    Device can operate at Full Speed (12Mbps)
    Device can operate at High Speed (480Mbps)
    Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport 1
    Lowest fully-functional device speed is Full Speed (12Mbps)
    bU1DevExitLat 1 micro seconds
    bU2DevExitLat 500 micro seconds
    ** UNRECOGNIZED: 14 10 0a 00 01 00 00 00 00 11 00 00 30 40 0a 00 b0 40 0a 00
    Device Status: 0x0000
    (Bus Powered)

    Signed-off-by: Kristian Evensen <kristian.evensen@gmail.com>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/serial/option.c | 4 ++++
    1 file changed, 4 insertions(+)

    --- a/drivers/usb/serial/option.c
    +++ b/drivers/usb/serial/option.c
    @@ -248,6 +248,7 @@ static void option_instat_callback(struc
    #define QUECTEL_PRODUCT_BG96 0x0296
    #define QUECTEL_PRODUCT_EP06 0x0306
    #define QUECTEL_PRODUCT_EM12 0x0512
    +#define QUECTEL_PRODUCT_RM500Q 0x0800

    #define CMOTECH_VENDOR_ID 0x16d8
    #define CMOTECH_PRODUCT_6001 0x6001
    @@ -1104,6 +1105,9 @@ static const struct usb_device_id option
    { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0xff, 0xff),
    .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 },
    { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0, 0) },
    + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x30) },
    + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) },
    +
    { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
    { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
    { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003),

    \
     
     \ /
      Last update: 2020-01-22 14:19    [W:3.401 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site