Re: [PATCH v5 1/4] Revert "usb: otg: mxs-phy: Fix mx23 operation"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Mon, Oct 22, 2012 at 03:13:09PM +0800, Peter Chen wrote:
> 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 363366cf61c544ea476f3d220f43a95cb03014f5.
> 
> Signed-off-by: Peter Chen <peter.chen@xxxxxxxxxxxxx>

I can't really take this series because it touches usbcore. So I rather
Greg took care of the entire series:

Acked-by: Felipe Balbi <balbi@xxxxxx>

> ---
>  drivers/usb/otg/mxs-phy.c |   38 +++-----------------------------------
>  1 files changed, 3 insertions(+), 35 deletions(-)
> 
> diff --git a/drivers/usb/otg/mxs-phy.c b/drivers/usb/otg/mxs-phy.c
> index 88db976..c1a67cb 100644
> --- a/drivers/usb/otg/mxs-phy.c
> +++ b/drivers/usb/otg/mxs-phy.c
> @@ -20,7 +20,6 @@
>  #include <linux/delay.h>
>  #include <linux/err.h>
>  #include <linux/io.h>
> -#include <linux/workqueue.h>
>  
>  #define DRIVER_NAME "mxs_phy"
>  
> @@ -35,16 +34,9 @@
>  #define BM_USBPHY_CTRL_ENUTMILEVEL2		BIT(14)
>  #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 usb_phy phy;
>  	struct clk *clk;
> -	struct delayed_work enhostdiscondetect_work;
>  };
>  
>  #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)
>  
>  	clk_prepare_enable(mxs_phy->clk);
>  	mxs_phy_hw_init(mxs_phy);
> -	INIT_DELAYED_WORK(&mxs_phy->enhostdiscondetect_work, NULL);
>  
>  	return 0;
>  }
> @@ -85,34 +76,13 @@ static void mxs_phy_shutdown(struct usb_phy *phy)
>  	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)
>  {
> -	struct mxs_phy *mxs_phy = to_mxs_phy(phy);
> -
>  	dev_dbg(phy->dev, "Connect on port %d\n", port);
>  
> -	mxs_phy_hw_init(mxs_phy);
> -
> -	/*
> -	 * 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));
> +	mxs_phy_hw_init(to_mxs_phy(phy));
> +	writel_relaxed(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
> +			phy->io_priv + HW_USBPHY_CTRL_SET);
>  
>  	return 0;
>  }
> @@ -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);
>  
> -	/* No need to delay before clearing ENHOSTDISCONDETECT. */
> -	dev_dbg(phy->dev, "Clearing ENHOSTDISCONDETECT\n");
>  	writel_relaxed(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
>  			phy->io_priv + HW_USBPHY_CTRL_CLR);
>  
> -- 
> 1.7.0.4
> 
> 

-- 
balbi

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux