ASoC: rt5645: improve headphone pop when system resumes from S3
authorJohn Lin <john.lin@realtek.com>
Thu, 25 Feb 2016 05:18:26 +0000 (13:18 +0800)
committerMark Brown <broonie@kernel.org>
Fri, 26 Feb 2016 02:05:23 +0000 (11:05 +0900)
When playing audio through headphone, headphone makes pop noise if system
resumes from S3 to S0. We modify the sequence of writing register for
avoiding pop sound.

Signed-off-by: John Lin <john.lin@realtek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/rt5645.c

index c61d38b585fb06de6b6ca0f41370c3b78c10113c..c3dc371a7ef3bf0678f002c2e4d4c9c1728c6b96 100644 (file)
@@ -3029,13 +3029,18 @@ static int rt5645_set_bias_level(struct snd_soc_codec *codec,
                        RT5645_PWR_BG | RT5645_PWR_VREF2,
                        RT5645_PWR_VREF1 | RT5645_PWR_MB |
                        RT5645_PWR_BG | RT5645_PWR_VREF2);
+               mdelay(10);
                snd_soc_update_bits(codec, RT5645_PWR_ANLG1,
                        RT5645_PWR_FV1 | RT5645_PWR_FV2,
                        RT5645_PWR_FV1 | RT5645_PWR_FV2);
-               if (rt5645->en_button_func &&
-                       snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_OFF)
-                       queue_delayed_work(system_power_efficient_wq,
-                               &rt5645->jack_detect_work, msecs_to_jiffies(0));
+               if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_OFF) {
+                       snd_soc_write(codec, RT5645_DEPOP_M2, 0x1140);
+                       msleep(40);
+                       if (rt5645->en_button_func)
+                               queue_delayed_work(system_power_efficient_wq,
+                                       &rt5645->jack_detect_work,
+                                       msecs_to_jiffies(0));
+               }
                break;
 
        case SND_SOC_BIAS_OFF: