This issue will happen only when suspend bit is set but phcd is not set
The root cause of this issue is the IC defect.
- If the suspend bit is set without phcd bit set, host controller
can't resume normally
- The workaround is after set suspend bit, we need set the following
bit in USB PHY at once:
HW_USBPHY_PWD_RXPWDRX
HW_USBPHY_PWD_RXPWDDIFF
HW_USBPHY_PWD_RXPWD1PT1
HW_USBPHY_PWD_RXPWDENV
HW_USBPHY_PWD_TXPWDv2I
HW_USBPHY_PWD_TXPWDIBIAS
HW_USBPHY_PWD_TXPWDFS
- Furthermore, after resume, we must clear these bits during the K state
- IC has no plan to fix this issue
- This issue only happen on MX6Q/MX28
driver part
Signed-off-by: Tony LIU <junjie.liu@freescale.com>
pdata->wakeup_event = 0;
fsl_usb_recover_hcd(pdev);
return IRQ_HANDLED;
+ } else {
+ u32 portsc = 0;
+ struct ehci_hcd *ehci = hcd_to_ehci(hcd);
+ portsc = ehci_readl(ehci, &ehci->regs->port_status[0]);
+ /* PORT_USB11 macro is used to judge line state K*/
+ if ((PORT_USB11(portsc)) && (portsc & PORT_SUSPEND)) {
+ pdata = hcd->self.controller->platform_data;
+ if (pdata->platform_resume)
+ pdata->platform_resume(pdata);
+ }
}
return IRQ_NONE;
}