|
@@ -985,9 +985,19 @@ static unsigned int xhci_parse_exponent_interval(struct usb_device *udev,
|
|
|
interval = clamp_val(ep->desc.bInterval, 1, 16) - 1;
|
|
|
if (interval != ep->desc.bInterval - 1)
|
|
|
dev_warn(&udev->dev,
|
|
|
- "ep %#x - rounding interval to %d microframes\n",
|
|
|
+ "ep %#x - rounding interval to %d %sframes\n",
|
|
|
ep->desc.bEndpointAddress,
|
|
|
- 1 << interval);
|
|
|
+ 1 << interval,
|
|
|
+ udev->speed == USB_SPEED_FULL ? "" : "micro");
|
|
|
+
|
|
|
+ if (udev->speed == USB_SPEED_FULL) {
|
|
|
+ /*
|
|
|
+ * Full speed isoc endpoints specify interval in frames,
|
|
|
+ * not microframes. We are using microframes everywhere,
|
|
|
+ * so adjust accordingly.
|
|
|
+ */
|
|
|
+ interval += 3; /* 1 frame = 2^3 uframes */
|
|
|
+ }
|
|
|
|
|
|
return interval;
|
|
|
}
|