ASoC: rt5682: enable fast discharge for headset unplugging
authorShuming Fan <shumingf@realtek.com>
Mon, 11 Jan 2021 09:25:44 +0000 (17:25 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 11 Jan 2021 14:03:51 +0000 (14:03 +0000)
To avoid the pop noise, this patch enables the feature of fast discharge.

Signed-off-by: Shuming Fan <shumingf@realtek.com>
Link: https://lore.kernel.org/r/20210111092544.9064-1-shumingf@realtek.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/rt5682.c

index 4d865ed..42ad5be 100644 (file)
@@ -953,6 +953,8 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert)
                case 0x1:
                case 0x2:
                        rt5682->jack_type = SND_JACK_HEADSET;
+                       snd_soc_component_update_bits(component, RT5682_CBJ_CTRL_1,
+                               RT5682_FAST_OFF_MASK, RT5682_FAST_OFF_EN);
                        rt5682_enable_push_button_irq(component, true);
                        break;
                default:
@@ -982,6 +984,8 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert)
                snd_soc_component_update_bits(component, RT5682_MICBIAS_2,
                        RT5682_PWR_CLK25M_MASK | RT5682_PWR_CLK1M_MASK,
                        RT5682_PWR_CLK25M_PD | RT5682_PWR_CLK1M_PD);
+               snd_soc_component_update_bits(component, RT5682_CBJ_CTRL_1,
+                       RT5682_FAST_OFF_MASK, RT5682_FAST_OFF_DIS);
 
                rt5682->jack_type = 0;
        }
@@ -1012,10 +1016,12 @@ static int rt5682_set_jack_detect(struct snd_soc_component *component,
                switch (rt5682->pdata.jd_src) {
                case RT5682_JD1:
                        snd_soc_component_update_bits(component,
+                               RT5682_CBJ_CTRL_5, 0x0700, 0x0600);
+                       snd_soc_component_update_bits(component,
                                RT5682_CBJ_CTRL_2, RT5682_EXT_JD_SRC,
                                RT5682_EXT_JD_SRC_MANUAL);
                        snd_soc_component_write(component, RT5682_CBJ_CTRL_1,
-                               0xd042);
+                               0xd142);
                        snd_soc_component_update_bits(component,
                                RT5682_CBJ_CTRL_3, RT5682_CBJ_IN_BUF_EN,
                                RT5682_CBJ_IN_BUF_EN);