diff options
| author | Benoît Thébaudeau <benoit.thebaudeau@advansee.com> | 2012-08-09 23:50:44 +0200 | 
|---|---|---|
| committer | Marek Vasut <marex@denx.de> | 2012-09-01 16:21:51 +0200 | 
| commit | 44ae0be7461f0ac72fa53b1a5bcd03c26e1d4fb1 (patch) | |
| tree | 5fabb72f12c7c41100b35ea18b22b8cc1ca1aa54 | |
| parent | 93a1ab57f340b890e9e5b48b143869bc063d625f (diff) | |
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>
| -rw-r--r-- | drivers/usb/host/ehci-hcd.c | 11 | 
1 files changed, 10 insertions, 1 deletions
| diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 5b3b9062f79..2a0038931f0 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);  } | 
