summaryrefslogtreecommitdiff
path: root/drivers/usb/musb-new/musb_host.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2015-01-11 20:34:52 +0100
committerMarek Vasut <marex@denx.de>2015-01-18 12:31:36 +0100
commitb918a0c6f694a58b54a7de949d0c720bc6671bd9 (patch)
tree3027f5a4479bef1fe5f3484906dd68dd864e3a94 /drivers/usb/musb-new/musb_host.c
parent90cdc1039d0bf6d85bb497dbb93d317ad234e846 (diff)
musb-new: Properly remove a transfer from the schedule on timeout
If a transfer / urb times-out, properly remove it from the schedule, rather then letting it sit on the ep head. This stops the musb code from getting confused and refusing to queue further transfers after a timeout. Tested by unplugging a usb-keyboard, replugging it and doing a usb-reset, before this commit the keyboard would not work after the usb-reset. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'drivers/usb/musb-new/musb_host.c')
-rw-r--r--drivers/usb/musb-new/musb_host.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/usb/musb-new/musb_host.c b/drivers/usb/musb-new/musb_host.c
index bbcee88241..437309ceb4 100644
--- a/drivers/usb/musb-new/musb_host.c
+++ b/drivers/usb/musb-new/musb_host.c
@@ -2130,8 +2130,6 @@ done:
return ret;
}
-
-#ifndef __UBOOT__
/*
* abort a transfer that's at the head of a hardware queue.
* called with controller locked, irqs blocked
@@ -2195,7 +2193,14 @@ static int musb_cleanup_urb(struct urb *urb, struct musb_qh *qh)
return status;
}
-static int musb_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
+#ifndef __UBOOT__
+static int musb_urb_dequeue(
+#else
+int musb_urb_dequeue(
+#endif
+ struct usb_hcd *hcd,
+ struct urb *urb,
+ int status)
{
struct musb *musb = hcd_to_musb(hcd);
struct musb_qh *qh;
@@ -2253,6 +2258,7 @@ done:
return ret;
}
+#ifndef __UBOOT__
/* disable an endpoint */
static void
musb_h_disable(struct usb_hcd *hcd, struct usb_host_endpoint *hep)