int exynos_xhci_bus_resume(struct usb_hcd *hcd) { /* When suspend is failed, re-enable clocks & PHY */ pm_runtime_resume(hcd->self.controller); return xhci_bus_resume(hcd); }
static int xhci_dwc_bus_resume(struct usb_hcd *hcd) { int ret; /* before resume bus, delay 1ms to waiting core stable */ mdelay(1); ret = xhci_bus_resume(hcd); return ret; }
int comcerto_xhci_bus_resume(struct usb_hcd *hcd) { int val; int error_status = 0; if (!usb3_suspended) { pr_err("comcerto_xhci_bus_resume: USB 3.0 Already in Resume state \n"); return error_status; } /* Enable the Clock */ if (clk_enable(usb3_clk)){ pr_err("comcerto_start_xhc:Unable to enable the usb1 clock \n"); } /* Bring usb3 PHY out of reset */ c2000_block_reset(COMPONENT_USB1_PHY, 0); for (val = 0 ; val < 50 ; val++) udelay(1000); /* Bring usb3 UTMI out of reset */ c2000_block_reset(COMPONENT_UTMI_USB1, 0); for (val = 0 ; val < 50 ; val++) udelay(1000); error_status = xhci_bus_resume(hcd); if (error_status) { /* xhci_bus_resume is not successfull keep USB3 in suspend mode */ /* Put USB3 PHY, UTMI and Controller in Reset */ /* APPLYING THE RESET TO USB3 UTMI */ c2000_block_reset(COMPONENT_UTMI_USB1, 1); /* APPLYING THE RESET TO USB3 PHY */ c2000_block_reset(COMPONENT_USB1_PHY, 1); /* Disable the Clock */ clk_disable(usb3_clk); return error_status; } usb3_suspended = 0; return error_status; }