summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAshish Chavan <ashish.chavan@kpitcummins.com>2012-05-03 19:27:52 +0530
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-05-03 18:53:52 +0100
commit3cb81651d070edfbea83eef763c3ca3c6f3848fd (patch)
treed9c5d779560af87d8f2f2194ec17a963ea471aec
parent9b5231247c7aea3e56b6d28fa3e068e17ffc61da (diff)
ASoC: da7210: Minor improvements and a bugfix
This patch improves playback quality for few sample rates like 8000 and 11025 Hz. This also fixes an issue observed during testing of pll slave mode. Due to the issue, on some rare occasions there was no sound output for first time playback after system boot, though all subsequent playbacks were fine. It was mainly because of the sequence in which SRM bit was enabled. Signed-off-by: Ashish Chavan <ashish.chavan@kpitcummins.com> Signed-off-by: David Dajun Chen <dchen@diasemi.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r--sound/soc/codecs/da7210.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/sound/soc/codecs/da7210.c b/sound/soc/codecs/da7210.c
index 10f52ff14da..af5db708051 100644
--- a/sound/soc/codecs/da7210.c
+++ b/sound/soc/codecs/da7210.c
@@ -850,8 +850,19 @@ static int da7210_hw_params(struct snd_pcm_substream *substream,
if (da7210->mclk_rate && (da7210->mclk_rate != sysclk)) {
/* PLL mode, disable PLL bypass */
snd_soc_update_bits(codec, DA7210_PLL_DIV3, DA7210_PLL_BYP, 0);
+
+ if (!da7210->master) {
+ /* PLL slave mode, also enable SRM */
+ snd_soc_update_bits(codec, DA7210_PLL,
+ (DA7210_MCLK_SRM_EN |
+ DA7210_MCLK_DET_EN),
+ (DA7210_MCLK_SRM_EN |
+ DA7210_MCLK_DET_EN));
+ }
} else {
- /* PLL bypass mode, enable PLL bypass */
+ /* PLL bypass mode, enable PLL bypass and Auto Detection */
+ snd_soc_update_bits(codec, DA7210_PLL, DA7210_MCLK_DET_EN,
+ DA7210_MCLK_DET_EN);
snd_soc_update_bits(codec, DA7210_PLL_DIV3, DA7210_PLL_BYP,
DA7210_PLL_BYP);
}
@@ -1014,18 +1025,9 @@ static int da7210_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
snd_soc_update_bits(codec, DA7210_PLL_DIV3,
DA7210_PLL_DIV_L_MASK, pll_div3);
- if (da7210->master) {
- /* In master mode, no need to enable SRM */
- snd_soc_update_bits(codec, DA7210_PLL, DA7210_PLL_EN,
- DA7210_PLL_EN);
- } else {
- /* In slave mode, enable SRM and PLL */
- snd_soc_update_bits(codec, DA7210_PLL,
- (DA7210_PLL_EN | DA7210_MCLK_SRM_EN |
- DA7210_MCLK_DET_EN),
- (DA7210_PLL_EN | DA7210_MCLK_SRM_EN |
- DA7210_MCLK_DET_EN));
- }
+ /* Enable PLL */
+ snd_soc_update_bits(codec, DA7210_PLL, DA7210_PLL_EN, DA7210_PLL_EN);
+
/* Enable active mode */
snd_soc_update_bits(codec, DA7210_STARTUP1, DA7210_SC_MST_EN,
DA7210_SC_MST_EN);