diff options
author | David S. Miller <davem@davemloft.net> | 2012-04-26 20:00:35 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-04-26 20:00:35 -0700 |
commit | 8fe5f56c8a203a7a83d1b621c369655d914f3752 (patch) | |
tree | ec865efb2d577d1e536720a28ae18b10bdbfd973 /drivers/usb/dwc3/ep0.c | |
parent | df2e7f525d88da992021b589d8a412afc15de36c (diff) | |
parent | 82b769063598d01a8b24abf250a53f8b437e09f1 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux
Conflicts:
arch/sparc/kernel/leon_smp.c
Merge mainline to get the nobootmem.c bug fix, for the sake
of the sparc64 NO_BOOTMEM conversion.
Resolve a small include line conflict in leon_smp.c
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/usb/dwc3/ep0.c')
-rw-r--r-- | drivers/usb/dwc3/ep0.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c index 25910e251c04..3584a169886f 100644 --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c @@ -353,6 +353,9 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc, dwc->test_mode_nr = wIndex >> 8; dwc->test_mode = true; + break; + default: + return -EINVAL; } break; @@ -559,15 +562,20 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc, length = trb->size & DWC3_TRB_SIZE_MASK; if (dwc->ep0_bounced) { + unsigned transfer_size = ur->length; + unsigned maxp = ep0->endpoint.maxpacket; + + transfer_size += (maxp - (transfer_size % maxp)); transferred = min_t(u32, ur->length, - ep0->endpoint.maxpacket - length); + transfer_size - length); memcpy(ur->buf, dwc->ep0_bounce, transferred); dwc->ep0_bounced = false; } else { transferred = ur->length - length; - ur->actual += transferred; } + ur->actual += transferred; + if ((epnum & 1) && ur->actual < ur->length) { /* for some reason we did not get everything out */ |