ASoC: arizona: Automatically manage input mutes
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 6 Feb 2013 16:57:29 +0000 (16:57 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 12 Feb 2013 22:08:52 +0000 (22:08 +0000)
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>
sound/soc/codecs/arizona.c
sound/soc/codecs/wm5102.c
sound/soc/codecs/wm5110.c

index d824c984c8a4cbc6647e5280ba046683ba30d90b..ac948a671ea677898b280a3113eb4b3aeb6ef8ed 100644 (file)
@@ -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 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;
 }
 EXPORT_SYMBOL_GPL(arizona_in_ev);
index 5e85b645f2ebad7693e414085547bdbf130ceb24..ab69c83626cd23d529bc95b3ae03a5b314fd2735 100644 (file)
@@ -636,19 +636,6 @@ SOC_SINGLE_RANGE_TLV("IN3L Volume", ARIZONA_IN3L_CONTROL,
 SOC_SINGLE_RANGE_TLV("IN3R Volume", ARIZONA_IN3R_CONTROL,
                     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,
               ARIZONA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv),
 SOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R,
index 23199372d51861500a58dc37e9f194deebd43682..a1631320b448669942ae4a23f64aa622798d2373 100644 (file)
@@ -80,23 +80,6 @@ SOC_SINGLE_RANGE_TLV("IN3L Volume", ARIZONA_IN3L_CONTROL,
 SOC_SINGLE_RANGE_TLV("IN3R Volume", ARIZONA_IN3R_CONTROL,
                     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,
               ARIZONA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv),
 SOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R,