|
@@ -3144,27 +3144,19 @@ int dwc3_gadget_init(struct dwc3 *dwc)
|
|
|
|
|
|
dwc->irq_gadget = irq;
|
|
|
|
|
|
- dwc->ctrl_req = dma_alloc_coherent(dwc->sysdev, sizeof(*dwc->ctrl_req),
|
|
|
- &dwc->ctrl_req_addr, GFP_KERNEL);
|
|
|
- if (!dwc->ctrl_req) {
|
|
|
- dev_err(dwc->dev, "failed to allocate ctrl request\n");
|
|
|
- ret = -ENOMEM;
|
|
|
- goto err0;
|
|
|
- }
|
|
|
-
|
|
|
dwc->ep0_trb = dma_alloc_coherent(dwc->sysdev,
|
|
|
sizeof(*dwc->ep0_trb) * 2,
|
|
|
&dwc->ep0_trb_addr, GFP_KERNEL);
|
|
|
if (!dwc->ep0_trb) {
|
|
|
dev_err(dwc->dev, "failed to allocate ep0 trb\n");
|
|
|
ret = -ENOMEM;
|
|
|
- goto err1;
|
|
|
+ goto err0;
|
|
|
}
|
|
|
|
|
|
dwc->setup_buf = kzalloc(DWC3_EP0_BOUNCE_SIZE, GFP_KERNEL);
|
|
|
if (!dwc->setup_buf) {
|
|
|
ret = -ENOMEM;
|
|
|
- goto err2;
|
|
|
+ goto err1;
|
|
|
}
|
|
|
|
|
|
dwc->ep0_bounce = dma_alloc_coherent(dwc->sysdev,
|
|
@@ -3173,20 +3165,20 @@ int dwc3_gadget_init(struct dwc3 *dwc)
|
|
|
if (!dwc->ep0_bounce) {
|
|
|
dev_err(dwc->dev, "failed to allocate ep0 bounce buffer\n");
|
|
|
ret = -ENOMEM;
|
|
|
- goto err3;
|
|
|
+ goto err2;
|
|
|
}
|
|
|
|
|
|
dwc->zlp_buf = kzalloc(DWC3_ZLP_BUF_SIZE, GFP_KERNEL);
|
|
|
if (!dwc->zlp_buf) {
|
|
|
ret = -ENOMEM;
|
|
|
- goto err4;
|
|
|
+ goto err3;
|
|
|
}
|
|
|
|
|
|
dwc->bounce = dma_alloc_coherent(dwc->sysdev, DWC3_BOUNCE_SIZE,
|
|
|
&dwc->bounce_addr, GFP_KERNEL);
|
|
|
if (!dwc->bounce) {
|
|
|
ret = -ENOMEM;
|
|
|
- goto err5;
|
|
|
+ goto err4;
|
|
|
}
|
|
|
|
|
|
init_completion(&dwc->ep0_in_setup);
|
|
@@ -3226,38 +3218,34 @@ int dwc3_gadget_init(struct dwc3 *dwc)
|
|
|
|
|
|
ret = dwc3_gadget_init_endpoints(dwc, dwc->num_eps);
|
|
|
if (ret)
|
|
|
- goto err6;
|
|
|
+ goto err5;
|
|
|
|
|
|
ret = usb_add_gadget_udc(dwc->dev, &dwc->gadget);
|
|
|
if (ret) {
|
|
|
dev_err(dwc->dev, "failed to register udc\n");
|
|
|
- goto err6;
|
|
|
+ goto err5;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
-err6:
|
|
|
+err5:
|
|
|
dma_free_coherent(dwc->sysdev, DWC3_BOUNCE_SIZE, dwc->bounce,
|
|
|
dwc->bounce_addr);
|
|
|
|
|
|
-err5:
|
|
|
+err4:
|
|
|
kfree(dwc->zlp_buf);
|
|
|
|
|
|
-err4:
|
|
|
+err3:
|
|
|
dwc3_gadget_free_endpoints(dwc);
|
|
|
dma_free_coherent(dwc->sysdev, DWC3_EP0_BOUNCE_SIZE,
|
|
|
dwc->ep0_bounce, dwc->ep0_bounce_addr);
|
|
|
|
|
|
-err3:
|
|
|
+err2:
|
|
|
kfree(dwc->setup_buf);
|
|
|
|
|
|
-err2:
|
|
|
+err1:
|
|
|
dma_free_coherent(dwc->sysdev, sizeof(*dwc->ep0_trb) * 2,
|
|
|
dwc->ep0_trb, dwc->ep0_trb_addr);
|
|
|
|
|
|
-err1:
|
|
|
- dma_free_coherent(dwc->sysdev, sizeof(*dwc->ctrl_req),
|
|
|
- dwc->ctrl_req, dwc->ctrl_req_addr);
|
|
|
-
|
|
|
err0:
|
|
|
return ret;
|
|
|
}
|
|
@@ -3280,9 +3268,6 @@ void dwc3_gadget_exit(struct dwc3 *dwc)
|
|
|
|
|
|
dma_free_coherent(dwc->sysdev, sizeof(*dwc->ep0_trb) * 2,
|
|
|
dwc->ep0_trb, dwc->ep0_trb_addr);
|
|
|
-
|
|
|
- dma_free_coherent(dwc->sysdev, sizeof(*dwc->ctrl_req),
|
|
|
- dwc->ctrl_req, dwc->ctrl_req_addr);
|
|
|
}
|
|
|
|
|
|
int dwc3_gadget_suspend(struct dwc3 *dwc)
|