Hi,

Fabio Estevam <feste...@gmail.com> writes:
> From: Fabio Estevam <fabio.este...@nxp.com>
>
> On a mx28 board with a USB hub the following error is observed:
>
> hub 1-1:1.0: USB hub found
> hub 1-1:1.0: 2 ports detected
> usb 1-1: USB disconnect, device number 2
> usb usb1-port1: cannot reset (err = -32)
> usb usb1-port1: cannot reset (err = -32)
> usb usb1-port1: cannot reset (err = -32)
> usb usb1-port1: cannot reset (err = -32)
> usb usb1-port1: cannot reset (err = -32)
> usb usb1-port1: Cannot enable. Maybe the USB cable is bad?
>
> ,which is caused by a problem described by the MXS_PHY_ABNORMAL_IN_SUSPEND
> flag.

how about detecting that you're running on mx23/mx28 and returning
-EBUSY on your runtime_idle implementation ? You already have the basics
done for it. Care to test below and tell me whether it helps ?

modified   drivers/usb/phy/phy-mxs-usb.c
@@ -564,8 +564,23 @@ static int mxs_phy_system_resume(struct device *dev)
 }
 #endif /* CONFIG_PM_SLEEP */
 
-static SIMPLE_DEV_PM_OPS(mxs_phy_pm, mxs_phy_system_suspend,
-               mxs_phy_system_resume);
+#ifdef CONFIG_PM
+static int mxs_phy_runtime_idle(struct device *dev)
+{
+       struct mxs_phy *mxs_phy = dev_get_drvdata(dev);
+
+       if (mxs_phy->data->flags & MXS_PHY_ABNORMAL_IN_SUSPEND)
+               return -EBUSY;
+
+       return 0;
+}
+#endif /* CONFIG_PM */
+
+static const struct dev_pm_ops mxs_phy_pm = {
+       SET_SYSTEM_SLEEP_PM_OPS(mxs_phy_system_suspend,
+                       mxs_phy_system_resume)
+       SET_RUNTIME_PM_OPS(NULL, NULL, mxs_phy_runtime_idle)
+};
 
 static struct platform_driver mxs_phy_driver = {
        .probe = mxs_phy_probe,



-- 
balbi

Attachment: signature.asc
Description: PGP signature

Reply via email to