diff options
| author | Phani Kumar Uppalapati <phaniu@codeaurora.org> | 2013-12-12 12:26:59 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2014-11-13 16:46:09 -0800 |
| commit | f8ed79bcea58e150564ba9c89b0afdf9adb94ba9 (patch) | |
| tree | f91c76e818f015467c8b9e8f47bdf5c88aacf491 | |
| parent | 546ea3a05cc1d3ff199b15a4530864693ed3e082 (diff) | |
ASoC: wcd9xxx: Notify mbhc when TX1/IN1 path is enabled
Notification is sent to mbhc whenever TX1/IN1 path is used
for audio capture. MBHC then will switch to VDDIO if headset
is inserted. This is to avoid polling noise that gets captured
in the recorded audio due to noise coupling in hardware b/w
TX2 and TX1 paths.
Change-Id: Iac40f41572d1417d2afdc55438d86c047710824f
Signed-off-by: Phani Kumar Uppalapati <phaniu@codeaurora.org>
| -rw-r--r-- | sound/soc/codecs/wcd9306.c | 10 | ||||
| -rw-r--r-- | sound/soc/codecs/wcd9xxx-mbhc.c | 18 | ||||
| -rw-r--r-- | sound/soc/codecs/wcd9xxx-mbhc.h | 4 | ||||
| -rw-r--r-- | sound/soc/codecs/wcd9xxx-resmgr.c | 4 | ||||
| -rw-r--r-- | sound/soc/codecs/wcd9xxx-resmgr.h | 4 |
5 files changed, 21 insertions, 19 deletions
diff --git a/sound/soc/codecs/wcd9306.c b/sound/soc/codecs/wcd9306.c index 040168deb84..83d768e79cb 100644 --- a/sound/soc/codecs/wcd9306.c +++ b/sound/soc/codecs/wcd9306.c @@ -1916,9 +1916,10 @@ static int tapan_codec_enable_adc(struct snd_soc_dapm_widget *w, switch (event) { case SND_SOC_DAPM_PRE_PMU: - if (w->reg == TAPAN_A_TX_3_EN) + if (w->reg == TAPAN_A_TX_3_EN || + w->reg == TAPAN_A_TX_1_EN) wcd9xxx_resmgr_notifier_call(&tapan->resmgr, - WCD9XXX_EVENT_PRE_TX_3_ON); + WCD9XXX_EVENT_PRE_TX_1_3_ON); snd_soc_update_bits(codec, adc_reg, 1 << init_bit_shift, 1 << init_bit_shift); break; @@ -1928,9 +1929,10 @@ static int tapan_codec_enable_adc(struct snd_soc_dapm_widget *w, break; case SND_SOC_DAPM_POST_PMD: - if (w->reg == TAPAN_A_TX_3_EN) + if (w->reg == TAPAN_A_TX_3_EN || + w->reg == TAPAN_A_TX_1_EN) wcd9xxx_resmgr_notifier_call(&tapan->resmgr, - WCD9XXX_EVENT_POST_TX_3_OFF); + WCD9XXX_EVENT_POST_TX_1_3_OFF); break; } return 0; diff --git a/sound/soc/codecs/wcd9xxx-mbhc.c b/sound/soc/codecs/wcd9xxx-mbhc.c index 9883da20870..a0266582082 100644 --- a/sound/soc/codecs/wcd9xxx-mbhc.c +++ b/sound/soc/codecs/wcd9xxx-mbhc.c @@ -2330,9 +2330,9 @@ static void wcd9xxx_find_plug_and_report(struct wcd9xxx_mbhc *mbhc, * source to VDDIO */ if (mbhc->event_state & - (1 << MBHC_EVENT_PA_HPHL | 1 << MBHC_EVENT_PA_HPHR)) - __wcd9xxx_switch_micbias(mbhc, 1, false, - false); + (1 << MBHC_EVENT_PA_HPHL | 1 << MBHC_EVENT_PA_HPHR | + 1 << MBHC_EVENT_PRE_TX_1_3_ON)) + __wcd9xxx_switch_micbias(mbhc, 1, false, false); wcd9xxx_start_hs_polling(mbhc); } else if (plug_type == PLUG_TYPE_HIGH_HPH) { if (mbhc->mbhc_cfg->detect_extn_cable) { @@ -4643,7 +4643,7 @@ static int wcd9xxx_event_notify(struct notifier_block *self, unsigned long val, hphlocp_off_report(mbhc, SND_JACK_OC_HPHL); if (!(mbhc->event_state & (1 << MBHC_EVENT_PA_HPHL | 1 << MBHC_EVENT_PA_HPHR | - 1 << MBHC_EVENT_PRE_TX_3_ON))) + 1 << MBHC_EVENT_PRE_TX_1_3_ON))) wcd9xxx_switch_micbias(mbhc, 0); break; case WCD9XXX_EVENT_POST_HPHR_PA_OFF: @@ -4655,7 +4655,7 @@ static int wcd9xxx_event_notify(struct notifier_block *self, unsigned long val, hphrocp_off_report(mbhc, SND_JACK_OC_HPHL); if (!(mbhc->event_state & (1 << MBHC_EVENT_PA_HPHL | 1 << MBHC_EVENT_PA_HPHR | - 1 << MBHC_EVENT_PRE_TX_3_ON))) + 1 << MBHC_EVENT_PRE_TX_1_3_ON))) wcd9xxx_switch_micbias(mbhc, 0); break; /* Clock usage change */ @@ -4737,23 +4737,23 @@ static int wcd9xxx_event_notify(struct notifier_block *self, unsigned long val, case WCD9XXX_EVENT_POST_BG_MBHC_ON: /* Not used for now */ break; - case WCD9XXX_EVENT_PRE_TX_3_ON: + case WCD9XXX_EVENT_PRE_TX_1_3_ON: /* * if polling is ON, mbhc micbias not enabled * switch micbias source to VDDIO */ - set_bit(MBHC_EVENT_PRE_TX_3_ON, &mbhc->event_state); + set_bit(MBHC_EVENT_PRE_TX_1_3_ON, &mbhc->event_state); if (!(snd_soc_read(codec, mbhc->mbhc_bias_regs.ctl_reg) & 0x80) && mbhc->polling_active && !mbhc->mbhc_micbias_switched) wcd9xxx_switch_micbias(mbhc, 1); break; - case WCD9XXX_EVENT_POST_TX_3_OFF: + case WCD9XXX_EVENT_POST_TX_1_3_OFF: /* * Switch back to micbias if HPH PA or TX3 path * is disabled */ - clear_bit(MBHC_EVENT_PRE_TX_3_ON, &mbhc->event_state); + clear_bit(MBHC_EVENT_PRE_TX_1_3_ON, &mbhc->event_state); if (mbhc->polling_active && mbhc->mbhc_micbias_switched && !(mbhc->event_state & (1 << MBHC_EVENT_PA_HPHL | 1 << MBHC_EVENT_PA_HPHR))) diff --git a/sound/soc/codecs/wcd9xxx-mbhc.h b/sound/soc/codecs/wcd9xxx-mbhc.h index f27a28094a0..9d54e36d905 100644 --- a/sound/soc/codecs/wcd9xxx-mbhc.h +++ b/sound/soc/codecs/wcd9xxx-mbhc.h @@ -139,8 +139,8 @@ enum wcd9xxx_mbhc_clk_freq { enum wcd9xxx_mbhc_event_state { MBHC_EVENT_PA_HPHL, MBHC_EVENT_PA_HPHR, - MBHC_EVENT_PRE_TX_3_ON, - MBHC_EVENT_POST_TX_3_OFF, + MBHC_EVENT_PRE_TX_1_3_ON, + MBHC_EVENT_POST_TX_1_3_OFF, }; struct wcd9xxx_mbhc_general_cfg { diff --git a/sound/soc/codecs/wcd9xxx-resmgr.c b/sound/soc/codecs/wcd9xxx-resmgr.c index 70346a3bb8b..b849f0fa09b 100644 --- a/sound/soc/codecs/wcd9xxx-resmgr.c +++ b/sound/soc/codecs/wcd9xxx-resmgr.c @@ -93,8 +93,8 @@ static char wcd9xxx_event_string[][64] = { "WCD9XXX_EVENT_POST_RESUME", - "WCD9XXX_EVENT_PRE_TX_3_ON", - "WCD9XXX_EVENT_POST_TX_3_OFF", + "WCD9XXX_EVENT_PRE_TX_1_3_ON", + "WCD9XXX_EVENT_POST_TX_1_3_OFF", "WCD9XXX_EVENT_LAST", }; diff --git a/sound/soc/codecs/wcd9xxx-resmgr.h b/sound/soc/codecs/wcd9xxx-resmgr.h index a9c221059ad..e7ad1bf6ce0 100644 --- a/sound/soc/codecs/wcd9xxx-resmgr.h +++ b/sound/soc/codecs/wcd9xxx-resmgr.h @@ -112,8 +112,8 @@ enum wcd9xxx_notify_event { WCD9XXX_EVENT_POST_RESUME, - WCD9XXX_EVENT_PRE_TX_3_ON, - WCD9XXX_EVENT_POST_TX_3_OFF, + WCD9XXX_EVENT_PRE_TX_1_3_ON, + WCD9XXX_EVENT_POST_TX_1_3_OFF, WCD9XXX_EVENT_LAST, }; |
