Commit 1c5b6a27 authored by Shuming Fan's avatar Shuming Fan Committed by Mark Brown

ASoC: rt5682: recording has no sound after booting

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: default avatarShuming Fan <shumingf@realtek.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 675212bf
...@@ -1208,7 +1208,7 @@ static int set_filter_clk(struct snd_soc_dapm_widget *w, ...@@ -1208,7 +1208,7 @@ static int set_filter_clk(struct snd_soc_dapm_widget *w,
struct snd_soc_component *component = struct snd_soc_component *component =
snd_soc_dapm_to_component(w->dapm); snd_soc_dapm_to_component(w->dapm);
struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); 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_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}; static const int div_o[] = {1, 2, 4, 6, 8, 12, 16, 24, 32, 48};
...@@ -1222,15 +1222,10 @@ static int set_filter_clk(struct snd_soc_dapm_widget *w, ...@@ -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)); 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; reg = RT5682_PLL_TRACK_3;
sft = RT5682_ADC_OSR_SFT; else
mask = RT5682_ADC_OSR_MASK;
} else {
reg = RT5682_PLL_TRACK_2; reg = RT5682_PLL_TRACK_2;
sft = RT5682_DAC_OSR_SFT;
mask = RT5682_DAC_OSR_MASK;
}
snd_soc_component_update_bits(component, reg, snd_soc_component_update_bits(component, reg,
RT5682_FILTER_CLK_DIV_MASK, idx << RT5682_FILTER_CLK_DIV_SFT); RT5682_FILTER_CLK_DIV_MASK, idx << RT5682_FILTER_CLK_DIV_SFT);
...@@ -1242,7 +1237,8 @@ static int set_filter_clk(struct snd_soc_dapm_widget *w, ...@@ -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, 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; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment