diff options
| author | Tony Lindgren <tony@atomide.com> | 2012-09-21 16:48:01 -0400 |
|---|---|---|
| committer | Tony Lindgren <tony@atomide.com> | 2012-09-21 16:48:01 -0400 |
| commit | 0c9de3c52d2baed6bc2ee44885adb418152c71c4 (patch) | |
| tree | e19ab2c41ae47250fd614418022b32aa783aa563 /drivers/usb/dwc3 | |
| parent | 6bfc82ff589a00e5fbc12b958c649d703d273c86 (diff) | |
| parent | 3c7c5dab44d6c8861bc86dab924353d8d40344f8 (diff) | |
Merge branch 'for_3.7/omap5_arch_timer' of git://github.com/SantoshShilimkar/linux into devel-dt-arch-timer
Conflicts:
arch/arm/mach-omap2/timer.c
Diffstat (limited to 'drivers/usb/dwc3')
| -rw-r--r-- | drivers/usb/dwc3/core.c | 9 | ||||
| -rw-r--r-- | drivers/usb/dwc3/ep0.c | 1 | ||||
| -rw-r--r-- | drivers/usb/dwc3/gadget.c | 19 |
3 files changed, 24 insertions, 5 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index c34452a7304f..a68ff53124dc 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c | |||
| @@ -436,16 +436,21 @@ static int __devinit dwc3_probe(struct platform_device *pdev) | |||
| 436 | dev_err(dev, "missing IRQ\n"); | 436 | dev_err(dev, "missing IRQ\n"); |
| 437 | return -ENODEV; | 437 | return -ENODEV; |
| 438 | } | 438 | } |
| 439 | dwc->xhci_resources[1] = *res; | 439 | dwc->xhci_resources[1].start = res->start; |
| 440 | dwc->xhci_resources[1].end = res->end; | ||
| 441 | dwc->xhci_resources[1].flags = res->flags; | ||
| 442 | dwc->xhci_resources[1].name = res->name; | ||
| 440 | 443 | ||
| 441 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 444 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| 442 | if (!res) { | 445 | if (!res) { |
| 443 | dev_err(dev, "missing memory resource\n"); | 446 | dev_err(dev, "missing memory resource\n"); |
| 444 | return -ENODEV; | 447 | return -ENODEV; |
| 445 | } | 448 | } |
| 446 | dwc->xhci_resources[0] = *res; | 449 | dwc->xhci_resources[0].start = res->start; |
| 447 | dwc->xhci_resources[0].end = dwc->xhci_resources[0].start + | 450 | dwc->xhci_resources[0].end = dwc->xhci_resources[0].start + |
| 448 | DWC3_XHCI_REGS_END; | 451 | DWC3_XHCI_REGS_END; |
| 452 | dwc->xhci_resources[0].flags = res->flags; | ||
| 453 | dwc->xhci_resources[0].name = res->name; | ||
| 449 | 454 | ||
| 450 | /* | 455 | /* |
| 451 | * Request memory region but exclude xHCI regs, | 456 | * Request memory region but exclude xHCI regs, |
diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c index 9b94886b66e5..e4d5ca86b9da 100644 --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c | |||
| @@ -720,7 +720,6 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc, | |||
| 720 | transferred = min_t(u32, ur->length, | 720 | transferred = min_t(u32, ur->length, |
| 721 | transfer_size - length); | 721 | transfer_size - length); |
| 722 | memcpy(ur->buf, dwc->ep0_bounce, transferred); | 722 | memcpy(ur->buf, dwc->ep0_bounce, transferred); |
| 723 | dwc->ep0_bounced = false; | ||
| 724 | } else { | 723 | } else { |
| 725 | transferred = ur->length - length; | 724 | transferred = ur->length - length; |
| 726 | } | 725 | } |
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 58fdfad96b4d..c2813c2b005a 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c | |||
| @@ -263,8 +263,11 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, | |||
| 263 | if (req->request.status == -EINPROGRESS) | 263 | if (req->request.status == -EINPROGRESS) |
| 264 | req->request.status = status; | 264 | req->request.status = status; |
| 265 | 265 | ||
| 266 | usb_gadget_unmap_request(&dwc->gadget, &req->request, | 266 | if (dwc->ep0_bounced && dep->number == 0) |
| 267 | req->direction); | 267 | dwc->ep0_bounced = false; |
| 268 | else | ||
| 269 | usb_gadget_unmap_request(&dwc->gadget, &req->request, | ||
| 270 | req->direction); | ||
| 268 | 271 | ||
| 269 | dev_dbg(dwc->dev, "request %p from %s completed %d/%d ===> %d\n", | 272 | dev_dbg(dwc->dev, "request %p from %s completed %d/%d ===> %d\n", |
| 270 | req, dep->name, req->request.actual, | 273 | req, dep->name, req->request.actual, |
| @@ -1026,6 +1029,7 @@ static void __dwc3_gadget_start_isoc(struct dwc3 *dwc, | |||
| 1026 | if (list_empty(&dep->request_list)) { | 1029 | if (list_empty(&dep->request_list)) { |
| 1027 | dev_vdbg(dwc->dev, "ISOC ep %s run out for requests.\n", | 1030 | dev_vdbg(dwc->dev, "ISOC ep %s run out for requests.\n", |
| 1028 | dep->name); | 1031 | dep->name); |
| 1032 | dep->flags |= DWC3_EP_PENDING_REQUEST; | ||
| 1029 | return; | 1033 | return; |
| 1030 | } | 1034 | } |
| 1031 | 1035 | ||
| @@ -1089,6 +1093,17 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req) | |||
| 1089 | if (dep->flags & DWC3_EP_PENDING_REQUEST) { | 1093 | if (dep->flags & DWC3_EP_PENDING_REQUEST) { |
| 1090 | int ret; | 1094 | int ret; |
| 1091 | 1095 | ||
| 1096 | /* | ||
| 1097 | * If xfernotready is already elapsed and it is a case | ||
| 1098 | * of isoc transfer, then issue END TRANSFER, so that | ||
| 1099 | * you can receive xfernotready again and can have | ||
| 1100 | * notion of current microframe. | ||
| 1101 | */ | ||
| 1102 | if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { | ||
| 1103 | dwc3_stop_active_transfer(dwc, dep->number); | ||
| 1104 | return 0; | ||
| 1105 | } | ||
| 1106 | |||
| 1092 | ret = __dwc3_gadget_kick_transfer(dep, 0, true); | 1107 | ret = __dwc3_gadget_kick_transfer(dep, 0, true); |
| 1093 | if (ret && ret != -EBUSY) { | 1108 | if (ret && ret != -EBUSY) { |
| 1094 | struct dwc3 *dwc = dep->dwc; | 1109 | struct dwc3 *dwc = dep->dwc; |
