ASoC: wcd-mbhc: check HPH PA status before impedance detection
If HPH PA is on, the result of impedance detection is not reliable. So check the HPH PA status before impedance detection. CRs-Fixed: 1100622 Change-Id: I9c2063011247cca8105b39c913633cd7619a89eb Signed-off-by: Walter Yang <yandongy@codeaurora.org>
This commit is contained in:
parent
3162449f7d
commit
23a11e9c28
1 changed files with 14 additions and 7 deletions
|
@ -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,
|
static void wcd_mbhc_report_plug(struct wcd_mbhc *mbhc, int insertion,
|
||||||
enum snd_jack_types jack_type)
|
enum snd_jack_types jack_type)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = mbhc->codec;
|
||||||
|
bool is_pa_on = false;
|
||||||
|
|
||||||
WCD_MBHC_RSC_ASSERT_LOCKED(mbhc);
|
WCD_MBHC_RSC_ASSERT_LOCKED(mbhc);
|
||||||
|
|
||||||
pr_debug("%s: enter insertion %d hph_status %x\n",
|
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->micbias_enable) {
|
||||||
if (mbhc->mbhc_cb->mbhc_micbias_control)
|
if (mbhc->mbhc_cb->mbhc_micbias_control)
|
||||||
mbhc->mbhc_cb->mbhc_micbias_control(
|
mbhc->mbhc_cb->mbhc_micbias_control(
|
||||||
mbhc->codec, MIC_BIAS_2,
|
codec, MIC_BIAS_2,
|
||||||
MICB_DISABLE);
|
MICB_DISABLE);
|
||||||
if (mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic)
|
if (mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic)
|
||||||
mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic(
|
mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic(
|
||||||
mbhc->codec,
|
codec,
|
||||||
MIC_BIAS_2, false);
|
MIC_BIAS_2, false);
|
||||||
if (mbhc->mbhc_cb->set_micbias_value) {
|
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);
|
WCD_MBHC_REG_UPDATE_BITS(WCD_MBHC_MICB_CTRL, 0);
|
||||||
}
|
}
|
||||||
mbhc->micbias_enable = false;
|
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->micbias_enable) {
|
||||||
if (mbhc->mbhc_cb->mbhc_micbias_control)
|
if (mbhc->mbhc_cb->mbhc_micbias_control)
|
||||||
mbhc->mbhc_cb->mbhc_micbias_control(
|
mbhc->mbhc_cb->mbhc_micbias_control(
|
||||||
mbhc->codec, MIC_BIAS_2,
|
codec, MIC_BIAS_2,
|
||||||
MICB_DISABLE);
|
MICB_DISABLE);
|
||||||
if (mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic)
|
if (mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic)
|
||||||
mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic(
|
mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic(
|
||||||
mbhc->codec,
|
codec,
|
||||||
MIC_BIAS_2, false);
|
MIC_BIAS_2, false);
|
||||||
if (mbhc->mbhc_cb->set_micbias_value) {
|
if (mbhc->mbhc_cb->set_micbias_value) {
|
||||||
mbhc->mbhc_cb->set_micbias_value(
|
mbhc->mbhc_cb->set_micbias_value(
|
||||||
mbhc->codec);
|
codec);
|
||||||
WCD_MBHC_REG_UPDATE_BITS(
|
WCD_MBHC_REG_UPDATE_BITS(
|
||||||
WCD_MBHC_MICB_CTRL, 0);
|
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)
|
} else if (jack_type == SND_JACK_ANC_HEADPHONE)
|
||||||
mbhc->current_plug = MBHC_PLUG_TYPE_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 &&
|
if (mbhc->impedance_detect &&
|
||||||
mbhc->mbhc_cb->compute_impedance &&
|
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->mbhc_cb->compute_impedance(mbhc,
|
||||||
&mbhc->zl, &mbhc->zr);
|
&mbhc->zl, &mbhc->zr);
|
||||||
if ((mbhc->zl > mbhc->mbhc_cfg->linein_th &&
|
if ((mbhc->zl > mbhc->mbhc_cfg->linein_th &&
|
||||||
|
|
Loading…
Add table
Reference in a new issue