Commit 8937669f authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman

USB: iMX21: accept very late isochronous URBs

Commit 24f53137 (USB: EHCI: accept very late isochronous URBs)
changed the isochronous API provided by ehci-hcd.  URBs submitted too
late, so that the time slots for all their packets have already
expired, are no longer rejected outright.  Instead the submission is
accepted, and the URB completes normally with a -EXDEV error for each
packet.  This is what client drivers expect.

The same policy should be implemented in imx21-hcd, but I don't know
enough about the hardware to do it.  As a second-best substitute, this
patch treats very late isochronous submissions as though the
URB_ISO_ASAP flag were set.  I don't have any way to test this change,
unfortunately.
Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
CC: Sascha Hauer <kernel@pengutronix.de>
CC: Martin Fuzzey <mfuzzey@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent eefb3dd7
...@@ -824,13 +824,13 @@ static int imx21_hc_urb_enqueue_isoc(struct usb_hcd *hcd, ...@@ -824,13 +824,13 @@ static int imx21_hc_urb_enqueue_isoc(struct usb_hcd *hcd,
i = DIV_ROUND_UP(wrap_frame( i = DIV_ROUND_UP(wrap_frame(
cur_frame - urb->start_frame), cur_frame - urb->start_frame),
urb->interval); urb->interval);
if (urb->transfer_flags & URB_ISO_ASAP) {
/* Treat underruns as if URB_ISO_ASAP was set */
if ((urb->transfer_flags & URB_ISO_ASAP) ||
i >= urb->number_of_packets) {
urb->start_frame = wrap_frame(urb->start_frame urb->start_frame = wrap_frame(urb->start_frame
+ i * urb->interval); + i * urb->interval);
i = 0; i = 0;
} else if (i >= urb->number_of_packets) {
ret = -EXDEV;
goto alloc_dmem_failed;
} }
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment