ASoC: arizona: Automatically manage input mutes
For optimal performance the inputs should be kept muted until after power up. Since there are few use cases for muting inputs during capture move the mutes to automatic control. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
Родитель
699ba4546c
Коммит
43cd8bf1c8
|
@ -335,6 +335,23 @@ EXPORT_SYMBOL_GPL(arizona_ng_hold);
|
||||||
int arizona_in_ev(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol,
|
int arizona_in_ev(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol,
|
||||||
int event)
|
int event)
|
||||||
{
|
{
|
||||||
|
unsigned int reg;
|
||||||
|
|
||||||
|
if (w->shift % 2)
|
||||||
|
reg = ARIZONA_ADC_DIGITAL_VOLUME_1L + ((w->shift / 2) * 8);
|
||||||
|
else
|
||||||
|
reg = ARIZONA_ADC_DIGITAL_VOLUME_1R + ((w->shift / 2) * 8);
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
snd_soc_update_bits(w->codec, reg, ARIZONA_IN1L_MUTE, 0);
|
||||||
|
break;
|
||||||
|
case SND_SOC_DAPM_PRE_PMD:
|
||||||
|
snd_soc_update_bits(w->codec, reg, ARIZONA_IN1L_MUTE,
|
||||||
|
ARIZONA_IN1L_MUTE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(arizona_in_ev);
|
EXPORT_SYMBOL_GPL(arizona_in_ev);
|
||||||
|
|
|
@ -636,19 +636,6 @@ SOC_SINGLE_RANGE_TLV("IN3L Volume", ARIZONA_IN3L_CONTROL,
|
||||||
SOC_SINGLE_RANGE_TLV("IN3R Volume", ARIZONA_IN3R_CONTROL,
|
SOC_SINGLE_RANGE_TLV("IN3R Volume", ARIZONA_IN3R_CONTROL,
|
||||||
ARIZONA_IN3R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv),
|
ARIZONA_IN3R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv),
|
||||||
|
|
||||||
SOC_SINGLE("IN1L Digital Switch", ARIZONA_ADC_DIGITAL_VOLUME_1L,
|
|
||||||
ARIZONA_IN1L_MUTE_SHIFT, 1, 1),
|
|
||||||
SOC_SINGLE("IN1R Digital Switch", ARIZONA_ADC_DIGITAL_VOLUME_1R,
|
|
||||||
ARIZONA_IN1R_MUTE_SHIFT, 1, 1),
|
|
||||||
SOC_SINGLE("IN2L Digital Switch", ARIZONA_ADC_DIGITAL_VOLUME_2L,
|
|
||||||
ARIZONA_IN2L_MUTE_SHIFT, 1, 1),
|
|
||||||
SOC_SINGLE("IN2R Digital Switch", ARIZONA_ADC_DIGITAL_VOLUME_2R,
|
|
||||||
ARIZONA_IN2R_MUTE_SHIFT, 1, 1),
|
|
||||||
SOC_SINGLE("IN3L Digital Switch", ARIZONA_ADC_DIGITAL_VOLUME_3L,
|
|
||||||
ARIZONA_IN3L_MUTE_SHIFT, 1, 1),
|
|
||||||
SOC_SINGLE("IN3R Digital Switch", ARIZONA_ADC_DIGITAL_VOLUME_3R,
|
|
||||||
ARIZONA_IN3R_MUTE_SHIFT, 1, 1),
|
|
||||||
|
|
||||||
SOC_SINGLE_TLV("IN1L Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1L,
|
SOC_SINGLE_TLV("IN1L Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1L,
|
||||||
ARIZONA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv),
|
ARIZONA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv),
|
||||||
SOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R,
|
SOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R,
|
||||||
|
|
|
@ -80,23 +80,6 @@ SOC_SINGLE_RANGE_TLV("IN3L Volume", ARIZONA_IN3L_CONTROL,
|
||||||
SOC_SINGLE_RANGE_TLV("IN3R Volume", ARIZONA_IN3R_CONTROL,
|
SOC_SINGLE_RANGE_TLV("IN3R Volume", ARIZONA_IN3R_CONTROL,
|
||||||
ARIZONA_IN3R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv),
|
ARIZONA_IN3R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv),
|
||||||
|
|
||||||
SOC_SINGLE("IN1L Digital Switch", ARIZONA_ADC_DIGITAL_VOLUME_1L,
|
|
||||||
ARIZONA_IN1L_MUTE_SHIFT, 1, 1),
|
|
||||||
SOC_SINGLE("IN1R Digital Switch", ARIZONA_ADC_DIGITAL_VOLUME_1R,
|
|
||||||
ARIZONA_IN1R_MUTE_SHIFT, 1, 1),
|
|
||||||
SOC_SINGLE("IN2L Digital Switch", ARIZONA_ADC_DIGITAL_VOLUME_2L,
|
|
||||||
ARIZONA_IN2L_MUTE_SHIFT, 1, 1),
|
|
||||||
SOC_SINGLE("IN2R Digital Switch", ARIZONA_ADC_DIGITAL_VOLUME_2R,
|
|
||||||
ARIZONA_IN2R_MUTE_SHIFT, 1, 1),
|
|
||||||
SOC_SINGLE("IN3L Digital Switch", ARIZONA_ADC_DIGITAL_VOLUME_3L,
|
|
||||||
ARIZONA_IN3L_MUTE_SHIFT, 1, 1),
|
|
||||||
SOC_SINGLE("IN3R Digital Switch", ARIZONA_ADC_DIGITAL_VOLUME_3R,
|
|
||||||
ARIZONA_IN3R_MUTE_SHIFT, 1, 1),
|
|
||||||
SOC_SINGLE("IN4L Digital Switch", ARIZONA_ADC_DIGITAL_VOLUME_4L,
|
|
||||||
ARIZONA_IN4L_MUTE_SHIFT, 1, 1),
|
|
||||||
SOC_SINGLE("IN4R Digital Switch", ARIZONA_ADC_DIGITAL_VOLUME_4R,
|
|
||||||
ARIZONA_IN4R_MUTE_SHIFT, 1, 1),
|
|
||||||
|
|
||||||
SOC_SINGLE_TLV("IN1L Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1L,
|
SOC_SINGLE_TLV("IN1L Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1L,
|
||||||
ARIZONA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv),
|
ARIZONA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv),
|
||||||
SOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R,
|
SOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче