mirror of https://gitee.com/openkylin/linux.git
Merge remote-tracking branch 'asoc/topic/rt298' into asoc-next
This commit is contained in:
commit
631476d7fd
|
@ -276,6 +276,8 @@ static int rt298_jack_detect(struct rt298_priv *rt298, bool *hp, bool *mic)
|
||||||
} else {
|
} else {
|
||||||
*mic = false;
|
*mic = false;
|
||||||
regmap_write(rt298->regmap, RT298_SET_MIC1, 0x20);
|
regmap_write(rt298->regmap, RT298_SET_MIC1, 0x20);
|
||||||
|
regmap_update_bits(rt298->regmap,
|
||||||
|
RT298_CBJ_CTRL1, 0x0400, 0x0000);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
regmap_read(rt298->regmap, RT298_GET_HP_SENSE, &buf);
|
regmap_read(rt298->regmap, RT298_GET_HP_SENSE, &buf);
|
||||||
|
@ -482,6 +484,26 @@ static int rt298_adc_event(struct snd_soc_dapm_widget *w,
|
||||||
snd_soc_update_bits(codec,
|
snd_soc_update_bits(codec,
|
||||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, nid, 0),
|
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, nid, 0),
|
||||||
0x7080, 0x7000);
|
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;
|
break;
|
||||||
case SND_SOC_DAPM_PRE_PMD:
|
case SND_SOC_DAPM_PRE_PMD:
|
||||||
snd_soc_update_bits(codec,
|
snd_soc_update_bits(codec,
|
||||||
|
@ -520,30 +542,12 @@ static int rt298_mic1_event(struct snd_soc_dapm_widget *w,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rt298_vref_event(struct snd_soc_dapm_widget *w,
|
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
|
||||||
{
|
|
||||||
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
|
||||||
|
|
||||||
switch (event) {
|
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
|
||||||
snd_soc_update_bits(codec,
|
|
||||||
RT298_CBJ_CTRL1, 0x0400, 0x0000);
|
|
||||||
mdelay(50);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct snd_soc_dapm_widget rt298_dapm_widgets[] = {
|
static const struct snd_soc_dapm_widget rt298_dapm_widgets[] = {
|
||||||
|
|
||||||
SND_SOC_DAPM_SUPPLY_S("HV", 1, RT298_POWER_CTRL1,
|
SND_SOC_DAPM_SUPPLY_S("HV", 1, RT298_POWER_CTRL1,
|
||||||
12, 1, NULL, 0),
|
12, 1, NULL, 0),
|
||||||
SND_SOC_DAPM_SUPPLY("VREF", RT298_POWER_CTRL1,
|
SND_SOC_DAPM_SUPPLY("VREF", RT298_POWER_CTRL1,
|
||||||
0, 1, rt298_vref_event, SND_SOC_DAPM_PRE_PMU),
|
0, 1, NULL, 0),
|
||||||
SND_SOC_DAPM_SUPPLY_S("BG_MBIAS", 1, RT298_POWER_CTRL2,
|
SND_SOC_DAPM_SUPPLY_S("BG_MBIAS", 1, RT298_POWER_CTRL2,
|
||||||
1, 0, NULL, 0),
|
1, 0, NULL, 0),
|
||||||
SND_SOC_DAPM_SUPPLY_S("LDO1", 1, RT298_POWER_CTRL2,
|
SND_SOC_DAPM_SUPPLY_S("LDO1", 1, RT298_POWER_CTRL2,
|
||||||
|
@ -934,18 +938,9 @@ static int rt298_set_bias_level(struct snd_soc_codec *codec,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SND_SOC_BIAS_ON:
|
|
||||||
mdelay(30);
|
|
||||||
snd_soc_update_bits(codec,
|
|
||||||
RT298_CBJ_CTRL1, 0x0400, 0x0400);
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SND_SOC_BIAS_STANDBY:
|
case SND_SOC_BIAS_STANDBY:
|
||||||
snd_soc_write(codec,
|
snd_soc_write(codec,
|
||||||
RT298_SET_AUDIO_POWER, AC_PWRST_D3);
|
RT298_SET_AUDIO_POWER, AC_PWRST_D3);
|
||||||
snd_soc_update_bits(codec,
|
|
||||||
RT298_CBJ_CTRL1, 0x0400, 0x0000);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -137,6 +137,7 @@
|
||||||
#define RT298_A_BIAS_CTRL2 0x02
|
#define RT298_A_BIAS_CTRL2 0x02
|
||||||
#define RT298_POWER_CTRL1 0x03
|
#define RT298_POWER_CTRL1 0x03
|
||||||
#define RT298_A_BIAS_CTRL3 0x04
|
#define RT298_A_BIAS_CTRL3 0x04
|
||||||
|
#define RT298_D_FILTER_CTRL 0x05
|
||||||
#define RT298_POWER_CTRL2 0x08
|
#define RT298_POWER_CTRL2 0x08
|
||||||
#define RT298_I2S_CTRL1 0x09
|
#define RT298_I2S_CTRL1 0x09
|
||||||
#define RT298_I2S_CTRL2 0x0a
|
#define RT298_I2S_CTRL2 0x0a
|
||||||
|
@ -148,6 +149,7 @@
|
||||||
#define RT298_IRQ_CTRL 0x33
|
#define RT298_IRQ_CTRL 0x33
|
||||||
#define RT298_WIND_FILTER_CTRL 0x46
|
#define RT298_WIND_FILTER_CTRL 0x46
|
||||||
#define RT298_PLL_CTRL1 0x49
|
#define RT298_PLL_CTRL1 0x49
|
||||||
|
#define RT298_VAD_CTRL 0x4e
|
||||||
#define RT298_CBJ_CTRL1 0x4f
|
#define RT298_CBJ_CTRL1 0x4f
|
||||||
#define RT298_CBJ_CTRL2 0x50
|
#define RT298_CBJ_CTRL2 0x50
|
||||||
#define RT298_PLL_CTRL 0x63
|
#define RT298_PLL_CTRL 0x63
|
||||||
|
|
Loading…
Reference in New Issue