Skip to content

Commit

Permalink
ASoC: rt5682: recording has no sound after booting
Browse files Browse the repository at this point in the history
If ASRC turns on, HW will use clk_dac as the reference clock
whether recording or playback.
Both of clk_dac and clk_adc should set proper clock while using ASRC.

Signed-off-by: Shuming Fan <[email protected]>
Signed-off-by: Mark Brown <[email protected]>
  • Loading branch information
shumingfan authored and broonie committed Mar 18, 2019
1 parent 675212b commit 1c5b6a2
Showing 1 changed file with 5 additions and 9 deletions.
14 changes: 5 additions & 9 deletions sound/soc/codecs/rt5682.c
Original file line number Diff line number Diff line change
Expand Up @@ -1208,7 +1208,7 @@ static int set_filter_clk(struct snd_soc_dapm_widget *w,
struct snd_soc_component *component =
snd_soc_dapm_to_component(w->dapm);
struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
int ref, val, reg, sft, mask, idx = -EINVAL;
int ref, val, reg, idx = -EINVAL;
static const int div_f[] = {1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48};
static const int div_o[] = {1, 2, 4, 6, 8, 12, 16, 24, 32, 48};

Expand All @@ -1222,15 +1222,10 @@ static int set_filter_clk(struct snd_soc_dapm_widget *w,

idx = rt5682_div_sel(rt5682, ref, div_f, ARRAY_SIZE(div_f));

if (w->shift == RT5682_PWR_ADC_S1F_BIT) {
if (w->shift == RT5682_PWR_ADC_S1F_BIT)
reg = RT5682_PLL_TRACK_3;
sft = RT5682_ADC_OSR_SFT;
mask = RT5682_ADC_OSR_MASK;
} else {
else
reg = RT5682_PLL_TRACK_2;
sft = RT5682_DAC_OSR_SFT;
mask = RT5682_DAC_OSR_MASK;
}

snd_soc_component_update_bits(component, reg,
RT5682_FILTER_CLK_DIV_MASK, idx << RT5682_FILTER_CLK_DIV_SFT);
Expand All @@ -1242,7 +1237,8 @@ static int set_filter_clk(struct snd_soc_dapm_widget *w,
}

snd_soc_component_update_bits(component, RT5682_ADDA_CLK_1,
mask, idx << sft);
RT5682_ADC_OSR_MASK | RT5682_DAC_OSR_MASK,
(idx << RT5682_ADC_OSR_SFT) | (idx << RT5682_DAC_OSR_SFT));

return 0;
}
Expand Down

0 comments on commit 1c5b6a2

Please sign in to comment.