]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00171027-2 [USB_HOST]after plug in/out on the hub,host can't work
authorTony LIU <junjie.liu@freescale.com>
Fri, 30 Dec 2011 06:32:41 +0000 (14:32 +0800)
committerLothar Waßmann <LW@KARO-electronics.de>
Fri, 24 May 2013 06:33:44 +0000 (08:33 +0200)
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>
drivers/usb/host/ehci-arc.c

index bed3056993ce79f9631419497e09f8feaa2ff1ac..8db08ba50921a9e5573a7cf42d5b87d7d8d8dd41 100755 (executable)
@@ -155,6 +155,16 @@ static irqreturn_t ehci_fsl_pre_irq(int irq, void *dev)
                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;
 }