All of lore.kernel.org
 help / color / mirror / Atom feed
From: peter.chen@freescale.com (Peter Chen)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 05/12] usb: phy-mxs: Add implementation of nofity_suspend and notify_resume
Date: Sat, 12 Oct 2013 17:09:39 +0800	[thread overview]
Message-ID: <1381568986-19802-6-git-send-email-peter.chen@freescale.com> (raw)
In-Reply-To: <1381568986-19802-1-git-send-email-peter.chen@freescale.com>

Add notify_suspend and notify_resume according to different SoCs.

Signed-off-by: Peter Chen <peter.chen@freescale.com>
---
 drivers/usb/phy/phy-mxs-usb.c |   73 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 73 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
index e0b0de0..8661dae 100644
--- a/drivers/usb/phy/phy-mxs-usb.c
+++ b/drivers/usb/phy/phy-mxs-usb.c
@@ -197,6 +197,78 @@ static int mxs_phy_on_disconnect(struct usb_phy *phy,
 	return 0;
 }
 
+static int mxs_phy_on_suspend_workaround(struct usb_phy *phy,
+		enum usb_device_speed speed)
+{
+	dev_dbg(phy->dev, "%s speed device has suspended\n",
+		(speed == USB_SPEED_HIGH) ? "high" : "non-high");
+
+	/* delay 4ms to wait bus entering idle */
+	usleep_range(4000, 5000);
+
+	/*
+	 * Workaround for wakeup signal between portsc.suspendM
+	 * and PHY enters low power mode.
+	 */
+	writel_relaxed(0xffffffff, phy->io_priv + HW_USBPHY_PWD);
+	writel_relaxed(0, phy->io_priv + HW_USBPHY_PWD);
+
+	if (speed == USB_SPEED_HIGH)
+		writel_relaxed(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
+				phy->io_priv + HW_USBPHY_CTRL_CLR);
+
+	return 0;
+}
+
+static int mxs_phy_on_suspend(struct usb_phy *phy,
+		enum usb_device_speed speed)
+{
+	dev_dbg(phy->dev, "%s speed device has suspended\n",
+		(speed == USB_SPEED_HIGH) ? "high" : "non-high");
+
+	if (speed == USB_SPEED_HIGH)
+		writel_relaxed(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
+				phy->io_priv + HW_USBPHY_CTRL_CLR);
+
+	return 0;
+}
+
+/*
+ * The resume signal must be finished here.
+ */
+static int mxs_phy_on_resume(struct usb_phy *phy,
+		enum usb_device_speed speed)
+{
+	dev_dbg(phy->dev, "%s speed device has resumed\n",
+		(speed == USB_SPEED_HIGH) ? "high" : "non-high");
+
+	if (speed == USB_SPEED_HIGH) {
+		/* Make sure the device has switched to High-Speed mode */
+		udelay(500);
+		writel_relaxed(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
+				phy->io_priv + HW_USBPHY_CTRL_SET);
+	}
+
+	return 0;
+}
+
+/*
+ * For mxs PHY, there are two PHY issues related to suspend/resume.
+ * For mx23 and mx28, both of two issues are existed.
+ * For mx6q and mx6dl, only one issue is existed.
+ * For mx6 sololite, none issue is existed.
+ */
+static void mxs_phy_workaround(struct mxs_phy *mxs_phy)
+{
+	if (is_mx23_phy(mxs_phy)) {
+		mxs_phy->phy.notify_suspend = mxs_phy_on_suspend_workaround;
+		mxs_phy->phy.notify_resume = mxs_phy_on_resume;
+	} else if (is_mx6q_phy(mxs_phy)) {
+		mxs_phy->phy.notify_suspend = mxs_phy_on_suspend;
+		mxs_phy->phy.notify_resume = mxs_phy_on_resume;
+	}
+}
+
 static int mxs_phy_probe(struct platform_device *pdev)
 {
 	struct resource *res;
@@ -257,6 +329,7 @@ static int mxs_phy_probe(struct platform_device *pdev)
 
 	mxs_phy->clk = clk;
 	mxs_phy->devtype = pdev->id_entry->driver_data;
+	mxs_phy_workaround(mxs_phy);
 
 	platform_set_drvdata(pdev, &mxs_phy->phy);
 
-- 
1.7.1

  parent reply	other threads:[~2013-10-12  9:09 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-12  9:09 [PATCH 00/12] Add power management support for MXS PHY Peter Chen
2013-10-12  9:09 ` [PATCH 01/12] usb: phy-mxs: Add auto clock and power setting Peter Chen
2013-10-12  9:09 ` [PATCH 02/12] usb: phy-mxs: Enable IC fixes for mx6 SoC serial Peter Chen
2013-10-12  9:38   ` Marek Vasut
2013-10-14  1:31     ` Peter Chen
2013-10-14  2:07       ` Marek Vasut
2013-10-14  1:58         ` Peter Chen
2013-10-14  9:09   ` Shawn Guo
2013-10-14  9:09     ` Peter Chen
2013-10-14  9:29       ` Shawn Guo
2013-10-14  9:16         ` Peter Chen
2013-10-12  9:09 ` [PATCH 03/12] usb: phy-mxs: Add anatop regmap Peter Chen
2013-10-12  9:09 ` [PATCH 04/12] usb: phy: add notify suspend and resume callback Peter Chen
2013-10-12  9:09 ` Peter Chen [this message]
2013-10-12  9:42   ` [PATCH 05/12] usb: phy-mxs: Add implementation of nofity_suspend and notify_resume Marek Vasut
2013-10-14  1:36     ` Peter Chen
2013-10-14  2:08       ` Marek Vasut
2013-10-12  9:09 ` [PATCH 06/12] usb: phy: Add set_wakeup API Peter Chen
2013-10-12  9:09 ` [PATCH 07/12] usb: phy-mxs: Add implementation of set_wakeup Peter Chen
2013-10-12  9:44   ` Marek Vasut
2013-10-14  1:41     ` Peter Chen
2013-10-12  9:09 ` [PATCH 08/12] usb: phy-mxs: Add system suspend/resume API Peter Chen
2013-10-12  9:09 ` [PATCH 09/12] usb: phy-mxs: update binding for adding anatop phandle Peter Chen
2013-10-14  9:22   ` Shawn Guo
2013-10-14  9:10     ` Peter Chen
2013-10-12  9:09 ` [PATCH 10/12] ARM: dts: imx6: add anatop phandle for usbphy Peter Chen
2013-10-12  9:09 ` [PATCH 11/12] usb: phy-mxs: update binding for adding disconnect line property Peter Chen
2013-10-12  9:47   ` Marek Vasut
2013-10-14  1:44     ` Peter Chen
2013-10-12 15:05   ` Thomas Petazzoni
2013-10-14  1:45     ` Peter Chen
2013-10-12  9:09 ` [PATCH 12/12] ARM: dts: imx6: Add disconnect_line_without_vbus property for usbphy Peter Chen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1381568986-19802-6-git-send-email-peter.chen@freescale.com \
    --to=peter.chen@freescale.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.