]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.0 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 22 Nov 2011 21:28:48 +0000 (13:28 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 22 Nov 2011 21:28:48 +0000 (13:28 -0800)
added patches:
usb-add-quirk-for-logitech-c600-web-cam.patch
usb-ark3116-initialisation-fix.patch
usb-cdc-acm-fix-disconnect-vs-close-race.patch
usb-ehci-fix-hub-tt-scheduling-issue-with-iso-transfer.patch
usb-fix-corruption-issue-in-usb-ftdi-driver-ftdi_sio.c.patch
usb-option-add-pid-of-huawei-e173s-3g-modem.patch
usb-option-release-new-pid-for-zte-3g-modem.patch
usb-quirks-adding-more-quirky-webcams-to-avoid-squeaky-audio.patch
usb-serial-pl2303-rm-duplicate-id.patch
usb-storage-accept-8020i-protocol-commands-longer-than-12-bytes.patch
usb-workaround-for-bug-in-old-version-of-gcc.patch

12 files changed:
queue-3.0/series
queue-3.0/usb-add-quirk-for-logitech-c600-web-cam.patch [new file with mode: 0644]
queue-3.0/usb-ark3116-initialisation-fix.patch [new file with mode: 0644]
queue-3.0/usb-cdc-acm-fix-disconnect-vs-close-race.patch [new file with mode: 0644]
queue-3.0/usb-ehci-fix-hub-tt-scheduling-issue-with-iso-transfer.patch [new file with mode: 0644]
queue-3.0/usb-fix-corruption-issue-in-usb-ftdi-driver-ftdi_sio.c.patch [new file with mode: 0644]
queue-3.0/usb-option-add-pid-of-huawei-e173s-3g-modem.patch [new file with mode: 0644]
queue-3.0/usb-option-release-new-pid-for-zte-3g-modem.patch [new file with mode: 0644]
queue-3.0/usb-quirks-adding-more-quirky-webcams-to-avoid-squeaky-audio.patch [new file with mode: 0644]
queue-3.0/usb-serial-pl2303-rm-duplicate-id.patch [new file with mode: 0644]
queue-3.0/usb-storage-accept-8020i-protocol-commands-longer-than-12-bytes.patch [new file with mode: 0644]
queue-3.0/usb-workaround-for-bug-in-old-version-of-gcc.patch [new file with mode: 0644]

index 2ab2f32eefa1f95129ccfa8ba09f1bf2d6525ca2..f9541451804e24b5801ff0ecdb55e6a8c3d0b4ee 100644 (file)
@@ -29,3 +29,14 @@ xhci-set-slot-and-ep0-flags-for-address-command.patch
 usb-xhci-clear-warm-reset-change-event-during-init.patch
 usb-xhci-fix-lockdep-warning-on-endpoint-timeout.patch
 usb-xhci-resume-root-hubs-when-the-controller-resumes.patch
+usb-option-release-new-pid-for-zte-3g-modem.patch
+usb-option-add-pid-of-huawei-e173s-3g-modem.patch
+usb-serial-pl2303-rm-duplicate-id.patch
+usb-cdc-acm-fix-disconnect-vs-close-race.patch
+usb-workaround-for-bug-in-old-version-of-gcc.patch
+usb-ark3116-initialisation-fix.patch
+usb-fix-corruption-issue-in-usb-ftdi-driver-ftdi_sio.c.patch
+usb-storage-accept-8020i-protocol-commands-longer-than-12-bytes.patch
+usb-ehci-fix-hub-tt-scheduling-issue-with-iso-transfer.patch
+usb-add-quirk-for-logitech-c600-web-cam.patch
+usb-quirks-adding-more-quirky-webcams-to-avoid-squeaky-audio.patch
diff --git a/queue-3.0/usb-add-quirk-for-logitech-c600-web-cam.patch b/queue-3.0/usb-add-quirk-for-logitech-c600-web-cam.patch
new file mode 100644 (file)
index 0000000..1bd5bf7
--- /dev/null
@@ -0,0 +1,31 @@
+From 60c71ca972a2dd3fd9d0165b405361c8ad48349b Mon Sep 17 00:00:00 2001
+From: Josh Boyer <jwboyer@redhat.com>
+Date: Wed, 26 Oct 2011 13:53:17 -0400
+Subject: USB: add quirk for Logitech C600 web cam
+
+From: Josh Boyer <jwboyer@redhat.com>
+
+commit 60c71ca972a2dd3fd9d0165b405361c8ad48349b upstream.
+
+We've had another report of the "chipmunk" sound on a Logitech C600 webcam.
+This patch resolves the issue.
+
+Signed-off-by: Josh Boyer <jwboyer@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/core/quirks.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/usb/core/quirks.c
++++ b/drivers/usb/core/quirks.c
+@@ -50,6 +50,9 @@ static const struct usb_device_id usb_qu
+       /* Logitech Webcam B/C500 */
+       { USB_DEVICE(0x046d, 0x0807), .driver_info = USB_QUIRK_RESET_RESUME },
++      /* Logitech Webcam C600 */
++      { USB_DEVICE(0x046d, 0x0808), .driver_info = USB_QUIRK_RESET_RESUME },
++
+       /* Logitech Webcam Pro 9000 */
+       { USB_DEVICE(0x046d, 0x0809), .driver_info = USB_QUIRK_RESET_RESUME },
diff --git a/queue-3.0/usb-ark3116-initialisation-fix.patch b/queue-3.0/usb-ark3116-initialisation-fix.patch
new file mode 100644 (file)
index 0000000..8481e60
--- /dev/null
@@ -0,0 +1,54 @@
+From 583182ba5f02c8c9be82ea550f2051eaec15b975 Mon Sep 17 00:00:00 2001
+From: Bart Hartgers <bart.hartgers@gmail.com>
+Date: Wed, 26 Oct 2011 13:29:42 +0200
+Subject: USB: ark3116 initialisation fix
+
+From: Bart Hartgers <bart.hartgers@gmail.com>
+
+commit 583182ba5f02c8c9be82ea550f2051eaec15b975 upstream.
+
+This patch for the usb serial ark3116 driver fixes an initialisation
+ordering bug that gets triggered on hotplug when using at least recent
+debian/ubuntu userspace. Without it, ark3116 serial cables don't work.
+
+Signed-off-by: Bart Hartgers <bart.hartgers@gmail.com>
+Tested-by: law_ence.dev@ntlworld.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/ark3116.c |   10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/drivers/usb/serial/ark3116.c
++++ b/drivers/usb/serial/ark3116.c
+@@ -42,7 +42,7 @@ static int debug;
+  * Version information
+  */
+-#define DRIVER_VERSION "v0.6"
++#define DRIVER_VERSION "v0.7"
+ #define DRIVER_AUTHOR "Bart Hartgers <bart.hartgers+ark3116@gmail.com>"
+ #define DRIVER_DESC "USB ARK3116 serial/IrDA driver"
+ #define DRIVER_DEV_DESC "ARK3116 RS232/IrDA"
+@@ -380,10 +380,6 @@ static int ark3116_open(struct tty_struc
+               goto err_out;
+       }
+-      /* setup termios */
+-      if (tty)
+-              ark3116_set_termios(tty, port, NULL);
+-
+       /* remove any data still left: also clears error state */
+       ark3116_read_reg(serial, UART_RX, buf);
+@@ -406,6 +402,10 @@ static int ark3116_open(struct tty_struc
+       /* enable DMA */
+       ark3116_write_reg(port->serial, UART_FCR, UART_FCR_DMA_SELECT);
++      /* setup termios */
++      if (tty)
++              ark3116_set_termios(tty, port, NULL);
++
+ err_out:
+       kfree(buf);
+       return result;
diff --git a/queue-3.0/usb-cdc-acm-fix-disconnect-vs-close-race.patch b/queue-3.0/usb-cdc-acm-fix-disconnect-vs-close-race.patch
new file mode 100644 (file)
index 0000000..f4c236c
--- /dev/null
@@ -0,0 +1,78 @@
+From 5dc2470c602da8851907ec18942cd876c3b4ecc1 Mon Sep 17 00:00:00 2001
+From: Havard Skinnemoen <hskinnemoen@google.com>
+Date: Wed, 9 Nov 2011 13:47:38 -0800
+Subject: USB: cdc-acm: Fix disconnect() vs close() race
+
+From: Havard Skinnemoen <hskinnemoen@google.com>
+
+commit 5dc2470c602da8851907ec18942cd876c3b4ecc1 upstream.
+
+There's a race between the USB disconnect handler and the TTY close
+handler which may cause the acm object to be freed while it's still
+being used. This may lead to things like
+
+http://article.gmane.org/gmane.linux.usb.general/54250
+
+and
+
+https://lkml.org/lkml/2011/5/29/64
+
+This is the simplest fix I could come up with. Holding on to open_mutex
+while closing the TTY device prevents acm_disconnect() from freeing the
+acm object between acm->port.count drops to 0 and the TTY side of the
+cleanups are finalized.
+
+Signed-off-by: Havard Skinnemoen <hskinnemoen@google.com>
+Cc: Oliver Neukum <oliver@neukum.name>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/class/cdc-acm.c |    8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/class/cdc-acm.c
++++ b/drivers/usb/class/cdc-acm.c
+@@ -539,7 +539,6 @@ static void acm_port_down(struct acm *ac
+ {
+       int i;
+-      mutex_lock(&open_mutex);
+       if (acm->dev) {
+               usb_autopm_get_interface(acm->control);
+               acm_set_control(acm, acm->ctrlout = 0);
+@@ -551,14 +550,15 @@ static void acm_port_down(struct acm *ac
+               acm->control->needs_remote_wakeup = 0;
+               usb_autopm_put_interface(acm->control);
+       }
+-      mutex_unlock(&open_mutex);
+ }
+ static void acm_tty_hangup(struct tty_struct *tty)
+ {
+       struct acm *acm = tty->driver_data;
+       tty_port_hangup(&acm->port);
++      mutex_lock(&open_mutex);
+       acm_port_down(acm);
++      mutex_unlock(&open_mutex);
+ }
+ static void acm_tty_close(struct tty_struct *tty, struct file *filp)
+@@ -569,8 +569,9 @@ static void acm_tty_close(struct tty_str
+          shutdown */
+       if (!acm)
+               return;
++
++      mutex_lock(&open_mutex);
+       if (tty_port_close_start(&acm->port, tty, filp) == 0) {
+-              mutex_lock(&open_mutex);
+               if (!acm->dev) {
+                       tty_port_tty_set(&acm->port, NULL);
+                       acm_tty_unregister(acm);
+@@ -582,6 +583,7 @@ static void acm_tty_close(struct tty_str
+       acm_port_down(acm);
+       tty_port_close_end(&acm->port, tty);
+       tty_port_tty_set(&acm->port, NULL);
++      mutex_unlock(&open_mutex);
+ }
+ static int acm_tty_write(struct tty_struct *tty,
diff --git a/queue-3.0/usb-ehci-fix-hub-tt-scheduling-issue-with-iso-transfer.patch b/queue-3.0/usb-ehci-fix-hub-tt-scheduling-issue-with-iso-transfer.patch
new file mode 100644 (file)
index 0000000..bef61b8
--- /dev/null
@@ -0,0 +1,104 @@
+From 811c926c538f7e8d3c08b630dd5844efd7e000f6 Mon Sep 17 00:00:00 2001
+From: Thomas Poussevin <thomas.poussevin@parrot.com>
+Date: Thu, 27 Oct 2011 18:46:48 +0200
+Subject: USB: EHCI: fix HUB TT scheduling issue with iso transfer
+
+From: Thomas Poussevin <thomas.poussevin@parrot.com>
+
+commit 811c926c538f7e8d3c08b630dd5844efd7e000f6 upstream.
+
+The current TT scheduling doesn't allow to play and then record on a
+full-speed device connected to a high speed hub.
+
+The IN iso stream can only start on the first uframe (0-2 for a 165 us)
+because of CSPLIT transactions.
+For the OUT iso stream there no such restriction. uframe 0-5 are possible.
+
+The idea of this patch is that the first uframe are precious (for IN TT iso
+stream) and we should allocate the last uframes first if possible.
+
+For that we reverse the order of uframe allocation (last uframe first).
+
+Here an example :
+
+hid interrupt stream
+----------------------------------------------------------------------
+uframe                |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |
+----------------------------------------------------------------------
+max_tt_usecs          | 125 | 125 | 125 | 125 | 125 | 125 | 30  |  0  |
+----------------------------------------------------------------------
+used usecs on a frame | 13  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |
+----------------------------------------------------------------------
+
+iso OUT stream
+----------------------------------------------------------------------
+uframe                |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |
+----------------------------------------------------------------------
+max_tt_usecs          | 125 | 125 | 125 | 125 | 125 | 125 | 30  |  0  |
+----------------------------------------------------------------------
+used usecs on a frame | 13  | 125 |  39 |  0  |  0  |  0  |  0  |  0  |
+----------------------------------------------------------------------
+
+There no place for iso IN stream  (uframe 0-2 are used) and we got "cannot
+submit datapipe for urb 0, error -28: not enough bandwidth" error.
+
+With the patch this become.
+
+iso OUT stream
+----------------------------------------------------------------------
+uframe                |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |
+----------------------------------------------------------------------
+max_tt_usecs          | 125 | 125 | 125 | 125 | 125 | 125 | 30  |  0  |
+----------------------------------------------------------------------
+used usecs on a frame |  13 |  0  |  0  |  0  | 125 |  39 |  0  |  0  |
+----------------------------------------------------------------------
+
+iso IN stream
+----------------------------------------------------------------------
+uframe                |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |
+----------------------------------------------------------------------
+max_tt_usecs          | 125 | 125 | 125 | 125 | 125 | 125 | 30  |  0  |
+----------------------------------------------------------------------
+used usecs on a frame |  13 |  0  | 125 | 40  | 125 |  39 |  0  |  0  |
+----------------------------------------------------------------------
+
+Signed-off-by: Matthieu Castet <matthieu.castet@parrot.com>
+Signed-off-by: Thomas Poussevin <thomas.poussevin@parrot.com>
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/ehci-sched.c |   15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+--- a/drivers/usb/host/ehci-sched.c
++++ b/drivers/usb/host/ehci-sched.c
+@@ -1483,10 +1483,15 @@ iso_stream_schedule (
+               /* NOTE:  assumes URB_ISO_ASAP, to limit complexity/bugs */
+-              /* find a uframe slot with enough bandwidth */
+-              next = start + period;
+-              for (; start < next; start++) {
+-
++              /* find a uframe slot with enough bandwidth.
++               * Early uframes are more precious because full-speed
++               * iso IN transfers can't use late uframes,
++               * and therefore they should be allocated last.
++               */
++              next = start;
++              start += period;
++              do {
++                      start--;
+                       /* check schedule: enough space? */
+                       if (stream->highspeed) {
+                               if (itd_slot_ok(ehci, mod, start,
+@@ -1499,7 +1504,7 @@ iso_stream_schedule (
+                                               start, sched, period))
+                                       break;
+                       }
+-              }
++              } while (start > next);
+               /* no room in the schedule */
+               if (start == next) {
diff --git a/queue-3.0/usb-fix-corruption-issue-in-usb-ftdi-driver-ftdi_sio.c.patch b/queue-3.0/usb-fix-corruption-issue-in-usb-ftdi-driver-ftdi_sio.c.patch
new file mode 100644 (file)
index 0000000..a805155
--- /dev/null
@@ -0,0 +1,66 @@
+From b1ffb4c851f185e9051ba837c16d9b84ef688d26 Mon Sep 17 00:00:00 2001
+From: Andrew Worsley <amworsley@gmail.com>
+Date: Fri, 18 Nov 2011 23:13:33 +1100
+Subject: USB: Fix Corruption issue in USB ftdi driver ftdi_sio.c
+
+From: Andrew Worsley <amworsley@gmail.com>
+
+commit b1ffb4c851f185e9051ba837c16d9b84ef688d26 upstream.
+
+Fix for ftdi_set_termios() glitching output
+
+ftdi_set_termios() is constantly setting the baud rate, data bits and parity
+unnecessarily on every call, . When called while characters are being
+transmitted can cause the FTDI chip to corrupt the serial port bit stream
+output by stalling the output half a bit during the output of a character.
+Simple fix by skipping this setting if the baud rate/data bits/parity are
+unchanged.
+
+Signed-off-by: Andrew Worsley <amworsley@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/ftdi_sio.c |   14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -2080,13 +2080,19 @@ static void ftdi_set_termios(struct tty_
+       cflag = termios->c_cflag;
+-      /* FIXME -For this cut I don't care if the line is really changing or
+-         not  - so just do the change regardless  - should be able to
+-         compare old_termios and tty->termios */
++      if (old_termios->c_cflag == termios->c_cflag
++          && old_termios->c_ispeed == termios->c_ispeed
++          && old_termios->c_ospeed == termios->c_ospeed)
++              goto no_c_cflag_changes;
++
+       /* NOTE These routines can get interrupted by
+          ftdi_sio_read_bulk_callback  - need to examine what this means -
+          don't see any problems yet */
++      if ((old_termios->c_cflag & (CSIZE|PARODD|PARENB|CMSPAR|CSTOPB)) ==
++          (termios->c_cflag & (CSIZE|PARODD|PARENB|CMSPAR|CSTOPB)))
++              goto no_data_parity_stop_changes;
++
+       /* Set number of data bits, parity, stop bits */
+       urb_value = 0;
+@@ -2127,6 +2133,7 @@ static void ftdi_set_termios(struct tty_
+       }
+       /* Now do the baudrate */
++no_data_parity_stop_changes:
+       if ((cflag & CBAUD) == B0) {
+               /* Disable flow control */
+               if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
+@@ -2154,6 +2161,7 @@ static void ftdi_set_termios(struct tty_
+       /* Set flow control */
+       /* Note device also supports DTR/CD (ugh) and Xon/Xoff in hardware */
++no_c_cflag_changes:
+       if (cflag & CRTSCTS) {
+               dbg("%s Setting to CRTSCTS flow control", __func__);
+               if (usb_control_msg(dev,
diff --git a/queue-3.0/usb-option-add-pid-of-huawei-e173s-3g-modem.patch b/queue-3.0/usb-option-add-pid-of-huawei-e173s-3g-modem.patch
new file mode 100644 (file)
index 0000000..8b5d072
--- /dev/null
@@ -0,0 +1,34 @@
+From 4aa3648c719265bac9c2742c9ebb043e6dbdd790 Mon Sep 17 00:00:00 2001
+From: Ferenc Wagner <wferi@niif.hu>
+Date: Thu, 17 Nov 2011 16:44:58 +0100
+Subject: USB: option: add PID of Huawei E173s 3G modem
+
+From: Ferenc Wagner <wferi@niif.hu>
+
+commit 4aa3648c719265bac9c2742c9ebb043e6dbdd790 upstream.
+
+Signed-off-by: Ferenc Wagner <wferi@niif.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -156,6 +156,7 @@ static void option_instat_callback(struc
+ #define HUAWEI_PRODUCT_K4511                  0x14CC
+ #define HUAWEI_PRODUCT_ETS1220                        0x1803
+ #define HUAWEI_PRODUCT_E353                   0x1506
++#define HUAWEI_PRODUCT_E173S                  0x1C05
+ #define QUANTA_VENDOR_ID                      0x0408
+ #define QUANTA_PRODUCT_Q101                   0xEA02
+@@ -637,6 +638,7 @@ static const struct usb_device_id option
+       { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143D, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173S, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff),
+               .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
+       { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff),
diff --git a/queue-3.0/usb-option-release-new-pid-for-zte-3g-modem.patch b/queue-3.0/usb-option-release-new-pid-for-zte-3g-modem.patch
new file mode 100644 (file)
index 0000000..54c00a2
--- /dev/null
@@ -0,0 +1,64 @@
+From 46b5a277ed90317a4d17e936c16037e76011b219 Mon Sep 17 00:00:00 2001
+From: "zheng.zhijian@zte.com.cn" <zheng.zhijian@zte.com.cn>
+Date: Thu, 17 Nov 2011 19:23:25 +0800
+Subject: USB: option: release new PID for ZTE 3G modem
+
+From: "zheng.zhijian@zte.com.cn" <zheng.zhijian@zte.com.cn>
+
+commit 46b5a277ed90317a4d17e936c16037e76011b219 upstream.
+
+This patch adds new PIDs for ZTE 3G modem, after we confirm it and tested.
+Thanks for Dan's work at kernel option devier.
+
+Signed-off-by: Alvin.Zheng <zheng.zhijian@zte.com.cn>
+Signed-off-by: wsalvin <wsalvin@yahoo.com.cn>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c |   21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -316,6 +316,9 @@ static void option_instat_callback(struc
+ #define ZTE_PRODUCT_AC8710                    0xfff1
+ #define ZTE_PRODUCT_AC2726                    0xfff5
+ #define ZTE_PRODUCT_AC8710T                   0xffff
++#define ZTE_PRODUCT_MC2718                    0xffe8
++#define ZTE_PRODUCT_AD3812                    0xffeb
++#define ZTE_PRODUCT_MC2716                    0xffed
+ #define BENQ_VENDOR_ID                                0x04a5
+ #define BENQ_PRODUCT_H10                      0x4068
+@@ -500,6 +503,18 @@ static const struct option_blacklist_inf
+       .reserved = BIT(4),
+ };
++static const struct option_blacklist_info zte_ad3812_z_blacklist = {
++      .sendsetup = BIT(0) | BIT(1) | BIT(2),
++};
++
++static const struct option_blacklist_info zte_mc2718_z_blacklist = {
++      .sendsetup = BIT(1) | BIT(2) | BIT(3) | BIT(4),
++};
++
++static const struct option_blacklist_info zte_mc2716_z_blacklist = {
++      .sendsetup = BIT(1) | BIT(2) | BIT(3),
++};
++
+ static const struct option_blacklist_info huawei_cdc12_blacklist = {
+       .reserved = BIT(1) | BIT(2),
+ };
+@@ -1043,6 +1058,12 @@ static const struct usb_device_id option
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710T, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2718, 0xff, 0xff, 0xff),
++       .driver_info = (kernel_ulong_t)&zte_mc2718_z_blacklist },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AD3812, 0xff, 0xff, 0xff),
++       .driver_info = (kernel_ulong_t)&zte_ad3812_z_blacklist },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2716, 0xff, 0xff, 0xff),
++       .driver_info = (kernel_ulong_t)&zte_mc2716_z_blacklist },
+       { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
+       { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) },
+       { USB_DEVICE(ALINK_VENDOR_ID, DLINK_PRODUCT_DWM_652_U5) }, /* Yes, ALINK_VENDOR_ID */
diff --git a/queue-3.0/usb-quirks-adding-more-quirky-webcams-to-avoid-squeaky-audio.patch b/queue-3.0/usb-quirks-adding-more-quirky-webcams-to-avoid-squeaky-audio.patch
new file mode 100644 (file)
index 0000000..26e983b
--- /dev/null
@@ -0,0 +1,60 @@
+From 0d145d7d4a241c321c832a810bb6edad18e2217b Mon Sep 17 00:00:00 2001
+From: sordna <sordna@gmail.com>
+Date: Thu, 27 Oct 2011 21:06:26 -0700
+Subject: USB: quirks: adding more quirky webcams to avoid squeaky audio
+
+From: sordna <sordna@gmail.com>
+
+commit 0d145d7d4a241c321c832a810bb6edad18e2217b upstream.
+
+The following patch contains additional affected webcam models, on top of the
+patches commited to linux-next 2394d67e446bf616a0885167d5f0d397bdacfdfc
+and 5b253d88cc6c65a23cefc457a5a4ef139913c5fc
+
+Signed-off-by: sordna <sordna@gmail.com>
+Cc: Oliver Neukum <oliver@neukum.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/core/quirks.c |   24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+--- a/drivers/usb/core/quirks.c
++++ b/drivers/usb/core/quirks.c
+@@ -56,12 +56,36 @@ static const struct usb_device_id usb_qu
+       /* Logitech Webcam Pro 9000 */
+       { USB_DEVICE(0x046d, 0x0809), .driver_info = USB_QUIRK_RESET_RESUME },
++      /* Logitech Webcam C905 */
++      { USB_DEVICE(0x046d, 0x080a), .driver_info = USB_QUIRK_RESET_RESUME },
++
++      /* Logitech Webcam C210 */
++      { USB_DEVICE(0x046d, 0x0819), .driver_info = USB_QUIRK_RESET_RESUME },
++
++      /* Logitech Webcam C260 */
++      { USB_DEVICE(0x046d, 0x081a), .driver_info = USB_QUIRK_RESET_RESUME },
++
+       /* Logitech Webcam C310 */
+       { USB_DEVICE(0x046d, 0x081b), .driver_info = USB_QUIRK_RESET_RESUME },
++      /* Logitech Webcam C910 */
++      { USB_DEVICE(0x046d, 0x0821), .driver_info = USB_QUIRK_RESET_RESUME },
++
++      /* Logitech Webcam C160 */
++      { USB_DEVICE(0x046d, 0x0824), .driver_info = USB_QUIRK_RESET_RESUME },
++
+       /* Logitech Webcam C270 */
+       { USB_DEVICE(0x046d, 0x0825), .driver_info = USB_QUIRK_RESET_RESUME },
++      /* Logitech Quickcam Pro 9000 */
++      { USB_DEVICE(0x046d, 0x0990), .driver_info = USB_QUIRK_RESET_RESUME },
++
++      /* Logitech Quickcam E3500 */
++      { USB_DEVICE(0x046d, 0x09a4), .driver_info = USB_QUIRK_RESET_RESUME },
++
++      /* Logitech Quickcam Vision Pro */
++      { USB_DEVICE(0x046d, 0x09a6), .driver_info = USB_QUIRK_RESET_RESUME },
++
+       /* Logitech Harmony 700-series */
+       { USB_DEVICE(0x046d, 0xc122), .driver_info = USB_QUIRK_DELAY_INIT },
diff --git a/queue-3.0/usb-serial-pl2303-rm-duplicate-id.patch b/queue-3.0/usb-serial-pl2303-rm-duplicate-id.patch
new file mode 100644 (file)
index 0000000..e79fb4d
--- /dev/null
@@ -0,0 +1,58 @@
+From 0c16595539b612fe948559433dda08ff96a8bdc7 Mon Sep 17 00:00:00 2001
+From: wangyanqing <udknight@gmail.com>
+Date: Thu, 10 Nov 2011 14:04:08 +0800
+Subject: USB: serial: pl2303: rm duplicate id
+
+From: wangyanqing <udknight@gmail.com>
+
+commit 0c16595539b612fe948559433dda08ff96a8bdc7 upstream.
+
+I get report from customer that his usb-serial
+converter doesn't work well,it sometimes work,
+but sometimes it doesn't.
+
+The usb-serial converter's id:
+vendor_id product_id
+0x4348    0x5523
+
+Then I search the usb-serial codes, and there are
+two drivers announce support this device, pl2303
+and ch341, commit 026dfaf1 cause it. Through many
+times to test, ch341 works well with this device,
+and pl2303 doesn't work quite often(it just work quite little).
+
+ch341 works well with this device, so we doesn't
+need pl2303 to support.I try to revert 026dfaf1 first,
+but it failed. So I prepare this patch by hand to revert it.
+
+Signed-off-by: Wang YanQing <Udknight@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/pl2303.c |    1 -
+ drivers/usb/serial/pl2303.h |    4 ----
+ 2 files changed, 5 deletions(-)
+
+--- a/drivers/usb/serial/pl2303.c
++++ b/drivers/usb/serial/pl2303.c
+@@ -91,7 +91,6 @@ static const struct usb_device_id id_tab
+       { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) },
+       { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) },
+       { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) },
+-      { USB_DEVICE(WINCHIPHEAD_VENDOR_ID, WINCHIPHEAD_USBSER_PRODUCT_ID) },
+       { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) },
+       { }                                     /* Terminating entry */
+ };
+--- a/drivers/usb/serial/pl2303.h
++++ b/drivers/usb/serial/pl2303.h
+@@ -145,10 +145,6 @@
+ #define ADLINK_VENDOR_ID              0x0b63
+ #define ADLINK_ND6530_PRODUCT_ID      0x6530
+-/* WinChipHead USB->RS 232 adapter */
+-#define WINCHIPHEAD_VENDOR_ID         0x4348
+-#define WINCHIPHEAD_USBSER_PRODUCT_ID 0x5523
+-
+ /* SMART USB Serial Adapter */
+ #define SMART_VENDOR_ID       0x0b8c
+ #define SMART_PRODUCT_ID      0x2303
diff --git a/queue-3.0/usb-storage-accept-8020i-protocol-commands-longer-than-12-bytes.patch b/queue-3.0/usb-storage-accept-8020i-protocol-commands-longer-than-12-bytes.patch
new file mode 100644 (file)
index 0000000..cd828e8
--- /dev/null
@@ -0,0 +1,54 @@
+From 2f640bf4c94324aeaa1b6385c10aab8c5ad1e1cf Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Tue, 25 Oct 2011 10:50:58 -0400
+Subject: usb-storage: Accept 8020i-protocol commands longer than 12 bytes
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit 2f640bf4c94324aeaa1b6385c10aab8c5ad1e1cf upstream.
+
+The 8020i protocol (also 8070i and QIC-157) uses 12-byte commands;
+shorter commands must be padded.  Simon Detheridge reports that his
+3-TB USB disk drive claims to use the 8020i protocol (which is
+normally meant for ATAPI devices like CD drives), and because of its
+large size, the disk drive requires the use of 16-byte commands.
+However the usb_stor_pad12_command() routine in usb-storage always
+sets the command length to 12, making the drive impossible to use.
+
+Since the SFF-8020i specification allows for 16-byte commands in
+future extensions, we may as well accept them.  This patch (as1490)
+changes usb_stor_pad12_command() to leave commands larger than 12
+bytes alone rather than truncating them.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Tested-by: Simon Detheridge <simon@widgit.com>
+CC: Matthew Dharm <mdharm-usb@one-eyed-alien.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/storage/protocol.c |    7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+--- a/drivers/usb/storage/protocol.c
++++ b/drivers/usb/storage/protocol.c
+@@ -58,7 +58,9 @@
+ void usb_stor_pad12_command(struct scsi_cmnd *srb, struct us_data *us)
+ {
+-      /* Pad the SCSI command with zeros out to 12 bytes
++      /*
++       * Pad the SCSI command with zeros out to 12 bytes.  If the
++       * command already is 12 bytes or longer, leave it alone.
+        *
+        * NOTE: This only works because a scsi_cmnd struct field contains
+        * a unsigned char cmnd[16], so we know we have storage available
+@@ -66,9 +68,6 @@ void usb_stor_pad12_command(struct scsi_
+       for (; srb->cmd_len<12; srb->cmd_len++)
+               srb->cmnd[srb->cmd_len] = 0;
+-      /* set command length to 12 bytes */
+-      srb->cmd_len = 12;
+-
+       /* send the command to the transport layer */
+       usb_stor_invoke_transport(srb, us);
+ }
diff --git a/queue-3.0/usb-workaround-for-bug-in-old-version-of-gcc.patch b/queue-3.0/usb-workaround-for-bug-in-old-version-of-gcc.patch
new file mode 100644 (file)
index 0000000..b854243
--- /dev/null
@@ -0,0 +1,51 @@
+From 97ff22ee3b4cb3a334f7385e269773141aed702f Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Thu, 27 Oct 2011 11:20:21 -0400
+Subject: USB: workaround for bug in old version of GCC
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit 97ff22ee3b4cb3a334f7385e269773141aed702f upstream.
+
+This patch (as1491) works around a bug in GCC-3.4.6, which is still
+supposed to be supported.  The number of microseconds in the udelay()
+call in quirk_usb_disable_ehci() is fixed at 100, but the compiler
+doesn't understand this and generates a link-time error.  So we
+replace the otherwise unused variable "delta" with a simple constant
+100.  This same pattern is already used in other delay loops in that
+source file.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Reported-by: Konrad Rzepecki <krzepecki@dentonet.pl>
+Tested-by: Konrad Rzepecki <krzepecki@dentonet.pl>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/pci-quirks.c |    7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+--- a/drivers/usb/host/pci-quirks.c
++++ b/drivers/usb/host/pci-quirks.c
+@@ -626,7 +626,7 @@ static void __devinit quirk_usb_disable_
+       void __iomem *base, *op_reg_base;
+       u32     hcc_params, cap, val;
+       u8      offset, cap_length;
+-      int     wait_time, delta, count = 256/4;
++      int     wait_time, count = 256/4;
+       if (!mmio_resource_enabled(pdev, 0))
+               return;
+@@ -672,11 +672,10 @@ static void __devinit quirk_usb_disable_
+               writel(val, op_reg_base + EHCI_USBCMD);
+               wait_time = 2000;
+-              delta = 100;
+               do {
+                       writel(0x3f, op_reg_base + EHCI_USBSTS);
+-                      udelay(delta);
+-                      wait_time -= delta;
++                      udelay(100);
++                      wait_time -= 100;
+                       val = readl(op_reg_base + EHCI_USBSTS);
+                       if ((val == ~(u32)0) || (val & EHCI_USBSTS_HALTED)) {
+                               break;