diff options
author | Hans de Goede <hdegoede@redhat.com> | 2015-01-11 20:34:52 +0100 |
---|---|---|
committer | Marek Vasut <marex@denx.de> | 2015-01-18 12:31:36 +0100 |
commit | b918a0c6f694a58b54a7de949d0c720bc6671bd9 (patch) | |
tree | 3027f5a4479bef1fe5f3484906dd68dd864e3a94 /drivers/usb/musb-new/musb_uboot.c | |
parent | 90cdc1039d0bf6d85bb497dbb93d317ad234e846 (diff) | |
download | talos-obmc-uboot-b918a0c6f694a58b54a7de949d0c720bc6671bd9.tar.gz talos-obmc-uboot-b918a0c6f694a58b54a7de949d0c720bc6671bd9.zip |
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_uboot.c')
-rw-r--r-- | drivers/usb/musb-new/musb_uboot.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/usb/musb-new/musb_uboot.c b/drivers/usb/musb-new/musb_uboot.c index dab6f9b213..e823ad1a74 100644 --- a/drivers/usb/musb-new/musb_uboot.c +++ b/drivers/usb/musb-new/musb_uboot.c @@ -77,6 +77,9 @@ static int submit_urb(struct usb_hcd *hcd, struct urb *urb) } while (urb->status == -EINPROGRESS && get_timer(0) < timeout); + if (urb->status == -EINPROGRESS) + musb_urb_dequeue(hcd, urb, -ETIME); + return urb->status; } |