All of lore.kernel.org
 help / color / mirror / Atom feed
From: Felipe Balbi <balbi@ti.com>
To: Linux USB Mailing List <linux-usb@vger.kernel.org>
Cc: kgene.kim@samsung.com,
	Linux ARM Kernel Mailing List
	<linux-arm-kernel@lists.infradead.org>,
	linux-samsung-soc@vger.kernel.org,
	Linux OMAP Mailing List <linux-omap@vger.kernel.org>,
	w-kwok2@ti.com, Santosh Shilimkar <santosh.shilimkar@ti.com>,
	Felipe Balbi <balbi@ti.com>
Subject: [PATCH 7/7] usb: dwc3: exynos: add pm_runtime support
Date: Thu, 12 Dec 2013 15:38:45 -0600	[thread overview]
Message-ID: <1386884325-11440-8-git-send-email-balbi@ti.com> (raw)
In-Reply-To: <1386884325-11440-1-git-send-email-balbi@ti.com>

teach Exynos glue about pm_runtime so that
it's easier to teach dwc3 core about it
later.

No functional changes otherwise.

Signed-off-by: Felipe Balbi <balbi@ti.com>
---
 drivers/usb/dwc3/dwc3-exynos.c | 65 ++++++++++++++++++++++++++++++++++++------
 1 file changed, 56 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c
index 6ccfc64..c93919a 100644
--- a/drivers/usb/dwc3/dwc3-exynos.c
+++ b/drivers/usb/dwc3/dwc3-exynos.c
@@ -141,24 +141,40 @@ static int dwc3_exynos_probe(struct platform_device *pdev)
 	exynos->dev	= dev;
 	exynos->clk	= clk;
 
-	clk_prepare_enable(exynos->clk);
+	ret = clk_prepare(exynos->clk);
+	if (ret) {
+		dev_err(dev, "failed to prepare clock\n");
+		goto err2;
+	}
+
+	pm_runtime_enable(dev);
+	ret = pm_runtime_get_sync(dev);
+	if (ret) {
+		dev_err(dev, "failed to enable dwc3 device\n");
+		goto err3;
+	}
 
 	if (node) {
 		ret = of_platform_populate(node, NULL, NULL, dev);
 		if (ret) {
 			dev_err(dev, "failed to add dwc3 core\n");
-			goto err2;
+			goto err3;
 		}
 	} else {
 		dev_err(dev, "no device node, failed to add dwc3 core\n");
 		ret = -ENODEV;
-		goto err2;
+		goto err3;
 	}
 
 	return 0;
 
+err3:
+	pm_runtime_put_sync(dev);
+	pm_runtime_disable(dev);
+
 err2:
-	clk_disable_unprepare(clk);
+	clk_unprepare(clk);
+
 err1:
 	return ret;
 }
@@ -171,7 +187,9 @@ static int dwc3_exynos_remove(struct platform_device *pdev)
 	platform_device_unregister(exynos->usb2_phy);
 	platform_device_unregister(exynos->usb3_phy);
 
-	clk_disable_unprepare(exynos->clk);
+	pm_runtime_put_sync(exynos->dev);
+	pm_runtime_disable(exynos->dev);
+	clk_unprepare(exynos->clk);
 
 	return 0;
 }
@@ -184,20 +202,33 @@ static const struct of_device_id exynos_dwc3_match[] = {
 MODULE_DEVICE_TABLE(of, exynos_dwc3_match);
 #endif
 
-static int dwc3_exynos_suspend(struct device *dev)
+static int __dwc3_exynos_suspend(struct dwc3_exynos *exynos)
 {
-	struct dwc3_exynos *exynos = dev_get_drvdata(dev);
-
 	clk_disable(exynos->clk);
 
 	return 0;
 }
 
+static int __dwc3_exynos_resume(struct dwc3_exynos *exynos)
+{
+	return clk_enable(exynos->clk);
+}
+
+static int dwc3_exynos_suspend(struct device *dev)
+{
+	struct dwc3_exynos *exynos = dev_get_drvdata(dev);
+
+	return __dwc3_exynos_suspend(exynos);
+}
+
 static int dwc3_exynos_resume(struct device *dev)
 {
 	struct dwc3_exynos *exynos = dev_get_drvdata(dev);
+	int ret;
 
-	clk_enable(exynos->clk);
+	ret = __dwc3_exynos_resume(exynos);
+	if (ret)
+		return ret;
 
 	/* runtime set active to reflect active state. */
 	pm_runtime_disable(dev);
@@ -207,8 +238,24 @@ static int dwc3_exynos_resume(struct device *dev)
 	return 0;
 }
 
+static int dwc3_exynos_runtime_suspend(struct device *dev)
+{
+	struct dwc3_exynos *exynos = dev_get_drvdata(dev);
+
+	return __dwc3_exynos_suspend(exynos);
+}
+
+static int dwc3_exynos_runtime_resume(struct device *dev)
+{
+	struct dwc3_exynos *exynos = dev_get_drvdata(dev);
+
+	return __dwc3_exynos_resume(exynos);
+}
+
 static const struct dev_pm_ops dwc3_exynos_dev_pm_ops = {
 	SET_SYSTEM_SLEEP_PM_OPS(dwc3_exynos_suspend, dwc3_exynos_resume)
+	SET_RUNTIME_PM_OPS(dwc3_exynos_runtime_suspend,
+			dwc3_exynos_runtime_resume, NULL)
 };
 
 static struct platform_driver dwc3_exynos_driver = {
-- 
1.8.4.GIT

WARNING: multiple messages have this Message-ID (diff)
From: balbi@ti.com (Felipe Balbi)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 7/7] usb: dwc3: exynos: add pm_runtime support
Date: Thu, 12 Dec 2013 15:38:45 -0600	[thread overview]
Message-ID: <1386884325-11440-8-git-send-email-balbi@ti.com> (raw)
In-Reply-To: <1386884325-11440-1-git-send-email-balbi@ti.com>

teach Exynos glue about pm_runtime so that
it's easier to teach dwc3 core about it
later.

No functional changes otherwise.

Signed-off-by: Felipe Balbi <balbi@ti.com>
---
 drivers/usb/dwc3/dwc3-exynos.c | 65 ++++++++++++++++++++++++++++++++++++------
 1 file changed, 56 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c
index 6ccfc64..c93919a 100644
--- a/drivers/usb/dwc3/dwc3-exynos.c
+++ b/drivers/usb/dwc3/dwc3-exynos.c
@@ -141,24 +141,40 @@ static int dwc3_exynos_probe(struct platform_device *pdev)
 	exynos->dev	= dev;
 	exynos->clk	= clk;
 
-	clk_prepare_enable(exynos->clk);
+	ret = clk_prepare(exynos->clk);
+	if (ret) {
+		dev_err(dev, "failed to prepare clock\n");
+		goto err2;
+	}
+
+	pm_runtime_enable(dev);
+	ret = pm_runtime_get_sync(dev);
+	if (ret) {
+		dev_err(dev, "failed to enable dwc3 device\n");
+		goto err3;
+	}
 
 	if (node) {
 		ret = of_platform_populate(node, NULL, NULL, dev);
 		if (ret) {
 			dev_err(dev, "failed to add dwc3 core\n");
-			goto err2;
+			goto err3;
 		}
 	} else {
 		dev_err(dev, "no device node, failed to add dwc3 core\n");
 		ret = -ENODEV;
-		goto err2;
+		goto err3;
 	}
 
 	return 0;
 
+err3:
+	pm_runtime_put_sync(dev);
+	pm_runtime_disable(dev);
+
 err2:
-	clk_disable_unprepare(clk);
+	clk_unprepare(clk);
+
 err1:
 	return ret;
 }
@@ -171,7 +187,9 @@ static int dwc3_exynos_remove(struct platform_device *pdev)
 	platform_device_unregister(exynos->usb2_phy);
 	platform_device_unregister(exynos->usb3_phy);
 
-	clk_disable_unprepare(exynos->clk);
+	pm_runtime_put_sync(exynos->dev);
+	pm_runtime_disable(exynos->dev);
+	clk_unprepare(exynos->clk);
 
 	return 0;
 }
@@ -184,20 +202,33 @@ static const struct of_device_id exynos_dwc3_match[] = {
 MODULE_DEVICE_TABLE(of, exynos_dwc3_match);
 #endif
 
-static int dwc3_exynos_suspend(struct device *dev)
+static int __dwc3_exynos_suspend(struct dwc3_exynos *exynos)
 {
-	struct dwc3_exynos *exynos = dev_get_drvdata(dev);
-
 	clk_disable(exynos->clk);
 
 	return 0;
 }
 
+static int __dwc3_exynos_resume(struct dwc3_exynos *exynos)
+{
+	return clk_enable(exynos->clk);
+}
+
+static int dwc3_exynos_suspend(struct device *dev)
+{
+	struct dwc3_exynos *exynos = dev_get_drvdata(dev);
+
+	return __dwc3_exynos_suspend(exynos);
+}
+
 static int dwc3_exynos_resume(struct device *dev)
 {
 	struct dwc3_exynos *exynos = dev_get_drvdata(dev);
+	int ret;
 
-	clk_enable(exynos->clk);
+	ret = __dwc3_exynos_resume(exynos);
+	if (ret)
+		return ret;
 
 	/* runtime set active to reflect active state. */
 	pm_runtime_disable(dev);
@@ -207,8 +238,24 @@ static int dwc3_exynos_resume(struct device *dev)
 	return 0;
 }
 
+static int dwc3_exynos_runtime_suspend(struct device *dev)
+{
+	struct dwc3_exynos *exynos = dev_get_drvdata(dev);
+
+	return __dwc3_exynos_suspend(exynos);
+}
+
+static int dwc3_exynos_runtime_resume(struct device *dev)
+{
+	struct dwc3_exynos *exynos = dev_get_drvdata(dev);
+
+	return __dwc3_exynos_resume(exynos);
+}
+
 static const struct dev_pm_ops dwc3_exynos_dev_pm_ops = {
 	SET_SYSTEM_SLEEP_PM_OPS(dwc3_exynos_suspend, dwc3_exynos_resume)
+	SET_RUNTIME_PM_OPS(dwc3_exynos_runtime_suspend,
+			dwc3_exynos_runtime_resume, NULL)
 };
 
 static struct platform_driver dwc3_exynos_driver = {
-- 
1.8.4.GIT

  parent reply	other threads:[~2013-12-12 21:38 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-12 21:38 [PATCH 0/7] usb: dwc3: pm_runtime implementation Felipe Balbi
2013-12-12 21:38 ` Felipe Balbi
2013-12-12 21:38 ` [PATCH 1/7] usb: dwc3: keystone: add basic PM support Felipe Balbi
2013-12-12 21:38   ` Felipe Balbi
2013-12-12 21:43   ` Felipe Balbi
2013-12-12 21:43     ` Felipe Balbi
2013-12-12 21:45     ` [PATCH v2 " Felipe Balbi
2013-12-12 21:45       ` Felipe Balbi
2013-12-12 21:48       ` Felipe Balbi
2013-12-12 21:48         ` Felipe Balbi
2013-12-13  0:29       ` Santosh Shilimkar
2013-12-13  0:29         ` Santosh Shilimkar
2013-12-13  0:43         ` Felipe Balbi
2013-12-13  0:43           ` Felipe Balbi
2013-12-13 23:15           ` Santosh Shilimkar
2013-12-13 23:15             ` Santosh Shilimkar
     [not found]         ` <52AA54E4.5000606-l0cyMroinI0@public.gmane.org>
2013-12-13 16:04           ` Kwok, WingMan
2013-12-13 16:04             ` Kwok, WingMan
2013-12-13 19:54             ` Felipe Balbi
2013-12-13 19:54               ` Felipe Balbi
2013-12-13 20:18               ` Kwok, WingMan
2013-12-13 20:18                 ` Kwok, WingMan
2013-12-13 20:22                 ` Felipe Balbi
2013-12-13 20:22                   ` Felipe Balbi
2013-12-13 21:26                   ` Kwok, WingMan
2013-12-13 21:26                     ` Kwok, WingMan
2013-12-12 21:38 ` [PATCH 2/7] usb: dwc3: omap: add basic pm_runtime support Felipe Balbi
2013-12-12 21:38   ` Felipe Balbi
2013-12-12 21:38 ` [PATCH 4/7] usb: dwc3: omap: fix pm_runtime usage Felipe Balbi
2013-12-12 21:38   ` Felipe Balbi
     [not found] ` <1386884325-11440-1-git-send-email-balbi-l0cyMroinI0@public.gmane.org>
2013-12-12 21:38   ` [PATCH 3/7] usb: dwc3: pci: add pm_runtime support Felipe Balbi
2013-12-12 21:38     ` Felipe Balbi
2013-12-13  1:56     ` David Cohen
2013-12-13  1:56       ` David Cohen
2013-12-13  4:17       ` Felipe Balbi
2013-12-13  4:17         ` Felipe Balbi
2013-12-13  4:29         ` David Cohen
2013-12-13  4:29           ` David Cohen
2013-12-12 21:38   ` [PATCH 5/7] usb: dwc3: omap: fix order of pm_runtime vs child removal Felipe Balbi
2013-12-12 21:38     ` Felipe Balbi
2013-12-17 23:31   ` [PATCH 0/7] usb: dwc3: pm_runtime implementation David Cohen
2013-12-17 23:31     ` David Cohen
2013-12-17 23:35     ` David Cohen
2013-12-17 23:35       ` David Cohen
2013-12-18 15:36       ` Felipe Balbi
2013-12-18 15:36         ` Felipe Balbi
2013-12-18 15:40         ` Felipe Balbi
2013-12-18 15:40           ` Felipe Balbi
2013-12-12 21:38 ` [PATCH 6/7] usb: dwc3: exynos: remove DEV_PM_OPS hackery Felipe Balbi
2013-12-12 21:38   ` Felipe Balbi
2013-12-12 21:38 ` Felipe Balbi [this message]
2013-12-12 21:38   ` [PATCH 7/7] usb: dwc3: exynos: add pm_runtime support Felipe Balbi
2013-12-13  5:01   ` Anton Tikhomirov
2013-12-13  5:01     ` Anton Tikhomirov
2013-12-13 19:56     ` Felipe Balbi
2013-12-13 19:56       ` Felipe Balbi
2013-12-13 20:18       ` Felipe Balbi
2013-12-13 20:18         ` Felipe Balbi
2013-12-16  2:47         ` Anton Tikhomirov
2013-12-16  2:47           ` Anton Tikhomirov
     [not found]       ` <20131213195618.GG5292-HgARHv6XitL9zxVx7UNMDg@public.gmane.org>
2013-12-16  2:31         ` Anton Tikhomirov
2013-12-16  2:31           ` Anton Tikhomirov

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=1386884325-11440-8-git-send-email-balbi@ti.com \
    --to=balbi@ti.com \
    --cc=kgene.kim@samsung.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=santosh.shilimkar@ti.com \
    --cc=w-kwok2@ti.com \
    /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.