Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2ece73fe authored by Shuming Fan's avatar Shuming Fan Committed by Greg Kroah-Hartman
Browse files

ASoC: rt5682: recording has no sound after booting



[ Upstream commit 1c5b6a27e432e4fe170a924c8b41012271496a4c ]

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>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent afcbb3c7
Loading
Loading
Loading
Loading
+5 −9
Original line number Diff line number Diff line
@@ -1196,7 +1196,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};

@@ -1210,15 +1210,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);
@@ -1230,7 +1225,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;
}