提交 e06e4c2d 编写于 作者: O Oskar Schirmer 提交者: Mark Brown

ASoC: sgtl5000: fix codec clock source transition to avoid clockless moment

Powering down PLL before switching to a mode that does not use it
is a bad idea. It would cause the SGTL5000 be without internal
clock supply, especially on the I2C interface, which would make
subsequent access to it fail.

Thus, in case of not using PLL any longer, first set the mode
control, then power down PLL.
Signed-off-by: NOskar Schirmer <oskar@scara.com>
Signed-off-by: NMark Brown <broonie@linaro.org>
上级 cb23e852
......@@ -644,16 +644,19 @@ static int sgtl5000_set_clock(struct snd_soc_codec *codec, int frame_rate)
snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
SGTL5000_PLL_POWERUP | SGTL5000_VCOAMP_POWERUP,
SGTL5000_PLL_POWERUP | SGTL5000_VCOAMP_POWERUP);
/* if using pll, clk_ctrl must be set after pll power up */
snd_soc_write(codec, SGTL5000_CHIP_CLK_CTRL, clk_ctl);
} else {
/* otherwise, clk_ctrl must be set before pll power down */
snd_soc_write(codec, SGTL5000_CHIP_CLK_CTRL, clk_ctl);
/* power down pll */
snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
SGTL5000_PLL_POWERUP | SGTL5000_VCOAMP_POWERUP,
0);
}
/* if using pll, clk_ctrl must be set after pll power up */
snd_soc_write(codec, SGTL5000_CHIP_CLK_CTRL, clk_ctl);
return 0;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册