summaryrefslogtreecommitdiff
path: root/drivers/usb/host
diff options
context:
space:
mode:
authorBenoît Thébaudeau <benoit.thebaudeau@advansee.com>2012-08-09 23:50:44 +0200
committerMarek Vasut <marex@denx.de>2012-09-01 16:21:51 +0200
commit44ae0be7461f0ac72fa53b1a5bcd03c26e1d4fb1 (patch)
tree5fabb72f12c7c41100b35ea18b22b8cc1ca1aa54 /drivers/usb/host
parent93a1ab57f340b890e9e5b48b143869bc063d625f (diff)
downloadu-boot-imx-44ae0be7461f0ac72fa53b1a5bcd03c26e1d4fb1.zip
u-boot-imx-44ae0be7461f0ac72fa53b1a5bcd03c26e1d4fb1.tar.gz
u-boot-imx-44ae0be7461f0ac72fa53b1a5bcd03c26e1d4fb1.tar.bz2
ehci: Fail for multi-transaction interrupt transfers
Interrupt transfers requiring several transactions are not supported by submit_int_msg() because bInterval is ignored. This patch returns a failure code and prints an error message in this case. Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com> Cc: Marek Vasut <marex@denx.de> Cc: Ilya Yanok <ilya.yanok@cogentembedded.com> Cc: Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>
Diffstat (limited to 'drivers/usb/host')
-rw-r--r--drivers/usb/host/ehci-hcd.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 5b3b906..2a00389 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -819,8 +819,17 @@ int
submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
int length, int interval)
{
-
debug("dev=%p, pipe=%lu, buffer=%p, length=%d, interval=%d",
dev, pipe, buffer, length, interval);
+
+ /*
+ * Interrupt transfers requiring several transactions are not supported
+ * because bInterval is ignored.
+ */
+ if (length > usb_maxpacket(dev, pipe)) {
+ printf("%s: Interrupt transfers requiring several transactions "
+ "are not supported.\n", __func__);
+ return -1;
+ }
return ehci_submit_async(dev, pipe, buffer, length, NULL);
}