| From 6c331f32e32ac71eb3e8b93fceda2802d7ecb889 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Duke=20Xin=28=E8=BE=9B=E5=AE=89=E6=96=87=29?= |
| <duke_xinanwen@163.com> |
| Date: Tue, 27 Dec 2022 01:44:30 -0800 |
| Subject: USB: serial: option: add Quectel EM05-G (GR) modem |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Duke Xin(辛安文) <duke_xinanwen@163.com> |
| |
| commit 6c331f32e32ac71eb3e8b93fceda2802d7ecb889 upstream. |
| |
| The EM05-G (GR) modem has 2 USB configurations that are configurable via |
| the AT command AT+QCFG="usbnet",[ 0 | 2 ] which make the modem enumerate |
| with the following interfaces, respectively: |
| |
| "RMNET" : AT + DIAG + NMEA + Modem + QMI |
| "MBIM" : MBIM + AT + DIAG + NMEA + Modem |
| |
| The detailed description of the USB configuration for each mode as follows: |
| |
| RMNET Mode |
| -------------- |
| T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 21 Spd=480 MxCh= 0 |
| D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 |
| P: Vendor=2c7c ProdID=0313 Rev= 3.18 |
| S: Manufacturer=Quectel |
| S: Product=Quectel EM05-G |
| C:* #Ifs= 5 Cfg#= 1 Atr=a0 MxPwr=500mA |
| I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option |
| E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms |
| E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option |
| E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms |
| E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| I:* If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option |
| E: Ad=87(I) Atr=03(Int.) MxPS= 10 Ivl=32ms |
| E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| I:* If#= 6 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) |
| E: Ad=89(I) Atr=03(Int.) MxPS= 8 Ivl=32ms |
| E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| |
| MBIM Mode |
| -------------- |
| T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 16 Spd=480 MxCh= 0 |
| D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 |
| P: Vendor=2c7c ProdID=0313 Rev= 3.18 |
| S: Manufacturer=Quectel |
| S: Product=Quectel EM05-G |
| C:* #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA |
| A: FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00 |
| I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option |
| E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms |
| E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option |
| E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms |
| E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| I:* If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option |
| E: Ad=87(I) Atr=03(Int.) MxPS= 10 Ivl=32ms |
| E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim |
| E: Ad=89(I) Atr=03(Int.) MxPS= 64 Ivl=32ms |
| I: If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim |
| I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim |
| E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| |
| Signed-off-by: Duke Xin(辛安文) <duke_xinanwen@163.com> |
| Cc: 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 | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/drivers/usb/serial/option.c |
| +++ b/drivers/usb/serial/option.c |
| @@ -256,6 +256,7 @@ static void option_instat_callback(struc |
| #define QUECTEL_PRODUCT_EM05G 0x030a |
| #define QUECTEL_PRODUCT_EM060K 0x030b |
| #define QUECTEL_PRODUCT_EM05G_SG 0x0311 |
| +#define QUECTEL_PRODUCT_EM05G_GR 0x0313 |
| #define QUECTEL_PRODUCT_EM12 0x0512 |
| #define QUECTEL_PRODUCT_RM500Q 0x0800 |
| #define QUECTEL_PRODUCT_RM520N 0x0801 |
| @@ -1161,6 +1162,8 @@ static const struct usb_device_id option |
| { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0, 0) }, |
| { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G, 0xff), |
| .driver_info = RSVD(6) | ZLP }, |
| + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_GR, 0xff), |
| + .driver_info = RSVD(6) | ZLP }, |
| { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_SG, 0xff), |
| .driver_info = RSVD(6) | ZLP }, |
| { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0x00, 0x40) }, |