Commit b7f22478 authored by John Lin's avatar John Lin Committed by Mark Brown

ASoC: rt5645: fix IRQ error in jack detection

IRQ of jack and button detection is abnormal if "LDO2" and
"Mic Det Power" power disable in rt5645_jack_detect.
This patch make these two power keep enabled until jack out.
Signed-off-by: default avatarJohn Lin <john.lin@realtek.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 47ba5bb2
...@@ -2827,20 +2827,6 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert) ...@@ -2827,20 +2827,6 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
val = snd_soc_read(codec, RT5645_IN1_CTRL3) & 0x7; val = snd_soc_read(codec, RT5645_IN1_CTRL3) & 0x7;
dev_dbg(codec->dev, "val = %d\n", val); dev_dbg(codec->dev, "val = %d\n", val);
if (codec->component.card->instantiated) {
if (rt5645->pdata.jd_mode == 0)
snd_soc_dapm_disable_pin(&codec->dapm, "LDO2");
snd_soc_dapm_disable_pin(&codec->dapm,
"Mic Det Power");
snd_soc_dapm_sync(&codec->dapm);
} else {
if (rt5645->pdata.jd_mode == 0)
snd_soc_update_bits(codec, RT5645_PWR_MIXER,
RT5645_PWR_LDO2, 0);
snd_soc_update_bits(codec, RT5645_PWR_VOL,
RT5645_PWR_MIC_DET, 0);
}
if (val == 1 || val == 2) { if (val == 1 || val == 2) {
rt5645->jack_type = SND_JACK_HEADSET; rt5645->jack_type = SND_JACK_HEADSET;
if (rt5645->en_button_func) { if (rt5645->en_button_func) {
...@@ -2848,6 +2834,13 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert) ...@@ -2848,6 +2834,13 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
rt5645_enable_push_button_irq(codec, true); rt5645_enable_push_button_irq(codec, true);
} }
} else { } else {
if (codec->component.card->instantiated) {
snd_soc_dapm_disable_pin(&codec->dapm,
"Mic Det Power");
snd_soc_dapm_sync(&codec->dapm);
} else
regmap_update_bits(rt5645->regmap,
RT5645_PWR_VOL, RT5645_PWR_MIC_DET, 0);
rt5645->jack_type = SND_JACK_HEADPHONE; rt5645->jack_type = SND_JACK_HEADPHONE;
} }
...@@ -2855,6 +2848,23 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert) ...@@ -2855,6 +2848,23 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
rt5645->jack_type = 0; rt5645->jack_type = 0;
if (rt5645->en_button_func) if (rt5645->en_button_func)
rt5645_enable_push_button_irq(codec, false); rt5645_enable_push_button_irq(codec, false);
else {
if (codec->component.card->instantiated) {
if (rt5645->pdata.jd_mode == 0)
snd_soc_dapm_disable_pin(&codec->dapm,
"LDO2");
snd_soc_dapm_disable_pin(&codec->dapm,
"Mic Det Power");
snd_soc_dapm_sync(&codec->dapm);
} else {
if (rt5645->pdata.jd_mode == 0)
regmap_update_bits(rt5645->regmap,
RT5645_PWR_MIXER,
RT5645_PWR_LDO2, 0);
regmap_update_bits(rt5645->regmap,
RT5645_PWR_VOL, RT5645_PWR_MIC_DET, 0);
}
}
} }
return rt5645->jack_type; return rt5645->jack_type;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment