All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2 v2] ASoC: sh: fsi: Add runtime PM support
@ 2009-11-09  2:54 Kuninori Morimoto
  2009-11-09 10:58   ` [alsa-devel] " Mark Brown
  0 siblings, 1 reply; 44+ messages in thread
From: Kuninori Morimoto @ 2009-11-09  2:54 UTC (permalink / raw)
  To: Mark Brown; +Cc: alsa-devel

This patch add support runtime PM.
Driver callbacks for Runtime PM are empty because
the device registers are always re-initialized after
pm_runtime_get_sync(). The Runtime PM functions replaces the
clock framework module stop bit handling in this driver.

Signed-off-by: Kuninori Morimoto <morimoto.kuninori@renesas.com>
---
v1 -> v2

o add pm_runtime_disable if failed

 sound/soc/sh/fsi.c |   40 ++++++++++++++++++++++++++--------------
 1 files changed, 26 insertions(+), 14 deletions(-)

diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index e1a3d1a..e2f70ac 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -17,7 +17,7 @@
 #include <linux/platform_device.h>
 #include <linux/delay.h>
 #include <linux/list.h>
-#include <linux/clk.h>
+#include <linux/pm_runtime.h>
 #include <linux/io.h>
 #include <sound/core.h>
 #include <sound/pcm.h>
@@ -105,7 +105,6 @@ struct fsi_priv {
 struct fsi_master {
 	void __iomem *base;
 	int irq;
-	struct clk *clk;
 	struct fsi_priv fsia;
 	struct fsi_priv fsib;
 	struct sh_fsi_platform_info *info;
@@ -559,7 +558,7 @@ static int fsi_dai_startup(struct snd_pcm_substream *substream,
 	int is_master;
 	int ret = 0;
 
-	clk_enable(master->clk);
+	pm_runtime_get_sync(dai->dev);
 
 	/* CKG1 */
 	data = is_play ? (1 << 0) : (1 << 4);
@@ -674,7 +673,7 @@ static void fsi_dai_shutdown(struct snd_pcm_substream *substream,
 	fsi_irq_disable(fsi, is_play);
 	fsi_clk_ctrl(fsi, 0);
 
-	clk_disable(master->clk);
+	pm_runtime_put_sync(dai->dev);
 }
 
 static int fsi_dai_trigger(struct snd_pcm_substream *substream, int cmd,
@@ -872,7 +871,6 @@ EXPORT_SYMBOL_GPL(fsi_soc_platform);
 static int fsi_probe(struct platform_device *pdev)
 {
 	struct resource *res;
-	char clk_name[8];
 	unsigned int irq;
 	int ret;
 
@@ -903,14 +901,9 @@ static int fsi_probe(struct platform_device *pdev)
 	master->fsia.base	= master->base;
 	master->fsib.base	= master->base + 0x40;
 
-	/* FSI is based on SPU mstp */
-	snprintf(clk_name, sizeof(clk_name), "spu%d", pdev->id);
-	master->clk = clk_get(NULL, clk_name);
-	if (IS_ERR(master->clk)) {
-		dev_err(&pdev->dev, "cannot get %s mstp\n", clk_name);
-		ret = -EIO;
-		goto exit_iounmap;
-	}
+	pm_suspend_ignore_children(&pdev->dev, true);
+	pm_runtime_enable(&pdev->dev);
+	pm_runtime_resume(&pdev->dev);
 
 	fsi_soc_dai[0].dev		= &pdev->dev;
 	fsi_soc_dai[1].dev		= &pdev->dev;
@@ -935,6 +928,7 @@ exit_free_irq:
 	free_irq(irq, master);
 exit_iounmap:
 	iounmap(master->base);
+	pm_runtime_disable(&pdev->dev);
 exit_kfree:
 	kfree(master);
 	master = NULL;
@@ -947,7 +941,7 @@ static int fsi_remove(struct platform_device *pdev)
 	snd_soc_unregister_dais(fsi_soc_dai, ARRAY_SIZE(fsi_soc_dai));
 	snd_soc_unregister_platform(&fsi_soc_platform);
 
-	clk_put(master->clk);
+	pm_runtime_disable(&pdev->dev);
 
 	free_irq(master->irq, master);
 
@@ -957,9 +951,27 @@ static int fsi_remove(struct platform_device *pdev)
 	return 0;
 }
 
+static int fsi_runtime_nop(struct device *dev)
+{
+	/* Runtime PM callback shared between ->runtime_suspend()
+	 * and ->runtime_resume(). Simply returns success.
+	 *
+	 * This driver re-initializes all registers after
+	 * pm_runtime_get_sync() anyway so there is no need
+	 * to save and restore registers here.
+	 */
+	return 0;
+}
+
+static struct dev_pm_ops fsi_pm_ops = {
+	.runtime_suspend	= fsi_runtime_nop,
+	.runtime_resume		= fsi_runtime_nop,
+};
+
 static struct platform_driver fsi_driver = {
 	.driver 	= {
 		.name	= "sh_fsi",
+		.pm	= &fsi_pm_ops,
 	},
 	.probe		= fsi_probe,
 	.remove		= fsi_remove,
-- 
1.6.3.3

^ permalink raw reply related	[flat|nested] 44+ messages in thread

end of thread, other threads:[~2009-11-27 11:07 UTC | newest]

Thread overview: 44+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-09  2:54 [PATCH 1/2 v2] ASoC: sh: fsi: Add runtime PM support Kuninori Morimoto
2009-11-09 10:58 ` Mark Brown
2009-11-09 10:58   ` [alsa-devel] " Mark Brown
2009-11-09 13:31   ` Mark Brown
2009-11-09 13:31     ` [alsa-devel] " Mark Brown
2009-11-16 15:30     ` Null suspend/resume functions Mark Brown
2009-11-16 15:30       ` Mark Brown
2009-11-16 19:07       ` Rafael J. Wysocki
2009-11-16 19:07       ` Rafael J. Wysocki
2009-11-17 11:52       ` [linux-pm] " Pavel Machek
2009-11-17 11:52         ` Pavel Machek
2009-11-17 12:41         ` Mark Brown
2009-11-17 12:41           ` Mark Brown
2009-11-18 16:09           ` Pavel Machek
2009-11-19 11:21             ` Mark Brown
2009-11-19 11:21               ` Mark Brown
2009-11-21 23:45               ` Pavel Machek
2009-11-23 11:02                 ` Mark Brown
2009-11-24 11:57                   ` Pavel Machek
2009-11-19 11:21             ` Mark Brown
2009-11-18 16:09           ` Pavel Machek
2009-11-17 12:41         ` Mark Brown
2009-11-17 11:52       ` Pavel Machek
2009-11-17 12:46       ` Magnus Damm
2009-11-17 12:46       ` Magnus Damm
2009-11-17 12:46         ` Magnus Damm
2009-11-17 12:59         ` Mark Brown
2009-11-17 12:59         ` Mark Brown
2009-11-17 12:59           ` Mark Brown
2009-11-17 22:14           ` Rafael J. Wysocki
2009-11-18 13:41             ` Mark Brown
2009-11-18 13:41               ` Mark Brown
2009-11-18 13:41             ` Mark Brown
2009-11-17 22:14           ` Rafael J. Wysocki
2009-11-18 10:09           ` Magnus Damm
2009-11-18 10:09             ` Magnus Damm
2009-11-18 12:05             ` Mark Brown
2009-11-18 12:05             ` Mark Brown
2009-11-18 12:05               ` Mark Brown
2009-11-18 10:09           ` Magnus Damm
2009-11-16 15:30     ` Mark Brown
2009-11-09 13:31   ` [alsa-devel] [PATCH 1/2 v2] ASoC: sh: fsi: Add runtime PM support Mark Brown
2009-11-27 11:06   ` Mark Brown
2009-11-27 11:06     ` [alsa-devel] " Mark Brown

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.