[U-Boot] [PATCH 2/2] usb: dwc2: implement interrupt transfers

Stephen Warren swarren at wwwdotorg.org
Sat Apr 11 05:05:22 CEST 2015


As best I can tell, there's no difference between bulk and interrupt
transfers in terms of how the HW should be programmed, at least given
that we're executing one transaction at a time rather than scheduling
them into frames for maximum throughput.

This patch ends up sharing the toggle bit state between bulk and
interrupt transfers on a particular EP. However I believe this is fine;
AFAIK a given EP either uses bulk or interrupt transfers and doesn't mix
them.

This patch doesn't do anything with the "interval" parameter for
interrupt transfers, but then most other USB controller drivers in U-Boot
don't either.

It turns out that one of my keyboards is happy to work using control
transfers but the other only gives non-zero "HID reports" via interrupt
transfers.

Signed-off-by: Stephen Warren <swarren at wwwdotorg.org>
---
 drivers/usb/host/dwc2.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/host/dwc2.c b/drivers/usb/host/dwc2.c
index b1d94ccc1a69..f3fbe76acf9b 100644
--- a/drivers/usb/host/dwc2.c
+++ b/drivers/usb/host/dwc2.c
@@ -904,9 +904,8 @@ int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
 int submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
 		   int len, int interval)
 {
-	printf("dev = %p pipe = %#lx buf = %p size = %d int = %d\n",
-	       dev, pipe, buffer, len, interval);
-	return -ENOSYS;
+	/* FIXME: what is interval? */
+	return submit_bulk_msg(dev, pipe, buffer, len);
 }
 
 /* U-Boot USB control interface */
-- 
1.9.1



More information about the U-Boot mailing list