| From ec6d67e39f5638c792eb7490bf32586ccb9d8005 Mon Sep 17 00:00:00 2001 |
| From: Alan Stern <stern@rowland.harvard.edu> |
| Date: Mon, 29 Jun 2009 14:34:59 -0400 |
| Subject: USB: EHCI: report actual_length for iso transfers |
| |
| From: Alan Stern <stern@rowland.harvard.edu> |
| |
| commit ec6d67e39f5638c792eb7490bf32586ccb9d8005 upstream. |
| |
| This patch (as1259b) makes ehci-hcd return the total number of bytes |
| transferred in urb->actual_length for Isochronous transfers. |
| Until now, the actual_length value was unaccountably left at 0. |
| |
| Signed-off-by: Alan Stern <stern@rowland.harvard.edu> |
| Acked-by: David Brownell <dbrownell@users.sourceforge.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/usb/host/ehci-sched.c | 12 ++++++++---- |
| 1 file changed, 8 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/usb/host/ehci-sched.c |
| +++ b/drivers/usb/host/ehci-sched.c |
| @@ -1617,11 +1617,14 @@ itd_complete ( |
| desc->status = -EPROTO; |
| |
| /* HC need not update length with this error */ |
| - if (!(t & EHCI_ISOC_BABBLE)) |
| - desc->actual_length = EHCI_ITD_LENGTH (t); |
| + if (!(t & EHCI_ISOC_BABBLE)) { |
| + desc->actual_length = EHCI_ITD_LENGTH(t); |
| + urb->actual_length += desc->actual_length; |
| + } |
| } else if (likely ((t & EHCI_ISOC_ACTIVE) == 0)) { |
| desc->status = 0; |
| - desc->actual_length = EHCI_ITD_LENGTH (t); |
| + desc->actual_length = EHCI_ITD_LENGTH(t); |
| + urb->actual_length += desc->actual_length; |
| } else { |
| /* URB was too late */ |
| desc->status = -EXDEV; |
| @@ -2012,7 +2015,8 @@ sitd_complete ( |
| desc->status = -EPROTO; |
| } else { |
| desc->status = 0; |
| - desc->actual_length = desc->length - SITD_LENGTH (t); |
| + desc->actual_length = desc->length - SITD_LENGTH(t); |
| + urb->actual_length += desc->actual_length; |
| } |
| stream->depth -= stream->interval << 3; |
| |