hc
2024-01-31 f9004dbfff8a3fbbd7e2a88c8a4327c7f2f8e5b2
kernel/drivers/usb/serial/option.c
....@@ -197,7 +197,6 @@
197197 #define DELL_PRODUCT_5804_MINICARD_ATT 0x819b /* Novatel E371 */
198198
199199 #define DELL_PRODUCT_5821E 0x81d7
200
-#define DELL_PRODUCT_5821E_ESIM 0x81e0
201200
202201 #define KYOCERA_VENDOR_ID 0x0c88
203202 #define KYOCERA_PRODUCT_KPC650 0x17da
....@@ -245,12 +244,9 @@
245244 /* These Quectel products use Quectel's vendor ID */
246245 #define QUECTEL_PRODUCT_EC21 0x0121
247246 #define QUECTEL_PRODUCT_EC25 0x0125
248
-#define QUECTEL_PRODUCT_EG95 0x0195
249247 #define QUECTEL_PRODUCT_BG96 0x0296
250248 #define QUECTEL_PRODUCT_EP06 0x0306
251249 #define QUECTEL_PRODUCT_EM12 0x0512
252
-#define QUECTEL_PRODUCT_RM500Q 0x0800
253
-#define QUECTEL_PRODUCT_EC200T 0x6026
254250
255251 #define CMOTECH_VENDOR_ID 0x16d8
256252 #define CMOTECH_PRODUCT_6001 0x6001
....@@ -419,12 +415,10 @@
419415 #define CINTERION_PRODUCT_PH8 0x0053
420416 #define CINTERION_PRODUCT_AHXX 0x0055
421417 #define CINTERION_PRODUCT_PLXX 0x0060
422
-#define CINTERION_PRODUCT_EXS82 0x006c
423418 #define CINTERION_PRODUCT_PH8_2RMNET 0x0082
424419 #define CINTERION_PRODUCT_PH8_AUDIO 0x0083
425420 #define CINTERION_PRODUCT_AHXX_2RMNET 0x0084
426421 #define CINTERION_PRODUCT_AHXX_AUDIO 0x0085
427
-#define CINTERION_PRODUCT_CLS8 0x00b0
428422
429423 /* Olivetti products */
430424 #define OLIVETTI_VENDOR_ID 0x0b3c
....@@ -530,7 +524,6 @@
530524 /* Cellient products */
531525 #define CELLIENT_VENDOR_ID 0x2692
532526 #define CELLIENT_PRODUCT_MEN200 0x9005
533
-#define CELLIENT_PRODUCT_MPL200 0x9025
534527
535528 /* Hyundai Petatel Inc. products */
536529 #define PETATEL_VENDOR_ID 0x1ff4
....@@ -563,9 +556,6 @@
563556
564557 /* Device flags */
565558
566
-/* Highest interface number which can be used with NCTRL() and RSVD() */
567
-#define FLAG_IFNUM_MAX 7
568
-
569559 /* Interface does not support modem-control requests */
570560 #define NCTRL(ifnum) ((BIT(ifnum) & 0xff) << 8)
571561
....@@ -575,17 +565,8 @@
575565 /* Interface must have two endpoints */
576566 #define NUMEP2 BIT(16)
577567
578
-/* Device needs ZLP */
579
-#define ZLP BIT(17)
580
-
581568
582569 static const struct usb_device_id option_ids[] = {
583
-#if 1
584
- { USB_DEVICE( 0x2cb7, 0x0a04 ) }, /* Fibocom FG650 ECM */
585
- { USB_DEVICE( 0x2cb7, 0x0a05 ) }, /* Fibocom FG650 NCM */
586
- { USB_DEVICE( 0x2cb7, 0x0a06 ) }, /* Fibocom FG650 RNDIS*/
587
-#endif
588
-
589570 #if 1 //Added by Quectel
590571 { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */
591572 { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */
....@@ -595,25 +576,23 @@
595576 { USB_DEVICE(0x2C7C, 0x0191) }, /* Quectel EG91 */
596577 { USB_DEVICE(0x2C7C, 0x0195) }, /* Quectel EG95 */
597578 { USB_DEVICE(0x2C7C, 0x0306) }, /* Quectel EG06/EP06/EM06 */
579
+ { USB_DEVICE(0x2C7C, 0x030B) }, /* Quectel EG065K/EG060K */
580
+ { USB_DEVICE(0x2C7C, 0x0514) }, /* Quectel BL EG060K RNDIS Only */
598581 { USB_DEVICE(0x2C7C, 0x0512) }, /* Quectel EG12/EP12/EM12/EG16/EG18 */
599582 { USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG96 */
600583 { USB_DEVICE(0x2C7C, 0x0700) }, /* Quectel BG95/BG77/BG600L-M3/BC69 */
601584 { USB_DEVICE(0x2C7C, 0x0435) }, /* Quectel AG35 */
602585 { USB_DEVICE(0x2C7C, 0x0415) }, /* Quectel AG15 */
603
- { USB_DEVICE(0x2C7C, 0x0520) }, /* Quectel AG520 */
604
- { USB_DEVICE(0x2C7C, 0x0550) }, /* Quectel AG550 */
586
+ { USB_DEVICE(0x2C7C, 0x0452) }, /* Quectel AG520 */
587
+ { USB_DEVICE(0x2C7C, 0x0455) }, /* Quectel AG550 */
605588 { USB_DEVICE(0x2C7C, 0x0620) }, /* Quectel EG20 */
606589 { USB_DEVICE(0x2C7C, 0x0800) }, /* Quectel RG500/RM500/RG510/RM510 */
590
+ { USB_DEVICE(0x2C7C, 0x0801) }, /* Quectel RG520/RM520/SG520 */
607591 { USB_DEVICE(0x2C7C, 0x6026) }, /* Quectel EC200 */
608592 { USB_DEVICE(0x2C7C, 0x6120) }, /* Quectel UC200 */
609593 { USB_DEVICE(0x2C7C, 0x6000) }, /* Quectel EC200/UC200 */
610
- { USB_DEVICE(0x2C7C, 0x6002) }, /* Quectel EC200/UC200 */
594
+ { .match_flags = USB_DEVICE_ID_MATCH_VENDOR, .idVendor = 0x2C7C }, /* Match All Quectel Modules */
611595 #endif
612
- { USB_DEVICE(0x19d2, 0x0199) }, /* ZTE ME3860 ME3760_V2*/
613
- { USB_DEVICE(0x19d2, 0x1476) }, /* ZTE ME3620*/
614
- { USB_DEVICE(0x19d2, 0x0117) },
615
-
616
- { USB_DEVICE(0x1286, 0x4e3c) },
617596 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
618597 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
619598 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },
....@@ -1015,11 +994,6 @@
1015994 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7B) },
1016995 { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7C) },
1017996
1018
- /* Motorola devices */
1019
- { USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x2a70, 0xff, 0xff, 0xff) }, /* mdm6600 */
1020
- { USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x2e0a, 0xff, 0xff, 0xff) }, /* mdm9600 */
1021
- { USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x4281, 0x0a, 0x00, 0xfc) }, /* mdm ram dl */
1022
- { USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x900e, 0xff, 0xff, 0xff) }, /* mdm qc dl */
1023997
1024998 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) },
1025999 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) },
....@@ -1090,8 +1064,6 @@
10901064 { USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, DELL_PRODUCT_5804_MINICARD_ATT, 0xff, 0xff, 0xff) },
10911065 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5821E),
10921066 .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },
1093
- { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5821E_ESIM),
1094
- .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },
10951067 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */
10961068 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },
10971069 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) },
....@@ -1134,15 +1106,10 @@
11341106 { USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R410M),
11351107 .driver_info = RSVD(1) | RSVD(3) },
11361108 /* Quectel products using Quectel vendor ID */
1137
- { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21, 0xff, 0xff, 0xff),
1138
- .driver_info = NUMEP2 },
1139
- { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21, 0xff, 0, 0) },
1140
- { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25, 0xff, 0xff, 0xff),
1141
- .driver_info = NUMEP2 },
1142
- { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25, 0xff, 0, 0) },
1143
- { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0xff, 0xff),
1144
- .driver_info = NUMEP2 },
1145
- { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0, 0) },
1109
+ { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21),
1110
+ .driver_info = RSVD(4) },
1111
+ { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25),
1112
+ .driver_info = RSVD(4) },
11461113 { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
11471114 .driver_info = RSVD(4) },
11481115 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff),
....@@ -1151,14 +1118,6 @@
11511118 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0xff, 0xff),
11521119 .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 },
11531120 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0, 0) },
1154
- { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 0x0620, 0xff, 0xff, 0x30) }, /* EM160R-GL */
1155
- { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 0x0620, 0xff, 0, 0) },
1156
- { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x30) },
1157
- { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) },
1158
- { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10),
1159
- .driver_info = ZLP },
1160
- { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) },
1161
-
11621121 { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
11631122 { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
11641123 { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003),
....@@ -1206,10 +1165,6 @@
12061165 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) },
12071166 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) },
12081167 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UE910_V2) },
1209
- { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1031, 0xff), /* Telit LE910C1-EUX */
1210
- .driver_info = NCTRL(0) | RSVD(3) },
1211
- { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1033, 0xff), /* Telit LE910C1-EUX (ECM) */
1212
- .driver_info = NCTRL(0) },
12131168 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG0),
12141169 .driver_info = RSVD(0) | RSVD(1) | NCTRL(2) | RSVD(3) },
12151170 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG1),
....@@ -1220,32 +1175,14 @@
12201175 .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
12211176 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG5, 0xff),
12221177 .driver_info = RSVD(0) | RSVD(1) | NCTRL(2) | RSVD(3) },
1223
- { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1050, 0xff), /* Telit FN980 (rmnet) */
1224
- .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
1225
- { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1051, 0xff), /* Telit FN980 (MBIM) */
1226
- .driver_info = NCTRL(0) | RSVD(1) },
1227
- { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1052, 0xff), /* Telit FN980 (RNDIS) */
1228
- .driver_info = NCTRL(2) | RSVD(3) },
1229
- { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1053, 0xff), /* Telit FN980 (ECM) */
1230
- .driver_info = NCTRL(0) | RSVD(1) },
1231
- { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1054, 0xff), /* Telit FT980-KS */
1232
- .driver_info = NCTRL(2) | RSVD(3) },
1233
- { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1055, 0xff), /* Telit FN980 (PCIe) */
1234
- .driver_info = NCTRL(0) | RSVD(1) },
12351178 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),
12361179 .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) },
12371180 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
12381181 .driver_info = NCTRL(0) | RSVD(3) },
12391182 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1102, 0xff), /* Telit ME910 (ECM) */
12401183 .driver_info = NCTRL(0) },
1241
- { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x110a, 0xff), /* Telit ME910G1 */
1242
- .driver_info = NCTRL(0) | RSVD(3) },
1243
- { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x110b, 0xff), /* Telit ME910G1 (ECM) */
1244
- .driver_info = NCTRL(0) },
12451184 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),
12461185 .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
1247
- { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1203, 0xff), /* Telit LE910Cx (RNDIS) */
1248
- .driver_info = NCTRL(2) | RSVD(3) },
12491186 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
12501187 .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
12511188 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),
....@@ -1260,20 +1197,10 @@
12601197 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1213, 0xff) },
12611198 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1214),
12621199 .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
1263
- { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1230, 0xff), /* Telit LE910Cx (rmnet) */
1264
- .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
1265
- { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1231, 0xff), /* Telit LE910Cx (RNDIS) */
1266
- .driver_info = NCTRL(2) | RSVD(3) },
1267
- { USB_DEVICE(TELIT_VENDOR_ID, 0x1260),
1268
- .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
1269
- { USB_DEVICE(TELIT_VENDOR_ID, 0x1261),
1270
- .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
12711200 { USB_DEVICE(TELIT_VENDOR_ID, 0x1900), /* Telit LN940 (QMI) */
12721201 .driver_info = NCTRL(0) | RSVD(1) },
12731202 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1901, 0xff), /* Telit LN940 (MBIM) */
12741203 .driver_info = NCTRL(0) },
1275
- { USB_DEVICE(TELIT_VENDOR_ID, 0x9010), /* Telit SBL FN980 flashing device */
1276
- .driver_info = NCTRL(0) | ZLP },
12771204 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */
12781205 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0002, 0xff, 0xff, 0xff),
12791206 .driver_info = RSVD(1) },
....@@ -1438,7 +1365,6 @@
14381365 .driver_info = RSVD(4) },
14391366 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0414, 0xff, 0xff, 0xff) },
14401367 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0417, 0xff, 0xff, 0xff) },
1441
- { USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x0601, 0xff) }, /* GosunCn ZTE WeLink ME3630 (RNDIS mode) */
14421368 { USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x0602, 0xff) }, /* GosunCn ZTE WeLink ME3630 (MBIM mode) */
14431369 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1008, 0xff, 0xff, 0xff),
14441370 .driver_info = RSVD(4) },
....@@ -1644,7 +1570,6 @@
16441570 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1428, 0xff, 0xff, 0xff), /* Telewell TW-LTE 4G v2 */
16451571 .driver_info = RSVD(2) },
16461572 { USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x1476, 0xff) }, /* GosunCn ZTE WeLink ME3630 (ECM/NCM mode) */
1647
- { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1481, 0xff, 0x00, 0x00) }, /* ZTE MF871A */
16481573 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1533, 0xff, 0xff, 0xff) },
16491574 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1534, 0xff, 0xff, 0xff) },
16501575 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1535, 0xff, 0xff, 0xff) },
....@@ -1873,10 +1798,6 @@
18731798 { USB_DEVICE(ALINK_VENDOR_ID, SIMCOM_PRODUCT_SIM7100E),
18741799 .driver_info = RSVD(5) | RSVD(6) },
18751800 { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9003, 0xff) }, /* Simcom SIM7500/SIM7600 MBIM mode */
1876
- { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9011, 0xff), /* Simcom SIM7500/SIM7600 RNDIS mode */
1877
- .driver_info = RSVD(7) },
1878
- { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9205, 0xff) }, /* Simcom SIM7070/SIM7080/SIM7090 AT+ECM mode */
1879
- { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9206, 0xff) }, /* Simcom SIM7070/SIM7080/SIM7090 AT-only mode */
18801801 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200),
18811802 .driver_info = NCTRL(0) | NCTRL(1) | RSVD(4) },
18821803 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D),
....@@ -1939,9 +1860,6 @@
19391860 .driver_info = RSVD(4) },
19401861 { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX_2RMNET, 0xff) },
19411862 { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX_AUDIO, 0xff) },
1942
- { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_CLS8, 0xff),
1943
- .driver_info = RSVD(0) | RSVD(4) },
1944
- { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EXS82, 0xff) },
19451863 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) },
19461864 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },
19471865 { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) },
....@@ -2035,8 +1953,6 @@
20351953 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x02, 0x01) },
20361954 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) },
20371955 { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) },
2038
- { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MPL200),
2039
- .driver_info = RSVD(1) | RSVD(4) },
20401956 { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600A) },
20411957 { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600E) },
20421958 { USB_DEVICE_AND_INTERFACE_INFO(TPLINK_VENDOR_ID, TPLINK_PRODUCT_LTE, 0xff, 0x00, 0x00) }, /* TP-Link LTE Module */
....@@ -2055,20 +1971,10 @@
20551971 .driver_info = RSVD(4) },
20561972 { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e35, 0xff), /* D-Link DWM-222 */
20571973 .driver_info = RSVD(4) },
2058
- { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e3d, 0xff), /* D-Link DWM-222 A2 */
2059
- .driver_info = RSVD(4) },
20601974 { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */
20611975 { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */
20621976 { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x7e11, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/A3 */
2063
- { USB_DEVICE_INTERFACE_CLASS(0x1435, 0xd191, 0xff), /* Wistron Neweb D19Q1 */
2064
- .driver_info = RSVD(1) | RSVD(4) },
2065
- { USB_DEVICE_INTERFACE_CLASS(0x1690, 0x7588, 0xff), /* ASKEY WWHC050 */
2066
- .driver_info = RSVD(1) | RSVD(4) },
20671977 { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2031, 0xff), /* Olicard 600 */
2068
- .driver_info = RSVD(4) },
2069
- { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2033, 0xff), /* BroadMobi BM806U */
2070
- .driver_info = RSVD(4) },
2071
- { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2060, 0xff), /* BroadMobi BM818 */
20721978 .driver_info = RSVD(4) },
20731979 { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x4000, 0xff) }, /* OLICARD300 - MT6225 */
20741980 { USB_DEVICE(INOVIA_VENDOR_ID, INOVIA_SEW858) },
....@@ -2082,21 +1988,12 @@
20821988 { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x13) },
20831989 { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x14) },
20841990 { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x1b) },
2085
- { USB_DEVICE(0x0489, 0xe0b4), /* Foxconn T77W968 */
2086
- .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },
2087
- { USB_DEVICE(0x0489, 0xe0b5), /* Foxconn T77W968 ESIM */
2088
- .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },
2089
- { USB_DEVICE(0x1508, 0x1001), /* Fibocom NL668 (IOT version) */
1991
+ { USB_DEVICE(0x1508, 0x1001), /* Fibocom NL668 */
20901992 .driver_info = RSVD(4) | RSVD(5) | RSVD(6) },
20911993 { USB_DEVICE(0x2cb7, 0x0104), /* Fibocom NL678 series */
20921994 .driver_info = RSVD(4) | RSVD(5) },
20931995 { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0105, 0xff), /* Fibocom NL678 series */
20941996 .driver_info = RSVD(6) },
2095
- { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */
2096
- { USB_DEVICE_INTERFACE_CLASS(0x2df3, 0x9d03, 0xff) }, /* LongSung M5710 */
2097
- { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1404, 0xff) }, /* GosunCn GM500 RNDIS */
2098
- { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1405, 0xff) }, /* GosunCn GM500 MBIM */
2099
- { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1406, 0xff) }, /* GosunCn GM500 ECM/NCM */
21001997 { } /* Terminating entry */
21011998 };
21021999 MODULE_DEVICE_TABLE(usb, option_ids);
....@@ -2105,7 +2002,26 @@
21052002 * recognizes separately, thus num_port=1.
21062003 */
21072004
2005
+#if 1 //Added by Quectel
2006
+static void cfmakeraw(struct ktermios *t)
2007
+{
2008
+ t->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
2009
+ t->c_oflag &= ~OPOST;
2010
+ t->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
2011
+ t->c_cflag &= ~(CSIZE|PARENB);
2012
+ t->c_cflag |= CS8;
2013
+ t->c_cc[VMIN] = 1;
2014
+ t->c_cc[VTIME] = 0;
2015
+}
2016
+
2017
+static void option_init_termios(struct tty_struct *tty)
2018
+{
2019
+ cfmakeraw(&tty->termios);
2020
+}
2021
+#endif
2022
+
21082023 static struct usb_serial_driver option_1port_device = {
2024
+ .init_termios = option_init_termios,
21092025 .driver = {
21102026 .owner = THIS_MODULE,
21112027 .name = "option1",
....@@ -2122,7 +2038,8 @@
21222038 .chars_in_buffer = usb_wwan_chars_in_buffer,
21232039 .tiocmget = usb_wwan_tiocmget,
21242040 .tiocmset = usb_wwan_tiocmset,
2125
- .ioctl = usb_wwan_ioctl,
2041
+ .get_serial = usb_wwan_get_serial_info,
2042
+ .set_serial = usb_wwan_set_serial_info,
21262043 .attach = option_attach,
21272044 .release = option_release,
21282045 .port_probe = usb_wwan_port_probe,
....@@ -2143,91 +2060,12 @@
21432060
21442061 module_usb_serial_driver(serial_drivers, option_ids);
21452062
2146
-static bool iface_is_reserved(unsigned long device_flags, u8 ifnum)
2147
-{
2148
- if (ifnum > FLAG_IFNUM_MAX)
2149
- return false;
2150
-
2151
- return device_flags & RSVD(ifnum);
2152
-}
2153
-
21542063 static int option_probe(struct usb_serial *serial,
21552064 const struct usb_device_id *id)
21562065 {
21572066 struct usb_interface_descriptor *iface_desc =
21582067 &serial->interface->cur_altsetting->desc;
21592068 unsigned long device_flags = id->driver_info;
2160
-
2161
-#if 1
2162
- /*ZTE ME3860 ME3760_V2 ME3620*/
2163
- printk("idVendor=%x, idProduct=%x, bInterfaceNumber =%d\r\n",
2164
- serial->dev->descriptor.idVendor,
2165
- serial->dev->descriptor.idProduct,
2166
- serial->interface->cur_altsetting->desc. bInterfaceNumber);
2167
-
2168
- if (serial->dev->descriptor.idVendor == 0x19d2 &&
2169
- serial->dev->descriptor.idProduct == 0x1476 &&
2170
- serial->interface->cur_altsetting->desc. bInterfaceNumber == 3)
2171
- return -ENODEV;
2172
- if (serial->dev->descriptor.idVendor == 0x19d2 &&
2173
- serial->dev->descriptor.idProduct == 0x1476 &&
2174
- serial->interface->cur_altsetting->desc. bInterfaceNumber == 4)
2175
- return -ENODEV;
2176
- if (serial->dev->descriptor.idVendor == 0x19d2 &&
2177
- serial->dev->descriptor.idProduct == 0x0199 &&
2178
- serial->interface->cur_altsetting->desc. bInterfaceNumber == 0)
2179
- return -ENODEV;
2180
- if (serial->dev->descriptor.idVendor == 0x19d2 &&
2181
- serial->dev->descriptor.idProduct == 0x0199 &&
2182
- serial->interface->cur_altsetting->desc. bInterfaceNumber == 1)
2183
- return -ENODEV;
2184
-#endif
2185
-
2186
-#if 1 //Added by FG650
2187
- if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2cb7) &&
2188
- serial->dev->descriptor.idProduct == cpu_to_le16(0x0a04) &&
2189
- serial->interface->cur_altsetting->desc.bInterfaceNumber <= 1) {
2190
- printk("Discover the 4th interface for fibocom\n");
2191
- return -ENODEV;
2192
- }
2193
-
2194
- if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2cb7) &&
2195
- serial->dev->descriptor.idProduct == cpu_to_le16(0x0a05) &&
2196
- serial->interface->cur_altsetting->desc.bInterfaceNumber <= 1) {
2197
- printk("Discover the 4th interface for fibocom\n");
2198
- return -ENODEV;
2199
- }
2200
-
2201
- if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2cb7) &&
2202
- serial->dev->descriptor.idProduct == cpu_to_le16(0x0a06) &&
2203
- serial->interface->cur_altsetting->desc.bInterfaceNumber <= 1) {
2204
- printk("Discover the 4th interface for fibocom\n");
2205
- return -ENODEV;
2206
- }
2207
-#endif
2208
-
2209
-
2210
-
2211
-if (serial->dev->descriptor.idVendor == 0x19d2 &&
2212
- serial->dev->descriptor.idProduct == 0x1476 &&
2213
- serial->interface->cur_altsetting->desc. bInterfaceNumber == 3)
2214
- return -ENODEV;
2215
-
2216
-if (serial->dev->descriptor.idVendor == 0x19d2 &&
2217
- serial->dev->descriptor.idProduct == 0x1476 &&
2218
- serial->interface->cur_altsetting->desc. bInterfaceNumber == 4)
2219
- return -ENODEV;
2220
-
2221
-if (serial->dev->descriptor.idVendor == 0x19d2 &&
2222
- serial->dev->descriptor.idProduct == 0x1509 &&
2223
- serial->interface->cur_altsetting->desc. bInterfaceNumber == 4)
2224
- return -ENODEV;
2225
-
2226
-if (serial->dev->descriptor.idVendor == 0x19d2 &&
2227
- serial->dev->descriptor.idProduct == 0x1509 &&
2228
- serial->interface->cur_altsetting->desc. bInterfaceNumber == 5)
2229
- return -ENODEV;
2230
-
22312069
22322070 #if 1 //Added by Quectel
22332071 //Quectel UC20's interface 4 can be used as USB Network device
....@@ -2242,14 +2080,19 @@
22422080
22432081 if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {
22442082 __u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct);
2083
+ struct usb_interface_descriptor *intf = &serial->interface->cur_altsetting->desc;
22452084
2246
- //Quectel module's some interfaces can be used as USB Network device (ecm, rndis, mbim)
2247
- if (serial->interface->cur_altsetting->desc.bInterfaceClass != 0xFF)
2085
+ if (intf->bInterfaceClass != 0xFF || intf->bInterfaceSubClass == 0x42) {
2086
+ //ECM, RNDIS, NCM, MBIM, ACM, UAC, ADB
22482087 return -ENODEV;
2088
+ }
22492089
2250
- //Quectel EC25&EC20's interface 4 can be used as USB network device (qmi)
2251
- if ((idProduct != 0x6026 && idProduct != 0x6120) && serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
2252
- return -ENODEV;
2090
+ if ((idProduct&0xF000) == 0x0000) {
2091
+ //MDM interface 4 is QMI
2092
+ if (intf->bInterfaceNumber == 4 && intf->bNumEndpoints == 3
2093
+ && intf->bInterfaceSubClass == 0xFF && intf->bInterfaceProtocol == 0xFF)
2094
+ return -ENODEV;
2095
+ }
22532096 }
22542097 #endif
22552098
....@@ -2262,7 +2105,7 @@
22622105 * the same class/subclass/protocol as the serial interfaces. Look at
22632106 * the Windows driver .INF files for reserved interface numbers.
22642107 */
2265
- if (iface_is_reserved(device_flags, iface_desc->bInterfaceNumber))
2108
+ if (device_flags & RSVD(iface_desc->bInterfaceNumber))
22662109 return -ENODEV;
22672110
22682111 /*
....@@ -2276,14 +2119,6 @@
22762119 usb_set_serial_data(serial, (void *)device_flags);
22772120
22782121 return 0;
2279
-}
2280
-
2281
-static bool iface_no_modem_control(unsigned long device_flags, u8 ifnum)
2282
-{
2283
- if (ifnum > FLAG_IFNUM_MAX)
2284
- return false;
2285
-
2286
- return device_flags & NCTRL(ifnum);
22872122 }
22882123
22892124 static int option_attach(struct usb_serial *serial)
....@@ -2301,11 +2136,8 @@
23012136
23022137 iface_desc = &serial->interface->cur_altsetting->desc;
23032138
2304
- if (!iface_no_modem_control(device_flags, iface_desc->bInterfaceNumber))
2139
+ if (!(device_flags & NCTRL(iface_desc->bInterfaceNumber)))
23052140 data->use_send_setup = 1;
2306
-
2307
- if (device_flags & ZLP)
2308
- data->use_zlp = 1;
23092141
23102142 spin_lock_init(&data->susp_lock);
23112143
....@@ -2367,7 +2199,7 @@
23672199 dev_dbg(dev, "%s: error %d\n", __func__, status);
23682200
23692201 /* Resubmit urb so we continue receiving IRQ data */
2370
- if (status != -ESHUTDOWN && status != -ENOENT) {
2202
+ if (status != -ESHUTDOWN && status != -ENOENT && status != -EPROTO) {
23712203 usb_mark_last_busy(port->serial->dev);
23722204 err = usb_submit_urb(urb, GFP_ATOMIC);
23732205 if (err)