| From 07989eb981d862f7f2be68d233d753f2e7ccc119 Mon Sep 17 00:00:00 2001 |
| From: Sven Schwermer <sven.schwermer@disruptive-technologies.com> |
| Date: Mon, 25 Apr 2022 16:34:50 +0200 |
| Subject: USB: serial: option: add Fibocom MA510 modem |
| |
| From: Sven Schwermer <sven.schwermer@disruptive-technologies.com> |
| |
| commit 07989eb981d862f7f2be68d233d753f2e7ccc119 upstream. |
| |
| The MA510 modem has 3 USB configurations that are configurable via the AT |
| command AT+GTUSBMODE={30,31,32} which make the modem enumerate with the |
| following interfaces, respectively: |
| |
| 30: Diag + QDSS + Modem + RMNET |
| 31: Diag + Modem + AT + ECM |
| 32: Modem + AT + ECM |
| |
| The first configuration (30) reuses u-blox R410M's VID/PID with |
| identical interface configuration. |
| |
| A detailed description of the USB configuration for each mode follows: |
| |
| +GTUSBMODE: 30 |
| -------------- |
| T: Bus=03 Lev=01 Prnt=01 Port=06 Cnt=04 Dev#= 19 Spd=480 MxCh= 0 |
| D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 |
| P: Vendor=05c6 ProdID=90b2 Rev= 0.00 |
| S: Manufacturer=Fibocom MA510 Modem |
| S: Product=Fibocom MA510 Modem |
| S: SerialNumber=55e2695b |
| C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA |
| I:* If#= 0 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#= 1 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) |
| E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| E: Ad=83(I) Atr=03(Int.) MxPS= 64 Ivl=2ms |
| E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan |
| E: Ad=85(I) Atr=03(Int.) MxPS= 64 Ivl=2ms |
| E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| |
| +GTUSBMODE: 31 |
| -------------- |
| T: Bus=03 Lev=01 Prnt=01 Port=06 Cnt=04 Dev#= 99 Spd=480 MxCh= 0 |
| D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 |
| P: Vendor=2cb7 ProdID=0106 Rev= 0.00 |
| S: Manufacturer=Fibocom MA510 Modem |
| S: Product=Fibocom MA510 Modem |
| S: SerialNumber=55e2695b |
| C:* #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA |
| A: FirstIf#= 3 IfCount= 2 Cls=02(comm.) Sub=00 Prot=00 |
| I:* If#= 0 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#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| E: Ad=82(I) Atr=03(Int.) MxPS= 64 Ivl=2ms |
| E: Ad=83(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=fe Prot=ff Driver=option |
| E: Ad=84(I) Atr=03(Int.) MxPS= 64 Ivl=2ms |
| E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| I:* If#= 3 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=00 Driver=cdc_ether |
| E: Ad=86(I) Atr=03(Int.) MxPS= 64 Ivl=2ms |
| I: If#= 4 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether |
| I:* If#= 4 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether |
| E: Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| |
| +GTUSBMODE: 32 |
| -------------- |
| T: Bus=03 Lev=01 Prnt=01 Port=06 Cnt=04 Dev#=100 Spd=480 MxCh= 0 |
| D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 |
| P: Vendor=2cb7 ProdID=010a Rev= 0.00 |
| S: Manufacturer=Fibocom MA510 Modem |
| S: Product=Fibocom MA510 Modem |
| S: SerialNumber=55e2695b |
| C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA |
| A: FirstIf#= 2 IfCount= 2 Cls=02(comm.) Sub=00 Prot=00 |
| I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=2ms |
| E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| I:* If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=fe Prot=ff Driver=option |
| E: Ad=83(I) Atr=03(Int.) MxPS= 64 Ivl=2ms |
| E: Ad=84(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= 1 Cls=02(comm.) Sub=06 Prot=00 Driver=cdc_ether |
| E: Ad=85(I) Atr=03(Int.) MxPS= 64 Ivl=2ms |
| I: If#= 3 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether |
| I:* If#= 3 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether |
| E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |
| |
| Signed-off-by: Sven Schwermer <sven.schwermer@disruptive-technologies.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 | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/drivers/usb/serial/option.c |
| +++ b/drivers/usb/serial/option.c |
| @@ -2131,6 +2131,8 @@ static const struct usb_device_id option |
| .driver_info = RSVD(4) | RSVD(5) }, |
| { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0105, 0xff), /* Fibocom NL678 series */ |
| .driver_info = RSVD(6) }, |
| + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0106, 0xff) }, /* Fibocom MA510 (ECM mode w/ diag intf.) */ |
| + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x010a, 0xff) }, /* Fibocom MA510 (ECM mode) */ |
| { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0xff, 0x30) }, /* Fibocom FG150 Diag */ |
| { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0, 0) }, /* Fibocom FG150 AT */ |
| { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */ |