Commit 6b3bb3c8 authored by Samuel Holland's avatar Samuel Holland Committed by Mark Brown

ASoC: sun8i-codec: Manage module clock via DAPM

By representing the module clock as a DAPM widget, we ensure that the
clock is only enabled when the module is actually in use, without
additional code in runtime PM hooks.
Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
Acked-by: default avatarMaxime Ripard <mripard@kernel.org>
Link: https://lore.kernel.org/r/20200831034852.18841-10-samuel@sholland.orgSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent efb736fb
...@@ -102,26 +102,15 @@ static int sun8i_codec_runtime_resume(struct device *dev) ...@@ -102,26 +102,15 @@ static int sun8i_codec_runtime_resume(struct device *dev)
struct sun8i_codec *scodec = dev_get_drvdata(dev); struct sun8i_codec *scodec = dev_get_drvdata(dev);
int ret; int ret;
ret = clk_prepare_enable(scodec->clk_module);
if (ret) {
dev_err(dev, "Failed to enable the module clock\n");
return ret;
}
regcache_cache_only(scodec->regmap, false); regcache_cache_only(scodec->regmap, false);
ret = regcache_sync(scodec->regmap); ret = regcache_sync(scodec->regmap);
if (ret) { if (ret) {
dev_err(dev, "Failed to sync regmap cache\n"); dev_err(dev, "Failed to sync regmap cache\n");
goto err_disable_clk; return ret;
} }
return 0; return 0;
err_disable_clk:
clk_disable_unprepare(scodec->clk_module);
return ret;
} }
static int sun8i_codec_runtime_suspend(struct device *dev) static int sun8i_codec_runtime_suspend(struct device *dev)
...@@ -131,8 +120,6 @@ static int sun8i_codec_runtime_suspend(struct device *dev) ...@@ -131,8 +120,6 @@ static int sun8i_codec_runtime_suspend(struct device *dev)
regcache_cache_only(scodec->regmap, true); regcache_cache_only(scodec->regmap, true);
regcache_mark_dirty(scodec->regmap); regcache_mark_dirty(scodec->regmap);
clk_disable_unprepare(scodec->clk_module);
return 0; return 0;
} }
...@@ -379,6 +366,8 @@ static const struct snd_kcontrol_new sun8i_input_mixer_controls[] = { ...@@ -379,6 +366,8 @@ static const struct snd_kcontrol_new sun8i_input_mixer_controls[] = {
}; };
static const struct snd_soc_dapm_widget sun8i_codec_dapm_widgets[] = { static const struct snd_soc_dapm_widget sun8i_codec_dapm_widgets[] = {
SND_SOC_DAPM_CLOCK_SUPPLY("mod"),
/* Digital parts of the DACs and ADC */ /* Digital parts of the DACs and ADC */
SND_SOC_DAPM_SUPPLY("DAC", SUN8I_DAC_DIG_CTRL, SUN8I_DAC_DIG_CTRL_ENDA, SND_SOC_DAPM_SUPPLY("DAC", SUN8I_DAC_DIG_CTRL, SUN8I_DAC_DIG_CTRL_ENDA,
0, NULL, 0), 0, NULL, 0),
...@@ -448,6 +437,8 @@ static const struct snd_soc_dapm_widget sun8i_codec_dapm_widgets[] = { ...@@ -448,6 +437,8 @@ static const struct snd_soc_dapm_widget sun8i_codec_dapm_widgets[] = {
static const struct snd_soc_dapm_route sun8i_codec_dapm_routes[] = { static const struct snd_soc_dapm_route sun8i_codec_dapm_routes[] = {
/* Clock Routes */ /* Clock Routes */
{ "AIF1", NULL, "mod" },
{ "AIF1", NULL, "SYSCLK AIF1" }, { "AIF1", NULL, "SYSCLK AIF1" },
{ "AIF1 PLL", NULL, "AIF1" }, { "AIF1 PLL", NULL, "AIF1" },
{ "SYSCLK", NULL, "AIF1 PLL" }, { "SYSCLK", NULL, "AIF1 PLL" },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment