aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhani Kumar Uppalapati <phaniu@codeaurora.org>2013-12-12 12:26:59 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2014-11-13 16:46:09 -0800
commitf8ed79bcea58e150564ba9c89b0afdf9adb94ba9 (patch)
treef91c76e818f015467c8b9e8f47bdf5c88aacf491
parent546ea3a05cc1d3ff199b15a4530864693ed3e082 (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.c10
-rw-r--r--sound/soc/codecs/wcd9xxx-mbhc.c18
-rw-r--r--sound/soc/codecs/wcd9xxx-mbhc.h4
-rw-r--r--sound/soc/codecs/wcd9xxx-resmgr.c4
-rw-r--r--sound/soc/codecs/wcd9xxx-resmgr.h4
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,
};