123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- From 128524b9db3e4f4245226852bee771bd03db75be Mon Sep 17 00:00:00 2001
- From: =?UTF-8?q?Petr=20=C5=A0tetiar?= <ynezz@true.cz>
- Date: Tue, 3 Nov 2015 11:01:42 +0100
- Subject: [PATCH 1/2] USB: qcserial: Add support for Quectel EC20 Mini PCIe
- module
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- It seems like 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 which makes it currently unusable:
- usbcore: registered new interface driver qcserial
- usbserial: USB Serial support registered for Qualcomm USB modem
- usb 2-1.2: unknown number of interfaces: 5
- lsusb output:
- Bus 002 Device 003: ID 05c6:9215 Qualcomm, Inc. Acer Gobi 2000 Wireless
- 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>
- ---
- drivers/usb/serial/qcserial.c | 39 +++++++++++++++++++++++++++++++++++++++
- 1 file changed, 39 insertions(+)
- --- a/drivers/usb/serial/qcserial.c
- +++ b/drivers/usb/serial/qcserial.c
- @@ -22,6 +22,8 @@
- #define DRIVER_AUTHOR "Qualcomm Inc"
- #define DRIVER_DESC "Qualcomm USB Serial driver"
-
- +#define QUECTEL_EC20_IDPRODUCT 0x9215
- +
- /* standard device layouts supported by this driver */
- enum qcserial_layouts {
- QCSERIAL_G2K = 0, /* Gobi 2000 */
- @@ -181,6 +183,38 @@ static const struct usb_device_id id_tab
- };
- MODULE_DEVICE_TABLE(usb, id_table);
-
- +static int handle_quectel_ec20(struct device *dev, int ifnum)
- +{
- + int altsetting = 0;
- +
- + /*
- + * Quectel EC20 Mini PCIe LTE module layout:
- + * 0: DM/DIAG (use libqcdm from ModemManager for communication)
- + * 1: NMEA
- + * 2: AT-capable modem port
- + * 3: Modem interface
- + * 4: NDIS
- + */
- + switch (ifnum) {
- + case 0:
- + dev_dbg(dev, "Quectel EC20 DM/DIAG interface found\n");
- + break;
- + case 1:
- + dev_dbg(dev, "Quectel EC20 NMEA GPS interface found\n");
- + break;
- + case 2:
- + case 3:
- + dev_dbg(dev, "Quectel EC20 Modem port found\n");
- + break;
- + case 4:
- + /* Don't claim the QMI/net interface */
- + altsetting = -1;
- + break;
- + }
- +
- + return altsetting;
- +}
- +
- static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
- {
- struct usb_host_interface *intf = serial->interface->cur_altsetting;
- @@ -249,6 +283,11 @@ static int qcprobe(struct usb_serial *se
- altsetting = -1;
- break;
- case QCSERIAL_G2K:
- + if (nintf == 5 && id->idProduct == QUECTEL_EC20_IDPRODUCT) {
- + altsetting = handle_quectel_ec20(dev, ifnum);
- + goto done;
- + }
- +
- /*
- * Gobi 2K+ USB layout:
- * 0: QMI/net
|