mirror of https://gitee.com/openkylin/linux.git
ASoC: rt5514: Move the auto disable DSP function to set_bias_level()
Move the auto disable DSP function from the widget event "DAPM Pre" to the set_bias_level() function to avoid the unexpected behavior. While the SPI was recording using the DAI "rt5514-dsp-cpu-dai", the event "DAPM Pre" would be manipulated even the DAPM widgets were not connected, and it also would power off the DSP that cause the DSP buffered data lost. So the auto disable DSP function should move to the set_bias_level() function to make sure that it is only manipulated by the DAPM widgets are connected. Signed-off-by: Oder Chiou <oder_chiou@realtek.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
5771a8c088
commit
ea4daf81fc
|
@ -471,35 +471,6 @@ static int rt5514_is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int rt5514_pre_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);
|
||||
struct rt5514_priv *rt5514 = snd_soc_codec_get_drvdata(codec);
|
||||
|
||||
switch (event) {
|
||||
case SND_SOC_DAPM_PRE_PMU:
|
||||
/**
|
||||
* If the DSP is enabled in start of recording, the DSP
|
||||
* should be disabled, and sync back to normal recording
|
||||
* settings to make sure recording properly.
|
||||
*/
|
||||
if (rt5514->dsp_enabled) {
|
||||
rt5514->dsp_enabled = 0;
|
||||
regmap_multi_reg_write(rt5514->i2c_regmap,
|
||||
rt5514_i2c_patch, ARRAY_SIZE(rt5514_i2c_patch));
|
||||
regcache_mark_dirty(rt5514->regmap);
|
||||
regcache_sync(rt5514->regmap);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct snd_soc_dapm_widget rt5514_dapm_widgets[] = {
|
||||
/* Input Lines */
|
||||
SND_SOC_DAPM_INPUT("DMIC1L"),
|
||||
|
@ -607,8 +578,6 @@ static const struct snd_soc_dapm_widget rt5514_dapm_widgets[] = {
|
|||
|
||||
/* Audio Interface */
|
||||
SND_SOC_DAPM_AIF_OUT("AIF1TX", "AIF1 Capture", 0, SND_SOC_NOPM, 0, 0),
|
||||
|
||||
SND_SOC_DAPM_PRE("DAPM Pre", rt5514_pre_event),
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_route rt5514_dapm_routes[] = {
|
||||
|
@ -975,6 +944,24 @@ static int rt5514_set_bias_level(struct snd_soc_codec *codec,
|
|||
}
|
||||
break;
|
||||
|
||||
case SND_SOC_BIAS_STANDBY:
|
||||
if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_OFF) {
|
||||
/*
|
||||
* If the DSP is enabled in start of recording, the DSP
|
||||
* should be disabled, and sync back to normal recording
|
||||
* settings to make sure recording properly.
|
||||
*/
|
||||
if (rt5514->dsp_enabled) {
|
||||
rt5514->dsp_enabled = 0;
|
||||
regmap_multi_reg_write(rt5514->i2c_regmap,
|
||||
rt5514_i2c_patch,
|
||||
ARRAY_SIZE(rt5514_i2c_patch));
|
||||
regcache_mark_dirty(rt5514->regmap);
|
||||
regcache_sync(rt5514->regmap);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue