ASoC: rt5645: Modify the jack detection function to prevent the pop sound while the...
authorOder Chiou <oder_chiou@realtek.com>
Mon, 24 Aug 2015 12:32:57 +0000 (20:32 +0800)
committerMark Brown <broonie@kernel.org>
Tue, 25 Aug 2015 17:59:47 +0000 (18:59 +0100)
The patch corrects the sequence of the jack detection. It will prevent the
pop sound while the jack plug in.

Signed-off-by: Oder Chiou <oder_chiou@realtek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/rt5645.c

index ac2f42f..bcb44de 100644 (file)
@@ -2805,14 +2805,15 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
                }
 
                regmap_write(rt5645->regmap, RT5645_JD_CTRL3, 0x00f0);
-               regmap_write(rt5645->regmap, RT5645_IN1_CTRL1, 0x0006);
                regmap_update_bits(rt5645->regmap,
                                   RT5645_IN1_CTRL2, 0x1000, 0x1000);
+               regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL1, 0x0004,
+                       0x0004);
                msleep(100);
                regmap_update_bits(rt5645->regmap,
                                   RT5645_IN1_CTRL2, 0x1000, 0x0000);
 
-               msleep(450);
+               msleep(600);
                regmap_read(rt5645->regmap, RT5645_IN1_CTRL3, &val);
                val &= 0x7;
                dev_dbg(codec->dev, "val = %d\n", val);
@@ -2828,9 +2829,17 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
                        rt5645->jack_type = SND_JACK_HEADPHONE;
                }
 
+               snd_soc_update_bits(codec, RT5645_CHARGE_PUMP, 0x0300, 0x0200);
+               snd_soc_write(codec, RT5645_DEPOP_M1, 0x001d);
+               snd_soc_write(codec, RT5645_DEPOP_M1, 0x0001);
        } else { /* jack out */
                rt5645->jack_type = 0;
 
+               regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL2, 0x1000,
+                       0x1000);
+               regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL1, 0x0004,
+                       0x0000);
+
                if (rt5645->en_button_func)
                        rt5645_enable_push_button_irq(codec, false);