]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 18 Jun 2012 19:11:35 +0000 (12:11 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 18 Jun 2012 19:11:35 +0000 (12:11 -0700)
added patches:
usb-add-no_d3_during_sleep-flag-and-revert-151b61284776be2.patch
usb-cdc-acm-fix-devices-not-unthrottled-on-open.patch
usb-cdc-wdm-add-vodafone-huawei-k5005-support.patch
usb-fix-gathering-of-interface-associations.patch
usb-fix-ps3-ehci-systems.patch
usb-ftdi-sio-add-support-for-rt-systems-usb-rts01-serial.patch
usb-mct_u232-fix-incorrect-tiocmset-return.patch
usb-musb-davinci-fix-build-breakage.patch
usb-musb_gadget-fix-crash-caused-by-dangling-pointer.patch
usb-qcserial-add-sierra-wireless-device-ids.patch
usb-serial-cp210x-add-optris-ms-pro-usb-id.patch
usb-serial-enforce-usb-driver-and-usb-serial-driver-match.patch
usb-serial-sierra-add-support-for-sierra-wireless-aircard-320u-modem.patch

14 files changed:
queue-3.4/series
queue-3.4/usb-add-no_d3_during_sleep-flag-and-revert-151b61284776be2.patch [new file with mode: 0644]
queue-3.4/usb-cdc-acm-fix-devices-not-unthrottled-on-open.patch [new file with mode: 0644]
queue-3.4/usb-cdc-wdm-add-vodafone-huawei-k5005-support.patch [new file with mode: 0644]
queue-3.4/usb-fix-gathering-of-interface-associations.patch [new file with mode: 0644]
queue-3.4/usb-fix-ps3-ehci-systems.patch [new file with mode: 0644]
queue-3.4/usb-ftdi-sio-add-support-for-rt-systems-usb-rts01-serial.patch [new file with mode: 0644]
queue-3.4/usb-mct_u232-fix-incorrect-tiocmset-return.patch [new file with mode: 0644]
queue-3.4/usb-musb-davinci-fix-build-breakage.patch [new file with mode: 0644]
queue-3.4/usb-musb_gadget-fix-crash-caused-by-dangling-pointer.patch [new file with mode: 0644]
queue-3.4/usb-qcserial-add-sierra-wireless-device-ids.patch [new file with mode: 0644]
queue-3.4/usb-serial-cp210x-add-optris-ms-pro-usb-id.patch [new file with mode: 0644]
queue-3.4/usb-serial-enforce-usb-driver-and-usb-serial-driver-match.patch [new file with mode: 0644]
queue-3.4/usb-serial-sierra-add-support-for-sierra-wireless-aircard-320u-modem.patch [new file with mode: 0644]

index f067006ef6c5c820b6bdd86190a1a9bcd6f2a6e2..a5004c2a96c88d9a8a109775a4edae1a265fc911 100644 (file)
@@ -31,3 +31,16 @@ xhci-don-t-free-endpoints-in-xhci_mem_cleanup.patch
 xhci-increase-the-timeout-for-controller-save-restore-state-operation.patch
 usb-storage-add-090c-1000-to-unusal-devs.patch
 usb-mos7840-fix-compilation-of-usb-serial-driver.patch
+usb-qcserial-add-sierra-wireless-device-ids.patch
+usb-mct_u232-fix-incorrect-tiocmset-return.patch
+usb-musb-davinci-fix-build-breakage.patch
+usb-musb_gadget-fix-crash-caused-by-dangling-pointer.patch
+usb-fix-ps3-ehci-systems.patch
+usb-serial-cp210x-add-optris-ms-pro-usb-id.patch
+usb-ftdi-sio-add-support-for-rt-systems-usb-rts01-serial.patch
+usb-add-no_d3_during_sleep-flag-and-revert-151b61284776be2.patch
+usb-cdc-wdm-add-vodafone-huawei-k5005-support.patch
+usb-cdc-acm-fix-devices-not-unthrottled-on-open.patch
+usb-serial-sierra-add-support-for-sierra-wireless-aircard-320u-modem.patch
+usb-serial-enforce-usb-driver-and-usb-serial-driver-match.patch
+usb-fix-gathering-of-interface-associations.patch
diff --git a/queue-3.4/usb-add-no_d3_during_sleep-flag-and-revert-151b61284776be2.patch b/queue-3.4/usb-add-no_d3_during_sleep-flag-and-revert-151b61284776be2.patch
new file mode 100644 (file)
index 0000000..93f79e0
--- /dev/null
@@ -0,0 +1,165 @@
+From c2fb8a3fa25513de8fedb38509b1f15a5bbee47b Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Wed, 13 Jun 2012 11:20:19 -0400
+Subject: USB: add NO_D3_DURING_SLEEP flag and revert 151b61284776be2
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit c2fb8a3fa25513de8fedb38509b1f15a5bbee47b upstream.
+
+This patch (as1558) fixes a problem affecting several ASUS computers:
+The machine crashes or corrupts memory when going into suspend if the
+ehci-hcd driver is bound to any controllers.  Users have been forced
+to unbind or unload ehci-hcd before putting their systems to sleep.
+
+After extensive testing, it was determined that the machines don't
+like going into suspend when any EHCI controllers are in the PCI D3
+power state.  Presumably this is a firmware bug, but there's nothing
+we can do about it except to avoid putting the controllers in D3
+during system sleep.
+
+The patch adds a new flag to indicate whether the problem is present,
+and avoids changing the controller's power state if the flag is set.
+Runtime suspend is unaffected; this matters only for system suspend.
+However as a side effect, the controller will not respond to remote
+wakeup requests while the system is asleep.  Hence USB wakeup is not
+functional -- but of course, this is already true in the current state
+of affairs.
+
+A similar patch has already been applied as commit
+151b61284776be2d6f02d48c23c3625678960b97 (USB: EHCI: fix crash during
+suspend on ASUS computers).  The patch supersedes that one and reverts
+it.  There are two differences:
+
+       The old patch added the flag at the USB level; this patch
+       adds it at the PCI level.
+
+       The old patch applied to all chipsets with the same vendor,
+       subsystem vendor, and product IDs; this patch makes an
+       exception for a known-good system (based on DMI information).
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Tested-by: Dâniel Fraga <fragabr@gmail.com>
+Tested-by: Andrey Rahmatullin <wrar@wrar.name>
+Tested-by: Steven Rostedt <rostedt@goodmis.org>
+Reviewed-by: Rafael J. Wysocki <rjw@sisk.pl>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/pci/pci.c           |    5 +++++
+ drivers/pci/quirks.c        |   26 ++++++++++++++++++++++++++
+ drivers/usb/core/hcd-pci.c  |    9 ---------
+ drivers/usb/host/ehci-pci.c |    8 --------
+ include/linux/pci.h         |    2 ++
+ include/linux/usb/hcd.h     |    2 --
+ 6 files changed, 33 insertions(+), 19 deletions(-)
+
+--- a/drivers/pci/pci.c
++++ b/drivers/pci/pci.c
+@@ -1743,6 +1743,11 @@ int pci_prepare_to_sleep(struct pci_dev
+       if (target_state == PCI_POWER_ERROR)
+               return -EIO;
++      /* Some devices mustn't be in D3 during system sleep */
++      if (target_state == PCI_D3hot &&
++                      (dev->dev_flags & PCI_DEV_FLAGS_NO_D3_DURING_SLEEP))
++              return 0;
++
+       pci_enable_wake(dev, target_state, device_may_wakeup(&dev->dev));
+       error = pci_set_power_state(dev, target_state);
+--- a/drivers/pci/quirks.c
++++ b/drivers/pci/quirks.c
+@@ -2917,6 +2917,32 @@ static void __devinit disable_igfx_irq(s
+ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq);
+ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);
++/*
++ * The Intel 6 Series/C200 Series chipset's EHCI controllers on many
++ * ASUS motherboards will cause memory corruption or a system crash
++ * if they are in D3 while the system is put into S3 sleep.
++ */
++static void __devinit asus_ehci_no_d3(struct pci_dev *dev)
++{
++      const char *sys_info;
++      static const char good_Asus_board[] = "P8Z68-V";
++
++      if (dev->dev_flags & PCI_DEV_FLAGS_NO_D3_DURING_SLEEP)
++              return;
++      if (dev->subsystem_vendor != PCI_VENDOR_ID_ASUSTEK)
++              return;
++      sys_info = dmi_get_system_info(DMI_BOARD_NAME);
++      if (sys_info && memcmp(sys_info, good_Asus_board,
++                      sizeof(good_Asus_board) - 1) == 0)
++              return;
++
++      dev_info(&dev->dev, "broken D3 during system sleep on ASUS\n");
++      dev->dev_flags |= PCI_DEV_FLAGS_NO_D3_DURING_SLEEP;
++      device_set_wakeup_capable(&dev->dev, false);
++}
++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1c26, asus_ehci_no_d3);
++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1c2d, asus_ehci_no_d3);
++
+ static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
+                         struct pci_fixup *end)
+ {
+--- a/drivers/usb/core/hcd-pci.c
++++ b/drivers/usb/core/hcd-pci.c
+@@ -493,15 +493,6 @@ static int hcd_pci_suspend_noirq(struct
+       pci_save_state(pci_dev);
+-      /*
+-       * Some systems crash if an EHCI controller is in D3 during
+-       * a sleep transition.  We have to leave such controllers in D0.
+-       */
+-      if (hcd->broken_pci_sleep) {
+-              dev_dbg(dev, "Staying in PCI D0\n");
+-              return retval;
+-      }
+-
+       /* If the root hub is dead rather than suspended, disallow remote
+        * wakeup.  usb_hc_died() should ensure that both hosts are marked as
+        * dying, so we only need to check the primary roothub.
+--- a/drivers/usb/host/ehci-pci.c
++++ b/drivers/usb/host/ehci-pci.c
+@@ -144,14 +144,6 @@ static int ehci_pci_setup(struct usb_hcd
+                       hcd->has_tt = 1;
+                       tdi_reset(ehci);
+               }
+-              if (pdev->subsystem_vendor == PCI_VENDOR_ID_ASUSTEK) {
+-                      /* EHCI #1 or #2 on 6 Series/C200 Series chipset */
+-                      if (pdev->device == 0x1c26 || pdev->device == 0x1c2d) {
+-                              ehci_info(ehci, "broken D3 during system sleep on ASUS\n");
+-                              hcd->broken_pci_sleep = 1;
+-                              device_set_wakeup_capable(&pdev->dev, false);
+-                      }
+-              }
+               break;
+       case PCI_VENDOR_ID_TDI:
+               if (pdev->device == PCI_DEVICE_ID_TDI_EHCI) {
+--- a/include/linux/pci.h
++++ b/include/linux/pci.h
+@@ -176,6 +176,8 @@ enum pci_dev_flags {
+       PCI_DEV_FLAGS_NO_D3 = (__force pci_dev_flags_t) 2,
+       /* Provide indication device is assigned by a Virtual Machine Manager */
+       PCI_DEV_FLAGS_ASSIGNED = (__force pci_dev_flags_t) 4,
++      /* Device causes system crash if in D3 during S3 sleep */
++      PCI_DEV_FLAGS_NO_D3_DURING_SLEEP = (__force pci_dev_flags_t) 8,
+ };
+ enum pci_irq_reroute_variant {
+--- a/include/linux/usb/hcd.h
++++ b/include/linux/usb/hcd.h
+@@ -126,8 +126,6 @@ struct usb_hcd {
+       unsigned                wireless:1;     /* Wireless USB HCD */
+       unsigned                authorized_default:1;
+       unsigned                has_tt:1;       /* Integrated TT in root hub */
+-      unsigned                broken_pci_sleep:1;     /* Don't put the
+-                      controller in PCI-D3 for system sleep */
+       unsigned int            irq;            /* irq allocated */
+       void __iomem            *regs;          /* device memory/io */
diff --git a/queue-3.4/usb-cdc-acm-fix-devices-not-unthrottled-on-open.patch b/queue-3.4/usb-cdc-acm-fix-devices-not-unthrottled-on-open.patch
new file mode 100644 (file)
index 0000000..ab247ae
--- /dev/null
@@ -0,0 +1,40 @@
+From 6c4707f3f8c44ec18282e1c014c80e1c257042f9 Mon Sep 17 00:00:00 2001
+From: Otto Meta <otto.patches@sister-shadow.de>
+Date: Wed, 6 Jun 2012 18:46:21 +0200
+Subject: usb: cdc-acm: fix devices not unthrottled on open
+
+From: Otto Meta <otto.patches@sister-shadow.de>
+
+commit 6c4707f3f8c44ec18282e1c014c80e1c257042f9 upstream.
+
+Currently CDC-ACM devices stay throttled when their TTY is closed while
+throttled, stalling further communication attempts after the next open.
+
+Unthrottling during open/activate got lost starting with kernel
+3.0.0 and this patch reintroduces it.
+
+Signed-off-by: Otto Meta <otto.patches@sister-shadow.de>
+Acked-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/class/cdc-acm.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/usb/class/cdc-acm.c
++++ b/drivers/usb/class/cdc-acm.c
+@@ -567,6 +567,14 @@ static int acm_port_activate(struct tty_
+       usb_autopm_put_interface(acm->control);
++      /*
++       * Unthrottle device in case the TTY was closed while throttled.
++       */
++      spin_lock_irq(&acm->read_lock);
++      acm->throttled = 0;
++      acm->throttle_req = 0;
++      spin_unlock_irq(&acm->read_lock);
++
+       if (acm_submit_read_urbs(acm, GFP_KERNEL))
+               goto error_submit_read_urbs;
diff --git a/queue-3.4/usb-cdc-wdm-add-vodafone-huawei-k5005-support.patch b/queue-3.4/usb-cdc-wdm-add-vodafone-huawei-k5005-support.patch
new file mode 100644 (file)
index 0000000..21e3835
--- /dev/null
@@ -0,0 +1,38 @@
+From de102ef41f24a4c251c4a3838796bb27557d4d93 Mon Sep 17 00:00:00 2001
+From: Bjørn Mork <bjorn@mork.no>
+Date: Sat, 19 May 2012 19:19:48 +0200
+Subject: USB: cdc-wdm: Add Vodafone/Huawei K5005 support
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Bjørn Mork <bjorn@mork.no>
+
+commit de102ef41f24a4c251c4a3838796bb27557d4d93 upstream.
+
+Tested-by: Thomas Schäfer <tschaefer@t-online.de>
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/class/cdc-wdm.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/drivers/usb/class/cdc-wdm.c
++++ b/drivers/usb/class/cdc-wdm.c
+@@ -55,6 +55,15 @@ static const struct usb_device_id wdm_id
+               .bInterfaceSubClass = 1,
+               .bInterfaceProtocol = 9, /* NOTE: CDC ECM control interface! */
+       },
++      {
++               /* Vodafone/Huawei K5005 (12d1:14c8) and similar modems */
++              .match_flags        = USB_DEVICE_ID_MATCH_VENDOR |
++                                    USB_DEVICE_ID_MATCH_INT_INFO,
++              .idVendor           = HUAWEI_VENDOR_ID,
++              .bInterfaceClass    = USB_CLASS_VENDOR_SPEC,
++              .bInterfaceSubClass = 1,
++              .bInterfaceProtocol = 57, /* NOTE: CDC ECM control interface! */
++      },
+       { }
+ };
diff --git a/queue-3.4/usb-fix-gathering-of-interface-associations.patch b/queue-3.4/usb-fix-gathering-of-interface-associations.patch
new file mode 100644 (file)
index 0000000..df88132
--- /dev/null
@@ -0,0 +1,85 @@
+From b3a3dd074f7053ef824ad077e5331b52220ceba1 Mon Sep 17 00:00:00 2001
+From: Daniel Mack <zonque@gmail.com>
+Date: Tue, 12 Jun 2012 20:23:52 +0200
+Subject: USB: fix gathering of interface associations
+
+From: Daniel Mack <zonque@gmail.com>
+
+commit b3a3dd074f7053ef824ad077e5331b52220ceba1 upstream.
+
+TEAC's UD-H01 (and probably other devices) have a gap in the interface
+number allocation of their descriptors:
+
+  Configuration Descriptor:
+    bLength                 9
+    bDescriptorType         2
+    wTotalLength          220
+    bNumInterfaces          3
+    [...]
+    Interface Descriptor:
+      bLength                 9
+      bDescriptorType         4
+      bInterfaceNumber        0
+      bAlternateSetting       0
+      [...]
+    Interface Association:
+      bLength                 8
+      bDescriptorType        11
+      bFirstInterface         2
+      bInterfaceCount         2
+      bFunctionClass          1 Audio
+      bFunctionSubClass       0
+      bFunctionProtocol      32
+      iFunction               4
+    Interface Descriptor:
+      bLength                 9
+      bDescriptorType         4
+      bInterfaceNumber        2
+      bAlternateSetting       0
+      [...]
+
+Once a configuration is selected, usb_set_configuration() walks the
+known interfaces of a given configuration and calls find_iad() on
+each of them to set the interface association pointer the interface
+is included in.
+
+The problem here is that the loop variable is taken for the interface
+number in the comparison logic that gathers the association. Which is
+fine as long as the descriptors are sane.
+
+In the case above, however, the logic gets out of sync and the
+interface association fields of all interfaces beyond the interface
+number gap are wrong.
+
+Fix this by passing the interface's bInterfaceNumber to find_iad()
+instead.
+
+Signed-off-by: Daniel Mack <zonque@gmail.com>
+Reported-by: bEN <ml_all@circa.be>
+Reported-by: Ivan Perrone <ivanperrone@hotmail.com>
+Tested-by: ivan perrone <ivanperrone@hotmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/core/message.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/usb/core/message.c
++++ b/drivers/usb/core/message.c
+@@ -1803,7 +1803,6 @@ free_interfaces:
+               intfc = cp->intf_cache[i];
+               intf->altsetting = intfc->altsetting;
+               intf->num_altsetting = intfc->num_altsetting;
+-              intf->intf_assoc = find_iad(dev, cp, i);
+               kref_get(&intfc->ref);
+               alt = usb_altnum_to_altsetting(intf, 0);
+@@ -1816,6 +1815,8 @@ free_interfaces:
+               if (!alt)
+                       alt = &intf->altsetting[0];
++              intf->intf_assoc =
++                      find_iad(dev, cp, alt->desc.bInterfaceNumber);
+               intf->cur_altsetting = alt;
+               usb_enable_interface(dev, intf, true);
+               intf->dev.parent = &dev->dev;
diff --git a/queue-3.4/usb-fix-ps3-ehci-systems.patch b/queue-3.4/usb-fix-ps3-ehci-systems.patch
new file mode 100644 (file)
index 0000000..6b9fbc9
--- /dev/null
@@ -0,0 +1,34 @@
+From 4f7a67e2dd49fbfba002c453bc24bf00e701cc71 Mon Sep 17 00:00:00 2001
+From: Ricardo Martins <rasm@fe.up.pt>
+Date: Tue, 22 May 2012 18:02:03 +0100
+Subject: USB: fix PS3 EHCI systems
+
+From: Ricardo Martins <rasm@fe.up.pt>
+
+commit 4f7a67e2dd49fbfba002c453bc24bf00e701cc71 upstream.
+
+After commit aaa0ef289afe9186f81e2340114ea413eef0492a "PS3 EHCI QH
+read work-around", Terratec Grabby (em28xx) stopped working with AMD
+Geode LX 800 (USB controller AMD CS5536). Since this is a PS3 only
+fix, the following patch adds a conditional block around it.
+
+Signed-off-by: Ricardo Martins <rasm@fe.up.pt>
+Acked-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/host/ehci-hcd.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/usb/host/ehci-hcd.c
++++ b/drivers/usb/host/ehci-hcd.c
+@@ -671,7 +671,9 @@ static int ehci_init(struct usb_hcd *hcd
+       hw = ehci->async->hw;
+       hw->hw_next = QH_NEXT(ehci, ehci->async->qh_dma);
+       hw->hw_info1 = cpu_to_hc32(ehci, QH_HEAD);
++#if defined(CONFIG_PPC_PS3)
+       hw->hw_info1 |= cpu_to_hc32(ehci, (1 << 7));    /* I = 1 */
++#endif
+       hw->hw_token = cpu_to_hc32(ehci, QTD_STS_HALT);
+       hw->hw_qtd_next = EHCI_LIST_END(ehci);
+       ehci->async->qh_state = QH_STATE_LINKED;
diff --git a/queue-3.4/usb-ftdi-sio-add-support-for-rt-systems-usb-rts01-serial.patch b/queue-3.4/usb-ftdi-sio-add-support-for-rt-systems-usb-rts01-serial.patch
new file mode 100644 (file)
index 0000000..ea57dce
--- /dev/null
@@ -0,0 +1,43 @@
+From e00a54d772210d450e5c1a801534c3c8a448549f Mon Sep 17 00:00:00 2001
+From: Evan McNabb <evan@mcnabbs.org>
+Date: Fri, 25 May 2012 22:46:14 -0400
+Subject: USB: ftdi-sio: Add support for RT Systems USB-RTS01 serial
+ adapter
+
+From: Evan McNabb <evan@mcnabbs.org>
+
+commit e00a54d772210d450e5c1a801534c3c8a448549f upstream.
+
+Add support for RT Systems USB-RTS01 USB to Serial adapter:
+http://www.rtsystemsinc.com/Photos/USBRTS01.html
+
+Tested by controlling Icom IC-718 amateur radio transceiver via hamlib.
+
+Signed-off-by: Evan McNabb <evan@mcnabbs.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/ftdi_sio.c     |    1 +
+ drivers/usb/serial/ftdi_sio_ids.h |    1 +
+ 2 files changed, 2 insertions(+)
+
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -737,6 +737,7 @@ static struct usb_device_id id_table_com
+       { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) },
+       { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_SERIAL_VX7_PID) },
+       { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_CT29B_PID) },
++      { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_RTS01_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_MAXSTREAM_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_PHI_FISCO_PID) },
+       { USB_DEVICE(TML_VID, TML_USB_SERIAL_PID) },
+--- a/drivers/usb/serial/ftdi_sio_ids.h
++++ b/drivers/usb/serial/ftdi_sio_ids.h
+@@ -784,6 +784,7 @@
+ #define RTSYSTEMS_VID                 0x2100  /* Vendor ID */
+ #define RTSYSTEMS_SERIAL_VX7_PID      0x9e52  /* Serial converter for VX-7 Radios using FT232RL */
+ #define RTSYSTEMS_CT29B_PID           0x9e54  /* CT29B Radio Cable */
++#define RTSYSTEMS_RTS01_PID           0x9e57  /* USB-RTS01 Radio Cable */
+ /*
diff --git a/queue-3.4/usb-mct_u232-fix-incorrect-tiocmset-return.patch b/queue-3.4/usb-mct_u232-fix-incorrect-tiocmset-return.patch
new file mode 100644 (file)
index 0000000..51aed23
--- /dev/null
@@ -0,0 +1,45 @@
+From 1aa3c63cf0a79153ee13c8f82e4eb6c40b66a161 Mon Sep 17 00:00:00 2001
+From: Alan Cox <alan@linux.intel.com>
+Date: Tue, 22 May 2012 20:45:13 +0100
+Subject: USB: mct_u232: Fix incorrect TIOCMSET return
+
+From: Alan Cox <alan@linux.intel.com>
+
+commit 1aa3c63cf0a79153ee13c8f82e4eb6c40b66a161 upstream.
+
+The low level helper returns 1 on success. The ioctl should however return
+0. As this is the only user of the helper return, make the helper return 0 or
+an error code.
+
+Resolves-bug: https://bugzilla.kernel.org/show_bug.cgi?id=43009
+Signed-off-by: Alan Cox <alan@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/mct_u232.c |   13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+--- a/drivers/usb/serial/mct_u232.c
++++ b/drivers/usb/serial/mct_u232.c
+@@ -317,13 +317,16 @@ static int mct_u232_set_modem_ctrl(struc
+                       MCT_U232_SET_REQUEST_TYPE,
+                       0, 0, buf, MCT_U232_SET_MODEM_CTRL_SIZE,
+                       WDR_TIMEOUT);
+-      if (rc < 0)
+-              dev_err(&serial->dev->dev,
+-                      "Set MODEM CTRL 0x%x failed (error = %d)\n", mcr, rc);
++      kfree(buf);
++
+       dbg("set_modem_ctrl: state=0x%x ==> mcr=0x%x", control_state, mcr);
+-      kfree(buf);
+-      return rc;
++      if (rc < 0) {
++              dev_err(&serial->dev->dev,
++                      "Set MODEM CTRL 0x%x failed (error = %d)\n", mcr, rc);
++              return rc;
++      }
++      return 0;
+ } /* mct_u232_set_modem_ctrl */
+ static int mct_u232_get_modem_stat(struct usb_serial *serial,
diff --git a/queue-3.4/usb-musb-davinci-fix-build-breakage.patch b/queue-3.4/usb-musb-davinci-fix-build-breakage.patch
new file mode 100644 (file)
index 0000000..7e722d2
--- /dev/null
@@ -0,0 +1,58 @@
+From 6594b2d7b1ef8260e6e36ddc96bd37a40e39ba80 Mon Sep 17 00:00:00 2001
+From: Jon Povey <jon.povey@racelogic.co.uk>
+Date: Fri, 25 May 2012 10:50:18 +0900
+Subject: usb: musb: davinci: Fix build breakage
+
+From: Jon Povey <jon.povey@racelogic.co.uk>
+
+commit 6594b2d7b1ef8260e6e36ddc96bd37a40e39ba80 upstream.
+
+This appears to have been broken by
+commit 5cfb19ac604a68c030b245561f575c2d1bac1d49
+(ARM: davinci: streamline sysmod access)
+
+For now, fix by hardcoding USB_PHY_CTRL and DM355_DEEPSLEEP
+
+Tested on DM365 with defconfig changes.
+
+Signed-off-by: Jon Povey <jon.povey@racelogic.co.uk>
+Acked-by: Sekhar Nori <nsekhar@ti.com>
+CC: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/musb/davinci.c |    1 +
+ drivers/usb/musb/davinci.h |    4 ++--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/musb/davinci.c
++++ b/drivers/usb/musb/davinci.c
+@@ -34,6 +34,7 @@
+ #include <linux/dma-mapping.h>
+ #include <mach/cputype.h>
++#include <mach/hardware.h>
+ #include <asm/mach-types.h>
+--- a/drivers/usb/musb/davinci.h
++++ b/drivers/usb/musb/davinci.h
+@@ -15,7 +15,7 @@
+  */
+ /* Integrated highspeed/otg PHY */
+-#define USBPHY_CTL_PADDR      (DAVINCI_SYSTEM_MODULE_BASE + 0x34)
++#define USBPHY_CTL_PADDR      0x01c40034
+ #define USBPHY_DATAPOL                BIT(11) /* (dm355) switch D+/D- */
+ #define USBPHY_PHYCLKGD               BIT(8)
+ #define USBPHY_SESNDEN                BIT(7)  /* v(sess_end) comparator */
+@@ -27,7 +27,7 @@
+ #define USBPHY_OTGPDWN                BIT(1)
+ #define USBPHY_PHYPDWN                BIT(0)
+-#define DM355_DEEPSLEEP_PADDR (DAVINCI_SYSTEM_MODULE_BASE + 0x48)
++#define DM355_DEEPSLEEP_PADDR 0x01c40048
+ #define DRVVBUS_FORCE         BIT(2)
+ #define DRVVBUS_OVERRIDE      BIT(1)
diff --git a/queue-3.4/usb-musb_gadget-fix-crash-caused-by-dangling-pointer.patch b/queue-3.4/usb-musb_gadget-fix-crash-caused-by-dangling-pointer.patch
new file mode 100644 (file)
index 0000000..bcc76d5
--- /dev/null
@@ -0,0 +1,48 @@
+From 08f75bf14fadaa81fe362d5acda9b77b113dd0a2 Mon Sep 17 00:00:00 2001
+From: Grazvydas Ignotas <notasas@gmail.com>
+Date: Sat, 26 May 2012 00:21:33 +0300
+Subject: usb: musb_gadget: fix crash caused by dangling pointer
+
+From: Grazvydas Ignotas <notasas@gmail.com>
+
+commit 08f75bf14fadaa81fe362d5acda9b77b113dd0a2 upstream.
+
+usb_ep_ops.disable must clear external copy of the endpoint descriptor,
+otherwise musb crashes after loading/unloading several gadget modules
+in a row:
+
+Unable to handle kernel paging request at virtual address bf013730
+pgd = c0004000
+[bf013730] *pgd=8f26d811, *pte=00000000, *ppte=00000000
+Internal error: Oops: 7 [#1]
+Modules linked in: g_cdc [last unloaded: g_file_storage]
+CPU: 0    Not tainted  (3.2.17 #647)
+PC is at musb_gadget_enable+0x4c/0x24c
+LR is at _raw_spin_lock_irqsave+0x4c/0x58
+[<c027c030>] (musb_gadget_enable+0x4c/0x24c) from [<bf01b760>] (gether_connect+0x3c/0x19c [g_cdc])
+[<bf01b760>] (gether_connect+0x3c/0x19c [g_cdc]) from [<bf01ba1c>] (ecm_set_alt+0x15c/0x180 [g_cdc])
+[<bf01ba1c>] (ecm_set_alt+0x15c/0x180 [g_cdc]) from [<bf01ecd4>] (composite_setup+0x85c/0xac4 [g_cdc])
+[<bf01ecd4>] (composite_setup+0x85c/0xac4 [g_cdc]) from [<c027b744>] (musb_g_ep0_irq+0x844/0x924)
+[<c027b744>] (musb_g_ep0_irq+0x844/0x924) from [<c027a97c>] (musb_interrupt+0x79c/0x864)
+[<c027a97c>] (musb_interrupt+0x79c/0x864) from [<c027aaa8>] (generic_interrupt+0x64/0x7c)
+[<c027aaa8>] (generic_interrupt+0x64/0x7c) from [<c00797cc>] (handle_irq_event_percpu+0x28/0x178)
+...
+
+Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/musb/musb_gadget.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/musb/musb_gadget.c
++++ b/drivers/usb/musb/musb_gadget.c
+@@ -1232,6 +1232,7 @@ static int musb_gadget_disable(struct us
+       }
+       musb_ep->desc = NULL;
++      musb_ep->end_point.desc = NULL;
+       /* abort all pending DMA and requests */
+       nuke(musb_ep, -ESHUTDOWN);
diff --git a/queue-3.4/usb-qcserial-add-sierra-wireless-device-ids.patch b/queue-3.4/usb-qcserial-add-sierra-wireless-device-ids.patch
new file mode 100644 (file)
index 0000000..e693b80
--- /dev/null
@@ -0,0 +1,38 @@
+From c41444ccfa33a1c20efa319e554cb531576e64a2 Mon Sep 17 00:00:00 2001
+From: Bjørn Mork <bjorn@mork.no>
+Date: Thu, 24 May 2012 11:19:04 +0200
+Subject: USB: qcserial: Add Sierra Wireless device IDs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Bjørn Mork <bjorn@mork.no>
+
+commit c41444ccfa33a1c20efa319e554cb531576e64a2 upstream.
+
+Some additional IDs found in the BSD/GPL licensed out-of-tree
+GobiSerial driver from Sierra Wireless.
+
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/qcserial.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/usb/serial/qcserial.c
++++ b/drivers/usb/serial/qcserial.c
+@@ -105,7 +105,13 @@ static const struct usb_device_id id_tab
+       {USB_DEVICE(0x1410, 0xa021)},   /* Novatel Gobi 3000 Composite */
+       {USB_DEVICE(0x413c, 0x8193)},   /* Dell Gobi 3000 QDL */
+       {USB_DEVICE(0x413c, 0x8194)},   /* Dell Gobi 3000 Composite */
++      {USB_DEVICE(0x1199, 0x9010)},   /* Sierra Wireless Gobi 3000 QDL */
++      {USB_DEVICE(0x1199, 0x9012)},   /* Sierra Wireless Gobi 3000 QDL */
+       {USB_DEVICE(0x1199, 0x9013)},   /* Sierra Wireless Gobi 3000 Modem device (MC8355) */
++      {USB_DEVICE(0x1199, 0x9014)},   /* Sierra Wireless Gobi 3000 QDL */
++      {USB_DEVICE(0x1199, 0x9015)},   /* Sierra Wireless Gobi 3000 Modem device */
++      {USB_DEVICE(0x1199, 0x9018)},   /* Sierra Wireless Gobi 3000 QDL */
++      {USB_DEVICE(0x1199, 0x9019)},   /* Sierra Wireless Gobi 3000 Modem device */
+       {USB_DEVICE(0x12D1, 0x14F0)},   /* Sony Gobi 3000 QDL */
+       {USB_DEVICE(0x12D1, 0x14F1)},   /* Sony Gobi 3000 Composite */
+       { }                             /* Terminating entry */
diff --git a/queue-3.4/usb-serial-cp210x-add-optris-ms-pro-usb-id.patch b/queue-3.4/usb-serial-cp210x-add-optris-ms-pro-usb-id.patch
new file mode 100644 (file)
index 0000000..f259d86
--- /dev/null
@@ -0,0 +1,26 @@
+From 5bbfa6f427c1d7244a5ee154ab8fa37265a5e049 Mon Sep 17 00:00:00 2001
+From: Mikko Tuumanen <mikko.tuumanen@qemsoftware.com>
+Date: Fri, 1 Jun 2012 11:28:55 +0300
+Subject: USB: serial: cp210x: add Optris MS Pro usb id
+
+From: Mikko Tuumanen <mikko.tuumanen@qemsoftware.com>
+
+commit 5bbfa6f427c1d7244a5ee154ab8fa37265a5e049 upstream.
+
+Signed-off-by: Mikko Tuumanen <mikko.tuumanen@qemsoftware.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/cp210x.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/serial/cp210x.c
++++ b/drivers/usb/serial/cp210x.c
+@@ -82,6 +82,7 @@ static const struct usb_device_id id_tab
+       { USB_DEVICE(0x10C4, 0x8066) }, /* Argussoft In-System Programmer */
+       { USB_DEVICE(0x10C4, 0x806F) }, /* IMS USB to RS422 Converter Cable */
+       { USB_DEVICE(0x10C4, 0x807A) }, /* Crumb128 board */
++      { USB_DEVICE(0x10C4, 0x80C4) }, /* Cygnal Integrated Products, Inc., Optris infrared thermometer */
+       { USB_DEVICE(0x10C4, 0x80CA) }, /* Degree Controls Inc */
+       { USB_DEVICE(0x10C4, 0x80DD) }, /* Tracient RFID */
+       { USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */
diff --git a/queue-3.4/usb-serial-enforce-usb-driver-and-usb-serial-driver-match.patch b/queue-3.4/usb-serial-enforce-usb-driver-and-usb-serial-driver-match.patch
new file mode 100644 (file)
index 0000000..cac89e5
--- /dev/null
@@ -0,0 +1,158 @@
+From 954c3f8a5f1b7716be9eee978b3bc85bae92d7c8 Mon Sep 17 00:00:00 2001
+From: Bjørn Mork <bjorn@mork.no>
+Date: Wed, 30 May 2012 10:00:14 +0200
+Subject: USB: serial: Enforce USB driver and USB serial driver match
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Bjørn Mork <bjorn@mork.no>
+
+commit 954c3f8a5f1b7716be9eee978b3bc85bae92d7c8 upstream.
+
+We need to make sure that the USB serial driver we find
+matches the USB driver whose probe we are currently
+executing. Otherwise we will end up with USB serial
+devices bound to the correct serial driver but wrong
+USB driver.
+
+An example of such cross-probing, where the usbserial_generic
+USB driver has found the sierra serial driver:
+
+May 29 18:26:15 nemi kernel: [ 4442.559246] usbserial_generic 4-4:1.0: Sierra USB modem converter detected
+May 29 18:26:20 nemi kernel: [ 4447.556747] usbserial_generic 4-4:1.2: Sierra USB modem converter detected
+May 29 18:26:25 nemi kernel: [ 4452.557288] usbserial_generic 4-4:1.3: Sierra USB modem converter detected
+
+sysfs view of the same problem:
+
+bjorn@nemi:~$ ls -l /sys/bus/usb/drivers/sierra/
+total 0
+--w------- 1 root root 4096 May 29 18:23 bind
+lrwxrwxrwx 1 root root    0 May 29 18:23 module -> ../../../../module/usbserial
+--w------- 1 root root 4096 May 29 18:23 uevent
+--w------- 1 root root 4096 May 29 18:23 unbind
+bjorn@nemi:~$ ls -l /sys/bus/usb-serial/drivers/sierra/
+total 0
+--w------- 1 root root 4096 May 29 18:23 bind
+lrwxrwxrwx 1 root root    0 May 29 18:23 module -> ../../../../module/sierra
+-rw-r--r-- 1 root root 4096 May 29 18:23 new_id
+lrwxrwxrwx 1 root root    0 May 29 18:32 ttyUSB0 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/ttyUSB0
+lrwxrwxrwx 1 root root    0 May 29 18:32 ttyUSB1 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.2/ttyUSB1
+lrwxrwxrwx 1 root root    0 May 29 18:32 ttyUSB2 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.3/ttyUSB2
+--w------- 1 root root 4096 May 29 18:23 uevent
+--w------- 1 root root 4096 May 29 18:23 unbind
+
+bjorn@nemi:~$ ls -l /sys/bus/usb/drivers/usbserial_generic/
+total 0
+lrwxrwxrwx 1 root root    0 May 29 18:33 4-4:1.0 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0
+lrwxrwxrwx 1 root root    0 May 29 18:33 4-4:1.2 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.2
+lrwxrwxrwx 1 root root    0 May 29 18:33 4-4:1.3 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.3
+--w------- 1 root root 4096 May 29 18:33 bind
+lrwxrwxrwx 1 root root    0 May 29 18:33 module -> ../../../../module/usbserial
+--w------- 1 root root 4096 May 29 18:22 uevent
+--w------- 1 root root 4096 May 29 18:33 unbind
+bjorn@nemi:~$ ls -l /sys/bus/usb-serial/drivers/generic/
+total 0
+--w------- 1 root root 4096 May 29 18:33 bind
+lrwxrwxrwx 1 root root    0 May 29 18:33 module -> ../../../../module/usbserial
+-rw-r--r-- 1 root root 4096 May 29 18:33 new_id
+--w------- 1 root root 4096 May 29 18:22 uevent
+--w------- 1 root root 4096 May 29 18:33 unbind
+
+So we end up with a mismatch between the USB driver and the
+USB serial driver.  The reason for the above is simple: The
+USB driver probe will succeed if *any* registered serial
+driver matches, and will use that serial driver for all
+serial driver functions.
+
+This makes ref counting go wrong. We count the USB driver
+as used, but not the USB serial driver.  This may result
+in Oops'es as demonstrated by Johan Hovold <jhovold@gmail.com>:
+
+[11811.646396] drivers/usb/serial/usb-serial.c: get_free_serial 1
+[11811.646443] drivers/usb/serial/usb-serial.c: get_free_serial - minor base = 0
+[11811.646460] drivers/usb/serial/usb-serial.c: usb_serial_probe - registering ttyUSB0
+[11811.646766] usb 6-1: pl2303 converter now attached to ttyUSB0
+[11812.264197] USB Serial deregistering driver FTDI USB Serial Device
+[11812.264865] usbcore: deregistering interface driver ftdi_sio
+[11812.282180] USB Serial deregistering driver pl2303
+[11812.283141] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0
+[11812.283272] usbcore: deregistering interface driver pl2303
+[11812.301056] USB Serial deregistering driver generic
+[11812.301186] usbcore: deregistering interface driver usbserial_generic
+[11812.301259] drivers/usb/serial/usb-serial.c: usb_serial_disconnect
+[11812.301823] BUG: unable to handle kernel paging request at f8e7438c
+[11812.301845] IP: [<f8e38445>] usb_serial_disconnect+0xb5/0x100 [usbserial]
+[11812.301871] *pde = 357ef067 *pte = 00000000
+[11812.301957] Oops: 0000 [#1] PREEMPT SMP
+[11812.301983] Modules linked in: usbserial(-) [last unloaded: pl2303]
+[11812.302008]
+[11812.302019] Pid: 1323, comm: modprobe Tainted: G        W    3.4.0-rc7+ #101 Dell Inc. Vostro 1520/0T816J
+[11812.302115] EIP: 0060:[<f8e38445>] EFLAGS: 00010246 CPU: 1
+[11812.302130] EIP is at usb_serial_disconnect+0xb5/0x100 [usbserial]
+[11812.302141] EAX: f508a180 EBX: f508a180 ECX: 00000000 EDX: f8e74300
+[11812.302151] ESI: f5050800 EDI: 00000001 EBP: f5141e78 ESP: f5141e58
+[11812.302160]  DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
+[11812.302170] CR0: 8005003b CR2: f8e7438c CR3: 34848000 CR4: 000007d0
+[11812.302180] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
+[11812.302189] DR6: ffff0ff0 DR7: 00000400
+[11812.302199] Process modprobe (pid: 1323, ti=f5140000 task=f61e2bc0 task.ti=f5140000)
+[11812.302209] Stack:
+[11812.302216]  f8e3be0f f8e3b29c f8e3ae00 00000000 f513641c f5136400 f513641c f507a540
+[11812.302325]  f5141e98 c133d2c1 00000000 00000000 f509c400 f513641c f507a590 f5136450
+[11812.302372]  f5141ea8 c12f0344 f513641c f507a590 f5141ebc c12f0c67 00000000 f507a590
+[11812.302419] Call Trace:
+[11812.302439]  [<c133d2c1>] usb_unbind_interface+0x51/0x190
+[11812.302456]  [<c12f0344>] __device_release_driver+0x64/0xb0
+[11812.302469]  [<c12f0c67>] driver_detach+0x97/0xa0
+[11812.302483]  [<c12f001c>] bus_remove_driver+0x6c/0xe0
+[11812.302500]  [<c145938d>] ? __mutex_unlock_slowpath+0xcd/0x140
+[11812.302514]  [<c12f0ff9>] driver_unregister+0x49/0x80
+[11812.302528]  [<c1457df6>] ? printk+0x1d/0x1f
+[11812.302540]  [<c133c50d>] usb_deregister+0x5d/0xb0
+[11812.302557]  [<f8e37c55>] ? usb_serial_deregister+0x45/0x50 [usbserial]
+[11812.302575]  [<f8e37c8d>] usb_serial_deregister_drivers+0x2d/0x40 [usbserial]
+[11812.302593]  [<f8e3a6e2>] usb_serial_generic_deregister+0x12/0x20 [usbserial]
+[11812.302611]  [<f8e3acf0>] usb_serial_exit+0x8/0x32 [usbserial]
+[11812.302716]  [<c1080b48>] sys_delete_module+0x158/0x260
+[11812.302730]  [<c110594e>] ? mntput+0x1e/0x30
+[11812.302746]  [<c145c3c3>] ? sysenter_exit+0xf/0x18
+[11812.302746]  [<c107777c>] ? trace_hardirqs_on_caller+0xec/0x170
+[11812.302746]  [<c145c390>] sysenter_do_call+0x12/0x36
+[11812.302746] Code: 24 02 00 00 e8 dd f3 20 c8 f6 86 74 02 00 00 02 74 b4 8d 86 4c 02 00 00 47 e8 78 55 4b c8 0f b6 43 0e 39 f8 7f a9 8b 53 04 89 d8 <ff> 92 8c 00 00 00 89 d8 e8 0e ff ff ff 8b 45 f0 c7 44 24 04 2f
+[11812.302746] EIP: [<f8e38445>] usb_serial_disconnect+0xb5/0x100 [usbserial] SS:ESP 0068:f5141e58
+[11812.302746] CR2: 00000000f8e7438c
+
+Fix by only evaluating serial drivers pointing back to the
+USB driver we are currently probing.  This still allows two
+or more drivers to match the same device, running their
+serial driver probes to sort out which one to use.
+
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Reviewed-by: Felipe Balbi <balbi@ti.com>
+Tested-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/usb-serial.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/serial/usb-serial.c
++++ b/drivers/usb/serial/usb-serial.c
+@@ -670,12 +670,14 @@ exit:
+ static struct usb_serial_driver *search_serial_device(
+                                       struct usb_interface *iface)
+ {
+-      const struct usb_device_id *id;
++      const struct usb_device_id *id = NULL;
+       struct usb_serial_driver *drv;
++      struct usb_driver *driver = to_usb_driver(iface->dev.driver);
+       /* Check if the usb id matches a known device */
+       list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
+-              id = get_iface_id(drv, iface);
++              if (drv->usb_driver == driver)
++                      id = get_iface_id(drv, iface);
+               if (id)
+                       return drv;
+       }
diff --git a/queue-3.4/usb-serial-sierra-add-support-for-sierra-wireless-aircard-320u-modem.patch b/queue-3.4/usb-serial-sierra-add-support-for-sierra-wireless-aircard-320u-modem.patch
new file mode 100644 (file)
index 0000000..dc15212
--- /dev/null
@@ -0,0 +1,31 @@
+From 19a3dd1575e954e8c004413bee3e12d3962f2525 Mon Sep 17 00:00:00 2001
+From: Tom Cassidy <tomas.cassidy@gmail.com>
+Date: Wed, 6 Jun 2012 17:08:48 +1000
+Subject: USB: serial: sierra: Add support for Sierra Wireless AirCard 320U modem
+
+From: Tom Cassidy <tomas.cassidy@gmail.com>
+
+commit 19a3dd1575e954e8c004413bee3e12d3962f2525 upstream.
+
+Add support for Sierra Wireless AirCard 320U modem
+
+Signed-off-by: Tomas Cassidy <tomas.cassidy@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/sierra.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/usb/serial/sierra.c
++++ b/drivers/usb/serial/sierra.c
+@@ -304,6 +304,10 @@ static const struct usb_device_id id_tab
+       { USB_DEVICE(0x1199, 0x68A3),   /* Sierra Wireless Direct IP modems */
+         .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
+       },
++      /* AT&T Direct IP LTE modems */
++      { USB_DEVICE_AND_INTERFACE_INFO(0x0F3D, 0x68AA, 0xFF, 0xFF, 0xFF),
++        .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
++      },
+       { USB_DEVICE(0x0f3d, 0x68A3),   /* Airprime/Sierra Wireless Direct IP modems */
+         .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
+       },