diff options
Diffstat (limited to 'drivers/usb/cdns3/host.c')
| -rw-r--r-- | drivers/usb/cdns3/host.c | 56 | 
1 files changed, 28 insertions, 28 deletions
| diff --git a/drivers/usb/cdns3/host.c b/drivers/usb/cdns3/host.c index 9643b905e2d8..6164fc4c96a4 100644 --- a/drivers/usb/cdns3/host.c +++ b/drivers/usb/cdns3/host.c @@ -24,11 +24,37 @@  #define CFG_RXDET_P3_EN		BIT(15)  #define LPM_2_STB_SWITCH_EN	BIT(25) -static int xhci_cdns3_suspend_quirk(struct usb_hcd *hcd); +static void xhci_cdns3_plat_start(struct usb_hcd *hcd) +{ +	struct xhci_hcd *xhci = hcd_to_xhci(hcd); +	u32 value; + +	/* set usbcmd.EU3S */ +	value = readl(&xhci->op_regs->command); +	value |= CMD_PM_INDEX; +	writel(value, &xhci->op_regs->command); + +	if (hcd->regs) { +		value = readl(hcd->regs + XECP_AUX_CTRL_REG1); +		value |= CFG_RXDET_P3_EN; +		writel(value, hcd->regs + XECP_AUX_CTRL_REG1); + +		value = readl(hcd->regs + XECP_PORT_CAP_REG); +		value |= LPM_2_STB_SWITCH_EN; +		writel(value, hcd->regs + XECP_PORT_CAP_REG); +	} +} + +static int xhci_cdns3_resume_quirk(struct usb_hcd *hcd) +{ +	xhci_cdns3_plat_start(hcd); +	return 0; +}  static const struct xhci_plat_priv xhci_plat_cdns3_xhci = {  	.quirks = XHCI_SKIP_PHY_INIT | XHCI_AVOID_BEI, -	.suspend_quirk = xhci_cdns3_suspend_quirk, +	.plat_start = xhci_cdns3_plat_start, +	.resume_quirk = xhci_cdns3_resume_quirk,  };  static int __cdns_host_init(struct cdns *cdns) @@ -90,32 +116,6 @@ err1:  	return ret;  } -static int xhci_cdns3_suspend_quirk(struct usb_hcd *hcd) -{ -	struct xhci_hcd	*xhci = hcd_to_xhci(hcd); -	u32 value; - -	if (pm_runtime_status_suspended(hcd->self.controller)) -		return 0; - -	/* set usbcmd.EU3S */ -	value = readl(&xhci->op_regs->command); -	value |= CMD_PM_INDEX; -	writel(value, &xhci->op_regs->command); - -	if (hcd->regs) { -		value = readl(hcd->regs + XECP_AUX_CTRL_REG1); -		value |= CFG_RXDET_P3_EN; -		writel(value, hcd->regs + XECP_AUX_CTRL_REG1); - -		value = readl(hcd->regs + XECP_PORT_CAP_REG); -		value |= LPM_2_STB_SWITCH_EN; -		writel(value, hcd->regs + XECP_PORT_CAP_REG); -	} - -	return 0; -} -  static void cdns_host_exit(struct cdns *cdns)  {  	kfree(cdns->xhci_plat_data); |