Loading sound/soc/codecs/wcd-mbhc-v2.c +26 −5 Original line number Diff line number Diff line Loading @@ -315,12 +315,17 @@ out_micb_en: mbhc->is_hs_recording); break; case WCD_EVENT_POST_MICBIAS_2_OFF: if (!mbhc->mbhc_cb->mbhc_micbias_control) mbhc->is_hs_recording = false; if (mbhc->micbias_enable) { wcd_enable_curr_micbias(mbhc, WCD_MBHC_EN_MB); break; } if (mbhc->mbhc_cb->set_auto_zeroing) mbhc->mbhc_cb->set_auto_zeroing(codec, false); if (mbhc->mbhc_cb->set_micbias_value) if (mbhc->mbhc_cb->set_micbias_value && !mbhc->micbias_enable) mbhc->mbhc_cb->set_micbias_value(codec); if (!mbhc->mbhc_cb->mbhc_micbias_control) mbhc->is_hs_recording = false; /* Enable PULL UP if PA's are enabled */ if ((test_bit(WCD_MBHC_EVENT_PA_HPHL, &mbhc->event_state)) || (test_bit(WCD_MBHC_EVENT_PA_HPHR, Loading Loading @@ -578,6 +583,10 @@ static void wcd_mbhc_report_plug(struct wcd_mbhc *mbhc, int insertion, mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic( mbhc->codec, MIC_BIAS_2, false); if (mbhc->mbhc_cb->set_micbias_value) { mbhc->mbhc_cb->set_micbias_value(mbhc->codec); WCD_MBHC_REG_UPDATE_BITS(WCD_MBHC_MICB_CTRL, 0); } mbhc->micbias_enable = false; } Loading Loading @@ -611,6 +620,12 @@ static void wcd_mbhc_report_plug(struct wcd_mbhc *mbhc, int insertion, mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic( mbhc->codec, MIC_BIAS_2, false); if (mbhc->mbhc_cb->set_micbias_value) { mbhc->mbhc_cb->set_micbias_value( mbhc->codec); WCD_MBHC_REG_UPDATE_BITS( WCD_MBHC_MICB_CTRL, 0); } mbhc->micbias_enable = false; } mbhc->hph_type = WCD_MBHC_HPH_NONE; Loading Loading @@ -979,7 +994,7 @@ static bool wcd_is_special_headset(struct wcd_mbhc *mbhc) mbhc->mbhc_cb->mbhc_common_micb_ctrl(codec, MBHC_COMMON_MICB_PRECHARGE, false); if (mbhc->mbhc_cb->set_micbias_value) if (mbhc->mbhc_cb->set_micbias_value && !mbhc->micbias_enable) mbhc->mbhc_cb->set_micbias_value(codec); if (mbhc->mbhc_cb->set_auto_zeroing) mbhc->mbhc_cb->set_auto_zeroing(codec, false); Loading Loading @@ -1039,7 +1054,7 @@ static void wcd_enable_mbhc_supply(struct wcd_mbhc *mbhc, wcd_enable_curr_micbias(mbhc, WCD_MBHC_EN_MB); } else { if (plug_type == MBHC_PLUG_TYPE_HEADSET) { if (mbhc->is_hs_recording) if (mbhc->is_hs_recording || mbhc->micbias_enable) wcd_enable_curr_micbias(mbhc, WCD_MBHC_EN_MB); else if ((test_bit(WCD_MBHC_EVENT_PA_HPHL, Loading Loading @@ -1192,6 +1207,9 @@ correct_plug_type: if (mbhc->micbias_enable) { mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic( mbhc->codec, MIC_BIAS_2, false); if (mbhc->mbhc_cb->set_micbias_value) mbhc->mbhc_cb->set_micbias_value( mbhc->codec); mbhc->micbias_enable = false; } goto exit; Loading @@ -1214,6 +1232,9 @@ correct_plug_type: if (mbhc->micbias_enable) { mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic( mbhc->codec, MIC_BIAS_2, false); if (mbhc->mbhc_cb->set_micbias_value) mbhc->mbhc_cb->set_micbias_value( mbhc->codec); mbhc->micbias_enable = false; } goto exit; Loading Loading
sound/soc/codecs/wcd-mbhc-v2.c +26 −5 Original line number Diff line number Diff line Loading @@ -315,12 +315,17 @@ out_micb_en: mbhc->is_hs_recording); break; case WCD_EVENT_POST_MICBIAS_2_OFF: if (!mbhc->mbhc_cb->mbhc_micbias_control) mbhc->is_hs_recording = false; if (mbhc->micbias_enable) { wcd_enable_curr_micbias(mbhc, WCD_MBHC_EN_MB); break; } if (mbhc->mbhc_cb->set_auto_zeroing) mbhc->mbhc_cb->set_auto_zeroing(codec, false); if (mbhc->mbhc_cb->set_micbias_value) if (mbhc->mbhc_cb->set_micbias_value && !mbhc->micbias_enable) mbhc->mbhc_cb->set_micbias_value(codec); if (!mbhc->mbhc_cb->mbhc_micbias_control) mbhc->is_hs_recording = false; /* Enable PULL UP if PA's are enabled */ if ((test_bit(WCD_MBHC_EVENT_PA_HPHL, &mbhc->event_state)) || (test_bit(WCD_MBHC_EVENT_PA_HPHR, Loading Loading @@ -578,6 +583,10 @@ static void wcd_mbhc_report_plug(struct wcd_mbhc *mbhc, int insertion, mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic( mbhc->codec, MIC_BIAS_2, false); if (mbhc->mbhc_cb->set_micbias_value) { mbhc->mbhc_cb->set_micbias_value(mbhc->codec); WCD_MBHC_REG_UPDATE_BITS(WCD_MBHC_MICB_CTRL, 0); } mbhc->micbias_enable = false; } Loading Loading @@ -611,6 +620,12 @@ static void wcd_mbhc_report_plug(struct wcd_mbhc *mbhc, int insertion, mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic( mbhc->codec, MIC_BIAS_2, false); if (mbhc->mbhc_cb->set_micbias_value) { mbhc->mbhc_cb->set_micbias_value( mbhc->codec); WCD_MBHC_REG_UPDATE_BITS( WCD_MBHC_MICB_CTRL, 0); } mbhc->micbias_enable = false; } mbhc->hph_type = WCD_MBHC_HPH_NONE; Loading Loading @@ -979,7 +994,7 @@ static bool wcd_is_special_headset(struct wcd_mbhc *mbhc) mbhc->mbhc_cb->mbhc_common_micb_ctrl(codec, MBHC_COMMON_MICB_PRECHARGE, false); if (mbhc->mbhc_cb->set_micbias_value) if (mbhc->mbhc_cb->set_micbias_value && !mbhc->micbias_enable) mbhc->mbhc_cb->set_micbias_value(codec); if (mbhc->mbhc_cb->set_auto_zeroing) mbhc->mbhc_cb->set_auto_zeroing(codec, false); Loading Loading @@ -1039,7 +1054,7 @@ static void wcd_enable_mbhc_supply(struct wcd_mbhc *mbhc, wcd_enable_curr_micbias(mbhc, WCD_MBHC_EN_MB); } else { if (plug_type == MBHC_PLUG_TYPE_HEADSET) { if (mbhc->is_hs_recording) if (mbhc->is_hs_recording || mbhc->micbias_enable) wcd_enable_curr_micbias(mbhc, WCD_MBHC_EN_MB); else if ((test_bit(WCD_MBHC_EVENT_PA_HPHL, Loading Loading @@ -1192,6 +1207,9 @@ correct_plug_type: if (mbhc->micbias_enable) { mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic( mbhc->codec, MIC_BIAS_2, false); if (mbhc->mbhc_cb->set_micbias_value) mbhc->mbhc_cb->set_micbias_value( mbhc->codec); mbhc->micbias_enable = false; } goto exit; Loading @@ -1214,6 +1232,9 @@ correct_plug_type: if (mbhc->micbias_enable) { mbhc->mbhc_cb->mbhc_micb_ctrl_thr_mic( mbhc->codec, MIC_BIAS_2, false); if (mbhc->mbhc_cb->set_micbias_value) mbhc->mbhc_cb->set_micbias_value( mbhc->codec); mbhc->micbias_enable = false; } goto exit; Loading