Commit d8d702e1 authored by Shengjiu Wang's avatar Shengjiu Wang Committed by Mark Brown

ASoC: fsl_sai: Refine regcache usage with pm runtime

When there is dedicated power domain bound with device, after probing
the power will be disabled, then registers are not accessible in
fsl_sai_dai_probe(), so regcache only need to be enabled in end of
probe() and regcache_mark_dirty should be moved to pm runtime resume
callback function.
Signed-off-by: default avatarShengjiu Wang <shengjiu.wang@nxp.com>
Acked-by: default avatarNicolin Chen <nicoleotsuka@gmail.com>
Link: https://lore.kernel.org/r/1593412953-10897-1-git-send-email-shengjiu.wang@nxp.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 351cf744
...@@ -1016,6 +1016,7 @@ static int fsl_sai_probe(struct platform_device *pdev) ...@@ -1016,6 +1016,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, sai); platform_set_drvdata(pdev, sai);
pm_runtime_enable(&pdev->dev); pm_runtime_enable(&pdev->dev);
regcache_cache_only(sai->regmap, true);
ret = devm_snd_soc_register_component(&pdev->dev, &fsl_component, ret = devm_snd_soc_register_component(&pdev->dev, &fsl_component,
&fsl_sai_dai, 1); &fsl_sai_dai, 1);
...@@ -1107,7 +1108,6 @@ static int fsl_sai_runtime_suspend(struct device *dev) ...@@ -1107,7 +1108,6 @@ static int fsl_sai_runtime_suspend(struct device *dev)
clk_disable_unprepare(sai->bus_clk); clk_disable_unprepare(sai->bus_clk);
regcache_cache_only(sai->regmap, true); regcache_cache_only(sai->regmap, true);
regcache_mark_dirty(sai->regmap);
return 0; return 0;
} }
...@@ -1137,6 +1137,7 @@ static int fsl_sai_runtime_resume(struct device *dev) ...@@ -1137,6 +1137,7 @@ static int fsl_sai_runtime_resume(struct device *dev)
} }
regcache_cache_only(sai->regmap, false); regcache_cache_only(sai->regmap, false);
regcache_mark_dirty(sai->regmap);
regmap_write(sai->regmap, FSL_SAI_TCSR(ofs), FSL_SAI_CSR_SR); regmap_write(sai->regmap, FSL_SAI_TCSR(ofs), FSL_SAI_CSR_SR);
regmap_write(sai->regmap, FSL_SAI_RCSR(ofs), FSL_SAI_CSR_SR); regmap_write(sai->regmap, FSL_SAI_RCSR(ofs), FSL_SAI_CSR_SR);
usleep_range(1000, 2000); usleep_range(1000, 2000);
......
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