diff options
Diffstat (limited to 'drivers/usb/gadget/arcotg_udc.c')
-rw-r--r-- | drivers/usb/gadget/arcotg_udc.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/drivers/usb/gadget/arcotg_udc.c b/drivers/usb/gadget/arcotg_udc.c index 142a61585898..0b5c8b66256d 100644 --- a/drivers/usb/gadget/arcotg_udc.c +++ b/drivers/usb/gadget/arcotg_udc.c @@ -320,6 +320,7 @@ static void dr_phy_low_power_mode(struct fsl_udc *udc, bool enable) struct fsl_usb2_platform_data *pdata = udc->pdata; u32 portsc; + pdata->lowpower = enable; if (pdata && pdata->phy_lowpower_suspend) { pdata->phy_lowpower_suspend(pdata, enable); } else { @@ -333,7 +334,6 @@ static void dr_phy_low_power_mode(struct fsl_udc *udc, bool enable) fsl_writel(portsc, &dr_regs->portsc1); } } - pdata->lowpower = enable; } @@ -3120,9 +3120,6 @@ static int udc_suspend(struct fsl_udc *udc) else dr_wake_up_enable(udc, true); } - mode = fsl_readl(&dr_regs->usbmode) & USB_MODE_CTRL_MODE_MASK; - usbcmd = fsl_readl(&dr_regs->usbcmd); - /* * If the controller is already stopped, then this must be a * PM suspend. Remember this fact, so that we will leave the @@ -3133,6 +3130,8 @@ static int udc_suspend(struct fsl_udc *udc) goto out; } + mode = fsl_readl(&dr_regs->usbmode) & USB_MODE_CTRL_MODE_MASK; + usbcmd = fsl_readl(&dr_regs->usbcmd); if (mode != USB_MODE_CTRL_MODE_DEVICE) { printk(KERN_DEBUG "gadget not in device mode, leaving early\n"); goto out; @@ -3154,7 +3153,7 @@ static int udc_suspend(struct fsl_udc *udc) * In that case, the usb device can be remained on suspend state * and the dp will not be changed. */ - if (!(fsl_readl(&dr_regs->otgsc) & OTGSC_B_SESSION_VALID)) { + if (!(fsl_readl(&dr_regs->otgsc) & OTGSC_A_BUS_VALID)) { /* stop the controller */ usbcmd = fsl_readl(&dr_regs->usbcmd) & ~USB_CMD_RUN_STOP; fsl_writel(usbcmd, &dr_regs->usbcmd); @@ -3163,9 +3162,16 @@ static int udc_suspend(struct fsl_udc *udc) dr_phy_low_power_mode(udc, true); printk(KERN_DEBUG "USB Gadget suspend ends\n"); out: + if (udc->suspended > 1) { + pr_warning( + "It's the case usb device is on otg port and the gadget driver" + "is loaded during boots up\n" + "So, do not increase suspended counter Or there is a error, " + "please debug it !!! \n" + ); + return 0; + } udc->suspended++; - if (udc->suspended > 2) - printk(KERN_ERR "ERROR: suspended times > 2\n"); return 0; } @@ -3177,6 +3183,8 @@ out: static int fsl_udc_suspend(struct platform_device *pdev, pm_message_t state) { int ret; + pr_debug("%s(): stopped %d suspended %d\n", __func__, + udc_controller->stopped, udc_controller->suspended); #ifdef CONFIG_USB_OTG if (udc_controller->transceiver->gadget == NULL) return 0; |