summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorOder Chiou <oder_chiou@realtek.com>2015-08-24 12:32:57 (GMT)
committerMark Brown <broonie@kernel.org>2015-08-25 17:59:47 (GMT)
commit8db7f56ddf2c4571e33756b70a1a8f492c050449 (patch)
tree2f8e3e806fd3d7c23542167baac05c187d98e66c /sound
parent588cd850f5089cb63e031e8d70e9c081b0d97ab2 (diff)
downloadlinux-8db7f56ddf2c4571e33756b70a1a8f492c050449.tar.xz
ASoC: rt5645: Modify the jack detection function to prevent the pop sound while the jack plug in
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>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/codecs/rt5645.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
index ac2f42f..bcb44de 100644
--- a/sound/soc/codecs/rt5645.c
+++ b/sound/soc/codecs/rt5645.c
@@ -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);