aboutsummaryrefslogtreecommitdiffstats
diff options
authorGreg Kroah-Hartman <gregkh@suse.de>2010-06-04 13:14:43 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2010-06-04 13:14:43 -0700
commit87caedfe6c0eea9d489a90c87e3b3283e3c6362d (patch)
tree6fd286bd14c4aa712f52dbf821a48f53e5cae4f7
parent08c499a70f60eb1d0fb6b59460aeea00babe99f6 (diff)
downloadpatches-87caedfe6c0eea9d489a90c87e3b3283e3c6362d.tar.gz
usb patch
-rw-r--r--series2
-rw-r--r--usb.current/usb-unbind-all-interfaces-before-rebinding-them.patch47
2 files changed, 48 insertions, 1 deletions
diff --git a/series b/series
index eaf59f6a06f8c7..02c92e2dd84553 100644
--- a/series
+++ b/series
@@ -44,6 +44,7 @@ usb.current/usb-ftdi_sio-fix-dtr-rts-line-modes.patch
usb.current/usb-cdc-acm-fix-resource-reclaim-in-error-path-of-acm_probe.patch
usb.current/usb-fix-ehci_hcd-build-failure-when-both-generic-of-and-xilinx-is-selected.patch
usb.current/usb-serial-digi_acceleport-eliminate-a-null-pointer-dereference.patch
+usb.current/usb-unbind-all-interfaces-before-rebinding-them.patch
#################################
@@ -98,4 +99,3 @@ staging.current/staging-sep-return-efault-on-copy_to_user-errors.patch
# staging stuff is now in the staging-next tree on git.kernel.org
-
diff --git a/usb.current/usb-unbind-all-interfaces-before-rebinding-them.patch b/usb.current/usb-unbind-all-interfaces-before-rebinding-them.patch
new file mode 100644
index 00000000000000..c24eaf374256c1
--- /dev/null
+++ b/usb.current/usb-unbind-all-interfaces-before-rebinding-them.patch
@@ -0,0 +1,47 @@
+From stern@rowland.harvard.edu Fri Jun 4 13:07:09 2010
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Fri, 4 Jun 2010 14:02:42 -0400 (EDT)
+Subject: USB: unbind all interfaces before rebinding them
+To: Greg KH <greg@kroah.com>
+Cc: François Valenduc <francois.valenduc@tvcablenet.be>
+Message-ID: <Pine.LNX.4.44L0.1006041400220.1794-100000@iolanthe.rowland.org>
+
+
+This patch (as1387) fixes a bug introduced during the changeover to
+the runtime PM framework. When a driver doesn't support resume or
+reset-resume, and consequently its interfaces need to be unbound and
+rebound, we have to unbind all the interfaces before trying to rebind
+any of them. Otherwise the driver's probe method for one interface
+could try to claim a different interface and fail, because that other
+interface hasn't been unbound yet.
+
+This fixes Bugzilla #15788. The symptom is that some USB sound cards
+don't work after hibernation.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Tested-by: François Valenduc <francois.valenduc@tvcablenet.be>
+Cc: stable <stable@kernel.org> [.34]
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/core/driver.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/usb/core/driver.c
++++ b/drivers/usb/core/driver.c
+@@ -1328,6 +1328,7 @@ int usb_resume(struct device *dev, pm_me
+
+ /* For all other calls, take the device back to full power and
+ * tell the PM core in case it was autosuspended previously.
++ * Unbind the interfaces that will need rebinding later.
+ */
+ } else {
+ status = usb_resume_both(udev, msg);
+@@ -1336,6 +1337,7 @@ int usb_resume(struct device *dev, pm_me
+ pm_runtime_set_active(dev);
+ pm_runtime_enable(dev);
+ udev->last_busy = jiffies;
++ do_unbind_rebind(udev, DO_REBIND);
+ }
+ }
+