mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-15 05:11:32 +00:00
ASoC: Only do WM8994 bias off transition from standby
Otherwise we may try to power down multiple times when the using idle bias off and the driver is removed. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
This commit is contained in:
parent
4dcc93d0ed
commit
d522ffbfb9
@ -3007,34 +3007,39 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SND_SOC_BIAS_OFF:
|
case SND_SOC_BIAS_OFF:
|
||||||
/* Switch over to startup biases */
|
if (codec->bias_level == SND_SOC_BIAS_STANDBY) {
|
||||||
snd_soc_update_bits(codec, WM8994_ANTIPOP_2,
|
/* Switch over to startup biases */
|
||||||
WM8994_BIAS_SRC | WM8994_STARTUP_BIAS_ENA |
|
snd_soc_update_bits(codec, WM8994_ANTIPOP_2,
|
||||||
WM8994_VMID_BUF_ENA |
|
WM8994_BIAS_SRC |
|
||||||
WM8994_VMID_RAMP_MASK,
|
WM8994_STARTUP_BIAS_ENA |
|
||||||
WM8994_BIAS_SRC | WM8994_STARTUP_BIAS_ENA |
|
WM8994_VMID_BUF_ENA |
|
||||||
WM8994_VMID_BUF_ENA |
|
WM8994_VMID_RAMP_MASK,
|
||||||
(1 << WM8994_VMID_RAMP_SHIFT));
|
WM8994_BIAS_SRC |
|
||||||
|
WM8994_STARTUP_BIAS_ENA |
|
||||||
|
WM8994_VMID_BUF_ENA |
|
||||||
|
(1 << WM8994_VMID_RAMP_SHIFT));
|
||||||
|
|
||||||
/* Disable main biases */
|
/* Disable main biases */
|
||||||
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_1,
|
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_1,
|
||||||
WM8994_BIAS_ENA | WM8994_VMID_SEL_MASK, 0);
|
WM8994_BIAS_ENA |
|
||||||
|
WM8994_VMID_SEL_MASK, 0);
|
||||||
|
|
||||||
/* Discharge line */
|
/* Discharge line */
|
||||||
snd_soc_update_bits(codec, WM8994_ANTIPOP_1,
|
snd_soc_update_bits(codec, WM8994_ANTIPOP_1,
|
||||||
WM8994_LINEOUT1_DISCH |
|
WM8994_LINEOUT1_DISCH |
|
||||||
WM8994_LINEOUT2_DISCH,
|
WM8994_LINEOUT2_DISCH,
|
||||||
WM8994_LINEOUT1_DISCH |
|
WM8994_LINEOUT1_DISCH |
|
||||||
WM8994_LINEOUT2_DISCH);
|
WM8994_LINEOUT2_DISCH);
|
||||||
|
|
||||||
msleep(5);
|
msleep(5);
|
||||||
|
|
||||||
/* Switch off startup biases */
|
|
||||||
snd_soc_update_bits(codec, WM8994_ANTIPOP_2,
|
|
||||||
WM8994_BIAS_SRC | WM8994_STARTUP_BIAS_ENA |
|
|
||||||
WM8994_VMID_BUF_ENA |
|
|
||||||
WM8994_VMID_RAMP_MASK, 0);
|
|
||||||
|
|
||||||
|
/* Switch off startup biases */
|
||||||
|
snd_soc_update_bits(codec, WM8994_ANTIPOP_2,
|
||||||
|
WM8994_BIAS_SRC |
|
||||||
|
WM8994_STARTUP_BIAS_ENA |
|
||||||
|
WM8994_VMID_BUF_ENA |
|
||||||
|
WM8994_VMID_RAMP_MASK, 0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
codec->bias_level = level;
|
codec->bias_level = level;
|
||||||
|
Loading…
Reference in New Issue
Block a user