ASoC: rt298: reset AD dilter is there is no MCLK
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>
This commit is contained in:
parent
f55532a0c0
commit
3c9e014c44
|
@ -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,
|
||||
|
|
|
@ -137,6 +137,7 @@
|
|||
#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
|
||||
|
@ -148,6 +149,7 @@
|
|||
#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
|
||||
|
|
Loading…
Reference in New Issue