ASoC: rt298: reset AD dilter is there is no MCLK
authorBard Liao <bardliao@realtek.com>
Tue, 26 Apr 2016 10:07:10 +0000 (18:07 +0800)
committerMark Brown <broonie@kernel.org>
Tue, 26 Apr 2016 10:11:08 +0000 (11:11 +0100)
rt298 need to reset AD filter and the ADC settings will take effort.

Signed-off-by: Bard Liao <bardliao@realtek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/rt298.c
sound/soc/codecs/rt298.h

index f0e6c06e89ac0448afd7580245353b12acbb3d4f..178b1cc22e05f84a1dc70ada4fd9e2027c438b4d 100644 (file)
@@ -481,6 +481,26 @@ static int rt298_adc_event(struct snd_soc_dapm_widget *w,
                snd_soc_update_bits(codec,
                        VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, nid, 0),
                        0x7080, 0x7000);
+                /* If MCLK doesn't exist, reset AD filter */
+               if (!(snd_soc_read(codec, RT298_VAD_CTRL) & 0x200)) {
+                       pr_info("NO MCLK\n");
+                       switch (nid) {
+                       case RT298_ADC_IN1:
+                               snd_soc_update_bits(codec,
+                                       RT298_D_FILTER_CTRL, 0x2, 0x2);
+                               mdelay(10);
+                               snd_soc_update_bits(codec,
+                                       RT298_D_FILTER_CTRL, 0x2, 0x0);
+                               break;
+                       case RT298_ADC_IN2:
+                               snd_soc_update_bits(codec,
+                                       RT298_D_FILTER_CTRL, 0x4, 0x4);
+                               mdelay(10);
+                               snd_soc_update_bits(codec,
+                                       RT298_D_FILTER_CTRL, 0x4, 0x0);
+                               break;
+                       }
+               }
                break;
        case SND_SOC_DAPM_PRE_PMD:
                snd_soc_update_bits(codec,
index d66f8847b67632354d8750f5fee8f7153aa3768a..3638f3d61209eb4c72c2bdb5dcef770485978bfe 100644 (file)
 #define RT298_A_BIAS_CTRL2     0x02
 #define RT298_POWER_CTRL1      0x03
 #define RT298_A_BIAS_CTRL3     0x04
+#define RT298_D_FILTER_CTRL    0x05
 #define RT298_POWER_CTRL2      0x08
 #define RT298_I2S_CTRL1                0x09
 #define RT298_I2S_CTRL2                0x0a
 #define RT298_IRQ_CTRL         0x33
 #define RT298_WIND_FILTER_CTRL 0x46
 #define RT298_PLL_CTRL1                0x49
+#define RT298_VAD_CTRL         0x4e
 #define RT298_CBJ_CTRL1                0x4f
 #define RT298_CBJ_CTRL2                0x50
 #define RT298_PLL_CTRL         0x63