.. | .. |
---|
197 | 197 | #define DELL_PRODUCT_5804_MINICARD_ATT 0x819b /* Novatel E371 */ |
---|
198 | 198 | |
---|
199 | 199 | #define DELL_PRODUCT_5821E 0x81d7 |
---|
200 | | -#define DELL_PRODUCT_5821E_ESIM 0x81e0 |
---|
201 | 200 | |
---|
202 | 201 | #define KYOCERA_VENDOR_ID 0x0c88 |
---|
203 | 202 | #define KYOCERA_PRODUCT_KPC650 0x17da |
---|
.. | .. |
---|
245 | 244 | /* These Quectel products use Quectel's vendor ID */ |
---|
246 | 245 | #define QUECTEL_PRODUCT_EC21 0x0121 |
---|
247 | 246 | #define QUECTEL_PRODUCT_EC25 0x0125 |
---|
248 | | -#define QUECTEL_PRODUCT_EG95 0x0195 |
---|
249 | 247 | #define QUECTEL_PRODUCT_BG96 0x0296 |
---|
250 | 248 | #define QUECTEL_PRODUCT_EP06 0x0306 |
---|
251 | 249 | #define QUECTEL_PRODUCT_EM12 0x0512 |
---|
252 | | -#define QUECTEL_PRODUCT_RM500Q 0x0800 |
---|
253 | | -#define QUECTEL_PRODUCT_EC200T 0x6026 |
---|
254 | 250 | |
---|
255 | 251 | #define CMOTECH_VENDOR_ID 0x16d8 |
---|
256 | 252 | #define CMOTECH_PRODUCT_6001 0x6001 |
---|
.. | .. |
---|
419 | 415 | #define CINTERION_PRODUCT_PH8 0x0053 |
---|
420 | 416 | #define CINTERION_PRODUCT_AHXX 0x0055 |
---|
421 | 417 | #define CINTERION_PRODUCT_PLXX 0x0060 |
---|
422 | | -#define CINTERION_PRODUCT_EXS82 0x006c |
---|
423 | 418 | #define CINTERION_PRODUCT_PH8_2RMNET 0x0082 |
---|
424 | 419 | #define CINTERION_PRODUCT_PH8_AUDIO 0x0083 |
---|
425 | 420 | #define CINTERION_PRODUCT_AHXX_2RMNET 0x0084 |
---|
426 | 421 | #define CINTERION_PRODUCT_AHXX_AUDIO 0x0085 |
---|
427 | | -#define CINTERION_PRODUCT_CLS8 0x00b0 |
---|
428 | 422 | |
---|
429 | 423 | /* Olivetti products */ |
---|
430 | 424 | #define OLIVETTI_VENDOR_ID 0x0b3c |
---|
.. | .. |
---|
530 | 524 | /* Cellient products */ |
---|
531 | 525 | #define CELLIENT_VENDOR_ID 0x2692 |
---|
532 | 526 | #define CELLIENT_PRODUCT_MEN200 0x9005 |
---|
533 | | -#define CELLIENT_PRODUCT_MPL200 0x9025 |
---|
534 | 527 | |
---|
535 | 528 | /* Hyundai Petatel Inc. products */ |
---|
536 | 529 | #define PETATEL_VENDOR_ID 0x1ff4 |
---|
.. | .. |
---|
563 | 556 | |
---|
564 | 557 | /* Device flags */ |
---|
565 | 558 | |
---|
566 | | -/* Highest interface number which can be used with NCTRL() and RSVD() */ |
---|
567 | | -#define FLAG_IFNUM_MAX 7 |
---|
568 | | - |
---|
569 | 559 | /* Interface does not support modem-control requests */ |
---|
570 | 560 | #define NCTRL(ifnum) ((BIT(ifnum) & 0xff) << 8) |
---|
571 | 561 | |
---|
.. | .. |
---|
575 | 565 | /* Interface must have two endpoints */ |
---|
576 | 566 | #define NUMEP2 BIT(16) |
---|
577 | 567 | |
---|
578 | | -/* Device needs ZLP */ |
---|
579 | | -#define ZLP BIT(17) |
---|
580 | | - |
---|
581 | 568 | |
---|
582 | 569 | 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 | | - |
---|
589 | 570 | #if 1 //Added by Quectel |
---|
590 | 571 | { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */ |
---|
591 | 572 | { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */ |
---|
.. | .. |
---|
595 | 576 | { USB_DEVICE(0x2C7C, 0x0191) }, /* Quectel EG91 */ |
---|
596 | 577 | { USB_DEVICE(0x2C7C, 0x0195) }, /* Quectel EG95 */ |
---|
597 | 578 | { 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 */ |
---|
598 | 581 | { USB_DEVICE(0x2C7C, 0x0512) }, /* Quectel EG12/EP12/EM12/EG16/EG18 */ |
---|
599 | 582 | { USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG96 */ |
---|
600 | 583 | { USB_DEVICE(0x2C7C, 0x0700) }, /* Quectel BG95/BG77/BG600L-M3/BC69 */ |
---|
601 | 584 | { USB_DEVICE(0x2C7C, 0x0435) }, /* Quectel AG35 */ |
---|
602 | 585 | { 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 */ |
---|
605 | 588 | { USB_DEVICE(0x2C7C, 0x0620) }, /* Quectel EG20 */ |
---|
606 | 589 | { USB_DEVICE(0x2C7C, 0x0800) }, /* Quectel RG500/RM500/RG510/RM510 */ |
---|
| 590 | + { USB_DEVICE(0x2C7C, 0x0801) }, /* Quectel RG520/RM520/SG520 */ |
---|
607 | 591 | { USB_DEVICE(0x2C7C, 0x6026) }, /* Quectel EC200 */ |
---|
608 | 592 | { USB_DEVICE(0x2C7C, 0x6120) }, /* Quectel UC200 */ |
---|
609 | 593 | { 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 */ |
---|
611 | 595 | #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) }, |
---|
617 | 596 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, |
---|
618 | 597 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) }, |
---|
619 | 598 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) }, |
---|
.. | .. |
---|
1015 | 994 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7B) }, |
---|
1016 | 995 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7C) }, |
---|
1017 | 996 | |
---|
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 */ |
---|
1023 | 997 | |
---|
1024 | 998 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, |
---|
1025 | 999 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, |
---|
.. | .. |
---|
1090 | 1064 | { USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, DELL_PRODUCT_5804_MINICARD_ATT, 0xff, 0xff, 0xff) }, |
---|
1091 | 1065 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5821E), |
---|
1092 | 1066 | .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) }, |
---|
1095 | 1067 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */ |
---|
1096 | 1068 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) }, |
---|
1097 | 1069 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) }, |
---|
.. | .. |
---|
1134 | 1106 | { USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R410M), |
---|
1135 | 1107 | .driver_info = RSVD(1) | RSVD(3) }, |
---|
1136 | 1108 | /* 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) }, |
---|
1146 | 1113 | { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96), |
---|
1147 | 1114 | .driver_info = RSVD(4) }, |
---|
1148 | 1115 | { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff), |
---|
.. | .. |
---|
1151 | 1118 | { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0xff, 0xff), |
---|
1152 | 1119 | .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 }, |
---|
1153 | 1120 | { 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 | | - |
---|
1162 | 1121 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) }, |
---|
1163 | 1122 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) }, |
---|
1164 | 1123 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003), |
---|
.. | .. |
---|
1206 | 1165 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) }, |
---|
1207 | 1166 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) }, |
---|
1208 | 1167 | { 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) }, |
---|
1213 | 1168 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG0), |
---|
1214 | 1169 | .driver_info = RSVD(0) | RSVD(1) | NCTRL(2) | RSVD(3) }, |
---|
1215 | 1170 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG1), |
---|
.. | .. |
---|
1220 | 1175 | .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) }, |
---|
1221 | 1176 | { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG5, 0xff), |
---|
1222 | 1177 | .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) }, |
---|
1235 | 1178 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910), |
---|
1236 | 1179 | .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) }, |
---|
1237 | 1180 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM), |
---|
1238 | 1181 | .driver_info = NCTRL(0) | RSVD(3) }, |
---|
1239 | 1182 | { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1102, 0xff), /* Telit ME910 (ECM) */ |
---|
1240 | 1183 | .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) }, |
---|
1245 | 1184 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910), |
---|
1246 | 1185 | .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) }, |
---|
1249 | 1186 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4), |
---|
1250 | 1187 | .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) }, |
---|
1251 | 1188 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920), |
---|
.. | .. |
---|
1260 | 1197 | { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1213, 0xff) }, |
---|
1261 | 1198 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1214), |
---|
1262 | 1199 | .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) }, |
---|
1271 | 1200 | { USB_DEVICE(TELIT_VENDOR_ID, 0x1900), /* Telit LN940 (QMI) */ |
---|
1272 | 1201 | .driver_info = NCTRL(0) | RSVD(1) }, |
---|
1273 | 1202 | { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1901, 0xff), /* Telit LN940 (MBIM) */ |
---|
1274 | 1203 | .driver_info = NCTRL(0) }, |
---|
1275 | | - { USB_DEVICE(TELIT_VENDOR_ID, 0x9010), /* Telit SBL FN980 flashing device */ |
---|
1276 | | - .driver_info = NCTRL(0) | ZLP }, |
---|
1277 | 1204 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ |
---|
1278 | 1205 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0002, 0xff, 0xff, 0xff), |
---|
1279 | 1206 | .driver_info = RSVD(1) }, |
---|
.. | .. |
---|
1438 | 1365 | .driver_info = RSVD(4) }, |
---|
1439 | 1366 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0414, 0xff, 0xff, 0xff) }, |
---|
1440 | 1367 | { 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) */ |
---|
1442 | 1368 | { USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x0602, 0xff) }, /* GosunCn ZTE WeLink ME3630 (MBIM mode) */ |
---|
1443 | 1369 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1008, 0xff, 0xff, 0xff), |
---|
1444 | 1370 | .driver_info = RSVD(4) }, |
---|
.. | .. |
---|
1644 | 1570 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1428, 0xff, 0xff, 0xff), /* Telewell TW-LTE 4G v2 */ |
---|
1645 | 1571 | .driver_info = RSVD(2) }, |
---|
1646 | 1572 | { 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 */ |
---|
1648 | 1573 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1533, 0xff, 0xff, 0xff) }, |
---|
1649 | 1574 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1534, 0xff, 0xff, 0xff) }, |
---|
1650 | 1575 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1535, 0xff, 0xff, 0xff) }, |
---|
.. | .. |
---|
1873 | 1798 | { USB_DEVICE(ALINK_VENDOR_ID, SIMCOM_PRODUCT_SIM7100E), |
---|
1874 | 1799 | .driver_info = RSVD(5) | RSVD(6) }, |
---|
1875 | 1800 | { 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 */ |
---|
1880 | 1801 | { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200), |
---|
1881 | 1802 | .driver_info = NCTRL(0) | NCTRL(1) | RSVD(4) }, |
---|
1882 | 1803 | { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D), |
---|
.. | .. |
---|
1939 | 1860 | .driver_info = RSVD(4) }, |
---|
1940 | 1861 | { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX_2RMNET, 0xff) }, |
---|
1941 | 1862 | { 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) }, |
---|
1945 | 1863 | { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) }, |
---|
1946 | 1864 | { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) }, |
---|
1947 | 1865 | { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) }, |
---|
.. | .. |
---|
2035 | 1953 | { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x02, 0x01) }, |
---|
2036 | 1954 | { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) }, |
---|
2037 | 1955 | { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) }, |
---|
2038 | | - { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MPL200), |
---|
2039 | | - .driver_info = RSVD(1) | RSVD(4) }, |
---|
2040 | 1956 | { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600A) }, |
---|
2041 | 1957 | { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600E) }, |
---|
2042 | 1958 | { USB_DEVICE_AND_INTERFACE_INFO(TPLINK_VENDOR_ID, TPLINK_PRODUCT_LTE, 0xff, 0x00, 0x00) }, /* TP-Link LTE Module */ |
---|
.. | .. |
---|
2055 | 1971 | .driver_info = RSVD(4) }, |
---|
2056 | 1972 | { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e35, 0xff), /* D-Link DWM-222 */ |
---|
2057 | 1973 | .driver_info = RSVD(4) }, |
---|
2058 | | - { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e3d, 0xff), /* D-Link DWM-222 A2 */ |
---|
2059 | | - .driver_info = RSVD(4) }, |
---|
2060 | 1974 | { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */ |
---|
2061 | 1975 | { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */ |
---|
2062 | 1976 | { 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) }, |
---|
2067 | 1977 | { 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 */ |
---|
2072 | 1978 | .driver_info = RSVD(4) }, |
---|
2073 | 1979 | { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x4000, 0xff) }, /* OLICARD300 - MT6225 */ |
---|
2074 | 1980 | { USB_DEVICE(INOVIA_VENDOR_ID, INOVIA_SEW858) }, |
---|
.. | .. |
---|
2082 | 1988 | { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x13) }, |
---|
2083 | 1989 | { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x14) }, |
---|
2084 | 1990 | { 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 */ |
---|
2090 | 1992 | .driver_info = RSVD(4) | RSVD(5) | RSVD(6) }, |
---|
2091 | 1993 | { USB_DEVICE(0x2cb7, 0x0104), /* Fibocom NL678 series */ |
---|
2092 | 1994 | .driver_info = RSVD(4) | RSVD(5) }, |
---|
2093 | 1995 | { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0105, 0xff), /* Fibocom NL678 series */ |
---|
2094 | 1996 | .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 */ |
---|
2100 | 1997 | { } /* Terminating entry */ |
---|
2101 | 1998 | }; |
---|
2102 | 1999 | MODULE_DEVICE_TABLE(usb, option_ids); |
---|
.. | .. |
---|
2105 | 2002 | * recognizes separately, thus num_port=1. |
---|
2106 | 2003 | */ |
---|
2107 | 2004 | |
---|
| 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 | + |
---|
2108 | 2023 | static struct usb_serial_driver option_1port_device = { |
---|
| 2024 | + .init_termios = option_init_termios, |
---|
2109 | 2025 | .driver = { |
---|
2110 | 2026 | .owner = THIS_MODULE, |
---|
2111 | 2027 | .name = "option1", |
---|
.. | .. |
---|
2122 | 2038 | .chars_in_buffer = usb_wwan_chars_in_buffer, |
---|
2123 | 2039 | .tiocmget = usb_wwan_tiocmget, |
---|
2124 | 2040 | .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, |
---|
2126 | 2043 | .attach = option_attach, |
---|
2127 | 2044 | .release = option_release, |
---|
2128 | 2045 | .port_probe = usb_wwan_port_probe, |
---|
.. | .. |
---|
2143 | 2060 | |
---|
2144 | 2061 | module_usb_serial_driver(serial_drivers, option_ids); |
---|
2145 | 2062 | |
---|
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 | | - |
---|
2154 | 2063 | static int option_probe(struct usb_serial *serial, |
---|
2155 | 2064 | const struct usb_device_id *id) |
---|
2156 | 2065 | { |
---|
2157 | 2066 | struct usb_interface_descriptor *iface_desc = |
---|
2158 | 2067 | &serial->interface->cur_altsetting->desc; |
---|
2159 | 2068 | 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 | | - |
---|
2231 | 2069 | |
---|
2232 | 2070 | #if 1 //Added by Quectel |
---|
2233 | 2071 | //Quectel UC20's interface 4 can be used as USB Network device |
---|
.. | .. |
---|
2242 | 2080 | |
---|
2243 | 2081 | if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) { |
---|
2244 | 2082 | __u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct); |
---|
| 2083 | + struct usb_interface_descriptor *intf = &serial->interface->cur_altsetting->desc; |
---|
2245 | 2084 | |
---|
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 |
---|
2248 | 2087 | return -ENODEV; |
---|
| 2088 | + } |
---|
2249 | 2089 | |
---|
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 | + } |
---|
2253 | 2096 | } |
---|
2254 | 2097 | #endif |
---|
2255 | 2098 | |
---|
.. | .. |
---|
2262 | 2105 | * the same class/subclass/protocol as the serial interfaces. Look at |
---|
2263 | 2106 | * the Windows driver .INF files for reserved interface numbers. |
---|
2264 | 2107 | */ |
---|
2265 | | - if (iface_is_reserved(device_flags, iface_desc->bInterfaceNumber)) |
---|
| 2108 | + if (device_flags & RSVD(iface_desc->bInterfaceNumber)) |
---|
2266 | 2109 | return -ENODEV; |
---|
2267 | 2110 | |
---|
2268 | 2111 | /* |
---|
.. | .. |
---|
2276 | 2119 | usb_set_serial_data(serial, (void *)device_flags); |
---|
2277 | 2120 | |
---|
2278 | 2121 | 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); |
---|
2287 | 2122 | } |
---|
2288 | 2123 | |
---|
2289 | 2124 | static int option_attach(struct usb_serial *serial) |
---|
.. | .. |
---|
2301 | 2136 | |
---|
2302 | 2137 | iface_desc = &serial->interface->cur_altsetting->desc; |
---|
2303 | 2138 | |
---|
2304 | | - if (!iface_no_modem_control(device_flags, iface_desc->bInterfaceNumber)) |
---|
| 2139 | + if (!(device_flags & NCTRL(iface_desc->bInterfaceNumber))) |
---|
2305 | 2140 | data->use_send_setup = 1; |
---|
2306 | | - |
---|
2307 | | - if (device_flags & ZLP) |
---|
2308 | | - data->use_zlp = 1; |
---|
2309 | 2141 | |
---|
2310 | 2142 | spin_lock_init(&data->susp_lock); |
---|
2311 | 2143 | |
---|
.. | .. |
---|
2367 | 2199 | dev_dbg(dev, "%s: error %d\n", __func__, status); |
---|
2368 | 2200 | |
---|
2369 | 2201 | /* Resubmit urb so we continue receiving IRQ data */ |
---|
2370 | | - if (status != -ESHUTDOWN && status != -ENOENT) { |
---|
| 2202 | + if (status != -ESHUTDOWN && status != -ENOENT && status != -EPROTO) { |
---|
2371 | 2203 | usb_mark_last_busy(port->serial->dev); |
---|
2372 | 2204 | err = usb_submit_urb(urb, GFP_ATOMIC); |
---|
2373 | 2205 | if (err) |
---|