aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/host')
-rw-r--r--drivers/usb/host/ehci-q.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c
index 2e49de820b14..c0e752cffc68 100644
--- a/drivers/usb/host/ehci-q.c
+++ b/drivers/usb/host/ehci-q.c
@@ -657,6 +657,14 @@ qh_make (
657 type = usb_pipetype (urb->pipe); 657 type = usb_pipetype (urb->pipe);
658 maxp = usb_maxpacket (urb->dev, urb->pipe, !is_input); 658 maxp = usb_maxpacket (urb->dev, urb->pipe, !is_input);
659 659
660 /* 1024 byte maxpacket is a hardware ceiling. High bandwidth
661 * acts like up to 3KB, but is built from smaller packets.
662 */
663 if (max_packet(maxp) > 1024) {
664 ehci_dbg(ehci, "bogus qh maxpacket %d\n", max_packet(maxp));
665 goto done;
666 }
667
660 /* Compute interrupt scheduling parameters just once, and save. 668 /* Compute interrupt scheduling parameters just once, and save.
661 * - allowing for high bandwidth, how many nsec/uframe are used? 669 * - allowing for high bandwidth, how many nsec/uframe are used?
662 * - split transactions need a second CSPLIT uframe; same question 670 * - split transactions need a second CSPLIT uframe; same question
@@ -757,7 +765,13 @@ qh_make (
757 info2 |= (EHCI_TUNE_MULT_HS << 30); 765 info2 |= (EHCI_TUNE_MULT_HS << 30);
758 } else if (type == PIPE_BULK) { 766 } else if (type == PIPE_BULK) {
759 info1 |= (EHCI_TUNE_RL_HS << 28); 767 info1 |= (EHCI_TUNE_RL_HS << 28);
760 info1 |= 512 << 16; /* usb2 fixed maxpacket */ 768 /* The USB spec says that high speed bulk endpoints
769 * always use 512 byte maxpacket. But some device
770 * vendors decided to ignore that, and MSFT is happy
771 * to help them do so. So now people expect to use
772 * such nonconformant devices with Linux too; sigh.
773 */
774 info1 |= max_packet(maxp) << 16;
761 info2 |= (EHCI_TUNE_MULT_HS << 30); 775 info2 |= (EHCI_TUNE_MULT_HS << 30);
762 } else { /* PIPE_INTERRUPT */ 776 } else { /* PIPE_INTERRUPT */
763 info1 |= max_packet (maxp) << 16; 777 info1 |= max_packet (maxp) << 16;