From 2492bad388ae972337129a0dd6719df11efc313a Mon Sep 17 00:00:00 2001 From: Xing Zheng Date: Mon, 13 Sep 2021 18:40:37 +0800 Subject: [PATCH] ASoC: rk3308_codec: fix the leak LINEOUT signal when using HPOUT path Signed-off-by: Xing Zheng Change-Id: Iac3e978e1bf7e1995e270feb7f96da077379b164 --- sound/soc/codecs/rk3308_codec.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/sound/soc/codecs/rk3308_codec.c b/sound/soc/codecs/rk3308_codec.c index b6543c037ad0..31fa38a5280a 100644 --- a/sound/soc/codecs/rk3308_codec.c +++ b/sound/soc/codecs/rk3308_codec.c @@ -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); }