| .. | .. |
|---|
| 162 | 162 | #define NOVATELWIRELESS_PRODUCT_G2 0xA010 |
|---|
| 163 | 163 | #define NOVATELWIRELESS_PRODUCT_MC551 0xB001 |
|---|
| 164 | 164 | |
|---|
| 165 | | -#define UBLOX_VENDOR_ID 0x1546 |
|---|
| 166 | | - |
|---|
| 167 | 165 | /* AMOI PRODUCTS */ |
|---|
| 168 | 166 | #define AMOI_VENDOR_ID 0x1614 |
|---|
| 169 | 167 | #define AMOI_PRODUCT_H01 0x0800 |
|---|
| .. | .. |
|---|
| 199 | 197 | #define DELL_PRODUCT_5804_MINICARD_ATT 0x819b /* Novatel E371 */ |
|---|
| 200 | 198 | |
|---|
| 201 | 199 | #define DELL_PRODUCT_5821E 0x81d7 |
|---|
| 202 | | -#define DELL_PRODUCT_5821E_ESIM 0x81e0 |
|---|
| 203 | | -#define DELL_PRODUCT_5829E_ESIM 0x81e4 |
|---|
| 204 | | -#define DELL_PRODUCT_5829E 0x81e6 |
|---|
| 205 | 200 | |
|---|
| 206 | 201 | #define KYOCERA_VENDOR_ID 0x0c88 |
|---|
| 207 | 202 | #define KYOCERA_PRODUCT_KPC650 0x17da |
|---|
| .. | .. |
|---|
| 248 | 243 | #define QUECTEL_VENDOR_ID 0x2c7c |
|---|
| 249 | 244 | /* These Quectel products use Quectel's vendor ID */ |
|---|
| 250 | 245 | #define QUECTEL_PRODUCT_EC21 0x0121 |
|---|
| 251 | | -#define QUECTEL_PRODUCT_EM061K_LTA 0x0123 |
|---|
| 252 | | -#define QUECTEL_PRODUCT_EM061K_LMS 0x0124 |
|---|
| 253 | 246 | #define QUECTEL_PRODUCT_EC25 0x0125 |
|---|
| 254 | | -#define QUECTEL_PRODUCT_EM060K_128 0x0128 |
|---|
| 255 | | -#define QUECTEL_PRODUCT_EG91 0x0191 |
|---|
| 256 | | -#define QUECTEL_PRODUCT_EG95 0x0195 |
|---|
| 257 | 247 | #define QUECTEL_PRODUCT_BG96 0x0296 |
|---|
| 258 | 248 | #define QUECTEL_PRODUCT_EP06 0x0306 |
|---|
| 259 | | -#define QUECTEL_PRODUCT_EM05G 0x030a |
|---|
| 260 | | -#define QUECTEL_PRODUCT_EM060K 0x030b |
|---|
| 261 | | -#define QUECTEL_PRODUCT_EM05G_CS 0x030c |
|---|
| 262 | | -#define QUECTEL_PRODUCT_EM05GV2 0x030e |
|---|
| 263 | | -#define QUECTEL_PRODUCT_EM05CN_SG 0x0310 |
|---|
| 264 | | -#define QUECTEL_PRODUCT_EM05G_SG 0x0311 |
|---|
| 265 | | -#define QUECTEL_PRODUCT_EM05CN 0x0312 |
|---|
| 266 | | -#define QUECTEL_PRODUCT_EM05G_GR 0x0313 |
|---|
| 267 | | -#define QUECTEL_PRODUCT_EM05G_RS 0x0314 |
|---|
| 268 | 249 | #define QUECTEL_PRODUCT_EM12 0x0512 |
|---|
| 269 | | -#define QUECTEL_PRODUCT_RM500Q 0x0800 |
|---|
| 270 | | -#define QUECTEL_PRODUCT_RM520N 0x0801 |
|---|
| 271 | | -#define QUECTEL_PRODUCT_EC200U 0x0901 |
|---|
| 272 | | -#define QUECTEL_PRODUCT_EC200S_CN 0x6002 |
|---|
| 273 | | -#define QUECTEL_PRODUCT_EC200A 0x6005 |
|---|
| 274 | | -#define QUECTEL_PRODUCT_EM061K_LWW 0x6008 |
|---|
| 275 | | -#define QUECTEL_PRODUCT_EM061K_LCN 0x6009 |
|---|
| 276 | | -#define QUECTEL_PRODUCT_EC200T 0x6026 |
|---|
| 277 | | -#define QUECTEL_PRODUCT_RM500K 0x7001 |
|---|
| 278 | 250 | |
|---|
| 279 | 251 | #define CMOTECH_VENDOR_ID 0x16d8 |
|---|
| 280 | 252 | #define CMOTECH_PRODUCT_6001 0x6001 |
|---|
| .. | .. |
|---|
| 409 | 381 | #define LONGCHEER_VENDOR_ID 0x1c9e |
|---|
| 410 | 382 | |
|---|
| 411 | 383 | /* 4G Systems products */ |
|---|
| 412 | | -/* This one was sold as the VW and Skoda "Carstick LTE" */ |
|---|
| 413 | | -#define FOUR_G_SYSTEMS_PRODUCT_CARSTICK_LTE 0x7605 |
|---|
| 414 | 384 | /* This is the 4G XS Stick W14 a.k.a. Mobilcom Debitel Surf-Stick * |
|---|
| 415 | 385 | * It seems to contain a Qualcomm QSC6240/6290 chipset */ |
|---|
| 416 | 386 | #define FOUR_G_SYSTEMS_PRODUCT_W14 0x9603 |
|---|
| .. | .. |
|---|
| 445 | 415 | #define CINTERION_PRODUCT_PH8 0x0053 |
|---|
| 446 | 416 | #define CINTERION_PRODUCT_AHXX 0x0055 |
|---|
| 447 | 417 | #define CINTERION_PRODUCT_PLXX 0x0060 |
|---|
| 448 | | -#define CINTERION_PRODUCT_EXS82 0x006c |
|---|
| 449 | 418 | #define CINTERION_PRODUCT_PH8_2RMNET 0x0082 |
|---|
| 450 | 419 | #define CINTERION_PRODUCT_PH8_AUDIO 0x0083 |
|---|
| 451 | 420 | #define CINTERION_PRODUCT_AHXX_2RMNET 0x0084 |
|---|
| 452 | 421 | #define CINTERION_PRODUCT_AHXX_AUDIO 0x0085 |
|---|
| 453 | | -#define CINTERION_PRODUCT_CLS8 0x00b0 |
|---|
| 454 | | -#define CINTERION_PRODUCT_MV31_MBIM 0x00b3 |
|---|
| 455 | | -#define CINTERION_PRODUCT_MV31_RMNET 0x00b7 |
|---|
| 456 | | -#define CINTERION_PRODUCT_MV31_2_MBIM 0x00b8 |
|---|
| 457 | | -#define CINTERION_PRODUCT_MV31_2_RMNET 0x00b9 |
|---|
| 458 | | -#define CINTERION_PRODUCT_MV32_WA 0x00f1 |
|---|
| 459 | | -#define CINTERION_PRODUCT_MV32_WB 0x00f2 |
|---|
| 460 | | -#define CINTERION_PRODUCT_MV32_WA_RMNET 0x00f3 |
|---|
| 461 | | -#define CINTERION_PRODUCT_MV32_WB_RMNET 0x00f4 |
|---|
| 462 | 422 | |
|---|
| 463 | 423 | /* Olivetti products */ |
|---|
| 464 | 424 | #define OLIVETTI_VENDOR_ID 0x0b3c |
|---|
| .. | .. |
|---|
| 564 | 524 | /* Cellient products */ |
|---|
| 565 | 525 | #define CELLIENT_VENDOR_ID 0x2692 |
|---|
| 566 | 526 | #define CELLIENT_PRODUCT_MEN200 0x9005 |
|---|
| 567 | | -#define CELLIENT_PRODUCT_MPL200 0x9025 |
|---|
| 568 | 527 | |
|---|
| 569 | 528 | /* Hyundai Petatel Inc. products */ |
|---|
| 570 | 529 | #define PETATEL_VENDOR_ID 0x1ff4 |
|---|
| .. | .. |
|---|
| 594 | 553 | #define WETELECOM_PRODUCT_6802 0x6802 |
|---|
| 595 | 554 | #define WETELECOM_PRODUCT_WMD300 0x6803 |
|---|
| 596 | 555 | |
|---|
| 597 | | -/* OPPO products */ |
|---|
| 598 | | -#define OPPO_VENDOR_ID 0x22d9 |
|---|
| 599 | | -#define OPPO_PRODUCT_R11 0x276c |
|---|
| 600 | | - |
|---|
| 601 | | -/* Sierra Wireless products */ |
|---|
| 602 | | -#define SIERRA_VENDOR_ID 0x1199 |
|---|
| 603 | | -#define SIERRA_PRODUCT_EM9191 0x90d3 |
|---|
| 604 | | - |
|---|
| 605 | | -/* UNISOC (Spreadtrum) products */ |
|---|
| 606 | | -#define UNISOC_VENDOR_ID 0x1782 |
|---|
| 607 | | -/* TOZED LT70-C based on UNISOC SL8563 uses UNISOC's vendor ID */ |
|---|
| 608 | | -#define TOZED_PRODUCT_LT70C 0x4055 |
|---|
| 609 | 556 | |
|---|
| 610 | 557 | /* Device flags */ |
|---|
| 611 | | - |
|---|
| 612 | | -/* Highest interface number which can be used with NCTRL() and RSVD() */ |
|---|
| 613 | | -#define FLAG_IFNUM_MAX 7 |
|---|
| 614 | 558 | |
|---|
| 615 | 559 | /* Interface does not support modem-control requests */ |
|---|
| 616 | 560 | #define NCTRL(ifnum) ((BIT(ifnum) & 0xff) << 8) |
|---|
| .. | .. |
|---|
| 621 | 565 | /* Interface must have two endpoints */ |
|---|
| 622 | 566 | #define NUMEP2 BIT(16) |
|---|
| 623 | 567 | |
|---|
| 624 | | -/* Device needs ZLP */ |
|---|
| 625 | | -#define ZLP BIT(17) |
|---|
| 626 | | - |
|---|
| 627 | 568 | |
|---|
| 628 | 569 | static const struct usb_device_id option_ids[] = { |
|---|
| 570 | +#if 1 //Added by Quectel |
|---|
| 571 | + { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */ |
|---|
| 572 | + { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */ |
|---|
| 573 | + { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20(MDM9215) */ |
|---|
| 574 | + { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC20(MDM9x07)/EC25/EG25 */ |
|---|
| 575 | + { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */ |
|---|
| 576 | + { USB_DEVICE(0x2C7C, 0x0191) }, /* Quectel EG91 */ |
|---|
| 577 | + { USB_DEVICE(0x2C7C, 0x0195) }, /* Quectel EG95 */ |
|---|
| 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 */ |
|---|
| 581 | + { USB_DEVICE(0x2C7C, 0x0512) }, /* Quectel EG12/EP12/EM12/EG16/EG18 */ |
|---|
| 582 | + { USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG96 */ |
|---|
| 583 | + { USB_DEVICE(0x2C7C, 0x0700) }, /* Quectel BG95/BG77/BG600L-M3/BC69 */ |
|---|
| 584 | + { USB_DEVICE(0x2C7C, 0x0435) }, /* Quectel AG35 */ |
|---|
| 585 | + { USB_DEVICE(0x2C7C, 0x0415) }, /* Quectel AG15 */ |
|---|
| 586 | + { USB_DEVICE(0x2C7C, 0x0452) }, /* Quectel AG520 */ |
|---|
| 587 | + { USB_DEVICE(0x2C7C, 0x0455) }, /* Quectel AG550 */ |
|---|
| 588 | + { USB_DEVICE(0x2C7C, 0x0620) }, /* Quectel EG20 */ |
|---|
| 589 | + { USB_DEVICE(0x2C7C, 0x0800) }, /* Quectel RG500/RM500/RG510/RM510 */ |
|---|
| 590 | + { USB_DEVICE(0x2C7C, 0x0801) }, /* Quectel RG520/RM520/SG520 */ |
|---|
| 591 | + { USB_DEVICE(0x2C7C, 0x6026) }, /* Quectel EC200 */ |
|---|
| 592 | + { USB_DEVICE(0x2C7C, 0x6120) }, /* Quectel UC200 */ |
|---|
| 593 | + { USB_DEVICE(0x2C7C, 0x6000) }, /* Quectel EC200/UC200 */ |
|---|
| 594 | + { .match_flags = USB_DEVICE_ID_MATCH_VENDOR, .idVendor = 0x2C7C }, /* Match All Quectel Modules */ |
|---|
| 595 | +#endif |
|---|
| 629 | 596 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, |
|---|
| 630 | 597 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) }, |
|---|
| 631 | 598 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) }, |
|---|
| .. | .. |
|---|
| 1027 | 994 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7B) }, |
|---|
| 1028 | 995 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7C) }, |
|---|
| 1029 | 996 | |
|---|
| 1030 | | - /* Motorola devices */ |
|---|
| 1031 | | - { USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x2a70, 0xff, 0xff, 0xff) }, /* mdm6600 */ |
|---|
| 1032 | | - { USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x2e0a, 0xff, 0xff, 0xff) }, /* mdm9600 */ |
|---|
| 1033 | | - { USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x4281, 0x0a, 0x00, 0xfc) }, /* mdm ram dl */ |
|---|
| 1034 | | - { USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x900e, 0xff, 0xff, 0xff) }, /* mdm qc dl */ |
|---|
| 1035 | 997 | |
|---|
| 1036 | 998 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, |
|---|
| 1037 | 999 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, |
|---|
| .. | .. |
|---|
| 1102 | 1064 | { USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, DELL_PRODUCT_5804_MINICARD_ATT, 0xff, 0xff, 0xff) }, |
|---|
| 1103 | 1065 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5821E), |
|---|
| 1104 | 1066 | .driver_info = RSVD(0) | RSVD(1) | RSVD(6) }, |
|---|
| 1105 | | - { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5821E_ESIM), |
|---|
| 1106 | | - .driver_info = RSVD(0) | RSVD(1) | RSVD(6) }, |
|---|
| 1107 | | - { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5829E), |
|---|
| 1108 | | - .driver_info = RSVD(0) | RSVD(6) }, |
|---|
| 1109 | | - { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5829E_ESIM), |
|---|
| 1110 | | - .driver_info = RSVD(0) | RSVD(6) }, |
|---|
| 1111 | 1067 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */ |
|---|
| 1112 | 1068 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) }, |
|---|
| 1113 | 1069 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) }, |
|---|
| .. | .. |
|---|
| 1149 | 1105 | /* u-blox products using Qualcomm vendor ID */ |
|---|
| 1150 | 1106 | { USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R410M), |
|---|
| 1151 | 1107 | .driver_info = RSVD(1) | RSVD(3) }, |
|---|
| 1152 | | - { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x908b), /* u-blox LARA-R6 00B */ |
|---|
| 1153 | | - .driver_info = RSVD(4) }, |
|---|
| 1154 | | - { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x90fa), |
|---|
| 1155 | | - .driver_info = RSVD(3) }, |
|---|
| 1156 | | - /* u-blox products */ |
|---|
| 1157 | | - { USB_DEVICE(UBLOX_VENDOR_ID, 0x1311) }, /* u-blox LARA-R6 01B */ |
|---|
| 1158 | | - { USB_DEVICE(UBLOX_VENDOR_ID, 0x1312), /* u-blox LARA-R6 01B (RMNET) */ |
|---|
| 1159 | | - .driver_info = RSVD(4) }, |
|---|
| 1160 | | - { USB_DEVICE_INTERFACE_CLASS(UBLOX_VENDOR_ID, 0x1313, 0xff) }, /* u-blox LARA-R6 01B (ECM) */ |
|---|
| 1161 | | - { USB_DEVICE(UBLOX_VENDOR_ID, 0x1341) }, /* u-blox LARA-L6 */ |
|---|
| 1162 | | - { USB_DEVICE(UBLOX_VENDOR_ID, 0x1342), /* u-blox LARA-L6 (RMNET) */ |
|---|
| 1163 | | - .driver_info = RSVD(4) }, |
|---|
| 1164 | | - { USB_DEVICE(UBLOX_VENDOR_ID, 0x1343), /* u-blox LARA-L6 (ECM) */ |
|---|
| 1165 | | - .driver_info = RSVD(4) }, |
|---|
| 1166 | 1108 | /* Quectel products using Quectel vendor ID */ |
|---|
| 1167 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21, 0xff, 0xff, 0xff), |
|---|
| 1168 | | - .driver_info = NUMEP2 }, |
|---|
| 1169 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21, 0xff, 0, 0) }, |
|---|
| 1170 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25, 0xff, 0xff, 0xff), |
|---|
| 1171 | | - .driver_info = NUMEP2 }, |
|---|
| 1172 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25, 0xff, 0, 0) }, |
|---|
| 1173 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG91, 0xff, 0xff, 0xff), |
|---|
| 1174 | | - .driver_info = NUMEP2 }, |
|---|
| 1175 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG91, 0xff, 0, 0) }, |
|---|
| 1176 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0xff, 0xff), |
|---|
| 1177 | | - .driver_info = NUMEP2 }, |
|---|
| 1178 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0, 0) }, |
|---|
| 1179 | | - { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, 0x0203, 0xff), /* BG95-M3 */ |
|---|
| 1180 | | - .driver_info = ZLP }, |
|---|
| 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) }, |
|---|
| 1181 | 1113 | { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96), |
|---|
| 1182 | 1114 | .driver_info = RSVD(4) }, |
|---|
| 1183 | 1115 | { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff), |
|---|
| 1184 | 1116 | .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 }, |
|---|
| 1185 | 1117 | { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0, 0) }, |
|---|
| 1186 | | - { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05CN, 0xff), |
|---|
| 1187 | | - .driver_info = RSVD(6) | ZLP }, |
|---|
| 1188 | | - { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05CN_SG, 0xff), |
|---|
| 1189 | | - .driver_info = RSVD(6) | ZLP }, |
|---|
| 1190 | | - { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G, 0xff), |
|---|
| 1191 | | - .driver_info = RSVD(6) | ZLP }, |
|---|
| 1192 | | - { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_GR, 0xff), |
|---|
| 1193 | | - .driver_info = RSVD(6) | ZLP }, |
|---|
| 1194 | | - { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05GV2, 0xff), |
|---|
| 1195 | | - .driver_info = RSVD(4) | ZLP }, |
|---|
| 1196 | | - { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_CS, 0xff), |
|---|
| 1197 | | - .driver_info = RSVD(6) | ZLP }, |
|---|
| 1198 | | - { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_RS, 0xff), |
|---|
| 1199 | | - .driver_info = RSVD(6) | ZLP }, |
|---|
| 1200 | | - { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_SG, 0xff), |
|---|
| 1201 | | - .driver_info = RSVD(6) | ZLP }, |
|---|
| 1202 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0x00, 0x40) }, |
|---|
| 1203 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0xff, 0x30) }, |
|---|
| 1204 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0xff, 0x40) }, |
|---|
| 1205 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K_128, 0xff, 0xff, 0x30) }, |
|---|
| 1206 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K_128, 0xff, 0x00, 0x40) }, |
|---|
| 1207 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K_128, 0xff, 0xff, 0x40) }, |
|---|
| 1208 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LCN, 0xff, 0xff, 0x30) }, |
|---|
| 1209 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LCN, 0xff, 0x00, 0x40) }, |
|---|
| 1210 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LCN, 0xff, 0xff, 0x40) }, |
|---|
| 1211 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LMS, 0xff, 0xff, 0x30) }, |
|---|
| 1212 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LMS, 0xff, 0x00, 0x40) }, |
|---|
| 1213 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LMS, 0xff, 0xff, 0x40) }, |
|---|
| 1214 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LTA, 0xff, 0xff, 0x30) }, |
|---|
| 1215 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LTA, 0xff, 0x00, 0x40) }, |
|---|
| 1216 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LTA, 0xff, 0xff, 0x40) }, |
|---|
| 1217 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0xff, 0x30) }, |
|---|
| 1218 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0x00, 0x40) }, |
|---|
| 1219 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0xff, 0x40) }, |
|---|
| 1220 | 1118 | { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0xff, 0xff), |
|---|
| 1221 | 1119 | .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 }, |
|---|
| 1222 | 1120 | { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0, 0) }, |
|---|
| 1223 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 0x0620, 0xff, 0xff, 0x30) }, /* EM160R-GL */ |
|---|
| 1224 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 0x0620, 0xff, 0, 0) }, |
|---|
| 1225 | | - { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, 0x0700, 0xff), /* BG95 */ |
|---|
| 1226 | | - .driver_info = RSVD(3) | ZLP }, |
|---|
| 1227 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x30) }, |
|---|
| 1228 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) }, |
|---|
| 1229 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10), |
|---|
| 1230 | | - .driver_info = ZLP }, |
|---|
| 1231 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0xff, 0x30) }, |
|---|
| 1232 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0, 0x40) }, |
|---|
| 1233 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0, 0) }, |
|---|
| 1234 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 0x0900, 0xff, 0, 0), /* RM500U-CN */ |
|---|
| 1235 | | - .driver_info = ZLP }, |
|---|
| 1236 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200A, 0xff, 0, 0) }, |
|---|
| 1237 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200U, 0xff, 0, 0) }, |
|---|
| 1238 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200S_CN, 0xff, 0, 0) }, |
|---|
| 1239 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) }, |
|---|
| 1240 | | - { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500K, 0xff, 0x00, 0x00) }, |
|---|
| 1241 | | - |
|---|
| 1242 | 1121 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) }, |
|---|
| 1243 | 1122 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) }, |
|---|
| 1244 | 1123 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003), |
|---|
| .. | .. |
|---|
| 1286 | 1165 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) }, |
|---|
| 1287 | 1166 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) }, |
|---|
| 1288 | 1167 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UE910_V2) }, |
|---|
| 1289 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1031, 0xff), /* Telit LE910C1-EUX */ |
|---|
| 1290 | | - .driver_info = NCTRL(0) | RSVD(3) }, |
|---|
| 1291 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1033, 0xff), /* Telit LE910C1-EUX (ECM) */ |
|---|
| 1292 | | - .driver_info = NCTRL(0) }, |
|---|
| 1293 | 1168 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG0), |
|---|
| 1294 | 1169 | .driver_info = RSVD(0) | RSVD(1) | NCTRL(2) | RSVD(3) }, |
|---|
| 1295 | 1170 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG1), |
|---|
| .. | .. |
|---|
| 1300 | 1175 | .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) }, |
|---|
| 1301 | 1176 | { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG5, 0xff), |
|---|
| 1302 | 1177 | .driver_info = RSVD(0) | RSVD(1) | NCTRL(2) | RSVD(3) }, |
|---|
| 1303 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1050, 0xff), /* Telit FN980 (rmnet) */ |
|---|
| 1304 | | - .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, |
|---|
| 1305 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1051, 0xff), /* Telit FN980 (MBIM) */ |
|---|
| 1306 | | - .driver_info = NCTRL(0) | RSVD(1) }, |
|---|
| 1307 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1052, 0xff), /* Telit FN980 (RNDIS) */ |
|---|
| 1308 | | - .driver_info = NCTRL(2) | RSVD(3) }, |
|---|
| 1309 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1053, 0xff), /* Telit FN980 (ECM) */ |
|---|
| 1310 | | - .driver_info = NCTRL(0) | RSVD(1) }, |
|---|
| 1311 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1054, 0xff), /* Telit FT980-KS */ |
|---|
| 1312 | | - .driver_info = NCTRL(2) | RSVD(3) }, |
|---|
| 1313 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1055, 0xff), /* Telit FN980 (PCIe) */ |
|---|
| 1314 | | - .driver_info = NCTRL(0) | RSVD(1) }, |
|---|
| 1315 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1056, 0xff), /* Telit FD980 */ |
|---|
| 1316 | | - .driver_info = NCTRL(2) | RSVD(3) }, |
|---|
| 1317 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1057, 0xff), /* Telit FN980 */ |
|---|
| 1318 | | - .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, |
|---|
| 1319 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1058, 0xff), /* Telit FN980 (PCIe) */ |
|---|
| 1320 | | - .driver_info = NCTRL(0) | RSVD(1) }, |
|---|
| 1321 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1060, 0xff), /* Telit LN920 (rmnet) */ |
|---|
| 1322 | | - .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, |
|---|
| 1323 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1061, 0xff), /* Telit LN920 (MBIM) */ |
|---|
| 1324 | | - .driver_info = NCTRL(0) | RSVD(1) }, |
|---|
| 1325 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1062, 0xff), /* Telit LN920 (RNDIS) */ |
|---|
| 1326 | | - .driver_info = NCTRL(2) | RSVD(3) }, |
|---|
| 1327 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1063, 0xff), /* Telit LN920 (ECM) */ |
|---|
| 1328 | | - .driver_info = NCTRL(0) | RSVD(1) }, |
|---|
| 1329 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1070, 0xff), /* Telit FN990 (rmnet) */ |
|---|
| 1330 | | - .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, |
|---|
| 1331 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1071, 0xff), /* Telit FN990 (MBIM) */ |
|---|
| 1332 | | - .driver_info = NCTRL(0) | RSVD(1) }, |
|---|
| 1333 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1072, 0xff), /* Telit FN990 (RNDIS) */ |
|---|
| 1334 | | - .driver_info = NCTRL(2) | RSVD(3) }, |
|---|
| 1335 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1073, 0xff), /* Telit FN990 (ECM) */ |
|---|
| 1336 | | - .driver_info = NCTRL(0) | RSVD(1) }, |
|---|
| 1337 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1075, 0xff), /* Telit FN990 (PCIe) */ |
|---|
| 1338 | | - .driver_info = RSVD(0) }, |
|---|
| 1339 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1080, 0xff), /* Telit FE990 (rmnet) */ |
|---|
| 1340 | | - .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, |
|---|
| 1341 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1081, 0xff), /* Telit FE990 (MBIM) */ |
|---|
| 1342 | | - .driver_info = NCTRL(0) | RSVD(1) }, |
|---|
| 1343 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1082, 0xff), /* Telit FE990 (RNDIS) */ |
|---|
| 1344 | | - .driver_info = NCTRL(2) | RSVD(3) }, |
|---|
| 1345 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1083, 0xff), /* Telit FE990 (ECM) */ |
|---|
| 1346 | | - .driver_info = NCTRL(0) | RSVD(1) }, |
|---|
| 1347 | 1178 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910), |
|---|
| 1348 | 1179 | .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) }, |
|---|
| 1349 | 1180 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM), |
|---|
| 1350 | 1181 | .driver_info = NCTRL(0) | RSVD(3) }, |
|---|
| 1351 | 1182 | { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1102, 0xff), /* Telit ME910 (ECM) */ |
|---|
| 1352 | 1183 | .driver_info = NCTRL(0) }, |
|---|
| 1353 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x110a, 0xff), /* Telit ME910G1 */ |
|---|
| 1354 | | - .driver_info = NCTRL(0) | RSVD(3) }, |
|---|
| 1355 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x110b, 0xff), /* Telit ME910G1 (ECM) */ |
|---|
| 1356 | | - .driver_info = NCTRL(0) }, |
|---|
| 1357 | 1184 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910), |
|---|
| 1358 | 1185 | .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, |
|---|
| 1359 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1203, 0xff), /* Telit LE910Cx (RNDIS) */ |
|---|
| 1360 | | - .driver_info = NCTRL(2) | RSVD(3) }, |
|---|
| 1361 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1204, 0xff), /* Telit LE910Cx (MBIM) */ |
|---|
| 1362 | | - .driver_info = NCTRL(0) | RSVD(1) }, |
|---|
| 1363 | 1186 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4), |
|---|
| 1364 | 1187 | .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) }, |
|---|
| 1365 | 1188 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920), |
|---|
| .. | .. |
|---|
| 1374 | 1197 | { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1213, 0xff) }, |
|---|
| 1375 | 1198 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1214), |
|---|
| 1376 | 1199 | .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) }, |
|---|
| 1377 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1230, 0xff), /* Telit LE910Cx (rmnet) */ |
|---|
| 1378 | | - .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, |
|---|
| 1379 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1231, 0xff), /* Telit LE910Cx (RNDIS) */ |
|---|
| 1380 | | - .driver_info = NCTRL(2) | RSVD(3) }, |
|---|
| 1381 | | - { USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x1250, 0xff, 0x00, 0x00) }, /* Telit LE910Cx (rmnet) */ |
|---|
| 1382 | | - { USB_DEVICE(TELIT_VENDOR_ID, 0x1260), |
|---|
| 1383 | | - .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, |
|---|
| 1384 | | - { USB_DEVICE(TELIT_VENDOR_ID, 0x1261), |
|---|
| 1385 | | - .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, |
|---|
| 1386 | 1200 | { USB_DEVICE(TELIT_VENDOR_ID, 0x1900), /* Telit LN940 (QMI) */ |
|---|
| 1387 | 1201 | .driver_info = NCTRL(0) | RSVD(1) }, |
|---|
| 1388 | 1202 | { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1901, 0xff), /* Telit LN940 (MBIM) */ |
|---|
| 1389 | 1203 | .driver_info = NCTRL(0) }, |
|---|
| 1390 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x7010, 0xff), /* Telit LE910-S1 (RNDIS) */ |
|---|
| 1391 | | - .driver_info = NCTRL(2) }, |
|---|
| 1392 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x7011, 0xff), /* Telit LE910-S1 (ECM) */ |
|---|
| 1393 | | - .driver_info = NCTRL(2) }, |
|---|
| 1394 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x701a, 0xff), /* Telit LE910R1 (RNDIS) */ |
|---|
| 1395 | | - .driver_info = NCTRL(2) }, |
|---|
| 1396 | | - { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x701b, 0xff), /* Telit LE910R1 (ECM) */ |
|---|
| 1397 | | - .driver_info = NCTRL(2) }, |
|---|
| 1398 | | - { USB_DEVICE(TELIT_VENDOR_ID, 0x9010), /* Telit SBL FN980 flashing device */ |
|---|
| 1399 | | - .driver_info = NCTRL(0) | ZLP }, |
|---|
| 1400 | | - { USB_DEVICE(TELIT_VENDOR_ID, 0x9200), /* Telit LE910S1 flashing device */ |
|---|
| 1401 | | - .driver_info = NCTRL(0) | ZLP }, |
|---|
| 1402 | | - { USB_DEVICE(TELIT_VENDOR_ID, 0x9201), /* Telit LE910R1 flashing device */ |
|---|
| 1403 | | - .driver_info = NCTRL(0) | ZLP }, |
|---|
| 1404 | 1204 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ |
|---|
| 1405 | 1205 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0002, 0xff, 0xff, 0xff), |
|---|
| 1406 | 1206 | .driver_info = RSVD(1) }, |
|---|
| .. | .. |
|---|
| 1565 | 1365 | .driver_info = RSVD(4) }, |
|---|
| 1566 | 1366 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0414, 0xff, 0xff, 0xff) }, |
|---|
| 1567 | 1367 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0417, 0xff, 0xff, 0xff) }, |
|---|
| 1568 | | - { USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x0601, 0xff) }, /* GosunCn ZTE WeLink ME3630 (RNDIS mode) */ |
|---|
| 1569 | 1368 | { USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x0602, 0xff) }, /* GosunCn ZTE WeLink ME3630 (MBIM mode) */ |
|---|
| 1570 | 1369 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1008, 0xff, 0xff, 0xff), |
|---|
| 1571 | 1370 | .driver_info = RSVD(4) }, |
|---|
| .. | .. |
|---|
| 1728 | 1527 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1272, 0xff, 0xff, 0xff) }, |
|---|
| 1729 | 1528 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1273, 0xff, 0xff, 0xff) }, |
|---|
| 1730 | 1529 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1274, 0xff, 0xff, 0xff) }, |
|---|
| 1731 | | - { USB_DEVICE(ZTE_VENDOR_ID, 0x1275), /* ZTE P685M */ |
|---|
| 1732 | | - .driver_info = RSVD(3) | RSVD(4) }, |
|---|
| 1530 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1275, 0xff, 0xff, 0xff) }, |
|---|
| 1733 | 1531 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1276, 0xff, 0xff, 0xff) }, |
|---|
| 1734 | 1532 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1277, 0xff, 0xff, 0xff) }, |
|---|
| 1735 | 1533 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1278, 0xff, 0xff, 0xff) }, |
|---|
| .. | .. |
|---|
| 1772 | 1570 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1428, 0xff, 0xff, 0xff), /* Telewell TW-LTE 4G v2 */ |
|---|
| 1773 | 1571 | .driver_info = RSVD(2) }, |
|---|
| 1774 | 1572 | { USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x1476, 0xff) }, /* GosunCn ZTE WeLink ME3630 (ECM/NCM mode) */ |
|---|
| 1775 | | - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1481, 0xff, 0x00, 0x00) }, /* ZTE MF871A */ |
|---|
| 1776 | | - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1485, 0xff, 0xff, 0xff), /* ZTE MF286D */ |
|---|
| 1777 | | - .driver_info = RSVD(5) }, |
|---|
| 1778 | 1573 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1533, 0xff, 0xff, 0xff) }, |
|---|
| 1779 | 1574 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1534, 0xff, 0xff, 0xff) }, |
|---|
| 1780 | 1575 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1535, 0xff, 0xff, 0xff) }, |
|---|
| .. | .. |
|---|
| 1802 | 1597 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0060, 0xff, 0xff, 0xff) }, |
|---|
| 1803 | 1598 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0070, 0xff, 0xff, 0xff) }, |
|---|
| 1804 | 1599 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0073, 0xff, 0xff, 0xff) }, |
|---|
| 1600 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0094, 0xff, 0xff, 0xff) }, |
|---|
| 1805 | 1601 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0130, 0xff, 0xff, 0xff), |
|---|
| 1806 | 1602 | .driver_info = RSVD(1) }, |
|---|
| 1807 | 1603 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0133, 0xff, 0xff, 0xff), |
|---|
| .. | .. |
|---|
| 2002 | 1798 | { USB_DEVICE(ALINK_VENDOR_ID, SIMCOM_PRODUCT_SIM7100E), |
|---|
| 2003 | 1799 | .driver_info = RSVD(5) | RSVD(6) }, |
|---|
| 2004 | 1800 | { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9003, 0xff) }, /* Simcom SIM7500/SIM7600 MBIM mode */ |
|---|
| 2005 | | - { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9011, 0xff), /* Simcom SIM7500/SIM7600 RNDIS mode */ |
|---|
| 2006 | | - .driver_info = RSVD(7) }, |
|---|
| 2007 | | - { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9205, 0xff) }, /* Simcom SIM7070/SIM7080/SIM7090 AT+ECM mode */ |
|---|
| 2008 | | - { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9206, 0xff) }, /* Simcom SIM7070/SIM7080/SIM7090 AT-only mode */ |
|---|
| 2009 | 1801 | { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200), |
|---|
| 2010 | 1802 | .driver_info = NCTRL(0) | NCTRL(1) | RSVD(4) }, |
|---|
| 2011 | 1803 | { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D), |
|---|
| .. | .. |
|---|
| 2022 | 1814 | .driver_info = RSVD(2) }, |
|---|
| 2023 | 1815 | { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) }, |
|---|
| 2024 | 1816 | { USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) }, |
|---|
| 2025 | | - { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_CARSTICK_LTE), |
|---|
| 2026 | | - .driver_info = RSVD(0) }, |
|---|
| 2027 | 1817 | { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14), |
|---|
| 2028 | 1818 | .driver_info = NCTRL(0) | NCTRL(1) }, |
|---|
| 2029 | 1819 | { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W100), |
|---|
| .. | .. |
|---|
| 2070 | 1860 | .driver_info = RSVD(4) }, |
|---|
| 2071 | 1861 | { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX_2RMNET, 0xff) }, |
|---|
| 2072 | 1862 | { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX_AUDIO, 0xff) }, |
|---|
| 2073 | | - { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_CLS8, 0xff), |
|---|
| 2074 | | - .driver_info = RSVD(0) | RSVD(4) }, |
|---|
| 2075 | | - { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EXS82, 0xff) }, |
|---|
| 2076 | 1863 | { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) }, |
|---|
| 2077 | 1864 | { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) }, |
|---|
| 2078 | 1865 | { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) }, |
|---|
| 2079 | 1866 | { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDMNET) }, |
|---|
| 2080 | 1867 | { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) }, /* HC28 enumerates with Siemens or Cinterion VID depending on FW revision */ |
|---|
| 2081 | 1868 | { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) }, |
|---|
| 2082 | | - { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV31_MBIM, 0xff), |
|---|
| 2083 | | - .driver_info = RSVD(3)}, |
|---|
| 2084 | | - { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV31_RMNET, 0xff), |
|---|
| 2085 | | - .driver_info = RSVD(0)}, |
|---|
| 2086 | | - { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV31_2_MBIM, 0xff), |
|---|
| 2087 | | - .driver_info = RSVD(3)}, |
|---|
| 2088 | | - { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV31_2_RMNET, 0xff), |
|---|
| 2089 | | - .driver_info = RSVD(0)}, |
|---|
| 2090 | | - { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV32_WA, 0xff), |
|---|
| 2091 | | - .driver_info = RSVD(3)}, |
|---|
| 2092 | | - { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV32_WA_RMNET, 0xff), |
|---|
| 2093 | | - .driver_info = RSVD(0) }, |
|---|
| 2094 | | - { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV32_WB, 0xff), |
|---|
| 2095 | | - .driver_info = RSVD(3)}, |
|---|
| 2096 | | - { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_MV32_WB_RMNET, 0xff), |
|---|
| 2097 | | - .driver_info = RSVD(0) }, |
|---|
| 2098 | 1869 | { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100), |
|---|
| 2099 | 1870 | .driver_info = RSVD(4) }, |
|---|
| 2100 | 1871 | { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD120), |
|---|
| .. | .. |
|---|
| 2182 | 1953 | { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x02, 0x01) }, |
|---|
| 2183 | 1954 | { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) }, |
|---|
| 2184 | 1955 | { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) }, |
|---|
| 2185 | | - { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MPL200), |
|---|
| 2186 | | - .driver_info = RSVD(1) | RSVD(4) }, |
|---|
| 2187 | 1956 | { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600A) }, |
|---|
| 2188 | 1957 | { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600E) }, |
|---|
| 2189 | 1958 | { USB_DEVICE_AND_INTERFACE_INFO(TPLINK_VENDOR_ID, TPLINK_PRODUCT_LTE, 0xff, 0x00, 0x00) }, /* TP-Link LTE Module */ |
|---|
| .. | .. |
|---|
| 2202 | 1971 | .driver_info = RSVD(4) }, |
|---|
| 2203 | 1972 | { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e35, 0xff), /* D-Link DWM-222 */ |
|---|
| 2204 | 1973 | .driver_info = RSVD(4) }, |
|---|
| 2205 | | - { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e3d, 0xff), /* D-Link DWM-222 A2 */ |
|---|
| 2206 | | - .driver_info = RSVD(4) }, |
|---|
| 2207 | 1974 | { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */ |
|---|
| 2208 | 1975 | { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */ |
|---|
| 2209 | 1976 | { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x7e11, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/A3 */ |
|---|
| 2210 | | - { USB_DEVICE_INTERFACE_CLASS(0x1435, 0xd191, 0xff), /* Wistron Neweb D19Q1 */ |
|---|
| 2211 | | - .driver_info = RSVD(1) | RSVD(4) }, |
|---|
| 2212 | | - { USB_DEVICE_INTERFACE_CLASS(0x1690, 0x7588, 0xff), /* ASKEY WWHC050 */ |
|---|
| 2213 | | - .driver_info = RSVD(1) | RSVD(4) }, |
|---|
| 2214 | 1977 | { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2031, 0xff), /* Olicard 600 */ |
|---|
| 2215 | | - .driver_info = RSVD(4) }, |
|---|
| 2216 | | - { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2033, 0xff), /* BroadMobi BM806U */ |
|---|
| 2217 | | - .driver_info = RSVD(4) }, |
|---|
| 2218 | | - { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2060, 0xff), /* BroadMobi BM818 */ |
|---|
| 2219 | 1978 | .driver_info = RSVD(4) }, |
|---|
| 2220 | 1979 | { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x4000, 0xff) }, /* OLICARD300 - MT6225 */ |
|---|
| 2221 | 1980 | { USB_DEVICE(INOVIA_VENDOR_ID, INOVIA_SEW858) }, |
|---|
| .. | .. |
|---|
| 2229 | 1988 | { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x13) }, |
|---|
| 2230 | 1989 | { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x14) }, |
|---|
| 2231 | 1990 | { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x1b) }, |
|---|
| 2232 | | - { USB_DEVICE(0x0489, 0xe0b4), /* Foxconn T77W968 */ |
|---|
| 2233 | | - .driver_info = RSVD(0) | RSVD(1) | RSVD(6) }, |
|---|
| 2234 | | - { USB_DEVICE(0x0489, 0xe0b5), /* Foxconn T77W968 ESIM */ |
|---|
| 2235 | | - .driver_info = RSVD(0) | RSVD(1) | RSVD(6) }, |
|---|
| 2236 | | - { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0db, 0xff), /* Foxconn T99W265 MBIM */ |
|---|
| 2237 | | - .driver_info = RSVD(3) }, |
|---|
| 2238 | | - { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0ee, 0xff), /* Foxconn T99W368 MBIM */ |
|---|
| 2239 | | - .driver_info = RSVD(3) }, |
|---|
| 2240 | | - { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0f0, 0xff), /* Foxconn T99W373 MBIM */ |
|---|
| 2241 | | - .driver_info = RSVD(3) }, |
|---|
| 2242 | | - { USB_DEVICE(0x1508, 0x1001), /* Fibocom NL668 (IOT version) */ |
|---|
| 1991 | + { USB_DEVICE(0x1508, 0x1001), /* Fibocom NL668 */ |
|---|
| 2243 | 1992 | .driver_info = RSVD(4) | RSVD(5) | RSVD(6) }, |
|---|
| 2244 | | - { USB_DEVICE(0x1782, 0x4d10) }, /* Fibocom L610 (AT mode) */ |
|---|
| 2245 | | - { USB_DEVICE_INTERFACE_CLASS(0x1782, 0x4d11, 0xff) }, /* Fibocom L610 (ECM/RNDIS mode) */ |
|---|
| 2246 | 1993 | { USB_DEVICE(0x2cb7, 0x0104), /* Fibocom NL678 series */ |
|---|
| 2247 | 1994 | .driver_info = RSVD(4) | RSVD(5) }, |
|---|
| 2248 | 1995 | { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0105, 0xff), /* Fibocom NL678 series */ |
|---|
| 2249 | 1996 | .driver_info = RSVD(6) }, |
|---|
| 2250 | | - { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0106, 0xff) }, /* Fibocom MA510 (ECM mode w/ diag intf.) */ |
|---|
| 2251 | | - { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x010a, 0xff) }, /* Fibocom MA510 (ECM mode) */ |
|---|
| 2252 | | - { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0xff, 0x30) }, /* Fibocom FG150 Diag */ |
|---|
| 2253 | | - { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0, 0) }, /* Fibocom FG150 AT */ |
|---|
| 2254 | | - { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0111, 0xff) }, /* Fibocom FM160 (MBIM mode) */ |
|---|
| 2255 | | - { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */ |
|---|
| 2256 | | - { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a2, 0xff) }, /* Fibocom FM101-GL (laptop MBIM) */ |
|---|
| 2257 | | - { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a4, 0xff), /* Fibocom FM101-GL (laptop MBIM) */ |
|---|
| 2258 | | - .driver_info = RSVD(4) }, |
|---|
| 2259 | | - { USB_DEVICE_INTERFACE_CLASS(0x2df3, 0x9d03, 0xff) }, /* LongSung M5710 */ |
|---|
| 2260 | | - { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1404, 0xff) }, /* GosunCn GM500 RNDIS */ |
|---|
| 2261 | | - { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1405, 0xff) }, /* GosunCn GM500 MBIM */ |
|---|
| 2262 | | - { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1406, 0xff) }, /* GosunCn GM500 ECM/NCM */ |
|---|
| 2263 | | - { USB_DEVICE_AND_INTERFACE_INFO(OPPO_VENDOR_ID, OPPO_PRODUCT_R11, 0xff, 0xff, 0x30) }, |
|---|
| 2264 | | - { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x30) }, |
|---|
| 2265 | | - { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0, 0) }, |
|---|
| 2266 | | - { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, TOZED_PRODUCT_LT70C, 0xff, 0, 0) }, |
|---|
| 2267 | 1997 | { } /* Terminating entry */ |
|---|
| 2268 | 1998 | }; |
|---|
| 2269 | 1999 | MODULE_DEVICE_TABLE(usb, option_ids); |
|---|
| .. | .. |
|---|
| 2272 | 2002 | * recognizes separately, thus num_port=1. |
|---|
| 2273 | 2003 | */ |
|---|
| 2274 | 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 | + |
|---|
| 2275 | 2023 | static struct usb_serial_driver option_1port_device = { |
|---|
| 2024 | + .init_termios = option_init_termios, |
|---|
| 2276 | 2025 | .driver = { |
|---|
| 2277 | 2026 | .owner = THIS_MODULE, |
|---|
| 2278 | 2027 | .name = "option1", |
|---|
| .. | .. |
|---|
| 2299 | 2048 | #ifdef CONFIG_PM |
|---|
| 2300 | 2049 | .suspend = usb_wwan_suspend, |
|---|
| 2301 | 2050 | .resume = usb_wwan_resume, |
|---|
| 2051 | +#if 1 //Added by Quectel |
|---|
| 2052 | + .reset_resume = usb_wwan_resume, |
|---|
| 2053 | +#endif |
|---|
| 2302 | 2054 | #endif |
|---|
| 2303 | 2055 | }; |
|---|
| 2304 | 2056 | |
|---|
| .. | .. |
|---|
| 2308 | 2060 | |
|---|
| 2309 | 2061 | module_usb_serial_driver(serial_drivers, option_ids); |
|---|
| 2310 | 2062 | |
|---|
| 2311 | | -static bool iface_is_reserved(unsigned long device_flags, u8 ifnum) |
|---|
| 2312 | | -{ |
|---|
| 2313 | | - if (ifnum > FLAG_IFNUM_MAX) |
|---|
| 2314 | | - return false; |
|---|
| 2315 | | - |
|---|
| 2316 | | - return device_flags & RSVD(ifnum); |
|---|
| 2317 | | -} |
|---|
| 2318 | | - |
|---|
| 2319 | 2063 | static int option_probe(struct usb_serial *serial, |
|---|
| 2320 | 2064 | const struct usb_device_id *id) |
|---|
| 2321 | 2065 | { |
|---|
| 2322 | 2066 | struct usb_interface_descriptor *iface_desc = |
|---|
| 2323 | 2067 | &serial->interface->cur_altsetting->desc; |
|---|
| 2324 | 2068 | unsigned long device_flags = id->driver_info; |
|---|
| 2069 | + |
|---|
| 2070 | +#if 1 //Added by Quectel |
|---|
| 2071 | + //Quectel UC20's interface 4 can be used as USB Network device |
|---|
| 2072 | + if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) && serial->dev->descriptor.idProduct == cpu_to_le16(0x9003) |
|---|
| 2073 | + && serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4) |
|---|
| 2074 | + return -ENODEV; |
|---|
| 2075 | + |
|---|
| 2076 | + //Quectel EC20(MDM9215)'s interface 4 can be used as USB Network device |
|---|
| 2077 | + if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) && serial->dev->descriptor.idProduct == cpu_to_le16(0x9215) |
|---|
| 2078 | + && serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4) |
|---|
| 2079 | + return -ENODEV; |
|---|
| 2080 | + |
|---|
| 2081 | + if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) { |
|---|
| 2082 | + __u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct); |
|---|
| 2083 | + struct usb_interface_descriptor *intf = &serial->interface->cur_altsetting->desc; |
|---|
| 2084 | + |
|---|
| 2085 | + if (intf->bInterfaceClass != 0xFF || intf->bInterfaceSubClass == 0x42) { |
|---|
| 2086 | + //ECM, RNDIS, NCM, MBIM, ACM, UAC, ADB |
|---|
| 2087 | + return -ENODEV; |
|---|
| 2088 | + } |
|---|
| 2089 | + |
|---|
| 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 | + } |
|---|
| 2096 | + } |
|---|
| 2097 | +#endif |
|---|
| 2325 | 2098 | |
|---|
| 2326 | 2099 | /* Never bind to the CD-Rom emulation interface */ |
|---|
| 2327 | 2100 | if (iface_desc->bInterfaceClass == USB_CLASS_MASS_STORAGE) |
|---|
| .. | .. |
|---|
| 2332 | 2105 | * the same class/subclass/protocol as the serial interfaces. Look at |
|---|
| 2333 | 2106 | * the Windows driver .INF files for reserved interface numbers. |
|---|
| 2334 | 2107 | */ |
|---|
| 2335 | | - if (iface_is_reserved(device_flags, iface_desc->bInterfaceNumber)) |
|---|
| 2108 | + if (device_flags & RSVD(iface_desc->bInterfaceNumber)) |
|---|
| 2336 | 2109 | return -ENODEV; |
|---|
| 2337 | 2110 | |
|---|
| 2338 | 2111 | /* |
|---|
| .. | .. |
|---|
| 2346 | 2119 | usb_set_serial_data(serial, (void *)device_flags); |
|---|
| 2347 | 2120 | |
|---|
| 2348 | 2121 | return 0; |
|---|
| 2349 | | -} |
|---|
| 2350 | | - |
|---|
| 2351 | | -static bool iface_no_modem_control(unsigned long device_flags, u8 ifnum) |
|---|
| 2352 | | -{ |
|---|
| 2353 | | - if (ifnum > FLAG_IFNUM_MAX) |
|---|
| 2354 | | - return false; |
|---|
| 2355 | | - |
|---|
| 2356 | | - return device_flags & NCTRL(ifnum); |
|---|
| 2357 | 2122 | } |
|---|
| 2358 | 2123 | |
|---|
| 2359 | 2124 | static int option_attach(struct usb_serial *serial) |
|---|
| .. | .. |
|---|
| 2371 | 2136 | |
|---|
| 2372 | 2137 | iface_desc = &serial->interface->cur_altsetting->desc; |
|---|
| 2373 | 2138 | |
|---|
| 2374 | | - if (!iface_no_modem_control(device_flags, iface_desc->bInterfaceNumber)) |
|---|
| 2139 | + if (!(device_flags & NCTRL(iface_desc->bInterfaceNumber))) |
|---|
| 2375 | 2140 | data->use_send_setup = 1; |
|---|
| 2376 | | - |
|---|
| 2377 | | - if (device_flags & ZLP) |
|---|
| 2378 | | - data->use_zlp = 1; |
|---|
| 2379 | 2141 | |
|---|
| 2380 | 2142 | spin_lock_init(&data->susp_lock); |
|---|
| 2381 | 2143 | |
|---|
| .. | .. |
|---|
| 2403 | 2165 | dev_dbg(dev, "%s: urb %p port %p has data %p\n", __func__, urb, port, portdata); |
|---|
| 2404 | 2166 | |
|---|
| 2405 | 2167 | if (status == 0) { |
|---|
| 2406 | | - struct usb_ctrlrequest *req_pkt = urb->transfer_buffer; |
|---|
| 2168 | + struct usb_ctrlrequest *req_pkt = |
|---|
| 2169 | + (struct usb_ctrlrequest *)urb->transfer_buffer; |
|---|
| 2407 | 2170 | |
|---|
| 2408 | 2171 | if (!req_pkt) { |
|---|
| 2409 | 2172 | dev_dbg(dev, "%s: NULL req_pkt\n", __func__); |
|---|
| .. | .. |
|---|
| 2436 | 2199 | dev_dbg(dev, "%s: error %d\n", __func__, status); |
|---|
| 2437 | 2200 | |
|---|
| 2438 | 2201 | /* Resubmit urb so we continue receiving IRQ data */ |
|---|
| 2439 | | - if (status != -ESHUTDOWN && status != -ENOENT) { |
|---|
| 2202 | + if (status != -ESHUTDOWN && status != -ENOENT && status != -EPROTO) { |
|---|
| 2440 | 2203 | usb_mark_last_busy(port->serial->dev); |
|---|
| 2441 | 2204 | err = usb_submit_urb(urb, GFP_ATOMIC); |
|---|
| 2442 | 2205 | if (err) |
|---|