aboutsummaryrefslogtreecommitdiffstats
path: root/usb
diff options
authorGreg Kroah-Hartman <gregkh@suse.de>2008-01-24 12:47:11 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2008-01-24 12:47:11 -0800
commit493642fb9f8089241b8392091fbd538932421bfe (patch)
treea17070ba51ca3414c910d56b99dd36c726c27d0d /usb
parent46700551b0622b695f4c582d390ec6ba2ecdd9a1 (diff)
downloadpatches-493642fb9f8089241b8392091fbd538932421bfe.tar.gz
2 more usb patches
Diffstat (limited to 'usb')
-rw-r--r--usb/usb-ehci-remove-false-clear-reset-path.patch45
-rw-r--r--usb/usb-ehci-should-use-u16-for-isochronous-intervals.patch40
2 files changed, 85 insertions, 0 deletions
diff --git a/usb/usb-ehci-remove-false-clear-reset-path.patch b/usb/usb-ehci-remove-false-clear-reset-path.patch
new file mode 100644
index 00000000000000..2b71167da6abe1
--- /dev/null
+++ b/usb/usb-ehci-remove-false-clear-reset-path.patch
@@ -0,0 +1,45 @@
+From david-b@pacbell.net Thu Jan 24 12:45:59 2008
+From: David Brownell <david-b@pacbell.net>
+Date: Thu, 24 Jan 2008 12:39:43 -0800
+Subject: usb: ehci, remove false clear-reset path
+To: Greg KH <greg@kroah.com>, linux-usb@vger.kernel.org
+Message-ID: <200801241239.43337.david-b@pacbell.net>
+Content-Disposition: inline
+
+
+Some of the "EHCI ports reset forever" problems may be explained by
+code paths which wrongly flagged resets as complete. This removes
+two such paths; the ehci_hub_status_data() path should be the only one
+to have an effect, since it was already properly flagged on the other
+path. (Issue noted by Minhyoung Kim <a9a9@lge.com>.)
+
+Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/ehci-hub.c | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+--- a/drivers/usb/host/ehci-hub.c
++++ b/drivers/usb/host/ehci-hub.c
+@@ -411,10 +411,8 @@ static int check_reset_complete (
+ u32 __iomem *status_reg,
+ int port_status
+ ) {
+- if (!(port_status & PORT_CONNECT)) {
+- ehci->reset_done [index] = 0;
++ if (!(port_status & PORT_CONNECT))
+ return port_status;
+- }
+
+ /* if reset finished and it's still not enabled -- handoff */
+ if (!(port_status & PORT_PE)) {
+@@ -493,8 +491,6 @@ ehci_hub_status_data (struct usb_hcd *hc
+ * controller by the user.
+ */
+
+- if (!(temp & PORT_CONNECT))
+- ehci->reset_done [i] = 0;
+ if ((temp & mask) != 0
+ || ((temp & PORT_RESUME) != 0
+ && time_after_eq(jiffies,
diff --git a/usb/usb-ehci-should-use-u16-for-isochronous-intervals.patch b/usb/usb-ehci-should-use-u16-for-isochronous-intervals.patch
new file mode 100644
index 00000000000000..fb4484ab50e20c
--- /dev/null
+++ b/usb/usb-ehci-should-use-u16-for-isochronous-intervals.patch
@@ -0,0 +1,40 @@
+From david-b@pacbell.net Thu Jan 24 12:46:11 2008
+From: David Brownell <david-b@pacbell.net>
+Date: Thu, 24 Jan 2008 12:30:34 -0800
+Subject: usb: ehci should use u16 for isochronous intervals
+To: Greg KH <greg@kroah.com>, linux-usb@vger.kernel.org
+Message-ID: <200801241230.35469.david-b@pacbell.net>
+Content-Disposition: inline
+
+
+While most isochronous endpoints have short polling intervals, the
+EHCI driver won't necessarily handle larger ones correctly.
+
+This patch switches to use a "u16" to represent those periods, not
+a u8, since it can always work: the largest expressible period
+is 2^15 units ... not the previous too-short limit of 128 frames
+(full or low speeds) or microframes (high speed, 32 frames).
+
+This bug is essentially theoretical, since the few ISO endpoints
+I've seen which don't use one transfer per frame are high speed
+ones using more than that (including high bandwidth, 24 KB/msec).
+
+Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/ehci.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/host/ehci.h
++++ b/drivers/usb/host/ehci.h
+@@ -550,8 +550,8 @@ struct ehci_iso_stream {
+ * trusting urb->interval == f(epdesc->bInterval) and
+ * including the extra info for hw_bufp[0..2]
+ */
+- u8 interval;
+ u8 usecs, c_usecs;
++ u16 interval;
+ u16 tt_usecs;
+ u16 maxp;
+ u16 raw_mask;