|
@@ -2943,60 +2943,40 @@ void dwc3_gadget_exit(struct dwc3 *dwc)
|
|
|
|
|
|
int dwc3_gadget_suspend(struct dwc3 *dwc)
|
|
|
{
|
|
|
+ int ret;
|
|
|
+
|
|
|
if (!dwc->gadget_driver)
|
|
|
return 0;
|
|
|
|
|
|
- if (dwc->pullups_connected) {
|
|
|
- dwc3_gadget_disable_irq(dwc);
|
|
|
- dwc3_gadget_run_stop(dwc, true, true);
|
|
|
- }
|
|
|
-
|
|
|
- __dwc3_gadget_ep_disable(dwc->eps[0]);
|
|
|
- __dwc3_gadget_ep_disable(dwc->eps[1]);
|
|
|
+ ret = dwc3_gadget_run_stop(dwc, false, false);
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
|
|
|
- dwc->dcfg = dwc3_readl(dwc->regs, DWC3_DCFG);
|
|
|
+ dwc3_disconnect_gadget(dwc);
|
|
|
+ __dwc3_gadget_stop(dwc);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
int dwc3_gadget_resume(struct dwc3 *dwc)
|
|
|
{
|
|
|
- struct dwc3_ep *dep;
|
|
|
int ret;
|
|
|
|
|
|
if (!dwc->gadget_driver)
|
|
|
return 0;
|
|
|
|
|
|
- /* Start with SuperSpeed Default */
|
|
|
- dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512);
|
|
|
-
|
|
|
- dep = dwc->eps[0];
|
|
|
- ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false,
|
|
|
- false);
|
|
|
- if (ret)
|
|
|
+ ret = __dwc3_gadget_start(dwc);
|
|
|
+ if (ret < 0)
|
|
|
goto err0;
|
|
|
|
|
|
- dep = dwc->eps[1];
|
|
|
- ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false,
|
|
|
- false);
|
|
|
- if (ret)
|
|
|
+ ret = dwc3_gadget_run_stop(dwc, true, false);
|
|
|
+ if (ret < 0)
|
|
|
goto err1;
|
|
|
|
|
|
- /* begin to receive SETUP packets */
|
|
|
- dwc->ep0state = EP0_SETUP_PHASE;
|
|
|
- dwc3_ep0_out_start(dwc);
|
|
|
-
|
|
|
- dwc3_writel(dwc->regs, DWC3_DCFG, dwc->dcfg);
|
|
|
-
|
|
|
- if (dwc->pullups_connected) {
|
|
|
- dwc3_gadget_enable_irq(dwc);
|
|
|
- dwc3_gadget_run_stop(dwc, true, false);
|
|
|
- }
|
|
|
-
|
|
|
return 0;
|
|
|
|
|
|
err1:
|
|
|
- __dwc3_gadget_ep_disable(dwc->eps[0]);
|
|
|
+ __dwc3_gadget_stop(dwc);
|
|
|
|
|
|
err0:
|
|
|
return ret;
|