|
@@ -3021,6 +3021,13 @@ int dwc3_gadget_init(struct dwc3 *dwc)
|
|
|
goto err4;
|
|
|
}
|
|
|
|
|
|
+ dwc->bounce = dma_alloc_coherent(dwc->sysdev, DWC3_BOUNCE_SIZE,
|
|
|
+ &dwc->bounce_addr, GFP_KERNEL);
|
|
|
+ if (!dwc->bounce) {
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto err5;
|
|
|
+ }
|
|
|
+
|
|
|
init_completion(&dwc->ep0_in_setup);
|
|
|
|
|
|
dwc->gadget.ops = &dwc3_gadget_ops;
|
|
@@ -3064,15 +3071,18 @@ int dwc3_gadget_init(struct dwc3 *dwc)
|
|
|
|
|
|
ret = dwc3_gadget_init_endpoints(dwc);
|
|
|
if (ret)
|
|
|
- goto err5;
|
|
|
+ goto err6;
|
|
|
|
|
|
ret = usb_add_gadget_udc(dwc->dev, &dwc->gadget);
|
|
|
if (ret) {
|
|
|
dev_err(dwc->dev, "failed to register udc\n");
|
|
|
- goto err5;
|
|
|
+ goto err6;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
+err6:
|
|
|
+ dma_free_coherent(dwc->sysdev, DWC3_BOUNCE_SIZE, dwc->bounce,
|
|
|
+ dwc->bounce_addr);
|
|
|
|
|
|
err5:
|
|
|
kfree(dwc->zlp_buf);
|
|
@@ -3105,6 +3115,8 @@ void dwc3_gadget_exit(struct dwc3 *dwc)
|
|
|
|
|
|
dwc3_gadget_free_endpoints(dwc);
|
|
|
|
|
|
+ dma_free_coherent(dwc->sysdev, DWC3_BOUNCE_SIZE, dwc->bounce,
|
|
|
+ dwc->bounce_addr);
|
|
|
dma_free_coherent(dwc->sysdev, DWC3_EP0_BOUNCE_SIZE,
|
|
|
dwc->ep0_bounce, dwc->ep0_bounce_addr);
|
|
|
|