ASoC: rk3308_codec: fix the leak LINEOUT signal when using HPOUT path

Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
Change-Id: Iac3e978e1bf7e1995e270feb7f96da077379b164
This commit is contained in:
Xing Zheng
2021-09-13 18:40:37 +08:00
committed by Tao Huang
parent 0b095228a2
commit 2492bad388

View File

@@ -1467,6 +1467,14 @@ static int rk3308_codec_digital_fadeout(struct rk3308_codec_priv *rk3308)
static int rk3308_codec_dac_lineout_enable(struct rk3308_codec_priv *rk3308)
{
regmap_update_bits(rk3308->regmap, RK3308_DAC_ANA_CON15,
RK3308_DAC_LINEOUT_POP_SOUND_L_MSK |
RK3308_DAC_LINEOUT_POP_SOUND_R_MSK,
RK3308_DAC_L_SEL_LINEOUT_FROM_INTERNAL |
RK3308_DAC_R_SEL_LINEOUT_FROM_INTERNAL);
udelay(20);
/* Step 07 */
regmap_update_bits(rk3308->regmap, RK3308_DAC_ANA_CON04,
RK3308_DAC_L_LINEOUT_EN |
@@ -1503,6 +1511,12 @@ static int rk3308_codec_dac_lineout_disable(struct rk3308_codec_priv *rk3308)
RK3308_DAC_L_LINEOUT_DIS |
RK3308_DAC_R_LINEOUT_DIS);
regmap_update_bits(rk3308->regmap, RK3308_DAC_ANA_CON15,
RK3308_DAC_LINEOUT_POP_SOUND_L_MSK |
RK3308_DAC_LINEOUT_POP_SOUND_R_MSK,
RK3308_DAC_L_SEL_DC_FROM_INTERNAL |
RK3308_DAC_R_SEL_DC_FROM_INTERNAL);
return 0;
}
@@ -1759,11 +1773,20 @@ static int rk3308_codec_dac_enable(struct rk3308_codec_priv *rk3308)
if (rk3308->codec_ver >= ACODEC_VERSION_B) {
/* Step 10 */
regmap_update_bits(rk3308->regmap, RK3308_DAC_ANA_CON15,
if (rk3308->dac_output == DAC_HPOUT) {
regmap_update_bits(rk3308->regmap, RK3308_DAC_ANA_CON15,
RK3308_DAC_LINEOUT_POP_SOUND_L_MSK |
RK3308_DAC_LINEOUT_POP_SOUND_R_MSK,
RK3308_DAC_L_SEL_DC_FROM_INTERNAL |
RK3308_DAC_R_SEL_DC_FROM_INTERNAL);
} else {
/* LINEOUT and LINEOUT + HPOUT */
regmap_update_bits(rk3308->regmap, RK3308_DAC_ANA_CON15,
RK3308_DAC_LINEOUT_POP_SOUND_L_MSK |
RK3308_DAC_LINEOUT_POP_SOUND_R_MSK,
RK3308_DAC_L_SEL_LINEOUT_FROM_INTERNAL |
RK3308_DAC_R_SEL_LINEOUT_FROM_INTERNAL);
}
udelay(20);
}