From: Greg Kroah-Hartman Date: Wed, 11 Jul 2012 20:52:48 +0000 (-0700) Subject: 3.0-stable patches X-Git-Tag: v3.0.37~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0456faa79651bbf6a9e7543292c43e330609bc1c;p=thirdparty%2Fkernel%2Fstable-queue.git 3.0-stable patches added patches: pci-ehci-fix-crash-during-suspend-on-asus-computers.patch usb-cdc-wdm-fix-lockup-on-error-in-wdm_read.patch usb-option-add-mediatek-product-ids.patch usb-option-add-zte-mf60.patch --- diff --git a/queue-3.0/pci-ehci-fix-crash-during-suspend-on-asus-computers.patch b/queue-3.0/pci-ehci-fix-crash-during-suspend-on-asus-computers.patch new file mode 100644 index 00000000000..873c89b1cd9 --- /dev/null +++ b/queue-3.0/pci-ehci-fix-crash-during-suspend-on-asus-computers.patch @@ -0,0 +1,156 @@ +From dbf0e4c7257f8d684ec1a3c919853464293de66e Mon Sep 17 00:00:00 2001 +From: Alan Stern +Date: Mon, 9 Jul 2012 11:09:21 -0400 +Subject: PCI: EHCI: fix crash during suspend on ASUS computers +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Alan Stern + +commit dbf0e4c7257f8d684ec1a3c919853464293de66e upstream. + +Quite a few ASUS computers experience a nasty problem, related to the +EHCI controllers, when going into system suspend. It was observed +that the problem didn't occur if the controllers were not put into the +D3 power state before starting the suspend, and commit +151b61284776be2d6f02d48c23c3625678960b97 (USB: EHCI: fix crash during +suspend on ASUS computers) was created to do this. + +It turned out this approach messed up other computers that didn't have +the problem -- it prevented USB wakeup from working. Consequently +commit c2fb8a3fa25513de8fedb38509b1f15a5bbee47b (USB: add +NO_D3_DURING_SLEEP flag and revert 151b61284776be2) was merged; it +reverted the earlier commit and added a whitelist of known good board +names. + +Now we know the actual cause of the problem. Thanks to AceLan Kao for +tracking it down. + +According to him, an engineer at ASUS explained that some of their +BIOSes contain a bug that was added in an attempt to work around a +problem in early versions of Windows. When the computer goes into S3 +suspend, the BIOS tries to verify that the EHCI controllers were first +quiesced by the OS. Nothing's wrong with this, but the BIOS does it +by checking that the PCI COMMAND registers contain 0 without checking +the controllers' power state. If the register isn't 0, the BIOS +assumes the controller needs to be quiesced and tries to do so. This +involves making various MMIO accesses to the controller, which don't +work very well if the controller is already in D3. The end result is +a system hang or memory corruption. + +Since the value in the PCI COMMAND register doesn't matter once the +controller has been suspended, and since the value will be restored +anyway when the controller is resumed, we can work around the BIOS bug +simply by setting the register to 0 during system suspend. This patch +(as1590) does so and also reverts the second commit mentioned above, +which is now unnecessary. + +In theory we could do this for every PCI device. However to avoid +introducing new problems, the patch restricts itself to EHCI host +controllers. + +Finally the affected systems can suspend with USB wakeup working +properly. + +Reference: https://bugzilla.kernel.org/show_bug.cgi?id=37632 +Reference: https://bugzilla.kernel.org/show_bug.cgi?id=42728 +Based-on-patch-by: AceLan Kao +Signed-off-by: Alan Stern +Tested-by: Dâniel Fraga +Tested-by: Javier Marcet +Tested-by: Andrey Rahmatullin +Tested-by: Oleksij Rempel +Tested-by: Pavel Pisa +Acked-by: Bjorn Helgaas +Acked-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/pci/pci-driver.c | 12 ++++++++++++ + drivers/pci/pci.c | 5 ----- + drivers/pci/quirks.c | 26 -------------------------- + include/linux/pci.h | 2 -- + 4 files changed, 12 insertions(+), 33 deletions(-) + +--- a/drivers/pci/pci-driver.c ++++ b/drivers/pci/pci-driver.c +@@ -726,6 +726,18 @@ static int pci_pm_suspend_noirq(struct d + + pci_pm_set_unknown_state(pci_dev); + ++ /* ++ * Some BIOSes from ASUS have a bug: If a USB EHCI host controller's ++ * PCI COMMAND register isn't 0, the BIOS assumes that the controller ++ * hasn't been quiesced and tries to turn it off. If the controller ++ * is already in D3, this can hang or cause memory corruption. ++ * ++ * Since the value of the COMMAND register doesn't matter once the ++ * device has been suspended, we can safely set it to 0 here. ++ */ ++ if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI) ++ pci_write_config_word(pci_dev, PCI_COMMAND, 0); ++ + return 0; + } + +--- a/drivers/pci/pci.c ++++ b/drivers/pci/pci.c +@@ -1682,11 +1682,6 @@ int pci_prepare_to_sleep(struct pci_dev + if (target_state == PCI_POWER_ERROR) + return -EIO; + +- /* Some devices mustn't be in D3 during system sleep */ +- if (target_state == PCI_D3hot && +- (dev->dev_flags & PCI_DEV_FLAGS_NO_D3_DURING_SLEEP)) +- return 0; +- + pci_enable_wake(dev, target_state, device_may_wakeup(&dev->dev)); + + error = pci_set_power_state(dev, target_state); +--- a/drivers/pci/quirks.c ++++ b/drivers/pci/quirks.c +@@ -2856,32 +2856,6 @@ static void __devinit disable_igfx_irq(s + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq); + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq); + +-/* +- * The Intel 6 Series/C200 Series chipset's EHCI controllers on many +- * ASUS motherboards will cause memory corruption or a system crash +- * if they are in D3 while the system is put into S3 sleep. +- */ +-static void __devinit asus_ehci_no_d3(struct pci_dev *dev) +-{ +- const char *sys_info; +- static const char good_Asus_board[] = "P8Z68-V"; +- +- if (dev->dev_flags & PCI_DEV_FLAGS_NO_D3_DURING_SLEEP) +- return; +- if (dev->subsystem_vendor != PCI_VENDOR_ID_ASUSTEK) +- return; +- sys_info = dmi_get_system_info(DMI_BOARD_NAME); +- if (sys_info && memcmp(sys_info, good_Asus_board, +- sizeof(good_Asus_board) - 1) == 0) +- return; +- +- dev_info(&dev->dev, "broken D3 during system sleep on ASUS\n"); +- dev->dev_flags |= PCI_DEV_FLAGS_NO_D3_DURING_SLEEP; +- device_set_wakeup_capable(&dev->dev, false); +-} +-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1c26, asus_ehci_no_d3); +-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1c2d, asus_ehci_no_d3); +- + static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f, + struct pci_fixup *end) + { +--- a/include/linux/pci.h ++++ b/include/linux/pci.h +@@ -174,8 +174,6 @@ enum pci_dev_flags { + PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = (__force pci_dev_flags_t) 1, + /* Device configuration is irrevocably lost if disabled into D3 */ + PCI_DEV_FLAGS_NO_D3 = (__force pci_dev_flags_t) 2, +- /* Device causes system crash if in D3 during S3 sleep */ +- PCI_DEV_FLAGS_NO_D3_DURING_SLEEP = (__force pci_dev_flags_t) 8, + }; + + enum pci_irq_reroute_variant { diff --git a/queue-3.0/series b/queue-3.0/series index d317252bf2f..a2924e212f1 100644 --- a/queue-3.0/series +++ b/queue-3.0/series @@ -46,3 +46,7 @@ tcm_fc-resolve-suspicious-rcu-usage-warnings.patch ecryptfs-gracefully-refuse-miscdev-file-ops-on-inherited-passed-files.patch ecryptfs-fix-lockdep-warning-in-miscdev-operations.patch ecryptfs-properly-check-for-o_rdonly-flag-before-doing-privileged-open.patch +usb-cdc-wdm-fix-lockup-on-error-in-wdm_read.patch +usb-option-add-zte-mf60.patch +usb-option-add-mediatek-product-ids.patch +pci-ehci-fix-crash-during-suspend-on-asus-computers.patch diff --git a/queue-3.0/usb-cdc-wdm-fix-lockup-on-error-in-wdm_read.patch b/queue-3.0/usb-cdc-wdm-fix-lockup-on-error-in-wdm_read.patch new file mode 100644 index 00000000000..f8206e4de8e --- /dev/null +++ b/queue-3.0/usb-cdc-wdm-fix-lockup-on-error-in-wdm_read.patch @@ -0,0 +1,75 @@ +From b086b6b10d9f182cd8d2f0dcfd7fd11edba93fc9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= +Date: Mon, 2 Jul 2012 10:33:14 +0200 +Subject: USB: cdc-wdm: fix lockup on error in wdm_read +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= + +commit b086b6b10d9f182cd8d2f0dcfd7fd11edba93fc9 upstream. + +Clear the WDM_READ flag on empty reads to avoid running +forever in an infinite tight loop, causing lockups: + +Jul 1 21:58:11 nemi kernel: [ 3658.898647] qmi_wwan 2-1:1.2: Unexpected error -71 +Jul 1 21:58:36 nemi kernel: [ 3684.072021] BUG: soft lockup - CPU#0 stuck for 23s! [qmi.pl:12235] +Jul 1 21:58:36 nemi kernel: [ 3684.072212] CPU 0 +Jul 1 21:58:36 nemi kernel: [ 3684.072355] +Jul 1 21:58:36 nemi kernel: [ 3684.072367] Pid: 12235, comm: qmi.pl Tainted: P O 3.5.0-rc2+ #13 LENOVO 2776LEG/2776LEG +Jul 1 21:58:36 nemi kernel: [ 3684.072383] RIP: 0010:[] [] spin_unlock_irq+0x8/0xc [cdc_wdm] +Jul 1 21:58:36 nemi kernel: [ 3684.072388] RSP: 0018:ffff88022dca1e70 EFLAGS: 00000282 +Jul 1 21:58:36 nemi kernel: [ 3684.072393] RAX: ffff88022fc3f650 RBX: ffffffff811c56f7 RCX: 00000001000ce8c1 +Jul 1 21:58:36 nemi kernel: [ 3684.072398] RDX: 0000000000000010 RSI: 000000000267d810 RDI: ffff88022fc3f650 +Jul 1 21:58:36 nemi kernel: [ 3684.072403] RBP: ffff88022dca1eb0 R08: ffffffffa063578e R09: 0000000000000000 +Jul 1 21:58:36 nemi kernel: [ 3684.072407] R10: 0000000000000008 R11: 0000000000000246 R12: 0000000000000002 +Jul 1 21:58:36 nemi kernel: [ 3684.072412] R13: 0000000000000246 R14: ffffffff00000002 R15: ffff8802281d8c88 +Jul 1 21:58:36 nemi kernel: [ 3684.072418] FS: 00007f666a260700(0000) GS:ffff88023bc00000(0000) knlGS:0000000000000000 +Jul 1 21:58:36 nemi kernel: [ 3684.072423] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 +Jul 1 21:58:36 nemi kernel: [ 3684.072428] CR2: 000000000270d9d8 CR3: 000000022e865000 CR4: 00000000000007f0 +Jul 1 21:58:36 nemi kernel: [ 3684.072433] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 +Jul 1 21:58:36 nemi kernel: [ 3684.072438] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 +Jul 1 21:58:36 nemi kernel: [ 3684.072444] Process qmi.pl (pid: 12235, threadinfo ffff88022dca0000, task ffff88022ff76380) +Jul 1 21:58:36 nemi kernel: [ 3684.072448] Stack: +Jul 1 21:58:36 nemi kernel: [ 3684.072458] ffffffffa063592e 0000000100020000 ffff88022fc3f650 ffff88022fc3f6a8 +Jul 1 21:58:36 nemi kernel: [ 3684.072466] 0000000000000200 0000000100000000 000000000267d810 0000000000000000 +Jul 1 21:58:36 nemi kernel: [ 3684.072475] 0000000000000000 ffff880212cfb6d0 0000000000000200 ffff880212cfb6c0 +Jul 1 21:58:36 nemi kernel: [ 3684.072479] Call Trace: +Jul 1 21:58:36 nemi kernel: [ 3684.072489] [] ? wdm_read+0x1a0/0x263 [cdc_wdm] +Jul 1 21:58:36 nemi kernel: [ 3684.072500] [] ? vfs_read+0xa1/0xfb +Jul 1 21:58:36 nemi kernel: [ 3684.072509] [] ? alarm_setitimer+0x35/0x64 +Jul 1 21:58:36 nemi kernel: [ 3684.072517] [] ? sys_read+0x45/0x6e +Jul 1 21:58:36 nemi kernel: [ 3684.072525] [] ? system_call_fastpath+0x16/0x1b +Jul 1 21:58:36 nemi kernel: [ 3684.072557] Code: <66> 66 90 c3 83 ff ed 89 f8 74 16 7f 06 83 ff a1 75 0a c3 83 ff f4 + +The WDM_READ flag is normally cleared by wdm_int_callback +before resubmitting the read urb, and set by wdm_in_callback +when this urb returns with data or an error. But a crashing +device may cause both a read error and cancelling all urbs. +Make sure that the flag is cleared by wdm_read if the buffer +is empty. + +We don't clear the flag on errors, as there may be pending +data in the buffer which should be processed. The flag will +instead be cleared on the next wdm_read call. + +Signed-off-by: Bjørn Mork +Acked-by: Oliver Neukum +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/class/cdc-wdm.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/class/cdc-wdm.c ++++ b/drivers/usb/class/cdc-wdm.c +@@ -457,6 +457,8 @@ retry: + goto retry; + } + if (!desc->reslength) { /* zero length read */ ++ dev_dbg(&desc->intf->dev, "%s: zero length - clearing WDM_READ\n", __func__); ++ clear_bit(WDM_READ, &desc->flags); + spin_unlock_irq(&desc->iuspin); + goto retry; + } diff --git a/queue-3.0/usb-option-add-mediatek-product-ids.patch b/queue-3.0/usb-option-add-mediatek-product-ids.patch new file mode 100644 index 00000000000..b09e94a5242 --- /dev/null +++ b/queue-3.0/usb-option-add-mediatek-product-ids.patch @@ -0,0 +1,52 @@ +From aacef9c561a693341566a6850c451ce3df68cb9a Mon Sep 17 00:00:00 2001 +From: Gaosen Zhang +Date: Thu, 5 Jul 2012 21:49:00 +0800 +Subject: USB: option: Add MEDIATEK product ids + +From: Gaosen Zhang + +commit aacef9c561a693341566a6850c451ce3df68cb9a upstream. + +Signed-off-by: Gaosen Zhang +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -497,6 +497,15 @@ static void option_instat_callback(struc + + /* MediaTek products */ + #define MEDIATEK_VENDOR_ID 0x0e8d ++#define MEDIATEK_PRODUCT_DC_1COM 0x00a0 ++#define MEDIATEK_PRODUCT_DC_4COM 0x00a5 ++#define MEDIATEK_PRODUCT_DC_5COM 0x00a4 ++#define MEDIATEK_PRODUCT_7208_1COM 0x7101 ++#define MEDIATEK_PRODUCT_7208_2COM 0x7102 ++#define MEDIATEK_PRODUCT_FP_1COM 0x0003 ++#define MEDIATEK_PRODUCT_FP_2COM 0x0023 ++#define MEDIATEK_PRODUCT_FPDC_1COM 0x0043 ++#define MEDIATEK_PRODUCT_FPDC_2COM 0x0033 + + /* Cellient products */ + #define CELLIENT_VENDOR_ID 0x2692 +@@ -1244,6 +1253,17 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a1, 0xff, 0x02, 0x01) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a2, 0xff, 0x00, 0x00) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a2, 0xff, 0x02, 0x01) }, /* MediaTek MT6276M modem & app port */ ++ { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_1COM, 0x0a, 0x00, 0x00) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_5COM, 0xff, 0x02, 0x01) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_5COM, 0xff, 0x00, 0x00) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM, 0xff, 0x02, 0x01) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM, 0xff, 0x00, 0x00) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_7208_1COM, 0x02, 0x00, 0x00) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_7208_2COM, 0x02, 0x02, 0x01) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FP_1COM, 0x0a, 0x00, 0x00) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FP_2COM, 0x0a, 0x00, 0x00) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FPDC_1COM, 0x0a, 0x00, 0x00) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FPDC_2COM, 0x0a, 0x00, 0x00) }, + { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) }, + { } /* Terminating entry */ + }; diff --git a/queue-3.0/usb-option-add-zte-mf60.patch b/queue-3.0/usb-option-add-zte-mf60.patch new file mode 100644 index 00000000000..d538ae2132c --- /dev/null +++ b/queue-3.0/usb-option-add-zte-mf60.patch @@ -0,0 +1,67 @@ +From 8e16e33c168a6efd0c9f7fa9dd4c1e1db9a74553 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= +Date: Mon, 2 Jul 2012 19:53:55 +0200 +Subject: USB: option: add ZTE MF60 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= + +commit 8e16e33c168a6efd0c9f7fa9dd4c1e1db9a74553 upstream. + +Switches into a composite device by ejecting the initial +driver CD. The four interfaces are: QCDM, AT, QMI/wwan +and mass storage. Let this driver manage the two serial +interfaces: + +T: Bus=02 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 28 Spd=480 MxCh= 0 +D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 +P: Vendor=19d2 ProdID=1402 Rev= 0.00 +S: Manufacturer=ZTE,Incorporated +S: Product=ZTE WCDMA Technologies MSM +S: SerialNumber=xxxxx +C:* #Ifs= 4 Cfg#= 1 Atr=c0 MxPwr=500mA +I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option +E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option +E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan +E: Ad=83(I) Atr=03(Int.) MxPS= 64 Ivl=2ms +E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms +I:* If#= 3 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage +E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms + +Signed-off-by: Bjørn Mork +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -554,6 +554,10 @@ static const struct option_blacklist_inf + .reserved = BIT(1), + }; + ++static const struct option_blacklist_info net_intf2_blacklist = { ++ .reserved = BIT(2), ++}; ++ + static const struct option_blacklist_info net_intf3_blacklist = { + .reserved = BIT(3), + }; +@@ -1097,6 +1101,8 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1298, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1299, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1300, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1402, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&net_intf2_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2002, 0xff, + 0xff, 0xff), .driver_info = (kernel_ulong_t)&zte_k3765_z_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2003, 0xff, 0xff, 0xff) },