|
@@ -3007,34 +3007,39 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec,
|
|
|
break;
|
|
|
|
|
|
case SND_SOC_BIAS_OFF:
|
|
|
- /* Switch over to 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,
|
|
|
- WM8994_BIAS_SRC | WM8994_STARTUP_BIAS_ENA |
|
|
|
- WM8994_VMID_BUF_ENA |
|
|
|
- (1 << WM8994_VMID_RAMP_SHIFT));
|
|
|
-
|
|
|
- /* Disable main biases */
|
|
|
- snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_1,
|
|
|
- WM8994_BIAS_ENA | WM8994_VMID_SEL_MASK, 0);
|
|
|
+ if (codec->bias_level == SND_SOC_BIAS_STANDBY) {
|
|
|
+ /* Switch over to 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,
|
|
|
+ WM8994_BIAS_SRC |
|
|
|
+ WM8994_STARTUP_BIAS_ENA |
|
|
|
+ WM8994_VMID_BUF_ENA |
|
|
|
+ (1 << WM8994_VMID_RAMP_SHIFT));
|
|
|
|
|
|
- /* Discharge line */
|
|
|
- snd_soc_update_bits(codec, WM8994_ANTIPOP_1,
|
|
|
- WM8994_LINEOUT1_DISCH |
|
|
|
- WM8994_LINEOUT2_DISCH,
|
|
|
- WM8994_LINEOUT1_DISCH |
|
|
|
- WM8994_LINEOUT2_DISCH);
|
|
|
+ /* Disable main biases */
|
|
|
+ snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_1,
|
|
|
+ WM8994_BIAS_ENA |
|
|
|
+ WM8994_VMID_SEL_MASK, 0);
|
|
|
|
|
|
- msleep(5);
|
|
|
+ /* Discharge line */
|
|
|
+ snd_soc_update_bits(codec, WM8994_ANTIPOP_1,
|
|
|
+ WM8994_LINEOUT1_DISCH |
|
|
|
+ WM8994_LINEOUT2_DISCH,
|
|
|
+ WM8994_LINEOUT1_DISCH |
|
|
|
+ WM8994_LINEOUT2_DISCH);
|
|
|
|
|
|
- /* 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);
|
|
|
+ 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);
|
|
|
+ }
|
|
|
break;
|
|
|
}
|
|
|
codec->bias_level = level;
|