| From 1ac698790819b83f39fd7ea4f6cdabee9bdd7b38 Mon Sep 17 00:00:00 2001 |
| From: Aleksander Morgado <aleksander@aleksander.es> |
| Date: Sat, 29 Aug 2020 11:05:39 +0200 |
| Subject: USB: serial: option: add support for SIM7070/SIM7080/SIM7090 modules |
| |
| From: Aleksander Morgado <aleksander@aleksander.es> |
| |
| commit 1ac698790819b83f39fd7ea4f6cdabee9bdd7b38 upstream. |
| |
| These modules have 2 different USB layouts: |
| |
| The default layout with PID 0x9205 (AT+CUSBSELNV=1) exposes 4 TTYs and |
| an ECM interface: |
| |
| T: Bus=02 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 6 Spd=480 MxCh= 0 |
| D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 |
| P: Vendor=1e0e ProdID=9205 Rev=00.00 |
| S: Manufacturer=SimTech, Incorporated |
| S: Product=SimTech SIM7080 |
| S: SerialNumber=1234567890ABCDEF |
| C: #Ifs= 6 Cfg#= 1 Atr=e0 MxPwr=500mA |
| I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| I: If#=0x2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| I: If#=0x3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| I: If#=0x4 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether |
| I: If#=0x5 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether |
| |
| The purpose of each TTY is as follows: |
| * ttyUSB0: DIAG/QCDM port. |
| * ttyUSB1: GNSS data. |
| * ttyUSB2: AT-capable port (control). |
| * ttyUSB3: AT-capable port (data). |
| |
| In the secondary layout with PID=0x9206 (AT+CUSBSELNV=86) the module |
| exposes 6 TTY ports: |
| |
| T: Bus=02 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 8 Spd=480 MxCh= 0 |
| D: Ver= 2.00 Cls=02(commc) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 |
| P: Vendor=1e0e ProdID=9206 Rev=00.00 |
| S: Manufacturer=SimTech, Incorporated |
| S: Product=SimTech SIM7080 |
| S: SerialNumber=1234567890ABCDEF |
| C: #Ifs= 6 Cfg#= 1 Atr=e0 MxPwr=500mA |
| I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| I: If#=0x2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| I: If#=0x3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| I: If#=0x4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| I: If#=0x5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option |
| |
| The purpose of each TTY is as follows: |
| * ttyUSB0: DIAG/QCDM port. |
| * ttyUSB1: GNSS data. |
| * ttyUSB2: AT-capable port (control). |
| * ttyUSB3: QFLOG interface. |
| * ttyUSB4: DAM interface. |
| * ttyUSB5: AT-capable port (data). |
| |
| Signed-off-by: Aleksander Morgado <aleksander@aleksander.es> |
| 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 |
| @@ -1823,6 +1823,8 @@ static const struct usb_device_id option |
| { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9003, 0xff) }, /* Simcom SIM7500/SIM7600 MBIM mode */ |
| { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9011, 0xff), /* Simcom SIM7500/SIM7600 RNDIS mode */ |
| .driver_info = RSVD(7) }, |
| + { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9205, 0xff) }, /* Simcom SIM7070/SIM7080/SIM7090 AT+ECM mode */ |
| + { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9206, 0xff) }, /* Simcom SIM7070/SIM7080/SIM7090 AT-only mode */ |
| { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200), |
| .driver_info = NCTRL(0) | NCTRL(1) | RSVD(4) }, |
| { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D), |