forked from Minki/linux
ASoC: rt5682s: add delay time to fix pop sound issue
There is a pop noise at the beginning of the capture data. This patch adds the delay time before stereo1 ADC unmute to fix the pop sound issue. Signed-off-by: Shuming Fan <shumingf@realtek.com> Link: https://lore.kernel.org/r/20211208101718.28945-1-shumingf@realtek.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
639cd58be7
commit
7cfa3d0073
@ -40,6 +40,7 @@ struct rt5682s_platform_data {
|
||||
enum rt5682s_jd_src jd_src;
|
||||
unsigned int dmic_clk_rate;
|
||||
unsigned int dmic_delay;
|
||||
unsigned int amic_delay;
|
||||
bool dmic_clk_driving_high;
|
||||
|
||||
const char *dai_clk_names[RT5682S_DAI_NUM_CLKS];
|
||||
|
@ -1367,6 +1367,31 @@ static int rt5682s_hp_amp_event(struct snd_soc_dapm_widget *w,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rt5682s_stereo1_adc_mixl_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event)
|
||||
{
|
||||
struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
|
||||
struct rt5682s_priv *rt5682s = snd_soc_component_get_drvdata(component);
|
||||
unsigned int delay = 0;
|
||||
|
||||
if (rt5682s->pdata.amic_delay)
|
||||
delay = rt5682s->pdata.amic_delay;
|
||||
|
||||
switch (event) {
|
||||
case SND_SOC_DAPM_POST_PMU:
|
||||
msleep(delay);
|
||||
snd_soc_component_update_bits(component, RT5682S_STO1_ADC_DIG_VOL,
|
||||
RT5682S_L_MUTE, 0);
|
||||
break;
|
||||
case SND_SOC_DAPM_PRE_PMD:
|
||||
snd_soc_component_update_bits(component, RT5682S_STO1_ADC_DIG_VOL,
|
||||
RT5682S_L_MUTE, RT5682S_L_MUTE);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sar_power_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event)
|
||||
{
|
||||
@ -1680,9 +1705,10 @@ static const struct snd_soc_dapm_widget rt5682s_dapm_widgets[] = {
|
||||
/* ADC Mixer */
|
||||
SND_SOC_DAPM_SUPPLY("ADC Stereo1 Filter", RT5682S_PWR_DIG_2,
|
||||
RT5682S_PWR_ADC_S1F_BIT, 0, set_filter_clk, SND_SOC_DAPM_PRE_PMU),
|
||||
SND_SOC_DAPM_MIXER("Stereo1 ADC MIXL", RT5682S_STO1_ADC_DIG_VOL,
|
||||
RT5682S_L_MUTE_SFT, 1, rt5682s_sto1_adc_l_mix,
|
||||
ARRAY_SIZE(rt5682s_sto1_adc_l_mix)),
|
||||
SND_SOC_DAPM_MIXER_E("Stereo1 ADC MIXL", SND_SOC_NOPM, 0, 0,
|
||||
rt5682s_sto1_adc_l_mix, ARRAY_SIZE(rt5682s_sto1_adc_l_mix),
|
||||
rt5682s_stereo1_adc_mixl_event,
|
||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
||||
SND_SOC_DAPM_MIXER("Stereo1 ADC MIXR", RT5682S_STO1_ADC_DIG_VOL,
|
||||
RT5682S_R_MUTE_SFT, 1, rt5682s_sto1_adc_r_mix,
|
||||
ARRAY_SIZE(rt5682s_sto1_adc_r_mix)),
|
||||
@ -2885,6 +2911,8 @@ static int rt5682s_parse_dt(struct rt5682s_priv *rt5682s, struct device *dev)
|
||||
&rt5682s->pdata.dmic_clk_rate);
|
||||
device_property_read_u32(dev, "realtek,dmic-delay-ms",
|
||||
&rt5682s->pdata.dmic_delay);
|
||||
device_property_read_u32(dev, "realtek,amic-delay-ms",
|
||||
&rt5682s->pdata.amic_delay);
|
||||
|
||||
rt5682s->pdata.ldo1_en = of_get_named_gpio(dev->of_node,
|
||||
"realtek,ldo1-en-gpios", 0);
|
||||
|
Loading…
Reference in New Issue
Block a user