]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
usb: xhci: Add interrupt transfer support
authorBin Meng <bmeng.cn@gmail.com>
Mon, 18 Sep 2017 13:40:41 +0000 (06:40 -0700)
committerMarek Vasut <marex@denx.de>
Sun, 1 Oct 2017 14:32:53 +0000 (16:32 +0200)
xHCI uses normal TRBs for both bulk and interrupt. This adds the
missing interrupt transfer support to xHCI so that devices like
USB keyboard that uses interrupt transfer can work.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
drivers/usb/host/xhci.c

index 04eb1eb14d13602ec1234b4b21e5ea372074664e..4b3d58d56e6b0558cb99f71c544c71d905038706 100644 (file)
@@ -890,11 +890,18 @@ unknown:
 static int _xhci_submit_int_msg(struct usb_device *udev, unsigned long pipe,
                                void *buffer, int length, int interval)
 {
+       if (usb_pipetype(pipe) != PIPE_INTERRUPT) {
+               printf("non-interrupt pipe (type=%lu)", usb_pipetype(pipe));
+               return -EINVAL;
+       }
+
        /*
-        * TODO: Not addressing any interrupt type transfer requests
-        * Add support for it later.
+        * xHCI uses normal TRBs for both bulk and interrupt. When the
+        * interrupt endpoint is to be serviced, the xHC will consume
+        * (at most) one TD. A TD (comprised of sg list entries) can
+        * take several service intervals to transmit.
         */
-       return -EINVAL;
+       return xhci_bulk_tx(udev, pipe, length, buffer);
 }
 
 /**