]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.2-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Feb 2012 15:57:56 +0000 (07:57 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Feb 2012 15:57:56 +0000 (07:57 -0800)
added patches:
mmc-cb710-core-add-missing-spin_lock_init-for-irq_lock-of-struct-cb710_chip.patch
staging-asus_oled-fix-image-processing.patch
staging-asus_oled-fix-null-ptr-crash-on-unloading.patch
staging-r8712u-add-new-sitecom-usb-id.patch
staging-r8712u-use-asynchronous-firmware-loading.patch
usb-add-new-zte-3g-dongle-s-pid-to-option.c.patch
usb-ch9.h-usb_endpoint_maxp-uses-__le16_to_cpu.patch
usb-gadget-zero-fix-bug-in-loopback-autoresume-handling.patch
usb-skip-pci-usb-quirk-handling-for-netlogic-xlp.patch
usb-usbserial-add-new-pid-number-0xa951-to-the-ftdi-driver.patch
zcache-fix-deadlock-condition.patch
zcache-set-swiz_bits-to-8-to-reduce-tmem-bucket-lock-contention.patch

13 files changed:
queue-3.2/mmc-cb710-core-add-missing-spin_lock_init-for-irq_lock-of-struct-cb710_chip.patch [new file with mode: 0644]
queue-3.2/series
queue-3.2/staging-asus_oled-fix-image-processing.patch [new file with mode: 0644]
queue-3.2/staging-asus_oled-fix-null-ptr-crash-on-unloading.patch [new file with mode: 0644]
queue-3.2/staging-r8712u-add-new-sitecom-usb-id.patch [new file with mode: 0644]
queue-3.2/staging-r8712u-use-asynchronous-firmware-loading.patch [new file with mode: 0644]
queue-3.2/usb-add-new-zte-3g-dongle-s-pid-to-option.c.patch [new file with mode: 0644]
queue-3.2/usb-ch9.h-usb_endpoint_maxp-uses-__le16_to_cpu.patch [new file with mode: 0644]
queue-3.2/usb-gadget-zero-fix-bug-in-loopback-autoresume-handling.patch [new file with mode: 0644]
queue-3.2/usb-skip-pci-usb-quirk-handling-for-netlogic-xlp.patch [new file with mode: 0644]
queue-3.2/usb-usbserial-add-new-pid-number-0xa951-to-the-ftdi-driver.patch [new file with mode: 0644]
queue-3.2/zcache-fix-deadlock-condition.patch [new file with mode: 0644]
queue-3.2/zcache-set-swiz_bits-to-8-to-reduce-tmem-bucket-lock-contention.patch [new file with mode: 0644]

diff --git a/queue-3.2/mmc-cb710-core-add-missing-spin_lock_init-for-irq_lock-of-struct-cb710_chip.patch b/queue-3.2/mmc-cb710-core-add-missing-spin_lock_init-for-irq_lock-of-struct-cb710_chip.patch
new file mode 100644 (file)
index 0000000..a86620c
--- /dev/null
@@ -0,0 +1,30 @@
+From b5266ea675c5a041e2852c7ccec4cf2d4f5e0cf4 Mon Sep 17 00:00:00 2001
+From: Axel Lin <axel.lin@gmail.com>
+Date: Wed, 1 Feb 2012 12:31:47 +0800
+Subject: mmc: cb710 core: Add missing spin_lock_init for irq_lock of struct cb710_chip
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Axel Lin <axel.lin@gmail.com>
+
+commit b5266ea675c5a041e2852c7ccec4cf2d4f5e0cf4 upstream.
+
+Signed-off-by: Axel Lin <axel.lin@gmail.com>
+Acked-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/misc/cb710/core.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/misc/cb710/core.c
++++ b/drivers/misc/cb710/core.c
+@@ -245,6 +245,7 @@ static int __devinit cb710_probe(struct
+       if (err)
+               return err;
++      spin_lock_init(&chip->irq_lock);
+       chip->pdev = pdev;
+       chip->iobase = pcim_iomap_table(pdev)[0];
index f221446be5062a353e7902689c134662926914af..ed30a83982ee7c24511deeb7ba6a02bb94a7c0a8 100644 (file)
@@ -70,3 +70,15 @@ target-correct-sense-key-for-invalid-field-in-parameter-list-cdb.patch
 target-add-workaround-for-zero-length-control-cdb-handling.patch
 target-return-correct-asc-for-unimplemented-vpd-pages.patch
 target-fail-inquiry-commands-with-evpd-0-but-page-code-0.patch
+staging-asus_oled-fix-image-processing.patch
+staging-asus_oled-fix-null-ptr-crash-on-unloading.patch
+staging-r8712u-add-new-sitecom-usb-id.patch
+staging-r8712u-use-asynchronous-firmware-loading.patch
+usb-ch9.h-usb_endpoint_maxp-uses-__le16_to_cpu.patch
+usb-gadget-zero-fix-bug-in-loopback-autoresume-handling.patch
+usb-skip-pci-usb-quirk-handling-for-netlogic-xlp.patch
+usb-usbserial-add-new-pid-number-0xa951-to-the-ftdi-driver.patch
+usb-add-new-zte-3g-dongle-s-pid-to-option.c.patch
+zcache-set-swiz_bits-to-8-to-reduce-tmem-bucket-lock-contention.patch
+zcache-fix-deadlock-condition.patch
+mmc-cb710-core-add-missing-spin_lock_init-for-irq_lock-of-struct-cb710_chip.patch
diff --git a/queue-3.2/staging-asus_oled-fix-image-processing.patch b/queue-3.2/staging-asus_oled-fix-image-processing.patch
new file mode 100644 (file)
index 0000000..0ab0f5f
--- /dev/null
@@ -0,0 +1,57 @@
+From 635032cb397b396241372fa0ff36ae758e658b23 Mon Sep 17 00:00:00 2001
+From: Pekka Paalanen <pq@iki.fi>
+Date: Sun, 22 Jan 2012 16:33:46 +0200
+Subject: Staging: asus_oled: fix image processing
+
+From: Pekka Paalanen <pq@iki.fi>
+
+commit 635032cb397b396241372fa0ff36ae758e658b23 upstream.
+
+Programming an image was broken, because odev->buf_offs was not advanced
+for val == 0 in append_values(). This regression was introduced in:
+
+ commit 1ff12a4aa354bed093a0240d5e6347b1e27601bc
+ Author: Kevin A. Granade <kevin.granade@gmail.com>
+ Date:   Sat Sep 5 01:03:39 2009 -0500
+
+     Staging: asus_oled: Cleaned up checkpatch issues.
+
+Fix the image processing by special-casing val == 0.
+
+I have tested this change on an Asus G50V laptop only.
+
+Cc: Jakub Schmidtke <sjakub@gmail.com>
+Cc: Kevin A. Granade <kevin.granade@gmail.com>
+Signed-off-by: Pekka Paalanen <pq@iki.fi>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/staging/asus_oled/asus_oled.c |   10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+--- a/drivers/staging/asus_oled/asus_oled.c
++++ b/drivers/staging/asus_oled/asus_oled.c
+@@ -355,7 +355,14 @@ static void send_data(struct asus_oled_d
+ static int append_values(struct asus_oled_dev *odev, uint8_t val, size_t count)
+ {
+-      while (count-- > 0 && val) {
++      odev->last_val = val;
++
++      if (val == 0) {
++              odev->buf_offs += count;
++              return 0;
++      }
++
++      while (count-- > 0) {
+               size_t x = odev->buf_offs % odev->width;
+               size_t y = odev->buf_offs / odev->width;
+               size_t i;
+@@ -406,7 +413,6 @@ static int append_values(struct asus_ole
+                       ;
+               }
+-              odev->last_val = val;
+               odev->buf_offs++;
+       }
diff --git a/queue-3.2/staging-asus_oled-fix-null-ptr-crash-on-unloading.patch b/queue-3.2/staging-asus_oled-fix-null-ptr-crash-on-unloading.patch
new file mode 100644 (file)
index 0000000..8a71855
--- /dev/null
@@ -0,0 +1,57 @@
+From 3589e74595a4332ebf77b5ed006f3c6686071ecd Mon Sep 17 00:00:00 2001
+From: Pekka Paalanen <pq@iki.fi>
+Date: Sun, 22 Jan 2012 16:33:47 +0200
+Subject: Staging: asus_oled: fix NULL-ptr crash on unloading
+
+From: Pekka Paalanen <pq@iki.fi>
+
+commit 3589e74595a4332ebf77b5ed006f3c6686071ecd upstream.
+
+Asus_oled triggers the following bug on module unloading:
+
+ usbcore: deregistering interface driver asus-oled
+ BUG: unable to handle kernel NULL pointer dereference at 0000000000000038
+ IP: [<ffffffff8111292b>] sysfs_delete_link+0x30/0x66
+
+ Call Trace:
+  [<ffffffff81225373>] device_remove_class_symlinks+0x6b/0x70
+  [<ffffffff812256a8>] device_del+0x9f/0x1ab
+  [<ffffffff812257c5>] device_unregister+0x11/0x1e
+  [<ffffffffa000cb82>] asus_oled_disconnect+0x4f/0x9e [asus_oled]
+  [<ffffffff81277430>] usb_unbind_interface+0x54/0x103
+  [<ffffffff812276c4>] __device_release_driver+0xa2/0xeb
+  [<ffffffff81227794>] driver_detach+0x87/0xad
+  [<ffffffff812269e9>] bus_remove_driver+0x91/0xc1
+  [<ffffffff81227fb4>] driver_unregister+0x66/0x6e
+  [<ffffffff812771ed>] usb_deregister+0xbb/0xc4
+  [<ffffffffa000ce87>] asus_oled_exit+0x2f/0x31 [asus_oled]
+  [<ffffffff81068365>] sys_delete_module+0x1b8/0x21b
+  [<ffffffff810ae3de>] ? do_munmap+0x2ef/0x313
+  [<ffffffff813699bb>] system_call_fastpath+0x16/0x1b
+
+This is due to an incorrect destruction sequence in asus_oled_exit().
+
+Fix the order, fixes the bug. Tested on an Asus G50V laptop only.
+
+Cc: Jakub Schmidtke <sjakub@gmail.com>
+Signed-off-by: Pekka Paalanen <pq@iki.fi>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/staging/asus_oled/asus_oled.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/drivers/staging/asus_oled/asus_oled.c
++++ b/drivers/staging/asus_oled/asus_oled.c
+@@ -811,10 +811,9 @@ error:
+ static void __exit asus_oled_exit(void)
+ {
++      usb_deregister(&oled_driver);
+       class_remove_file(oled_class, &class_attr_version.attr);
+       class_destroy(oled_class);
+-
+-      usb_deregister(&oled_driver);
+ }
+ module_init(asus_oled_init);
diff --git a/queue-3.2/staging-r8712u-add-new-sitecom-usb-id.patch b/queue-3.2/staging-r8712u-add-new-sitecom-usb-id.patch
new file mode 100644 (file)
index 0000000..911c82c
--- /dev/null
@@ -0,0 +1,30 @@
+From 1793bf1deddc8ce25dc41925d5dbe64536c841b6 Mon Sep 17 00:00:00 2001
+From: Larry Finger <Larry.Finger@lwfinger.net>
+Date: Sat, 7 Jan 2012 10:07:03 -0600
+Subject: staging: r8712u: Add new Sitecom UsB ID
+
+From: Larry Finger <Larry.Finger@lwfinger.net>
+
+commit 1793bf1deddc8ce25dc41925d5dbe64536c841b6 upstream.
+
+Add USB ID for SITECOM WLA-1000 V1 001 WLAN
+
+Reported-and-tested-by: Roland Gruber <post@rolandgruber.de>
+Reported-and-tested-by: Dario Lucia <dario.lucia@gmail.com>
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/staging/rtl8712/usb_intf.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/staging/rtl8712/usb_intf.c
++++ b/drivers/staging/rtl8712/usb_intf.c
+@@ -89,6 +89,7 @@ static struct usb_device_id rtl871x_usb_
+       {USB_DEVICE(0x0DF6, 0x0045)},
+       {USB_DEVICE(0x0DF6, 0x0059)}, /* 11n mode disable */
+       {USB_DEVICE(0x0DF6, 0x004B)},
++      {USB_DEVICE(0x0DF6, 0x005B)},
+       {USB_DEVICE(0x0DF6, 0x005D)},
+       {USB_DEVICE(0x0DF6, 0x0063)},
+       /* Sweex */
diff --git a/queue-3.2/staging-r8712u-use-asynchronous-firmware-loading.patch b/queue-3.2/staging-r8712u-use-asynchronous-firmware-loading.patch
new file mode 100644 (file)
index 0000000..2803e90
--- /dev/null
@@ -0,0 +1,275 @@
+From 8c213fa59199f9673d66970d6940fa093186642f Mon Sep 17 00:00:00 2001
+From: Larry Finger <Larry.Finger@lwfinger.net>
+Date: Sun, 5 Feb 2012 21:12:26 -0600
+Subject: staging: r8712u: Use asynchronous firmware loading
+
+From: Larry Finger <Larry.Finger@lwfinger.net>
+
+commit 8c213fa59199f9673d66970d6940fa093186642f upstream.
+
+In https://bugs.archlinux.org/task/27996, failure of driver r8712u is
+reported, with a timeout during module loading due to synchronous loading
+of the firmware. The code now uses request_firmware_nowait().
+
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/staging/rtl8712/drv_types.h   |    7 +++
+ drivers/staging/rtl8712/hal_init.c    |   62 +++++++++++++++++++++++-----------
+ drivers/staging/rtl8712/os_intfs.c    |   14 ++++++-
+ drivers/staging/rtl8712/rtl8712_hal.h |    1 
+ drivers/staging/rtl8712/usb_intf.c    |    9 +++-
+ 5 files changed, 68 insertions(+), 25 deletions(-)
+
+--- a/drivers/staging/rtl8712/drv_types.h
++++ b/drivers/staging/rtl8712/drv_types.h
+@@ -37,6 +37,8 @@ struct _adapter;
+ #include "wlan_bssdef.h"
+ #include "rtl8712_spec.h"
+ #include "rtl8712_hal.h"
++#include <linux/mutex.h>
++#include <linux/completion.h>
+ enum _NIC_VERSION {
+       RTL8711_NIC,
+@@ -168,6 +170,7 @@ struct _adapter {
+       s32     bSurpriseRemoved;
+       u32     IsrContent;
+       u32     ImrContent;
++      bool    fw_found;
+       u8      EepromAddressSize;
+       u8      hw_init_completed;
+       struct task_struct *cmdThread;
+@@ -184,6 +187,10 @@ struct _adapter {
+       _workitem wkFilterRxFF0;
+       u8 blnEnableRxFF0Filter;
+       spinlock_t lockRxFF0Filter;
++      const struct firmware *fw;
++      struct usb_interface *pusb_intf;
++      struct mutex mutex_start;
++      struct completion rtl8712_fw_ready;
+ };
+ static inline u8 *myid(struct eeprom_priv *peepriv)
+--- a/drivers/staging/rtl8712/hal_init.c
++++ b/drivers/staging/rtl8712/hal_init.c
+@@ -42,29 +42,56 @@
+ #define FWBUFF_ALIGN_SZ 512
+ #define MAX_DUMP_FWSZ 49152 /*default = 49152 (48k)*/
+-static u32 rtl871x_open_fw(struct _adapter *padapter, void **pphfwfile_hdl,
+-                  const u8 **ppmappedfw)
++static void rtl871x_load_fw_cb(const struct firmware *firmware, void *context)
+ {
++      struct _adapter *padapter = context;
++
++      complete(&padapter->rtl8712_fw_ready);
++      if (!firmware) {
++              struct usb_device *udev = padapter->dvobjpriv.pusbdev;
++              struct usb_interface *pusb_intf = padapter->pusb_intf;
++              printk(KERN_ERR "r8712u: Firmware request failed\n");
++              padapter->fw_found = false;
++              usb_put_dev(udev);
++              usb_set_intfdata(pusb_intf, NULL);
++              return;
++      }
++      padapter->fw = firmware;
++      padapter->fw_found = true;
++      /* firmware available - start netdev */
++      register_netdev(padapter->pnetdev);
++}
++
++static const char firmware_file[] = "rtlwifi/rtl8712u.bin";
++
++int rtl871x_load_fw(struct _adapter *padapter)
++{
++      struct device *dev = &padapter->dvobjpriv.pusbdev->dev;
+       int rc;
+-      const char firmware_file[] = "rtlwifi/rtl8712u.bin";
+-      const struct firmware **praw = (const struct firmware **)
+-                                     (pphfwfile_hdl);
+-      struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)
+-                                      (&padapter->dvobjpriv);
+-      struct usb_device *pusbdev = pdvobjpriv->pusbdev;
++      init_completion(&padapter->rtl8712_fw_ready);
+       printk(KERN_INFO "r8712u: Loading firmware from \"%s\"\n",
+              firmware_file);
+-      rc = request_firmware(praw, firmware_file, &pusbdev->dev);
+-      if (rc < 0) {
+-              printk(KERN_ERR "r8712u: Unable to load firmware\n");
+-              printk(KERN_ERR "r8712u: Install latest linux-firmware\n");
++      rc = request_firmware_nowait(THIS_MODULE, 1, firmware_file, dev,
++                                   GFP_KERNEL, padapter, rtl871x_load_fw_cb);
++      if (rc)
++              printk(KERN_ERR "r8712u: Firmware request error %d\n", rc);
++      return rc;
++}
++MODULE_FIRMWARE("rtlwifi/rtl8712u.bin");
++
++static u32 rtl871x_open_fw(struct _adapter *padapter, const u8 **ppmappedfw)
++{
++      const struct firmware **praw = &padapter->fw;
++
++      if (padapter->fw->size > 200000) {
++              printk(KERN_ERR "r8172u: Badfw->size of %d\n",
++                     (int)padapter->fw->size);
+               return 0;
+       }
+       *ppmappedfw = (u8 *)((*praw)->data);
+       return (*praw)->size;
+ }
+-MODULE_FIRMWARE("rtlwifi/rtl8712u.bin");
+ static void fill_fwpriv(struct _adapter *padapter, struct fw_priv *pfwpriv)
+ {
+@@ -142,18 +169,17 @@ static u8 rtl8712_dl_fw(struct _adapter
+       uint dump_imem_sz, imem_sz, dump_emem_sz, emem_sz; /* max = 49152; */
+       struct fw_hdr fwhdr;
+       u32 ulfilelength;       /* FW file size */
+-      void *phfwfile_hdl = NULL;
+       const u8 *pmappedfw = NULL;
+       u8 *ptmpchar = NULL, *ppayload, *ptr;
+       struct tx_desc *ptx_desc;
+       u32 txdscp_sz = sizeof(struct tx_desc);
+       u8 ret = _FAIL;
+-      ulfilelength = rtl871x_open_fw(padapter, &phfwfile_hdl, &pmappedfw);
++      ulfilelength = rtl871x_open_fw(padapter, &pmappedfw);
+       if (pmappedfw && (ulfilelength > 0)) {
+               update_fwhdr(&fwhdr, pmappedfw);
+               if (chk_fwhdr(&fwhdr, ulfilelength) == _FAIL)
+-                      goto firmware_rel;
++                      return ret;
+               fill_fwpriv(padapter, &fwhdr.fwpriv);
+               /* firmware check ok */
+               maxlen = (fwhdr.img_IMEM_size > fwhdr.img_SRAM_size) ?
+@@ -161,7 +187,7 @@ static u8 rtl8712_dl_fw(struct _adapter
+               maxlen += txdscp_sz;
+               ptmpchar = _malloc(maxlen + FWBUFF_ALIGN_SZ);
+               if (ptmpchar == NULL)
+-                      goto firmware_rel;
++                      return ret;
+               ptx_desc = (struct tx_desc *)(ptmpchar + FWBUFF_ALIGN_SZ -
+                           ((addr_t)(ptmpchar) & (FWBUFF_ALIGN_SZ - 1)));
+@@ -297,8 +323,6 @@ static u8 rtl8712_dl_fw(struct _adapter
+ exit_fail:
+       kfree(ptmpchar);
+-firmware_rel:
+-      release_firmware((struct firmware *)phfwfile_hdl);
+       return ret;
+ }
+--- a/drivers/staging/rtl8712/os_intfs.c
++++ b/drivers/staging/rtl8712/os_intfs.c
+@@ -31,6 +31,7 @@
+ #include <linux/module.h>
+ #include <linux/init.h>
+ #include <linux/kthread.h>
++#include <linux/firmware.h>
+ #include "osdep_service.h"
+ #include "drv_types.h"
+ #include "xmit_osdep.h"
+@@ -264,12 +265,12 @@ static void start_drv_timers(struct _ada
+ void r8712_stop_drv_timers(struct _adapter *padapter)
+ {
+       _cancel_timer_ex(&padapter->mlmepriv.assoc_timer);
+-      _cancel_timer_ex(&padapter->mlmepriv.sitesurveyctrl.
+-                       sitesurvey_ctrl_timer);
+       _cancel_timer_ex(&padapter->securitypriv.tkip_timer);
+       _cancel_timer_ex(&padapter->mlmepriv.scan_to_timer);
+       _cancel_timer_ex(&padapter->mlmepriv.dhcp_timer);
+       _cancel_timer_ex(&padapter->mlmepriv.wdg_timer);
++      _cancel_timer_ex(&padapter->mlmepriv.sitesurveyctrl.
++                       sitesurvey_ctrl_timer);
+ }
+ static u8 init_default_value(struct _adapter *padapter)
+@@ -347,7 +348,8 @@ u8 r8712_free_drv_sw(struct _adapter *pa
+       r8712_free_mlme_priv(&padapter->mlmepriv);
+       r8712_free_io_queue(padapter);
+       _free_xmit_priv(&padapter->xmitpriv);
+-      _r8712_free_sta_priv(&padapter->stapriv);
++      if (padapter->fw_found)
++              _r8712_free_sta_priv(&padapter->stapriv);
+       _r8712_free_recv_priv(&padapter->recvpriv);
+       mp871xdeinit(padapter);
+       if (pnetdev)
+@@ -388,6 +390,7 @@ static int netdev_open(struct net_device
+ {
+       struct _adapter *padapter = (struct _adapter *)netdev_priv(pnetdev);
++      mutex_lock(&padapter->mutex_start);
+       if (padapter->bup == false) {
+               padapter->bDriverStopped = false;
+               padapter->bSurpriseRemoved = false;
+@@ -435,11 +438,13 @@ static int netdev_open(struct net_device
+       /* start driver mlme relation timer */
+       start_drv_timers(padapter);
+       padapter->ledpriv.LedControlHandler(padapter, LED_CTL_NO_LINK);
++      mutex_unlock(&padapter->mutex_start);
+       return 0;
+ netdev_open_error:
+       padapter->bup = false;
+       netif_carrier_off(pnetdev);
+       netif_stop_queue(pnetdev);
++      mutex_unlock(&padapter->mutex_start);
+       return -1;
+ }
+@@ -473,6 +478,9 @@ static int netdev_close(struct net_devic
+       r8712_free_network_queue(padapter);
+       /* The interface is no longer Up: */
+       padapter->bup = false;
++      release_firmware(padapter->fw);
++      /* never exit with a firmware callback pending */
++      wait_for_completion(&padapter->rtl8712_fw_ready);
+       return 0;
+ }
+--- a/drivers/staging/rtl8712/rtl8712_hal.h
++++ b/drivers/staging/rtl8712/rtl8712_hal.h
+@@ -145,5 +145,6 @@ struct hal_priv {
+ };
+ uint   rtl8712_hal_init(struct _adapter *padapter);
++int rtl871x_load_fw(struct _adapter *padapter);
+ #endif
+--- a/drivers/staging/rtl8712/usb_intf.c
++++ b/drivers/staging/rtl8712/usb_intf.c
+@@ -390,6 +390,7 @@ static int r871xu_drv_init(struct usb_in
+       pdvobjpriv = &padapter->dvobjpriv;
+       pdvobjpriv->padapter = padapter;
+       padapter->dvobjpriv.pusbdev = udev;
++      padapter->pusb_intf = pusb_intf;
+       usb_set_intfdata(pusb_intf, pnetdev);
+       SET_NETDEV_DEV(pnetdev, &pusb_intf->dev);
+       /* step 2. */
+@@ -596,10 +597,11 @@ static int r871xu_drv_init(struct usb_in
+                              "%pM\n", mac);
+               memcpy(pnetdev->dev_addr, mac, ETH_ALEN);
+       }
+-      /* step 6. Tell the network stack we exist */
+-      if (register_netdev(pnetdev) != 0)
++      /* step 6. Load the firmware asynchronously */
++      if (rtl871x_load_fw(padapter))
+               goto error;
+       spin_lock_init(&padapter->lockRxFF0Filter);
++      mutex_init(&padapter->mutex_start);
+       return 0;
+ error:
+       usb_put_dev(udev);
+@@ -630,7 +632,8 @@ static void r871xu_dev_remove(struct usb
+               flush_scheduled_work();
+               udelay(1);
+               /*Stop driver mlme relation timer */
+-              r8712_stop_drv_timers(padapter);
++              if (padapter->fw_found)
++                      r8712_stop_drv_timers(padapter);
+               r871x_dev_unload(padapter);
+               r8712_free_drv_sw(padapter);
+       }
diff --git a/queue-3.2/usb-add-new-zte-3g-dongle-s-pid-to-option.c.patch b/queue-3.2/usb-add-new-zte-3g-dongle-s-pid-to-option.c.patch
new file mode 100644 (file)
index 0000000..7dd305c
--- /dev/null
@@ -0,0 +1,179 @@
+From 1608ea5f4b5d6262cd6e808839491cfb2a67405a Mon Sep 17 00:00:00 2001
+From: Rui li <li.rui27@zte.com.cn>
+Date: Tue, 31 Jan 2012 15:27:33 +0800
+Subject: USB: add new zte 3g-dongle's pid to option.c
+
+From: Rui li <li.rui27@zte.com.cn>
+
+commit 1608ea5f4b5d6262cd6e808839491cfb2a67405a upstream.
+
+As ZTE have and will use more pid for new products this year,
+so we need to add some new zte 3g-dongle's pid on option.c ,
+and delete one pid 0x0154 because it use for mass-storage port.
+
+Signed-off-by: Rui li <li.rui27@zte.com.cn>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/option.c |  129 +++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 128 insertions(+), 1 deletion(-)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -855,6 +855,18 @@ static const struct usb_device_id option
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0083, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0086, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0087, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0088, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0089, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0090, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0091, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0092, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0093, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0094, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0095, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0096, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0097, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0098, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0099, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0104, 0xff, 0xff, 0xff),
+               .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0105, 0xff, 0xff, 0xff) },
+@@ -883,7 +895,6 @@ static const struct usb_device_id option
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0151, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0152, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0153, 0xff, 0xff, 0xff) },
+-      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0154, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0155, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0156, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0157, 0xff, 0xff, 0xff) },
+@@ -892,6 +903,12 @@ static const struct usb_device_id option
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0160, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0161, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0162, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0164, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0165, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0168, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0170, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0176, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0178, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1008, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1010, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1012, 0xff, 0xff, 0xff) },
+@@ -1066,6 +1083,116 @@ 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, 0x1401, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1402, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1403, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1404, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1405, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1406, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1407, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1408, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1409, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1410, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1411, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1412, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1413, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1414, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1415, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1416, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1417, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1418, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1419, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1420, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1421, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1422, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1423, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1424, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1425, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1426, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1427, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1428, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1429, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1430, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1431, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1432, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1433, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1434, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1435, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1436, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1437, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1438, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1439, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1440, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1441, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1442, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1443, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1444, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1445, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1446, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1447, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1448, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1449, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1450, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1451, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1452, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1453, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1454, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1455, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1456, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1457, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1458, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1459, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1460, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1461, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1462, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1463, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1464, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1465, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1466, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1467, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1468, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1469, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1470, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1471, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1472, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1473, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1474, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1475, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1476, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1477, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1478, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1479, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1480, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1481, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1482, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1483, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1484, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1485, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1486, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1487, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1488, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1489, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1490, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1491, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1492, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1493, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1494, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1495, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1496, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1497, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1498, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1499, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1500, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1501, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1502, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1503, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1504, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1505, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1506, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1507, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1508, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1509, 0xff, 0xff, 0xff) },
++      { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1510, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0014, 0xff, 0xff, 0xff) }, /* ZTE CDMA products */
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0027, 0xff, 0xff, 0xff) },
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0059, 0xff, 0xff, 0xff) },
diff --git a/queue-3.2/usb-ch9.h-usb_endpoint_maxp-uses-__le16_to_cpu.patch b/queue-3.2/usb-ch9.h-usb_endpoint_maxp-uses-__le16_to_cpu.patch
new file mode 100644 (file)
index 0000000..1772368
--- /dev/null
@@ -0,0 +1,35 @@
+From 9c0a835a9d9aed41bcf9c287f5069133a6e2a87b Mon Sep 17 00:00:00 2001
+From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+Date: Tue, 31 Jan 2012 16:43:50 -0800
+Subject: usb: ch9.h: usb_endpoint_maxp() uses __le16_to_cpu()
+
+From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+
+commit 9c0a835a9d9aed41bcf9c287f5069133a6e2a87b upstream.
+
+The usb/ch9.h will be installed to /usr/include/linux,
+and be used from user space.
+But le16_to_cpu() is only defined for kernel code.
+Without this patch, user space compile will be broken.
+Special thanks to Stefan Becker
+
+Reported-by: Stefan Becker <chemobejk@gmail.com>
+Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ include/linux/usb/ch9.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/include/linux/usb/ch9.h
++++ b/include/linux/usb/ch9.h
+@@ -589,7 +589,7 @@ static inline int usb_endpoint_is_isoc_o
+  */
+ static inline int usb_endpoint_maxp(const struct usb_endpoint_descriptor *epd)
+ {
+-      return le16_to_cpu(epd->wMaxPacketSize);
++      return __le16_to_cpu(epd->wMaxPacketSize);
+ }
+ /*-------------------------------------------------------------------------*/
diff --git a/queue-3.2/usb-gadget-zero-fix-bug-in-loopback-autoresume-handling.patch b/queue-3.2/usb-gadget-zero-fix-bug-in-loopback-autoresume-handling.patch
new file mode 100644 (file)
index 0000000..6d1c625
--- /dev/null
@@ -0,0 +1,33 @@
+From 683da59d7b8ae04891636d4b59893cd4e9b0b7e5 Mon Sep 17 00:00:00 2001
+From: Timo Juhani Lindfors <timo.lindfors@iki.fi>
+Date: Sun, 29 Jan 2012 16:12:13 +0200
+Subject: usb: gadget: zero: fix bug in loopback autoresume handling
+
+From: Timo Juhani Lindfors <timo.lindfors@iki.fi>
+
+commit 683da59d7b8ae04891636d4b59893cd4e9b0b7e5 upstream.
+
+ab943a2e125b (USB: gadget: gadget zero uses new suspend/resume hooks)
+introduced a copy-paste error where f_loopback.c writes to a variable
+declared in f_sourcesink.c. This prevents one from creating gadgets
+that only have a loopback function.
+
+Signed-off-by: Timo Juhani Lindfors <timo.lindfors@iki.fi>
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/gadget/f_loopback.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/gadget/f_loopback.c
++++ b/drivers/usb/gadget/f_loopback.c
+@@ -418,7 +418,7 @@ int __init loopback_add(struct usb_compo
+       /* support autoresume for remote wakeup testing */
+       if (autoresume)
+-              sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
++              loopback_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
+       /* support OTG systems */
+       if (gadget_is_otg(cdev->gadget)) {
diff --git a/queue-3.2/usb-skip-pci-usb-quirk-handling-for-netlogic-xlp.patch b/queue-3.2/usb-skip-pci-usb-quirk-handling-for-netlogic-xlp.patch
new file mode 100644 (file)
index 0000000..b8bd1fa
--- /dev/null
@@ -0,0 +1,43 @@
+From e4436a7c17ac2b5e138f93f83a541cba9b311685 Mon Sep 17 00:00:00 2001
+From: Jayachandran C <jayachandranc@netlogicmicro.com>
+Date: Fri, 27 Jan 2012 20:27:32 +0530
+Subject: usb: Skip PCI USB quirk handling for Netlogic XLP
+
+From: Jayachandran C <jayachandranc@netlogicmicro.com>
+
+commit e4436a7c17ac2b5e138f93f83a541cba9b311685 upstream.
+
+The Netlogic XLP SoC's on-chip USB controller appears as a PCI
+USB device, but does not need the EHCI/OHCI handoff done in
+usb/host/pci-quirks.c.
+
+The pci-quirks.c is enabled for all vendors and devices, and is
+enabled if USB and PCI are configured.
+
+If we do not skip the qurik handling on XLP, the readb() call in
+ehci_bios_handoff() will cause a crash since byte access is not
+supported for EHCI registers in XLP.
+
+Signed-off-by: Jayachandran C <jayachandranc@netlogicmicro.com>
+Acked-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/host/pci-quirks.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/usb/host/pci-quirks.c
++++ b/drivers/usb/host/pci-quirks.c
+@@ -867,6 +867,12 @@ hc_init:
+ static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev)
+ {
++      /* Skip Netlogic mips SoC's internal PCI USB controller.
++       * This device does not need/support EHCI/OHCI handoff
++       */
++      if (pdev->vendor == 0x184e)     /* vendor Netlogic */
++              return;
++
+       if (pdev->class == PCI_CLASS_SERIAL_USB_UHCI)
+               quirk_usb_handoff_uhci(pdev);
+       else if (pdev->class == PCI_CLASS_SERIAL_USB_OHCI)
diff --git a/queue-3.2/usb-usbserial-add-new-pid-number-0xa951-to-the-ftdi-driver.patch b/queue-3.2/usb-usbserial-add-new-pid-number-0xa951-to-the-ftdi-driver.patch
new file mode 100644 (file)
index 0000000..c9ecf00
--- /dev/null
@@ -0,0 +1,40 @@
+From 90451e6973a5da155c6f315a409ca0a8d3ce6b76 Mon Sep 17 00:00:00 2001
+From: Milan Kocian <milon@wq.cz>
+Date: Fri, 3 Feb 2012 14:28:00 +0100
+Subject: USB: usbserial: add new PID number (0xa951) to the ftdi driver
+
+From: Milan Kocian <milon@wq.cz>
+
+commit 90451e6973a5da155c6f315a409ca0a8d3ce6b76 upstream.
+
+Signed-off-by: Milan Kocian <milon@wq.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/ftdi_sio.c     |    1 +
+ drivers/usb/serial/ftdi_sio_ids.h |    7 +++++++
+ 2 files changed, 8 insertions(+)
+
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -839,6 +839,7 @@ static struct usb_device_id id_table_com
+       { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LOGBOOKML_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LS_LOGBOOK_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_HS_LOGBOOK_PID) },
++      { USB_DEVICE(FTDI_VID, FTDI_CINTERION_MC55I_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_DOTEC_PID) },
+       { USB_DEVICE(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID),
+               .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
+--- a/drivers/usb/serial/ftdi_sio_ids.h
++++ b/drivers/usb/serial/ftdi_sio_ids.h
+@@ -1187,3 +1187,10 @@
+  */
+ /* ZigBee controller */
+ #define FTDI_RF_R106          0x8A28
++
++/*
++ * Product: HCP HIT GPRS modem
++ * Manufacturer: HCP d.o.o.
++ * ATI command output: Cinterion MC55i
++ */
++#define FTDI_CINTERION_MC55I_PID      0xA951
diff --git a/queue-3.2/zcache-fix-deadlock-condition.patch b/queue-3.2/zcache-fix-deadlock-condition.patch
new file mode 100644 (file)
index 0000000..31d2041
--- /dev/null
@@ -0,0 +1,53 @@
+From 9256a4789be3dae37d00924c03546ba7958ea5a3 Mon Sep 17 00:00:00 2001
+From: Dan Magenheimer <dan.magenheimer@oracle.com>
+Date: Wed, 25 Jan 2012 14:32:51 -0800
+Subject: zcache: fix deadlock condition
+
+From: Dan Magenheimer <dan.magenheimer@oracle.com>
+
+commit 9256a4789be3dae37d00924c03546ba7958ea5a3 upstream.
+
+I discovered this deadlock condition awhile ago working on RAMster
+but it affects zcache as well.  The list spinlock must be
+locked prior to the page spinlock and released after.  As
+a result, the page copy must also be done while the locks are held.
+
+Applies to 3.2.  Konrad, please push (via GregKH?)...
+this is definitely a bug fix so need not be pushed during
+a -rc0 window.
+
+Signed-off-by: Dan Magenheimer <dan.magenheimer@oracle.com>
+Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/staging/zcache/zcache-main.c |    7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+--- a/drivers/staging/zcache/zcache-main.c
++++ b/drivers/staging/zcache/zcache-main.c
+@@ -358,8 +358,8 @@ static struct zbud_hdr *zbud_create(uint
+       if (unlikely(zbpg == NULL))
+               goto out;
+       /* ok, have a page, now compress the data before taking locks */
+-      spin_lock(&zbpg->lock);
+       spin_lock(&zbud_budlists_spinlock);
++      spin_lock(&zbpg->lock);
+       list_add_tail(&zbpg->bud_list, &zbud_unbuddied[nchunks].list);
+       zbud_unbuddied[nchunks].count++;
+       zh = &zbpg->buddy[0];
+@@ -389,12 +389,11 @@ init_zh:
+       zh->oid = *oid;
+       zh->pool_id = pool_id;
+       zh->client_id = client_id;
+-      /* can wait to copy the data until the list locks are dropped */
+-      spin_unlock(&zbud_budlists_spinlock);
+-
+       to = zbud_data(zh, size);
+       memcpy(to, cdata, size);
+       spin_unlock(&zbpg->lock);
++      spin_unlock(&zbud_budlists_spinlock);
++
+       zbud_cumul_chunk_counts[nchunks]++;
+       atomic_inc(&zcache_zbud_curr_zpages);
+       zcache_zbud_cumul_zpages++;
diff --git a/queue-3.2/zcache-set-swiz_bits-to-8-to-reduce-tmem-bucket-lock-contention.patch b/queue-3.2/zcache-set-swiz_bits-to-8-to-reduce-tmem-bucket-lock-contention.patch
new file mode 100644 (file)
index 0000000..14250ec
--- /dev/null
@@ -0,0 +1,43 @@
+From e8b4553457e78bcff90f70a31212a40a8fd4f0db Mon Sep 17 00:00:00 2001
+From: Dan Magenheimer <dan.magenheimer@oracle.com>
+Date: Mon, 23 Jan 2012 16:52:20 -0500
+Subject: zcache: Set SWIZ_BITS to 8 to reduce tmem bucket lock contention.
+
+From: Dan Magenheimer <dan.magenheimer@oracle.com>
+
+commit e8b4553457e78bcff90f70a31212a40a8fd4f0db upstream.
+
+SWIZ_BITS > 8 results in a much larger number of "tmem_obj"
+allocations, likely one per page-placed-in-frontswap.  The
+tmem_obj is not huge (roughly 100 bytes), but it is large
+enough to add a not-insignificant memory overhead to zcache.
+
+The SWIZ_BITS=8  will get roughly the same lock contention
+without the space wastage.
+
+The effect of SWIZ_BITS can be thought of as "2^SWIZ_BITS is
+the number of unique oids that be generated" (This concept is
+limited to frontswap's use of tmem).
+
+Acked-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
+Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/staging/zcache/zcache-main.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/staging/zcache/zcache-main.c
++++ b/drivers/staging/zcache/zcache-main.c
+@@ -1782,9 +1782,9 @@ static int zcache_frontswap_poolid = -1;
+  * Swizzling increases objects per swaptype, increasing tmem concurrency
+  * for heavy swaploads.  Later, larger nr_cpus -> larger SWIZ_BITS
+  * Setting SWIZ_BITS to 27 basically reconstructs the swap entry from
+- * frontswap_get_page()
++ * frontswap_get_page(), but has side-effects. Hence using 8.
+  */
+-#define SWIZ_BITS             27
++#define SWIZ_BITS             8
+ #define SWIZ_MASK             ((1 << SWIZ_BITS) - 1)
+ #define _oswiz(_type, _ind)   ((_type << SWIZ_BITS) | (_ind & SWIZ_MASK))
+ #define iswiz(_ind)           (_ind >> SWIZ_BITS)