From: Greg Kroah-Hartman Date: Sun, 26 May 2013 00:05:13 +0000 (+0900) Subject: 3.4-stable patches X-Git-Tag: v3.0.81~35 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5eb7e07506cb9b43d7d36a27eb9ac1bd2b3a52db;p=thirdparty%2Fkernel%2Fstable-queue.git 3.4-stable patches added patches: arm-plat-orion-fix-num_resources-and-id-for-ge10-and-ge11.patch cifs-only-set-ops-for-inodes-in-i_new-state.patch fat-fix-possible-overflow-for-fat_clusters.patch staging-vt6656-use-free_netdev-instead-of-kfree.patch tty-fix-tty-miss-restart-after-we-turn-off-flow-control.patch usb-blacklisted-cinterion-s-plxx-wwan-interface.patch usb-cxacru-potential-underflow-in-cxacru_cm_get_array.patch usb-ftdi_sio-add-support-for-newport-conex-motor-drivers.patch usb-option-add-device-ids-for-dell-5804-novatel-e371-wwan-card.patch usb-option-add-telewell-tw-lte-4g.patch usb-reset-resume-quirk-needed-by-a-hub.patch usb-uhci-fix-for-suspend-of-virtual-hp-controller.patch usb-xhci-override-bogus-bulk-wmaxpacketsize-values.patch --- diff --git a/queue-3.4/arm-plat-orion-fix-num_resources-and-id-for-ge10-and-ge11.patch b/queue-3.4/arm-plat-orion-fix-num_resources-and-id-for-ge10-and-ge11.patch new file mode 100644 index 00000000000..62681215f73 --- /dev/null +++ b/queue-3.4/arm-plat-orion-fix-num_resources-and-id-for-ge10-and-ge11.patch @@ -0,0 +1,66 @@ +From 2b8b2797142c7951e635c6eec5d1705ee9bc45c5 Mon Sep 17 00:00:00 2001 +From: Gregory CLEMENT +Date: Sun, 19 May 2013 22:12:43 +0200 +Subject: ARM: plat-orion: Fix num_resources and id for ge10 and ge11 + +From: Gregory CLEMENT + +commit 2b8b2797142c7951e635c6eec5d1705ee9bc45c5 upstream. + +When platform data were moved from arch/arm/mach-mv78xx0/common.c to +arch/arm/plat-orion/common.c with the commit "7e3819d ARM: orion: +Consolidate ethernet platform data", there were few typo made on +gigabit Ethernet interface ge10 and ge11. This commit writes back +their initial value, which allows to use this interfaces again. + +Signed-off-by: Gregory CLEMENT +Acked-by: Andrew Lunn +Signed-off-by: Jason Cooper +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/plat-orion/common.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +--- a/arch/arm/plat-orion/common.c ++++ b/arch/arm/plat-orion/common.c +@@ -340,7 +340,7 @@ static struct resource orion_ge10_shared + + static struct platform_device orion_ge10_shared = { + .name = MV643XX_ETH_SHARED_NAME, +- .id = 1, ++ .id = 2, + .dev = { + .platform_data = &orion_ge10_shared_data, + }, +@@ -355,8 +355,8 @@ static struct resource orion_ge10_resour + + static struct platform_device orion_ge10 = { + .name = MV643XX_ETH_NAME, +- .id = 1, +- .num_resources = 2, ++ .id = 2, ++ .num_resources = 1, + .resource = orion_ge10_resources, + .dev = { + .coherent_dma_mask = DMA_BIT_MASK(32), +@@ -393,7 +393,7 @@ static struct resource orion_ge11_shared + + static struct platform_device orion_ge11_shared = { + .name = MV643XX_ETH_SHARED_NAME, +- .id = 1, ++ .id = 3, + .dev = { + .platform_data = &orion_ge11_shared_data, + }, +@@ -408,8 +408,8 @@ static struct resource orion_ge11_resour + + static struct platform_device orion_ge11 = { + .name = MV643XX_ETH_NAME, +- .id = 1, +- .num_resources = 2, ++ .id = 3, ++ .num_resources = 1, + .resource = orion_ge11_resources, + .dev = { + .coherent_dma_mask = DMA_BIT_MASK(32), diff --git a/queue-3.4/cifs-only-set-ops-for-inodes-in-i_new-state.patch b/queue-3.4/cifs-only-set-ops-for-inodes-in-i_new-state.patch new file mode 100644 index 00000000000..04d1ae57d58 --- /dev/null +++ b/queue-3.4/cifs-only-set-ops-for-inodes-in-i_new-state.patch @@ -0,0 +1,36 @@ +From c2b93e0699723700f886ce17bb65ffd771195a6d Mon Sep 17 00:00:00 2001 +From: Jeff Layton +Date: Tue, 7 May 2013 11:28:31 -0400 +Subject: cifs: only set ops for inodes in I_NEW state + +From: Jeff Layton + +commit c2b93e0699723700f886ce17bb65ffd771195a6d upstream. + +It's generally not safe to reset the inode ops once they've been set. In +the case where the inode was originally thought to be a directory and +then later found to be a DFS referral, this can lead to an oops when we +try to trigger an inode op on it after changing the ops to the blank +referral operations. + +Reported-and-Tested-by: Sachin Prabhu +Signed-off-by: Jeff Layton +Signed-off-by: Steve French +Signed-off-by: Greg Kroah-Hartman + +--- + fs/cifs/inode.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/fs/cifs/inode.c ++++ b/fs/cifs/inode.c +@@ -173,7 +173,8 @@ cifs_fattr_to_inode(struct inode *inode, + + if (fattr->cf_flags & CIFS_FATTR_DFS_REFERRAL) + inode->i_flags |= S_AUTOMOUNT; +- cifs_set_ops(inode); ++ if (inode->i_state & I_NEW) ++ cifs_set_ops(inode); + } + + void diff --git a/queue-3.4/fat-fix-possible-overflow-for-fat_clusters.patch b/queue-3.4/fat-fix-possible-overflow-for-fat_clusters.patch new file mode 100644 index 00000000000..695a973333d --- /dev/null +++ b/queue-3.4/fat-fix-possible-overflow-for-fat_clusters.patch @@ -0,0 +1,52 @@ +From 7b92d03c3239f43e5b86c9cc9630f026d36ee995 Mon Sep 17 00:00:00 2001 +From: OGAWA Hirofumi +Date: Fri, 24 May 2013 15:55:08 -0700 +Subject: fat: fix possible overflow for fat_clusters + +From: OGAWA Hirofumi + +commit 7b92d03c3239f43e5b86c9cc9630f026d36ee995 upstream. + +Intermediate value of fat_clusters can be overflowed on 32bits arch. + +Reported-by: Krzysztof Strasburger +Signed-off-by: OGAWA Hirofumi +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + fs/fat/inode.c | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +--- a/fs/fat/inode.c ++++ b/fs/fat/inode.c +@@ -1237,6 +1237,19 @@ static int fat_read_root(struct inode *i + return 0; + } + ++static unsigned long calc_fat_clusters(struct super_block *sb) ++{ ++ struct msdos_sb_info *sbi = MSDOS_SB(sb); ++ ++ /* Divide first to avoid overflow */ ++ if (sbi->fat_bits != 12) { ++ unsigned long ent_per_sec = sb->s_blocksize * 8 / sbi->fat_bits; ++ return ent_per_sec * sbi->fat_length; ++ } ++ ++ return sbi->fat_length * sb->s_blocksize * 8 / sbi->fat_bits; ++} ++ + /* + * Read the super block of an MS-DOS FS. + */ +@@ -1433,7 +1446,7 @@ int fat_fill_super(struct super_block *s + sbi->fat_bits = (total_clusters > MAX_FAT12) ? 16 : 12; + + /* check that FAT table does not overflow */ +- fat_clusters = sbi->fat_length * sb->s_blocksize * 8 / sbi->fat_bits; ++ fat_clusters = calc_fat_clusters(sb); + total_clusters = min(total_clusters, fat_clusters - FAT_START_ENT); + if (total_clusters > MAX_FAT(sb)) { + if (!silent) diff --git a/queue-3.4/series b/queue-3.4/series index 57dd9f2dcff..7ffddfa9be3 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -1 +1,14 @@ avr32-fix-relocation-check-for-signed-18-bit-offset.patch +arm-plat-orion-fix-num_resources-and-id-for-ge10-and-ge11.patch +staging-vt6656-use-free_netdev-instead-of-kfree.patch +usb-option-add-telewell-tw-lte-4g.patch +usb-option-add-device-ids-for-dell-5804-novatel-e371-wwan-card.patch +usb-ftdi_sio-add-support-for-newport-conex-motor-drivers.patch +usb-cxacru-potential-underflow-in-cxacru_cm_get_array.patch +tty-fix-tty-miss-restart-after-we-turn-off-flow-control.patch +usb-blacklisted-cinterion-s-plxx-wwan-interface.patch +usb-reset-resume-quirk-needed-by-a-hub.patch +usb-xhci-override-bogus-bulk-wmaxpacketsize-values.patch +usb-uhci-fix-for-suspend-of-virtual-hp-controller.patch +cifs-only-set-ops-for-inodes-in-i_new-state.patch +fat-fix-possible-overflow-for-fat_clusters.patch diff --git a/queue-3.4/staging-vt6656-use-free_netdev-instead-of-kfree.patch b/queue-3.4/staging-vt6656-use-free_netdev-instead-of-kfree.patch new file mode 100644 index 00000000000..976ff3eefb5 --- /dev/null +++ b/queue-3.4/staging-vt6656-use-free_netdev-instead-of-kfree.patch @@ -0,0 +1,29 @@ +From 0a438d5b381e2bdfd5e02d653bf46fcc878356e3 Mon Sep 17 00:00:00 2001 +From: Hema Prathaban +Date: Sat, 11 May 2013 22:39:47 +0530 +Subject: staging: vt6656: use free_netdev instead of kfree + +From: Hema Prathaban + +commit 0a438d5b381e2bdfd5e02d653bf46fcc878356e3 upstream. + +use free_netdev() instead of kfree(pDevice->apdev) + +Signed-off-by: Hema Prathaban +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/vt6656/hostap.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/staging/vt6656/hostap.c ++++ b/drivers/staging/vt6656/hostap.c +@@ -153,7 +153,7 @@ static int hostap_disable_hostapd(PSDevi + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Netdevice %s unregistered\n", + pDevice->dev->name, pDevice->apdev->name); + } +- kfree(pDevice->apdev); ++ free_netdev(pDevice->apdev); + pDevice->apdev = NULL; + pDevice->bEnable8021x = FALSE; + pDevice->bEnableHostWEP = FALSE; diff --git a/queue-3.4/tty-fix-tty-miss-restart-after-we-turn-off-flow-control.patch b/queue-3.4/tty-fix-tty-miss-restart-after-we-turn-off-flow-control.patch new file mode 100644 index 00000000000..0a2473a8de3 --- /dev/null +++ b/queue-3.4/tty-fix-tty-miss-restart-after-we-turn-off-flow-control.patch @@ -0,0 +1,51 @@ +From dab73b4eb9ef924a2b90dab84e539076d82b256f Mon Sep 17 00:00:00 2001 +From: Wang YanQing +Date: Thu, 9 May 2013 14:16:47 +0800 +Subject: TTY: Fix tty miss restart after we turn off flow-control + +From: Wang YanQing + +commit dab73b4eb9ef924a2b90dab84e539076d82b256f upstream. + +I meet emacs hang in start if I do the operation below: + 1: echo 3 > /proc/sys/vm/drop_caches + 2: emacs BigFile + 3: Press CTRL-S follow 2 immediately + +Then emacs hang on, CTRL-Q can't resume, the terminal +hang on, you can do nothing with this terminal except +close it. + +The reason is before emacs takeover control the tty, +we use CTRL-S to XOFF it. Then when emacs takeover the +control, it may don't use the flow-control, so emacs hang. +This patch fix it. + +This patch will fix a kind of strange tty relation hang problem, +I believe I meet it with vim in ssh, and also see below bug report: +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=465823 + +Signed-off-by: Wang YanQing +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/tty/n_tty.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/drivers/tty/n_tty.c ++++ b/drivers/tty/n_tty.c +@@ -1529,6 +1529,14 @@ static void n_tty_set_termios(struct tty + tty->real_raw = 0; + } + n_tty_set_room(tty); ++ /* ++ * Fix tty hang when I_IXON(tty) is cleared, but the tty ++ * been stopped by STOP_CHAR(tty) before it. ++ */ ++ if (!I_IXON(tty) && old && (old->c_iflag & IXON) && !tty->flow_stopped) { ++ start_tty(tty); ++ } ++ + /* The termios change make the tty ready for I/O */ + wake_up_interruptible(&tty->write_wait); + wake_up_interruptible(&tty->read_wait); diff --git a/queue-3.4/usb-blacklisted-cinterion-s-plxx-wwan-interface.patch b/queue-3.4/usb-blacklisted-cinterion-s-plxx-wwan-interface.patch new file mode 100644 index 00000000000..1bda243f603 --- /dev/null +++ b/queue-3.4/usb-blacklisted-cinterion-s-plxx-wwan-interface.patch @@ -0,0 +1,45 @@ +From 8ff10bdb14a52e3f25d4ce09e0582a8684c1a6db Mon Sep 17 00:00:00 2001 +From: Schemmel Hans-Christoph +Date: Mon, 6 May 2013 11:05:12 +0200 +Subject: USB: Blacklisted Cinterion's PLxx WWAN Interface + +From: Schemmel Hans-Christoph + +commit 8ff10bdb14a52e3f25d4ce09e0582a8684c1a6db upstream. + +/drivers/usb/serial/option.c: Blacklisted Cinterion's PLxx WWAN +Interface (USB Interface 4), because it will be handled by QMI WWAN +driver. Product IDs renamed. + +Signed-off-by: Hans-Christoph Schemmel +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -342,8 +342,8 @@ static void option_instat_callback(struc + #define CINTERION_PRODUCT_EU3_E 0x0051 + #define CINTERION_PRODUCT_EU3_P 0x0052 + #define CINTERION_PRODUCT_PH8 0x0053 +-#define CINTERION_PRODUCT_AH6 0x0055 +-#define CINTERION_PRODUCT_PLS8 0x0060 ++#define CINTERION_PRODUCT_AHXX 0x0055 ++#define CINTERION_PRODUCT_PLXX 0x0060 + + /* Olivetti products */ + #define OLIVETTI_VENDOR_ID 0x0b3c +@@ -1268,8 +1268,9 @@ static const struct usb_device_id option + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EU3_E) }, + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EU3_P) }, + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PH8) }, +- { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AH6) }, +- { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PLS8) }, ++ { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX) }, ++ { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PLXX), ++ .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) }, + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) }, + { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) }, diff --git a/queue-3.4/usb-cxacru-potential-underflow-in-cxacru_cm_get_array.patch b/queue-3.4/usb-cxacru-potential-underflow-in-cxacru_cm_get_array.patch new file mode 100644 index 00000000000..990ce8a22e6 --- /dev/null +++ b/queue-3.4/usb-cxacru-potential-underflow-in-cxacru_cm_get_array.patch @@ -0,0 +1,32 @@ +From 2a0ebf80aa95cc758d4725f74a7016e992606a39 Mon Sep 17 00:00:00 2001 +From: Dan Carpenter +Date: Sun, 19 May 2013 21:52:20 +0300 +Subject: USB: cxacru: potential underflow in cxacru_cm_get_array() + +From: Dan Carpenter + +commit 2a0ebf80aa95cc758d4725f74a7016e992606a39 upstream. + +The value of "offd" comes off the instance->rcv_buf[] and we used it as +the offset into an array. The problem is that we check the upper bound +but not for negative values. + +Signed-off-by: Dan Carpenter +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/atm/cxacru.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/usb/atm/cxacru.c ++++ b/drivers/usb/atm/cxacru.c +@@ -686,7 +686,8 @@ static int cxacru_cm_get_array(struct cx + { + int ret, len; + __le32 *buf; +- int offb, offd; ++ int offb; ++ unsigned int offd; + const int stride = CMD_PACKET_SIZE / (4 * 2) - 1; + int buflen = ((size - 1) / stride + 1 + size * 2) * 4; + diff --git a/queue-3.4/usb-ftdi_sio-add-support-for-newport-conex-motor-drivers.patch b/queue-3.4/usb-ftdi_sio-add-support-for-newport-conex-motor-drivers.patch new file mode 100644 index 00000000000..a513d9f48b2 --- /dev/null +++ b/queue-3.4/usb-ftdi_sio-add-support-for-newport-conex-motor-drivers.patch @@ -0,0 +1,57 @@ +From 7138143972b7c293267c783fc99a194f0ceff7f2 Mon Sep 17 00:00:00 2001 +From: "Gomella, Andrew (NIH/NHLBI) [F]" +Date: Fri, 17 May 2013 17:39:46 +0000 +Subject: USB: ftdi_sio: Add support for Newport CONEX motor drivers + +From: "Gomella, Andrew (NIH/NHLBI) [F]" + +commit 7138143972b7c293267c783fc99a194f0ceff7f2 upstream. + +Here are two more devices that use FTDI USB-to-serial chips with new product ID's. + +The devices are the Newport Conex-AGP and Conex-CC motor controllers. +(http://www.newport.com/CONEX-AGP-Integrated-Piezo-Motor-Rotation-Stages-/987623/1033/info.aspx) +(http://www.newport.com/CONEX-CC-DC-Servo-Controller-Actuators/934114/1033/info.aspx) + +usb-devices command yields: + +P: Vendor=104d ProdID=3002 Rev=06.00 +S: Manufacturer=Newport +S: Product=CONEX-CC + +as well as + +P: Vendor=104d ProdID=3006 Rev=06.00 +S: Manufacturer=Newport +S: Product=CONEX-AGP + +Signed-off-by: Andrew Gomella +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/ftdi_sio.c | 2 ++ + drivers/usb/serial/ftdi_sio_ids.h | 2 ++ + 2 files changed, 4 insertions(+) + +--- a/drivers/usb/serial/ftdi_sio.c ++++ b/drivers/usb/serial/ftdi_sio.c +@@ -199,6 +199,8 @@ static struct usb_device_id id_table_com + { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GBM_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GBM_BOOST_PID) }, + { USB_DEVICE(NEWPORT_VID, NEWPORT_AGILIS_PID) }, ++ { USB_DEVICE(NEWPORT_VID, NEWPORT_CONEX_CC_PID) }, ++ { USB_DEVICE(NEWPORT_VID, NEWPORT_CONEX_AGP_PID) }, + { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) }, + { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_SPROG_II) }, +--- a/drivers/usb/serial/ftdi_sio_ids.h ++++ b/drivers/usb/serial/ftdi_sio_ids.h +@@ -772,6 +772,8 @@ + */ + #define NEWPORT_VID 0x104D + #define NEWPORT_AGILIS_PID 0x3000 ++#define NEWPORT_CONEX_CC_PID 0x3002 ++#define NEWPORT_CONEX_AGP_PID 0x3006 + + /* Interbiometrics USB I/O Board */ + /* Developed for Interbiometrics by Rudolf Gugler */ diff --git a/queue-3.4/usb-option-add-device-ids-for-dell-5804-novatel-e371-wwan-card.patch b/queue-3.4/usb-option-add-device-ids-for-dell-5804-novatel-e371-wwan-card.patch new file mode 100644 index 00000000000..74e03aae684 --- /dev/null +++ b/queue-3.4/usb-option-add-device-ids-for-dell-5804-novatel-e371-wwan-card.patch @@ -0,0 +1,36 @@ +From 49c6e370dd6400b84897c4100095089b5c13a061 Mon Sep 17 00:00:00 2001 +From: Dan Williams +Date: Mon, 6 May 2013 16:16:44 -0500 +Subject: USB: option: add device IDs for Dell 5804 (Novatel E371) WWAN card + +From: Dan Williams + +commit 49c6e370dd6400b84897c4100095089b5c13a061 upstream. + +A rebranded Novatel E371 for AT&T's LTE bands. + +Signed-off-by: Dan Williams +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -196,6 +196,7 @@ static void option_instat_callback(struc + + #define DELL_PRODUCT_5800_MINICARD_VZW 0x8195 /* Novatel E362 */ + #define DELL_PRODUCT_5800_V2_MINICARD_VZW 0x8196 /* Novatel E362 */ ++#define DELL_PRODUCT_5804_MINICARD_ATT 0x819b /* Novatel E371 */ + + #define KYOCERA_VENDOR_ID 0x0c88 + #define KYOCERA_PRODUCT_KPC650 0x17da +@@ -771,6 +772,7 @@ static const struct usb_device_id option + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */ + { USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, DELL_PRODUCT_5800_MINICARD_VZW, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, DELL_PRODUCT_5800_V2_MINICARD_VZW, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, DELL_PRODUCT_5804_MINICARD_ATT, 0xff, 0xff, 0xff) }, + { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */ + { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) }, + { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) }, diff --git a/queue-3.4/usb-option-add-telewell-tw-lte-4g.patch b/queue-3.4/usb-option-add-telewell-tw-lte-4g.patch new file mode 100644 index 00000000000..f8259aa1d29 --- /dev/null +++ b/queue-3.4/usb-option-add-telewell-tw-lte-4g.patch @@ -0,0 +1,35 @@ +From 73c042df6e1bc50544842a04b777b36bbe3630e6 Mon Sep 17 00:00:00 2001 +From: Teppo Kotilainen +Date: Fri, 3 May 2013 10:28:12 +0300 +Subject: usb: option: Add Telewell TW-LTE 4G + +From: Teppo Kotilainen + +commit 73c042df6e1bc50544842a04b777b36bbe3630e6 upstream. + +Information from driver description files: + + diag: VID_19D2&PID_0412&MI_00 + nmea: VID_19D2&PID_0412&MI_01 + at: VID_19D2&PID_0412&MI_02 + modem: VID_19D2&PID_0412&MI_03 + net: VID_19D2&PID_0412&MI_04 + +Signed-off-by: Teppo Kotilainen +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -966,6 +966,8 @@ static const struct usb_device_id option + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0330, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0395, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0412, 0xff, 0xff, 0xff), /* Telewell TW-LTE 4G */ ++ .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0414, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0417, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1008, 0xff, 0xff, 0xff), diff --git a/queue-3.4/usb-reset-resume-quirk-needed-by-a-hub.patch b/queue-3.4/usb-reset-resume-quirk-needed-by-a-hub.patch new file mode 100644 index 00000000000..91cc0eac386 --- /dev/null +++ b/queue-3.4/usb-reset-resume-quirk-needed-by-a-hub.patch @@ -0,0 +1,30 @@ +From bac6b03275184c912ad0818c9a0a736847804dca Mon Sep 17 00:00:00 2001 +From: Oliver Neukum +Date: Tue, 30 Apr 2013 10:18:04 +0200 +Subject: USB: reset resume quirk needed by a hub + +From: Oliver Neukum + +commit bac6b03275184c912ad0818c9a0a736847804dca upstream. + +Werner Fink has reported problems with this hub. + +Signed-off-by: Oliver Neukum +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/core/quirks.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/usb/core/quirks.c ++++ b/drivers/usb/core/quirks.c +@@ -110,6 +110,9 @@ static const struct usb_device_id usb_qu + /* Edirol SD-20 */ + { USB_DEVICE(0x0582, 0x0027), .driver_info = USB_QUIRK_RESET_RESUME }, + ++ /* Alcor Micro Corp. Hub */ ++ { USB_DEVICE(0x058f, 0x9254), .driver_info = USB_QUIRK_RESET_RESUME }, ++ + /* appletouch */ + { USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME }, + diff --git a/queue-3.4/usb-uhci-fix-for-suspend-of-virtual-hp-controller.patch b/queue-3.4/usb-uhci-fix-for-suspend-of-virtual-hp-controller.patch new file mode 100644 index 00000000000..e4dfc908250 --- /dev/null +++ b/queue-3.4/usb-uhci-fix-for-suspend-of-virtual-hp-controller.patch @@ -0,0 +1,39 @@ +From 997ff893603c6455da4c5e26ba1d0f81adfecdfc Mon Sep 17 00:00:00 2001 +From: Alan Stern +Date: Tue, 14 May 2013 13:55:29 -0400 +Subject: USB: UHCI: fix for suspend of virtual HP controller + +From: Alan Stern + +commit 997ff893603c6455da4c5e26ba1d0f81adfecdfc upstream. + +HP's virtual UHCI host controller takes a long time to suspend +(several hundred microseconds), even when no devices are attached. +This provokes a warning message from uhci-hcd in the auto-stop case. + +To prevent this from happening, this patch adds a test to avoid +performing an auto-stop when the wait_for_hp quirk flag is set. The +controller will still suspend through the normal runtime PM mechanism. +And since that pathway includes a 1-ms delay, the slowness of the +virtual hardware won't matter. + +Signed-off-by: Alan Stern +Reported-and-tested-by: ZhenHua +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/uhci-hub.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/usb/host/uhci-hub.c ++++ b/drivers/usb/host/uhci-hub.c +@@ -222,7 +222,8 @@ static int uhci_hub_status_data(struct u + /* auto-stop if nothing connected for 1 second */ + if (any_ports_active(uhci)) + uhci->rh_state = UHCI_RH_RUNNING; +- else if (time_after_eq(jiffies, uhci->auto_stop_time)) ++ else if (time_after_eq(jiffies, uhci->auto_stop_time) && ++ !uhci->wait_for_hp) + suspend_rh(uhci, UHCI_RH_AUTO_STOPPED); + break; + diff --git a/queue-3.4/usb-xhci-override-bogus-bulk-wmaxpacketsize-values.patch b/queue-3.4/usb-xhci-override-bogus-bulk-wmaxpacketsize-values.patch new file mode 100644 index 00000000000..845de74df5f --- /dev/null +++ b/queue-3.4/usb-xhci-override-bogus-bulk-wmaxpacketsize-values.patch @@ -0,0 +1,79 @@ +From e4f47e3675e6f1f40906b785b934ce963e9f2eb3 Mon Sep 17 00:00:00 2001 +From: Alan Stern +Date: Wed, 8 May 2013 11:18:05 -0400 +Subject: USB: xHCI: override bogus bulk wMaxPacketSize values + +From: Alan Stern + +commit e4f47e3675e6f1f40906b785b934ce963e9f2eb3 upstream. + +This patch shortens the logic in xhci_endpoint_init() by moving common +calculations involving max_packet and max_burst outside the switch +statement, rather than repeating the same code in multiple +case-specific statements. It also replaces two usages of max_packet +which were clearly intended to be max_burst all along. + +More importantly, it compensates for a common bug in high-speed bulk +endpoint descriptors. In many devices there is a bulk endpoint having +a wMaxPacketSize value smaller than 512, which is forbidden by the USB +spec. Some xHCI controllers can't handle this and refuse to accept +the endpoint. This patch changes the max_packet value to 512, which +allows the controller to use the endpoint properly. + +In practice the bogus maxpacket size doesn't matter, because none of +the transfers sent via these endpoints are longer than the maxpacket +value anyway. + +Signed-off-by: Alan Stern +Reported-and-tested-by: "Aurélien Leblond" +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/xhci-mem.c | 17 +++++++++-------- + 1 file changed, 9 insertions(+), 8 deletions(-) + +--- a/drivers/usb/host/xhci-mem.c ++++ b/drivers/usb/host/xhci-mem.c +@@ -1443,15 +1443,17 @@ int xhci_endpoint_init(struct xhci_hcd * + ep_ctx->ep_info2 |= cpu_to_le32(xhci_get_endpoint_type(udev, ep)); + + /* Set the max packet size and max burst */ ++ max_packet = GET_MAX_PACKET(usb_endpoint_maxp(&ep->desc)); ++ max_burst = 0; + switch (udev->speed) { + case USB_SPEED_SUPER: +- max_packet = usb_endpoint_maxp(&ep->desc); +- ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet)); + /* dig out max burst from ep companion desc */ +- max_packet = ep->ss_ep_comp.bMaxBurst; +- ep_ctx->ep_info2 |= cpu_to_le32(MAX_BURST(max_packet)); ++ max_burst = ep->ss_ep_comp.bMaxBurst; + break; + case USB_SPEED_HIGH: ++ /* Some devices get this wrong */ ++ if (usb_endpoint_xfer_bulk(&ep->desc)) ++ max_packet = 512; + /* bits 11:12 specify the number of additional transaction + * opportunities per microframe (USB 2.0, section 9.6.6) + */ +@@ -1459,17 +1461,16 @@ int xhci_endpoint_init(struct xhci_hcd * + usb_endpoint_xfer_int(&ep->desc)) { + max_burst = (usb_endpoint_maxp(&ep->desc) + & 0x1800) >> 11; +- ep_ctx->ep_info2 |= cpu_to_le32(MAX_BURST(max_burst)); + } +- /* Fall through */ ++ break; + case USB_SPEED_FULL: + case USB_SPEED_LOW: +- max_packet = GET_MAX_PACKET(usb_endpoint_maxp(&ep->desc)); +- ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet)); + break; + default: + BUG(); + } ++ ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet) | ++ MAX_BURST(max_burst)); + max_esit_payload = xhci_get_max_esit_payload(xhci, udev, ep); + ep_ctx->tx_info = cpu_to_le32(MAX_ESIT_PAYLOAD_FOR_EP(max_esit_payload)); +