forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 072de836f53be56a70cecf70b43ae43b7ce17376
kernel/drivers/usb/serial/option.c
....@@ -162,6 +162,8 @@
162162 #define NOVATELWIRELESS_PRODUCT_G2 0xA010
163163 #define NOVATELWIRELESS_PRODUCT_MC551 0xB001
164164
165
+#define UBLOX_VENDOR_ID 0x1546
166
+
165167 /* AMOI PRODUCTS */
166168 #define AMOI_VENDOR_ID 0x1614
167169 #define AMOI_PRODUCT_H01 0x0800
....@@ -240,7 +242,6 @@
240242 #define QUECTEL_PRODUCT_UC15 0x9090
241243 /* These u-blox products use Qualcomm's vendor ID */
242244 #define UBLOX_PRODUCT_R410M 0x90b2
243
-#define UBLOX_PRODUCT_R6XX 0x90fa
244245 /* These Yuga products use Qualcomm's vendor ID */
245246 #define YUGA_PRODUCT_CLM920_NC5 0x9625
246247
....@@ -252,10 +253,15 @@
252253 #define QUECTEL_PRODUCT_EG95 0x0195
253254 #define QUECTEL_PRODUCT_BG96 0x0296
254255 #define QUECTEL_PRODUCT_EP06 0x0306
256
+#define QUECTEL_PRODUCT_EM05G 0x030a
257
+#define QUECTEL_PRODUCT_EM060K 0x030b
258
+#define QUECTEL_PRODUCT_EM05G_SG 0x0311
255259 #define QUECTEL_PRODUCT_EM12 0x0512
256260 #define QUECTEL_PRODUCT_RM500Q 0x0800
261
+#define QUECTEL_PRODUCT_RM520N 0x0801
257262 #define QUECTEL_PRODUCT_EC200S_CN 0x6002
258263 #define QUECTEL_PRODUCT_EC200T 0x6026
264
+#define QUECTEL_PRODUCT_RM500K 0x7001
259265
260266 #define CMOTECH_VENDOR_ID 0x16d8
261267 #define CMOTECH_PRODUCT_6001 0x6001
....@@ -432,6 +438,12 @@
432438 #define CINTERION_PRODUCT_CLS8 0x00b0
433439 #define CINTERION_PRODUCT_MV31_MBIM 0x00b3
434440 #define CINTERION_PRODUCT_MV31_RMNET 0x00b7
441
+#define CINTERION_PRODUCT_MV31_2_MBIM 0x00b8
442
+#define CINTERION_PRODUCT_MV31_2_RMNET 0x00b9
443
+#define CINTERION_PRODUCT_MV32_WA 0x00f1
444
+#define CINTERION_PRODUCT_MV32_WB 0x00f2
445
+#define CINTERION_PRODUCT_MV32_WA_RMNET 0x00f3
446
+#define CINTERION_PRODUCT_MV32_WB_RMNET 0x00f4
435447
436448 /* Olivetti products */
437449 #define OLIVETTI_VENDOR_ID 0x0b3c
....@@ -567,6 +579,13 @@
567579 #define WETELECOM_PRODUCT_6802 0x6802
568580 #define WETELECOM_PRODUCT_WMD300 0x6803
569581
582
+/* OPPO products */
583
+#define OPPO_VENDOR_ID 0x22d9
584
+#define OPPO_PRODUCT_R11 0x276c
585
+
586
+/* Sierra Wireless products */
587
+#define SIERRA_VENDOR_ID 0x1199
588
+#define SIERRA_PRODUCT_EM9191 0x90d3
570589
571590 /* Device flags */
572591
....@@ -587,7 +606,6 @@
587606
588607
589608 static const struct usb_device_id option_ids[] = {
590
- { USB_DEVICE(0x1286, 0x4e3c) },
591609 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
592610 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
593611 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },
....@@ -1111,8 +1129,16 @@
11111129 /* u-blox products using Qualcomm vendor ID */
11121130 { USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R410M),
11131131 .driver_info = RSVD(1) | RSVD(3) },
1114
- { USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R6XX),
1132
+ { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x908b), /* u-blox LARA-R6 00B */
1133
+ .driver_info = RSVD(4) },
1134
+ { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x90fa),
11151135 .driver_info = RSVD(3) },
1136
+ /* u-blox products */
1137
+ { USB_DEVICE(UBLOX_VENDOR_ID, 0x1341) }, /* u-blox LARA-L6 */
1138
+ { USB_DEVICE(UBLOX_VENDOR_ID, 0x1342), /* u-blox LARA-L6 (RMNET) */
1139
+ .driver_info = RSVD(4) },
1140
+ { USB_DEVICE(UBLOX_VENDOR_ID, 0x1343), /* u-blox LARA-L6 (ECM) */
1141
+ .driver_info = RSVD(4) },
11161142 /* Quectel products using Quectel vendor ID */
11171143 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21, 0xff, 0xff, 0xff),
11181144 .driver_info = NUMEP2 },
....@@ -1126,22 +1152,37 @@
11261152 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0xff, 0xff),
11271153 .driver_info = NUMEP2 },
11281154 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0, 0) },
1155
+ { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, 0x0203, 0xff), /* BG95-M3 */
1156
+ .driver_info = ZLP },
11291157 { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
11301158 .driver_info = RSVD(4) },
11311159 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff),
11321160 .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 },
11331161 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0, 0) },
1162
+ { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G, 0xff),
1163
+ .driver_info = RSVD(6) | ZLP },
1164
+ { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_SG, 0xff),
1165
+ .driver_info = RSVD(6) | ZLP },
1166
+ { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0x00, 0x40) },
1167
+ { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0xff, 0x30) },
1168
+ { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0xff, 0x40) },
11341169 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0xff, 0xff),
11351170 .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 },
11361171 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0, 0) },
11371172 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 0x0620, 0xff, 0xff, 0x30) }, /* EM160R-GL */
11381173 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 0x0620, 0xff, 0, 0) },
1174
+ { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, 0x0700, 0xff), /* BG95 */
1175
+ .driver_info = RSVD(3) | ZLP },
11391176 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x30) },
11401177 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) },
11411178 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10),
11421179 .driver_info = ZLP },
1180
+ { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0xff, 0x30) },
1181
+ { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0, 0x40) },
1182
+ { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0, 0) },
11431183 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200S_CN, 0xff, 0, 0) },
11441184 { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) },
1185
+ { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500K, 0xff, 0x00, 0x00) },
11451186
11461187 { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
11471188 { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
....@@ -1218,6 +1259,10 @@
12181259 .driver_info = NCTRL(0) | RSVD(1) },
12191260 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1056, 0xff), /* Telit FD980 */
12201261 .driver_info = NCTRL(2) | RSVD(3) },
1262
+ { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1057, 0xff), /* Telit FN980 */
1263
+ .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
1264
+ { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1058, 0xff), /* Telit FN980 (PCIe) */
1265
+ .driver_info = NCTRL(0) | RSVD(1) },
12211266 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1060, 0xff), /* Telit LN920 (rmnet) */
12221267 .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
12231268 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1061, 0xff), /* Telit LN920 (MBIM) */
....@@ -1234,6 +1279,8 @@
12341279 .driver_info = NCTRL(2) | RSVD(3) },
12351280 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1073, 0xff), /* Telit FN990 (ECM) */
12361281 .driver_info = NCTRL(0) | RSVD(1) },
1282
+ { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1075, 0xff), /* Telit FN990 (PCIe) */
1283
+ .driver_info = RSVD(0) },
12371284 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),
12381285 .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) },
12391286 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
....@@ -1268,6 +1315,7 @@
12681315 .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
12691316 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1231, 0xff), /* Telit LE910Cx (RNDIS) */
12701317 .driver_info = NCTRL(2) | RSVD(3) },
1318
+ { USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x1250, 0xff, 0x00, 0x00) }, /* Telit LE910Cx (rmnet) */
12711319 { USB_DEVICE(TELIT_VENDOR_ID, 0x1260),
12721320 .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
12731321 { USB_DEVICE(TELIT_VENDOR_ID, 0x1261),
....@@ -1970,6 +2018,18 @@
19702018 .driver_info = RSVD(3)},
19712019 { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV31_RMNET, 0xff),
19722020 .driver_info = RSVD(0)},
2021
+ { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV31_2_MBIM, 0xff),
2022
+ .driver_info = RSVD(3)},
2023
+ { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV31_2_RMNET, 0xff),
2024
+ .driver_info = RSVD(0)},
2025
+ { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV32_WA, 0xff),
2026
+ .driver_info = RSVD(3)},
2027
+ { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV32_WA_RMNET, 0xff),
2028
+ .driver_info = RSVD(0) },
2029
+ { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV32_WB, 0xff),
2030
+ .driver_info = RSVD(3)},
2031
+ { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV32_WB_RMNET, 0xff),
2032
+ .driver_info = RSVD(0) },
19732033 { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100),
19742034 .driver_info = RSVD(4) },
19752035 { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD120),
....@@ -2112,12 +2172,17 @@
21122172 .driver_info = RSVD(3) },
21132173 { USB_DEVICE(0x1508, 0x1001), /* Fibocom NL668 (IOT version) */
21142174 .driver_info = RSVD(4) | RSVD(5) | RSVD(6) },
2175
+ { USB_DEVICE(0x1782, 0x4d10) }, /* Fibocom L610 (AT mode) */
2176
+ { USB_DEVICE_INTERFACE_CLASS(0x1782, 0x4d11, 0xff) }, /* Fibocom L610 (ECM/RNDIS mode) */
21152177 { USB_DEVICE(0x2cb7, 0x0104), /* Fibocom NL678 series */
21162178 .driver_info = RSVD(4) | RSVD(5) },
21172179 { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0105, 0xff), /* Fibocom NL678 series */
21182180 .driver_info = RSVD(6) },
2181
+ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0106, 0xff) }, /* Fibocom MA510 (ECM mode w/ diag intf.) */
2182
+ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x010a, 0xff) }, /* Fibocom MA510 (ECM mode) */
21192183 { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0xff, 0x30) }, /* Fibocom FG150 Diag */
21202184 { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0, 0) }, /* Fibocom FG150 AT */
2185
+ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0111, 0xff) }, /* Fibocom FM160 (MBIM mode) */
21212186 { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */
21222187 { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a2, 0xff) }, /* Fibocom FM101-GL (laptop MBIM) */
21232188 { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a4, 0xff), /* Fibocom FM101-GL (laptop MBIM) */
....@@ -2126,6 +2191,9 @@
21262191 { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1404, 0xff) }, /* GosunCn GM500 RNDIS */
21272192 { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1405, 0xff) }, /* GosunCn GM500 MBIM */
21282193 { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1406, 0xff) }, /* GosunCn GM500 ECM/NCM */
2194
+ { USB_DEVICE_AND_INTERFACE_INFO(OPPO_VENDOR_ID, OPPO_PRODUCT_R11, 0xff, 0xff, 0x30) },
2195
+ { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x30) },
2196
+ { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0, 0) },
21292197 { } /* Terminating entry */
21302198 };
21312199 MODULE_DEVICE_TABLE(usb, option_ids);
....@@ -2151,7 +2219,8 @@
21512219 .chars_in_buffer = usb_wwan_chars_in_buffer,
21522220 .tiocmget = usb_wwan_tiocmget,
21532221 .tiocmset = usb_wwan_tiocmset,
2154
- .ioctl = usb_wwan_ioctl,
2222
+ .get_serial = usb_wwan_get_serial_info,
2223
+ .set_serial = usb_wwan_set_serial_info,
21552224 .attach = option_attach,
21562225 .release = option_release,
21572226 .port_probe = usb_wwan_port_probe,
....@@ -2264,8 +2333,7 @@
22642333 dev_dbg(dev, "%s: urb %p port %p has data %p\n", __func__, urb, port, portdata);
22652334
22662335 if (status == 0) {
2267
- struct usb_ctrlrequest *req_pkt =
2268
- (struct usb_ctrlrequest *)urb->transfer_buffer;
2336
+ struct usb_ctrlrequest *req_pkt = urb->transfer_buffer;
22692337
22702338 if (!req_pkt) {
22712339 dev_dbg(dev, "%s: NULL req_pkt\n", __func__);