提交 ff84f0e9 编写于 作者: P Peter Chen 提交者: Greg Kroah-Hartman

Revert "usb: otg: mxs-phy: Fix mx23 operation"

The real reason causes mx23 fail are:

- Calling mxs_phy_hw_init(mxs_phy) again at connection
- Error connect/disconnect nodity at hub.c

The coming patch will fix above two problems, Mike Thompson
tested his hardware works OK after commented out this delay
setting.

This reverts commit 363366cf.
Signed-off-by: NPeter Chen <peter.chen@freescale.com>
Acked-by: NFelipe Balbi <balbi@ti.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 ba2d8ce9
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/workqueue.h>
#define DRIVER_NAME "mxs_phy" #define DRIVER_NAME "mxs_phy"
...@@ -35,16 +34,9 @@ ...@@ -35,16 +34,9 @@
#define BM_USBPHY_CTRL_ENUTMILEVEL2 BIT(14) #define BM_USBPHY_CTRL_ENUTMILEVEL2 BIT(14)
#define BM_USBPHY_CTRL_ENHOSTDISCONDETECT BIT(1) #define BM_USBPHY_CTRL_ENHOSTDISCONDETECT BIT(1)
/*
* Amount of delay in miliseconds to safely enable ENHOSTDISCONDETECT bit
* so that connection and reset processing can be completed for the root hub.
*/
#define MXY_PHY_ENHOSTDISCONDETECT_DELAY 250
struct mxs_phy { struct mxs_phy {
struct usb_phy phy; struct usb_phy phy;
struct clk *clk; struct clk *clk;
struct delayed_work enhostdiscondetect_work;
}; };
#define to_mxs_phy(p) container_of((p), struct mxs_phy, phy) #define to_mxs_phy(p) container_of((p), struct mxs_phy, phy)
...@@ -70,7 +62,6 @@ static int mxs_phy_init(struct usb_phy *phy) ...@@ -70,7 +62,6 @@ static int mxs_phy_init(struct usb_phy *phy)
clk_prepare_enable(mxs_phy->clk); clk_prepare_enable(mxs_phy->clk);
mxs_phy_hw_init(mxs_phy); mxs_phy_hw_init(mxs_phy);
INIT_DELAYED_WORK(&mxs_phy->enhostdiscondetect_work, NULL);
return 0; return 0;
} }
...@@ -85,34 +76,13 @@ static void mxs_phy_shutdown(struct usb_phy *phy) ...@@ -85,34 +76,13 @@ static void mxs_phy_shutdown(struct usb_phy *phy)
clk_disable_unprepare(mxs_phy->clk); clk_disable_unprepare(mxs_phy->clk);
} }
static void mxs_phy_enhostdiscondetect_delay(struct work_struct *ws)
{
struct mxs_phy *mxs_phy = container_of(ws, struct mxs_phy,
enhostdiscondetect_work.work);
/* Enable HOSTDISCONDETECT after delay. */
dev_dbg(mxs_phy->phy.dev, "Setting ENHOSTDISCONDETECT\n");
writel_relaxed(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
mxs_phy->phy.io_priv + HW_USBPHY_CTRL_SET);
}
static int mxs_phy_on_connect(struct usb_phy *phy, int port) static int mxs_phy_on_connect(struct usb_phy *phy, int port)
{ {
struct mxs_phy *mxs_phy = to_mxs_phy(phy);
dev_dbg(phy->dev, "Connect on port %d\n", port); dev_dbg(phy->dev, "Connect on port %d\n", port);
mxs_phy_hw_init(mxs_phy); mxs_phy_hw_init(to_mxs_phy(phy));
writel_relaxed(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
/* phy->io_priv + HW_USBPHY_CTRL_SET);
* Delay enabling ENHOSTDISCONDETECT so that connection and
* reset processing can be completed for the root hub.
*/
dev_dbg(phy->dev, "Delaying setting ENHOSTDISCONDETECT\n");
PREPARE_DELAYED_WORK(&mxs_phy->enhostdiscondetect_work,
mxs_phy_enhostdiscondetect_delay);
schedule_delayed_work(&mxs_phy->enhostdiscondetect_work,
msecs_to_jiffies(MXY_PHY_ENHOSTDISCONDETECT_DELAY));
return 0; return 0;
} }
...@@ -121,8 +91,6 @@ static int mxs_phy_on_disconnect(struct usb_phy *phy, int port) ...@@ -121,8 +91,6 @@ static int mxs_phy_on_disconnect(struct usb_phy *phy, int port)
{ {
dev_dbg(phy->dev, "Disconnect on port %d\n", port); dev_dbg(phy->dev, "Disconnect on port %d\n", port);
/* No need to delay before clearing ENHOSTDISCONDETECT. */
dev_dbg(phy->dev, "Clearing ENHOSTDISCONDETECT\n");
writel_relaxed(BM_USBPHY_CTRL_ENHOSTDISCONDETECT, writel_relaxed(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
phy->io_priv + HW_USBPHY_CTRL_CLR); phy->io_priv + HW_USBPHY_CTRL_CLR);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册