diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/codecs/da7210.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/sound/soc/codecs/da7210.c b/sound/soc/codecs/da7210.c index 10f52ff14daa..af5db7080519 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); |