ASoC: da7219: Make more efficient use of MCLK within driver
Currently, if the driver has control of MCLK then it remains enabled as long as the codec is in STANDBY or above. The MCLK is only really required in STANDBY when a 3-pole jack is inserted and the HP detect procedure is required to run. This patch updates the code to enable/disable the MCLK when moving between the STANDBY and PREPARE bias level, and when a 3-pole jack is inserted and HP detection is required, thus saving power at all other times. Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> Signed-off-by: Mark Brown <broonie@kernel.org>
这个提交包含在:
@@ -1508,11 +1508,10 @@ static int da7219_set_bias_level(struct snd_soc_codec *codec,
|
||||
|
||||
switch (level) {
|
||||
case SND_SOC_BIAS_ON:
|
||||
case SND_SOC_BIAS_PREPARE:
|
||||
break;
|
||||
case SND_SOC_BIAS_STANDBY:
|
||||
if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_OFF) {
|
||||
/* MCLK */
|
||||
case SND_SOC_BIAS_PREPARE:
|
||||
/* Enable MCLK for transition to ON state */
|
||||
if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_STANDBY) {
|
||||
if (da7219->mclk) {
|
||||
ret = clk_prepare_enable(da7219->mclk);
|
||||
if (ret) {
|
||||
@@ -1521,11 +1520,19 @@ static int da7219_set_bias_level(struct snd_soc_codec *codec,
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case SND_SOC_BIAS_STANDBY:
|
||||
if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_OFF) {
|
||||
/* Master bias */
|
||||
snd_soc_update_bits(codec, DA7219_REFERENCES,
|
||||
DA7219_BIAS_EN_MASK,
|
||||
DA7219_BIAS_EN_MASK);
|
||||
} else {
|
||||
/* Remove MCLK */
|
||||
if (da7219->mclk)
|
||||
clk_disable_unprepare(da7219->mclk);
|
||||
}
|
||||
break;
|
||||
case SND_SOC_BIAS_OFF:
|
||||
@@ -1534,9 +1541,6 @@ static int da7219_set_bias_level(struct snd_soc_codec *codec,
|
||||
snd_soc_update_bits(codec, DA7219_REFERENCES,
|
||||
DA7219_BIAS_EN_MASK, 0);
|
||||
|
||||
/* MCLK */
|
||||
if (da7219->mclk)
|
||||
clk_disable_unprepare(da7219->mclk);
|
||||
break;
|
||||
}
|
||||
|
||||
|
在新工单中引用
屏蔽一个用户