diff options
Diffstat (limited to 'drivers/usb/serial/option.c')
-rw-r--r-- | drivers/usb/serial/option.c | 321 |
1 files changed, 262 insertions, 59 deletions
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 60b25d8ea0e..2a9ed6ec8cb 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -148,8 +148,15 @@ static void option_instat_callback(struct urb *urb); | |||
148 | #define HUAWEI_PRODUCT_K4505 0x1464 | 148 | #define HUAWEI_PRODUCT_K4505 0x1464 |
149 | #define HUAWEI_PRODUCT_K3765 0x1465 | 149 | #define HUAWEI_PRODUCT_K3765 0x1465 |
150 | #define HUAWEI_PRODUCT_E14AC 0x14AC | 150 | #define HUAWEI_PRODUCT_E14AC 0x14AC |
151 | #define HUAWEI_PRODUCT_K3806 0x14AE | ||
152 | #define HUAWEI_PRODUCT_K4605 0x14C6 | ||
153 | #define HUAWEI_PRODUCT_K3770 0x14C9 | ||
154 | #define HUAWEI_PRODUCT_K3771 0x14CA | ||
155 | #define HUAWEI_PRODUCT_K4510 0x14CB | ||
156 | #define HUAWEI_PRODUCT_K4511 0x14CC | ||
151 | #define HUAWEI_PRODUCT_ETS1220 0x1803 | 157 | #define HUAWEI_PRODUCT_ETS1220 0x1803 |
152 | #define HUAWEI_PRODUCT_E353 0x1506 | 158 | #define HUAWEI_PRODUCT_E353 0x1506 |
159 | #define HUAWEI_PRODUCT_E173S 0x1C05 | ||
153 | 160 | ||
154 | #define QUANTA_VENDOR_ID 0x0408 | 161 | #define QUANTA_VENDOR_ID 0x0408 |
155 | #define QUANTA_PRODUCT_Q101 0xEA02 | 162 | #define QUANTA_PRODUCT_Q101 0xEA02 |
@@ -310,6 +317,9 @@ static void option_instat_callback(struct urb *urb); | |||
310 | #define ZTE_PRODUCT_AC8710 0xfff1 | 317 | #define ZTE_PRODUCT_AC8710 0xfff1 |
311 | #define ZTE_PRODUCT_AC2726 0xfff5 | 318 | #define ZTE_PRODUCT_AC2726 0xfff5 |
312 | #define ZTE_PRODUCT_AC8710T 0xffff | 319 | #define ZTE_PRODUCT_AC8710T 0xffff |
320 | #define ZTE_PRODUCT_MC2718 0xffe8 | ||
321 | #define ZTE_PRODUCT_AD3812 0xffeb | ||
322 | #define ZTE_PRODUCT_MC2716 0xffed | ||
313 | 323 | ||
314 | #define BENQ_VENDOR_ID 0x04a5 | 324 | #define BENQ_VENDOR_ID 0x04a5 |
315 | #define BENQ_PRODUCT_H10 0x4068 | 325 | #define BENQ_PRODUCT_H10 0x4068 |
@@ -412,6 +422,68 @@ static void option_instat_callback(struct urb *urb); | |||
412 | #define SAMSUNG_VENDOR_ID 0x04e8 | 422 | #define SAMSUNG_VENDOR_ID 0x04e8 |
413 | #define SAMSUNG_PRODUCT_GT_B3730 0x6889 | 423 | #define SAMSUNG_PRODUCT_GT_B3730 0x6889 |
414 | 424 | ||
425 | /* YUGA products www.yuga-info.com*/ | ||
426 | #define YUGA_VENDOR_ID 0x257A | ||
427 | #define YUGA_PRODUCT_CEM600 0x1601 | ||
428 | #define YUGA_PRODUCT_CEM610 0x1602 | ||
429 | #define YUGA_PRODUCT_CEM500 0x1603 | ||
430 | #define YUGA_PRODUCT_CEM510 0x1604 | ||
431 | #define YUGA_PRODUCT_CEM800 0x1605 | ||
432 | #define YUGA_PRODUCT_CEM900 0x1606 | ||
433 | |||
434 | #define YUGA_PRODUCT_CEU818 0x1607 | ||
435 | #define YUGA_PRODUCT_CEU816 0x1608 | ||
436 | #define YUGA_PRODUCT_CEU828 0x1609 | ||
437 | #define YUGA_PRODUCT_CEU826 0x160A | ||
438 | #define YUGA_PRODUCT_CEU518 0x160B | ||
439 | #define YUGA_PRODUCT_CEU516 0x160C | ||
440 | #define YUGA_PRODUCT_CEU528 0x160D | ||
441 | #define YUGA_PRODUCT_CEU526 0x160F | ||
442 | |||
443 | #define YUGA_PRODUCT_CWM600 0x2601 | ||
444 | #define YUGA_PRODUCT_CWM610 0x2602 | ||
445 | #define YUGA_PRODUCT_CWM500 0x2603 | ||
446 | #define YUGA_PRODUCT_CWM510 0x2604 | ||
447 | #define YUGA_PRODUCT_CWM800 0x2605 | ||
448 | #define YUGA_PRODUCT_CWM900 0x2606 | ||
449 | |||
450 | #define YUGA_PRODUCT_CWU718 0x2607 | ||
451 | #define YUGA_PRODUCT_CWU716 0x2608 | ||
452 | #define YUGA_PRODUCT_CWU728 0x2609 | ||
453 | #define YUGA_PRODUCT_CWU726 0x260A | ||
454 | #define YUGA_PRODUCT_CWU518 0x260B | ||
455 | #define YUGA_PRODUCT_CWU516 0x260C | ||
456 | #define YUGA_PRODUCT_CWU528 0x260D | ||
457 | #define YUGA_PRODUCT_CWU526 0x260F | ||
458 | |||
459 | #define YUGA_PRODUCT_CLM600 0x2601 | ||
460 | #define YUGA_PRODUCT_CLM610 0x2602 | ||
461 | #define YUGA_PRODUCT_CLM500 0x2603 | ||
462 | #define YUGA_PRODUCT_CLM510 0x2604 | ||
463 | #define YUGA_PRODUCT_CLM800 0x2605 | ||
464 | #define YUGA_PRODUCT_CLM900 0x2606 | ||
465 | |||
466 | #define YUGA_PRODUCT_CLU718 0x2607 | ||
467 | #define YUGA_PRODUCT_CLU716 0x2608 | ||
468 | #define YUGA_PRODUCT_CLU728 0x2609 | ||
469 | #define YUGA_PRODUCT_CLU726 0x260A | ||
470 | #define YUGA_PRODUCT_CLU518 0x260B | ||
471 | #define YUGA_PRODUCT_CLU516 0x260C | ||
472 | #define YUGA_PRODUCT_CLU528 0x260D | ||
473 | #define YUGA_PRODUCT_CLU526 0x260F | ||
474 | |||
475 | /* Viettel products */ | ||
476 | #define VIETTEL_VENDOR_ID 0x2262 | ||
477 | #define VIETTEL_PRODUCT_VT1000 0x0002 | ||
478 | |||
479 | /* ZD Incorporated */ | ||
480 | #define ZD_VENDOR_ID 0x0685 | ||
481 | #define ZD_PRODUCT_7000 0x7000 | ||
482 | |||
483 | /* LG products */ | ||
484 | #define LG_VENDOR_ID 0x1004 | ||
485 | #define LG_PRODUCT_L02C 0x618f | ||
486 | |||
415 | /* some devices interfaces need special handling due to a number of reasons */ | 487 | /* some devices interfaces need special handling due to a number of reasons */ |
416 | enum option_blacklist_reason { | 488 | enum option_blacklist_reason { |
417 | OPTION_BLACKLIST_NONE = 0, | 489 | OPTION_BLACKLIST_NONE = 0, |
@@ -419,31 +491,66 @@ enum option_blacklist_reason { | |||
419 | OPTION_BLACKLIST_RESERVED_IF = 2 | 491 | OPTION_BLACKLIST_RESERVED_IF = 2 |
420 | }; | 492 | }; |
421 | 493 | ||
494 | #define MAX_BL_NUM 8 | ||
422 | struct option_blacklist_info { | 495 | struct option_blacklist_info { |
423 | const u32 infolen; /* number of interface numbers on blacklist */ | 496 | /* bitfield of interface numbers for OPTION_BLACKLIST_SENDSETUP */ |
424 | const u8 *ifaceinfo; /* pointer to the array holding the numbers */ | 497 | const unsigned long sendsetup; |
425 | enum option_blacklist_reason reason; | 498 | /* bitfield of interface numbers for OPTION_BLACKLIST_RESERVED_IF */ |
499 | const unsigned long reserved; | ||
426 | }; | 500 | }; |
427 | 501 | ||
428 | static const u8 four_g_w14_no_sendsetup[] = { 0, 1 }; | ||
429 | static const struct option_blacklist_info four_g_w14_blacklist = { | 502 | static const struct option_blacklist_info four_g_w14_blacklist = { |
430 | .infolen = ARRAY_SIZE(four_g_w14_no_sendsetup), | 503 | .sendsetup = BIT(0) | BIT(1), |
431 | .ifaceinfo = four_g_w14_no_sendsetup, | ||
432 | .reason = OPTION_BLACKLIST_SENDSETUP | ||
433 | }; | 504 | }; |
434 | 505 | ||
435 | static const u8 alcatel_x200_no_sendsetup[] = { 0, 1 }; | ||
436 | static const struct option_blacklist_info alcatel_x200_blacklist = { | 506 | static const struct option_blacklist_info alcatel_x200_blacklist = { |
437 | .infolen = ARRAY_SIZE(alcatel_x200_no_sendsetup), | 507 | .sendsetup = BIT(0) | BIT(1), |
438 | .ifaceinfo = alcatel_x200_no_sendsetup, | 508 | }; |
439 | .reason = OPTION_BLACKLIST_SENDSETUP | 509 | |
510 | static const struct option_blacklist_info zte_0037_blacklist = { | ||
511 | .sendsetup = BIT(0) | BIT(1), | ||
440 | }; | 512 | }; |
441 | 513 | ||
442 | static const u8 zte_k3765_z_no_sendsetup[] = { 0, 1, 2 }; | ||
443 | static const struct option_blacklist_info zte_k3765_z_blacklist = { | 514 | static const struct option_blacklist_info zte_k3765_z_blacklist = { |
444 | .infolen = ARRAY_SIZE(zte_k3765_z_no_sendsetup), | 515 | .sendsetup = BIT(0) | BIT(1) | BIT(2), |
445 | .ifaceinfo = zte_k3765_z_no_sendsetup, | 516 | .reserved = BIT(4), |
446 | .reason = OPTION_BLACKLIST_SENDSETUP | 517 | }; |
518 | |||
519 | static const struct option_blacklist_info zte_ad3812_z_blacklist = { | ||
520 | .sendsetup = BIT(0) | BIT(1) | BIT(2), | ||
521 | }; | ||
522 | |||
523 | static const struct option_blacklist_info zte_mc2718_z_blacklist = { | ||
524 | .sendsetup = BIT(1) | BIT(2) | BIT(3) | BIT(4), | ||
525 | }; | ||
526 | |||
527 | static const struct option_blacklist_info zte_mc2716_z_blacklist = { | ||
528 | .sendsetup = BIT(1) | BIT(2) | BIT(3), | ||
529 | }; | ||
530 | |||
531 | static const struct option_blacklist_info huawei_cdc12_blacklist = { | ||
532 | .reserved = BIT(1) | BIT(2), | ||
533 | }; | ||
534 | |||
535 | static const struct option_blacklist_info net_intf1_blacklist = { | ||
536 | .reserved = BIT(1), | ||
537 | }; | ||
538 | |||
539 | static const struct option_blacklist_info net_intf3_blacklist = { | ||
540 | .reserved = BIT(3), | ||
541 | }; | ||
542 | |||
543 | static const struct option_blacklist_info net_intf4_blacklist = { | ||
544 | .reserved = BIT(4), | ||
545 | }; | ||
546 | |||
547 | static const struct option_blacklist_info net_intf5_blacklist = { | ||
548 | .reserved = BIT(5), | ||
549 | }; | ||
550 | |||
551 | static const struct option_blacklist_info zte_mf626_blacklist = { | ||
552 | .sendsetup = BIT(0) | BIT(1), | ||
553 | .reserved = BIT(4), | ||
447 | }; | 554 | }; |
448 | 555 | ||
449 | static const struct usb_device_id option_ids[] = { | 556 | static const struct usb_device_id option_ids[] = { |
@@ -543,11 +650,33 @@ static const struct usb_device_id option_ids[] = { | |||
543 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143D, 0xff, 0xff, 0xff) }, | 650 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143D, 0xff, 0xff, 0xff) }, |
544 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) }, | 651 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) }, |
545 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) }, | 652 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) }, |
546 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff) }, | 653 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173S, 0xff, 0xff, 0xff) }, |
547 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff) }, | 654 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff), |
655 | .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist }, | ||
656 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff), | ||
657 | .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist }, | ||
548 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) }, | 658 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) }, |
549 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC, 0xff, 0xff, 0xff) }, | 659 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC, 0xff, 0xff, 0xff) }, |
660 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3806, 0xff, 0xff, 0xff) }, | ||
661 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4605, 0xff, 0xff, 0xff), | ||
662 | .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist }, | ||
663 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x31) }, | ||
664 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x32) }, | ||
665 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3771, 0xff, 0x02, 0x31) }, | ||
666 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3771, 0xff, 0x02, 0x32) }, | ||
667 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4510, 0xff, 0x01, 0x31) }, | ||
668 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4510, 0xff, 0x01, 0x32) }, | ||
669 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4511, 0xff, 0x01, 0x31) }, | ||
670 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4511, 0xff, 0x01, 0x32) }, | ||
550 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x01) }, | 671 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x01) }, |
672 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x02) }, | ||
673 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x03) }, | ||
674 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x10) }, | ||
675 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x12) }, | ||
676 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x13) }, | ||
677 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x01) }, /* E398 3G Modem */ | ||
678 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x02) }, /* E398 3G PC UI Interface */ | ||
679 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x03) }, /* E398 3G Application Interface */ | ||
551 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, | 680 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, |
552 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, | 681 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, |
553 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) }, | 682 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) }, |
@@ -634,12 +763,14 @@ static const struct usb_device_id option_ids[] = { | |||
634 | { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, | 763 | { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, |
635 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */ | 764 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */ |
636 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ | 765 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ |
766 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */ | ||
637 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */ | 767 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */ |
638 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) }, | 768 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) }, |
639 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, | 769 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, |
640 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864G) }, | 770 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864G) }, |
641 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ | 771 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ |
642 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0002, 0xff, 0xff, 0xff) }, | 772 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0002, 0xff, 0xff, 0xff), |
773 | .driver_info = (kernel_ulong_t)&net_intf1_blacklist }, | ||
643 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0003, 0xff, 0xff, 0xff) }, | 774 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0003, 0xff, 0xff, 0xff) }, |
644 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0004, 0xff, 0xff, 0xff) }, | 775 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0004, 0xff, 0xff, 0xff) }, |
645 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0005, 0xff, 0xff, 0xff) }, | 776 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0005, 0xff, 0xff, 0xff) }, |
@@ -654,51 +785,62 @@ static const struct usb_device_id option_ids[] = { | |||
654 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x000f, 0xff, 0xff, 0xff) }, | 785 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x000f, 0xff, 0xff, 0xff) }, |
655 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0010, 0xff, 0xff, 0xff) }, | 786 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0010, 0xff, 0xff, 0xff) }, |
656 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0011, 0xff, 0xff, 0xff) }, | 787 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0011, 0xff, 0xff, 0xff) }, |
657 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0012, 0xff, 0xff, 0xff) }, | 788 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0012, 0xff, 0xff, 0xff), |
789 | .driver_info = (kernel_ulong_t)&net_intf1_blacklist }, | ||
658 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0013, 0xff, 0xff, 0xff) }, | 790 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0013, 0xff, 0xff, 0xff) }, |
659 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0014, 0xff, 0xff, 0xff) }, | 791 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0014, 0xff, 0xff, 0xff) }, |
660 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628, 0xff, 0xff, 0xff) }, | 792 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628, 0xff, 0xff, 0xff) }, |
661 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0016, 0xff, 0xff, 0xff) }, | 793 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0016, 0xff, 0xff, 0xff) }, |
662 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0017, 0xff, 0xff, 0xff) }, | 794 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0017, 0xff, 0xff, 0xff), |
795 | .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, | ||
663 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0018, 0xff, 0xff, 0xff) }, | 796 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0018, 0xff, 0xff, 0xff) }, |
664 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff) }, | 797 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff) }, |
665 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0020, 0xff, 0xff, 0xff) }, | 798 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0020, 0xff, 0xff, 0xff) }, |
666 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0021, 0xff, 0xff, 0xff) }, | 799 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0021, 0xff, 0xff, 0xff), |
800 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
667 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0022, 0xff, 0xff, 0xff) }, | 801 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0022, 0xff, 0xff, 0xff) }, |
668 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0023, 0xff, 0xff, 0xff) }, | 802 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0023, 0xff, 0xff, 0xff) }, |
669 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0024, 0xff, 0xff, 0xff) }, | 803 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0024, 0xff, 0xff, 0xff) }, |
670 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0025, 0xff, 0xff, 0xff) }, | 804 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0025, 0xff, 0xff, 0xff), |
805 | .driver_info = (kernel_ulong_t)&net_intf1_blacklist }, | ||
671 | /* { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0026, 0xff, 0xff, 0xff) }, */ | 806 | /* { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0026, 0xff, 0xff, 0xff) }, */ |
672 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0028, 0xff, 0xff, 0xff) }, | 807 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0028, 0xff, 0xff, 0xff) }, |
673 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0029, 0xff, 0xff, 0xff) }, | 808 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0029, 0xff, 0xff, 0xff) }, |
674 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0030, 0xff, 0xff, 0xff) }, | 809 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0030, 0xff, 0xff, 0xff) }, |
675 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626, 0xff, | 810 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626, 0xff, |
676 | 0xff, 0xff), .driver_info = (kernel_ulong_t)&four_g_w14_blacklist }, | 811 | 0xff, 0xff), .driver_info = (kernel_ulong_t)&zte_mf626_blacklist }, |
677 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0032, 0xff, 0xff, 0xff) }, | 812 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0032, 0xff, 0xff, 0xff) }, |
678 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0033, 0xff, 0xff, 0xff) }, | 813 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0033, 0xff, 0xff, 0xff) }, |
679 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0034, 0xff, 0xff, 0xff) }, | 814 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0034, 0xff, 0xff, 0xff) }, |
680 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0037, 0xff, 0xff, 0xff) }, | 815 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0037, 0xff, 0xff, 0xff), |
816 | .driver_info = (kernel_ulong_t)&zte_0037_blacklist }, | ||
681 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0038, 0xff, 0xff, 0xff) }, | 817 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0038, 0xff, 0xff, 0xff) }, |
682 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0039, 0xff, 0xff, 0xff) }, | 818 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0039, 0xff, 0xff, 0xff) }, |
683 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0040, 0xff, 0xff, 0xff) }, | 819 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0040, 0xff, 0xff, 0xff) }, |
684 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0042, 0xff, 0xff, 0xff) }, | 820 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0042, 0xff, 0xff, 0xff), |
821 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
685 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0043, 0xff, 0xff, 0xff) }, | 822 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0043, 0xff, 0xff, 0xff) }, |
686 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0044, 0xff, 0xff, 0xff) }, | 823 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0044, 0xff, 0xff, 0xff) }, |
687 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0048, 0xff, 0xff, 0xff) }, | 824 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0048, 0xff, 0xff, 0xff) }, |
688 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0049, 0xff, 0xff, 0xff) }, | 825 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0049, 0xff, 0xff, 0xff), |
826 | .driver_info = (kernel_ulong_t)&net_intf5_blacklist }, | ||
689 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0050, 0xff, 0xff, 0xff) }, | 827 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0050, 0xff, 0xff, 0xff) }, |
690 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0051, 0xff, 0xff, 0xff) }, | 828 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0051, 0xff, 0xff, 0xff) }, |
691 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0052, 0xff, 0xff, 0xff) }, | 829 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0052, 0xff, 0xff, 0xff), |
830 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
692 | /* { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0053, 0xff, 0xff, 0xff) }, */ | 831 | /* { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0053, 0xff, 0xff, 0xff) }, */ |
693 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0054, 0xff, 0xff, 0xff) }, | 832 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0054, 0xff, 0xff, 0xff) }, |
694 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0055, 0xff, 0xff, 0xff) }, | 833 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0055, 0xff, 0xff, 0xff), |
834 | .driver_info = (kernel_ulong_t)&net_intf1_blacklist }, | ||
695 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0056, 0xff, 0xff, 0xff) }, | 835 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0056, 0xff, 0xff, 0xff) }, |
696 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0057, 0xff, 0xff, 0xff) }, | 836 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0057, 0xff, 0xff, 0xff) }, |
697 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0058, 0xff, 0xff, 0xff) }, | 837 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0058, 0xff, 0xff, 0xff), |
838 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
698 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0059, 0xff, 0xff, 0xff) }, | 839 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0059, 0xff, 0xff, 0xff) }, |
699 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0061, 0xff, 0xff, 0xff) }, | 840 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0061, 0xff, 0xff, 0xff) }, |
700 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0062, 0xff, 0xff, 0xff) }, | 841 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0062, 0xff, 0xff, 0xff) }, |
701 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0063, 0xff, 0xff, 0xff) }, | 842 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0063, 0xff, 0xff, 0xff), |
843 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
702 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0064, 0xff, 0xff, 0xff) }, | 844 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0064, 0xff, 0xff, 0xff) }, |
703 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0065, 0xff, 0xff, 0xff) }, | 845 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0065, 0xff, 0xff, 0xff) }, |
704 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0066, 0xff, 0xff, 0xff) }, | 846 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0066, 0xff, 0xff, 0xff) }, |
@@ -713,11 +855,13 @@ static const struct usb_device_id option_ids[] = { | |||
713 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0083, 0xff, 0xff, 0xff) }, | 855 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0083, 0xff, 0xff, 0xff) }, |
714 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0086, 0xff, 0xff, 0xff) }, | 856 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0086, 0xff, 0xff, 0xff) }, |
715 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0087, 0xff, 0xff, 0xff) }, | 857 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0087, 0xff, 0xff, 0xff) }, |
716 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0104, 0xff, 0xff, 0xff) }, | 858 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0104, 0xff, 0xff, 0xff), |
859 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
717 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0105, 0xff, 0xff, 0xff) }, | 860 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0105, 0xff, 0xff, 0xff) }, |
718 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0106, 0xff, 0xff, 0xff) }, | 861 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0106, 0xff, 0xff, 0xff) }, |
719 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0108, 0xff, 0xff, 0xff) }, | 862 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0108, 0xff, 0xff, 0xff) }, |
720 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0113, 0xff, 0xff, 0xff) }, | 863 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0113, 0xff, 0xff, 0xff), |
864 | .driver_info = (kernel_ulong_t)&net_intf5_blacklist }, | ||
721 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0117, 0xff, 0xff, 0xff) }, | 865 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0117, 0xff, 0xff, 0xff) }, |
722 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0118, 0xff, 0xff, 0xff) }, | 866 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0118, 0xff, 0xff, 0xff) }, |
723 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0121, 0xff, 0xff, 0xff) }, | 867 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0121, 0xff, 0xff, 0xff) }, |
@@ -937,6 +1081,12 @@ static const struct usb_device_id option_ids[] = { | |||
937 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710, 0xff, 0xff, 0xff) }, | 1081 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710, 0xff, 0xff, 0xff) }, |
938 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) }, | 1082 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) }, |
939 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710T, 0xff, 0xff, 0xff) }, | 1083 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710T, 0xff, 0xff, 0xff) }, |
1084 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2718, 0xff, 0xff, 0xff), | ||
1085 | .driver_info = (kernel_ulong_t)&zte_mc2718_z_blacklist }, | ||
1086 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AD3812, 0xff, 0xff, 0xff), | ||
1087 | .driver_info = (kernel_ulong_t)&zte_ad3812_z_blacklist }, | ||
1088 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2716, 0xff, 0xff, 0xff), | ||
1089 | .driver_info = (kernel_ulong_t)&zte_mc2716_z_blacklist }, | ||
940 | { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) }, | 1090 | { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) }, |
941 | { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) }, | 1091 | { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) }, |
942 | { USB_DEVICE(ALINK_VENDOR_ID, DLINK_PRODUCT_DWM_652_U5) }, /* Yes, ALINK_VENDOR_ID */ | 1092 | { USB_DEVICE(ALINK_VENDOR_ID, DLINK_PRODUCT_DWM_652_U5) }, /* Yes, ALINK_VENDOR_ID */ |
@@ -993,6 +1143,51 @@ static const struct usb_device_id option_ids[] = { | |||
993 | { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */ | 1143 | { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */ |
994 | { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */ | 1144 | { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */ |
995 | { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/ | 1145 | { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/ |
1146 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) }, | ||
1147 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM610) }, | ||
1148 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM500) }, | ||
1149 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM510) }, | ||
1150 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM800) }, | ||
1151 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM900) }, | ||
1152 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU818) }, | ||
1153 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU816) }, | ||
1154 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU828) }, | ||
1155 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU826) }, | ||
1156 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU518) }, | ||
1157 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU516) }, | ||
1158 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU528) }, | ||
1159 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU526) }, | ||
1160 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM600) }, | ||
1161 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM610) }, | ||
1162 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM500) }, | ||
1163 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM510) }, | ||
1164 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM800) }, | ||
1165 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM900) }, | ||
1166 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU718) }, | ||
1167 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU716) }, | ||
1168 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU728) }, | ||
1169 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU726) }, | ||
1170 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU518) }, | ||
1171 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU516) }, | ||
1172 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU528) }, | ||
1173 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU526) }, | ||
1174 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM600) }, | ||
1175 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM610) }, | ||
1176 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM500) }, | ||
1177 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM510) }, | ||
1178 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM800) }, | ||
1179 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM900) }, | ||
1180 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU718) }, | ||
1181 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU716) }, | ||
1182 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU728) }, | ||
1183 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU726) }, | ||
1184 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU518) }, | ||
1185 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU516) }, | ||
1186 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU528) }, | ||
1187 | { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU526) }, | ||
1188 | { USB_DEVICE_AND_INTERFACE_INFO(VIETTEL_VENDOR_ID, VIETTEL_PRODUCT_VT1000, 0xff, 0xff, 0xff) }, | ||
1189 | { USB_DEVICE_AND_INTERFACE_INFO(ZD_VENDOR_ID, ZD_PRODUCT_7000, 0xff, 0xff, 0xff) }, | ||
1190 | { USB_DEVICE(LG_VENDOR_ID, LG_PRODUCT_L02C) }, /* docomo L-02C modem */ | ||
996 | { } /* Terminating entry */ | 1191 | { } /* Terminating entry */ |
997 | }; | 1192 | }; |
998 | MODULE_DEVICE_TABLE(usb, option_ids); | 1193 | MODULE_DEVICE_TABLE(usb, option_ids); |
@@ -1106,10 +1301,35 @@ static void __exit option_exit(void) | |||
1106 | module_init(option_init); | 1301 | module_init(option_init); |
1107 | module_exit(option_exit); | 1302 | module_exit(option_exit); |
1108 | 1303 | ||
1304 | static bool is_blacklisted(const u8 ifnum, enum option_blacklist_reason reason, | ||
1305 | const struct option_blacklist_info *blacklist) | ||
1306 | { | ||
1307 | unsigned long num; | ||
1308 | const unsigned long *intf_list; | ||
1309 | |||
1310 | if (blacklist) { | ||
1311 | if (reason == OPTION_BLACKLIST_SENDSETUP) | ||
1312 | intf_list = &blacklist->sendsetup; | ||
1313 | else if (reason == OPTION_BLACKLIST_RESERVED_IF) | ||
1314 | intf_list = &blacklist->reserved; | ||
1315 | else { | ||
1316 | BUG_ON(reason); | ||
1317 | return false; | ||
1318 | } | ||
1319 | |||
1320 | for_each_set_bit(num, intf_list, MAX_BL_NUM + 1) { | ||
1321 | if (num == ifnum) | ||
1322 | return true; | ||
1323 | } | ||
1324 | } | ||
1325 | return false; | ||
1326 | } | ||
1327 | |||
1109 | static int option_probe(struct usb_serial *serial, | 1328 | static int option_probe(struct usb_serial *serial, |
1110 | const struct usb_device_id *id) | 1329 | const struct usb_device_id *id) |
1111 | { | 1330 | { |
1112 | struct usb_wwan_intf_private *data; | 1331 | struct usb_wwan_intf_private *data; |
1332 | |||
1113 | /* D-Link DWM 652 still exposes CD-Rom emulation interface in modem mode */ | 1333 | /* D-Link DWM 652 still exposes CD-Rom emulation interface in modem mode */ |
1114 | if (serial->dev->descriptor.idVendor == DLINK_VENDOR_ID && | 1334 | if (serial->dev->descriptor.idVendor == DLINK_VENDOR_ID && |
1115 | serial->dev->descriptor.idProduct == DLINK_PRODUCT_DWM_652 && | 1335 | serial->dev->descriptor.idProduct == DLINK_PRODUCT_DWM_652 && |
@@ -1122,12 +1342,14 @@ static int option_probe(struct usb_serial *serial, | |||
1122 | serial->interface->cur_altsetting->desc.bInterfaceClass != 0xff) | 1342 | serial->interface->cur_altsetting->desc.bInterfaceClass != 0xff) |
1123 | return -ENODEV; | 1343 | return -ENODEV; |
1124 | 1344 | ||
1125 | /* Don't bind network interfaces on Huawei K3765 & K4505 */ | 1345 | /* Don't bind reserved interfaces (like network ones) which often have |
1126 | if (serial->dev->descriptor.idVendor == HUAWEI_VENDOR_ID && | 1346 | * the same class/subclass/protocol as the serial interfaces. Look at |
1127 | (serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K3765 || | 1347 | * the Windows driver .INF files for reserved interface numbers. |
1128 | serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K4505) && | 1348 | */ |
1129 | serial->interface->cur_altsetting->desc.bInterfaceNumber == 1) | 1349 | if (is_blacklisted( |
1130 | return -ENODEV; | 1350 | serial->interface->cur_altsetting->desc.bInterfaceNumber, |
1351 | OPTION_BLACKLIST_RESERVED_IF, | ||
1352 | (const struct option_blacklist_info *) id->driver_info)) | ||
1131 | 1353 | ||
1132 | /* Don't bind network interface on Samsung GT-B3730, it is handled by a separate module */ | 1354 | /* Don't bind network interface on Samsung GT-B3730, it is handled by a separate module */ |
1133 | if (serial->dev->descriptor.idVendor == SAMSUNG_VENDOR_ID && | 1355 | if (serial->dev->descriptor.idVendor == SAMSUNG_VENDOR_ID && |
@@ -1136,7 +1358,6 @@ static int option_probe(struct usb_serial *serial, | |||
1136 | return -ENODEV; | 1358 | return -ENODEV; |
1137 | 1359 | ||
1138 | data = serial->private = kzalloc(sizeof(struct usb_wwan_intf_private), GFP_KERNEL); | 1360 | data = serial->private = kzalloc(sizeof(struct usb_wwan_intf_private), GFP_KERNEL); |
1139 | |||
1140 | if (!data) | 1361 | if (!data) |
1141 | return -ENOMEM; | 1362 | return -ENOMEM; |
1142 | data->send_setup = option_send_setup; | 1363 | data->send_setup = option_send_setup; |
@@ -1145,23 +1366,6 @@ static int option_probe(struct usb_serial *serial, | |||
1145 | return 0; | 1366 | return 0; |
1146 | } | 1367 | } |
1147 | 1368 | ||
1148 | static enum option_blacklist_reason is_blacklisted(const u8 ifnum, | ||
1149 | const struct option_blacklist_info *blacklist) | ||
1150 | { | ||
1151 | const u8 *info; | ||
1152 | int i; | ||
1153 | |||
1154 | if (blacklist) { | ||
1155 | info = blacklist->ifaceinfo; | ||
1156 | |||
1157 | for (i = 0; i < blacklist->infolen; i++) { | ||
1158 | if (info[i] == ifnum) | ||
1159 | return blacklist->reason; | ||
1160 | } | ||
1161 | } | ||
1162 | return OPTION_BLACKLIST_NONE; | ||
1163 | } | ||
1164 | |||
1165 | static void option_instat_callback(struct urb *urb) | 1369 | static void option_instat_callback(struct urb *urb) |
1166 | { | 1370 | { |
1167 | int err; | 1371 | int err; |
@@ -1233,9 +1437,8 @@ static int option_send_setup(struct usb_serial_port *port) | |||
1233 | int val = 0; | 1437 | int val = 0; |
1234 | dbg("%s", __func__); | 1438 | dbg("%s", __func__); |
1235 | 1439 | ||
1236 | if (is_blacklisted(ifNum, | 1440 | if (is_blacklisted(ifNum, OPTION_BLACKLIST_SENDSETUP, |
1237 | (struct option_blacklist_info *) intfdata->private) | 1441 | (struct option_blacklist_info *) intfdata->private)) { |
1238 | == OPTION_BLACKLIST_SENDSETUP) { | ||
1239 | dbg("No send_setup on blacklisted interface #%d\n", ifNum); | 1442 | dbg("No send_setup on blacklisted interface #%d\n", ifNum); |
1240 | return -EIO; | 1443 | return -EIO; |
1241 | } | 1444 | } |