summaryrefslogtreecommitdiff
path: root/sound/soc
diff options
context:
space:
mode:
authorWalker Chen <walker.chen@starfivetech.com>2022-10-26 14:19:12 +0300
committermason.huo <mason.huo@starfivetech.com>2022-10-27 09:00:49 +0300
commite9a3090389dcd50759f80d7ddca5721d7d404910 (patch)
treebfb1815ba435bc2f602c4d057c3e145bffc0da24 /sound/soc
parent0dea956552249f6100daabfb1118e9118cddf88c (diff)
downloadlinux-e9a3090389dcd50759f80d7ddca5721d7d404910.tar.xz
CR_2345_Audio_DevicePM_walker.chen
Disable clock when audio driver is loaded. Signed-off-by: Walker Chen <walker.chen@starfivetech.com>
Diffstat (limited to 'sound/soc')
-rw-r--r--sound/soc/starfive/starfive_pdm.c8
-rw-r--r--sound/soc/starfive/starfive_tdm.c18
2 files changed, 18 insertions, 8 deletions
diff --git a/sound/soc/starfive/starfive_pdm.c b/sound/soc/starfive/starfive_pdm.c
index ba4bb615d2c5..ca5277104bf7 100644
--- a/sound/soc/starfive/starfive_pdm.c
+++ b/sound/soc/starfive/starfive_pdm.c
@@ -461,6 +461,12 @@ static int sf_pdm_probe(struct platform_device *pdev)
}
pm_runtime_enable(&pdev->dev);
+#ifdef CONFIG_PM
+ clk_disable_unprepare(priv->clk_pdm_apb);
+ clk_disable_unprepare(priv->clk_pdm_mclk);
+ clk_disable_unprepare(priv->clk_mclk);
+#endif
+
return 0;
}
@@ -485,9 +491,7 @@ static struct platform_driver sf_pdm_driver = {
.driver = {
.name = "jh7110-pdm",
.of_match_table = sf_pdm_of_match,
-#ifdef CONFIG_PM
.pm = &sf_pdm_pm_ops,
-#endif
},
.probe = sf_pdm_probe,
.remove = sf_pdm_dev_remove,
diff --git a/sound/soc/starfive/starfive_tdm.c b/sound/soc/starfive/starfive_tdm.c
index 28056b3899b6..bd7372ed6a0d 100644
--- a/sound/soc/starfive/starfive_tdm.c
+++ b/sound/soc/starfive/starfive_tdm.c
@@ -123,18 +123,22 @@ static void sf_tdm_config(struct sf_tdm_dev *dev, struct snd_pcm_substream *subs
sf_tdm_writel(dev, TDM_PCMRXCR, datarx);
}
-#ifdef CONFIG_PM
-static int sf_tdm_runtime_suspend(struct device *dev)
+static void sf_tdm_clk_disable(struct sf_tdm_dev *priv)
{
- struct sf_tdm_dev *priv = dev_get_drvdata(dev);
-
clk_disable_unprepare(priv->clk_tdm);
clk_disable_unprepare(priv->clk_tdm_ext);
clk_disable_unprepare(priv->clk_tdm_internal);
clk_disable_unprepare(priv->clk_tdm_apb);
clk_disable_unprepare(priv->clk_tdm_ahb);
clk_disable_unprepare(priv->clk_mclk_inner);
+}
+#ifdef CONFIG_PM
+static int sf_tdm_runtime_suspend(struct device *dev)
+{
+ struct sf_tdm_dev *priv = dev_get_drvdata(dev);
+
+ sf_tdm_clk_disable(priv);
return 0;
}
@@ -690,6 +694,10 @@ static int sf_tdm_probe(struct platform_device *pdev)
}
pm_runtime_enable(&pdev->dev);
+#ifdef CONFIG_PM
+ sf_tdm_clk_disable(dev);
+#endif
+
return 0;
}
@@ -713,9 +721,7 @@ static struct platform_driver sf_tdm_driver = {
.driver = {
.name = "jh7110-tdm",
.of_match_table = sf_tdm_of_match,
-#ifdef CONFIG_PM
.pm = &sf_tdm_pm_ops,
-#endif
},
.probe = sf_tdm_probe,
.remove = sf_tdm_dev_remove,