diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-12-21 07:30:26 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-12-21 07:30:25 -0800 |
| commit | bd15db7a9b003f2f66e7b92d5c657585fc07428c (patch) | |
| tree | 1d62632178d1ddc4f8c46a114cd12c4a88829af4 | |
| parent | 5b223d1dd37c26a2baad70df65c57838f35a8e51 (diff) | |
| parent | 23a11e9c28d27e9f11bbcd8021b2f4498cba9e67 (diff) | |
Merge "ASoC: wcd-mbhc: check HPH PA status before impedance detection"
| -rw-r--r-- | sound/soc/codecs/wcd-mbhc-v2.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/sound/soc/codecs/wcd-mbhc-v2.c b/sound/soc/codecs/wcd-mbhc-v2.c index debb6c5e52d5..0549b235fade 100644 --- a/sound/soc/codecs/wcd-mbhc-v2.c +++ b/sound/soc/codecs/wcd-mbhc-v2.c @@ -570,6 +570,9 @@ static void wcd_mbhc_hs_elec_irq(struct wcd_mbhc *mbhc, int irq_type, static void wcd_mbhc_report_plug(struct wcd_mbhc *mbhc, int insertion, enum snd_jack_types jack_type) { + struct snd_soc_codec *codec = mbhc->codec; + bool is_pa_on = false; + WCD_MBHC_RSC_ASSERT_LOCKED(mbhc); pr_debug("%s: enter insertion %d hph_status %x\n", @@ -595,14 +598,14 @@ static void wcd_mbhc_report_plug(struct wcd_mbhc *mbhc, int insertion, if (mbhc->micbias_enable) { if (mbhc->mbhc_cb->mbhc_micbias_control) mbhc->mbhc_cb->mbhc_micbias_control( - mbhc->codec, MIC_BIAS_2, + codec, MIC_BIAS_2, MICB_DISABLE); if (mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic) mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic( - mbhc->codec, + codec, MIC_BIAS_2, false); if (mbhc->mbhc_cb->set_micbias_value) { - mbhc->mbhc_cb->set_micbias_value(mbhc->codec); + mbhc->mbhc_cb->set_micbias_value(codec); WCD_MBHC_REG_UPDATE_BITS(WCD_MBHC_MICB_CTRL, 0); } mbhc->micbias_enable = false; @@ -632,15 +635,15 @@ static void wcd_mbhc_report_plug(struct wcd_mbhc *mbhc, int insertion, if (mbhc->micbias_enable) { if (mbhc->mbhc_cb->mbhc_micbias_control) mbhc->mbhc_cb->mbhc_micbias_control( - mbhc->codec, MIC_BIAS_2, + codec, MIC_BIAS_2, MICB_DISABLE); if (mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic) mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic( - mbhc->codec, + codec, MIC_BIAS_2, false); if (mbhc->mbhc_cb->set_micbias_value) { mbhc->mbhc_cb->set_micbias_value( - mbhc->codec); + codec); WCD_MBHC_REG_UPDATE_BITS( WCD_MBHC_MICB_CTRL, 0); } @@ -691,9 +694,13 @@ static void wcd_mbhc_report_plug(struct wcd_mbhc *mbhc, int insertion, } else if (jack_type == SND_JACK_ANC_HEADPHONE) mbhc->current_plug = MBHC_PLUG_TYPE_ANC_HEADPHONE; + if (mbhc->mbhc_cb->hph_pa_on_status) + is_pa_on = mbhc->mbhc_cb->hph_pa_on_status(codec); + if (mbhc->impedance_detect && mbhc->mbhc_cb->compute_impedance && - (mbhc->mbhc_cfg->linein_th != 0)) { + (mbhc->mbhc_cfg->linein_th != 0) && + (!is_pa_on)) { mbhc->mbhc_cb->compute_impedance(mbhc, &mbhc->zl, &mbhc->zr); if ((mbhc->zl > mbhc->mbhc_cfg->linein_th && |
