From f48ad4780a809fa2030aa12d7a12c40d18fa48be Mon Sep 17 00:00:00 2001 From: Meng Wang Date: Thu, 28 Oct 2021 13:50:39 +0800 Subject: [PATCH] asoc: wcd938x: update logic to close BCS correctly For SVA usecase, BCS is not needed. For other usecase, BCS is enabled. When voicecall and SVA are running concurrently and do device switch between headset-mic and handset-mic, BCS SWR port may not get closed when teardown headset-mic. When closing ADC2, check BCS_STATUS_MASK only and remove check for bcs_disabled flag to make sure BCS SWR port is closed. Change-Id: I01b1cadc0143a4f46eb6a04c3fc8a2509aa13ec3 Signed-off-by: Meng Wang --- asoc/codecs/wcd938x/wcd938x.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/asoc/codecs/wcd938x/wcd938x.c b/asoc/codecs/wcd938x/wcd938x.c index 9dc8e15fc5..3deffb3f5d 100644 --- a/asoc/codecs/wcd938x/wcd938x.c +++ b/asoc/codecs/wcd938x/wcd938x.c @@ -1628,10 +1628,11 @@ static int wcd938x_tx_swr_ctrl(struct snd_soc_dapm_widget *w, /* Check AMIC2 is connected to ADC2 to take an action on BCS */ if (w->shift == ADC2 && !(snd_soc_component_read(component, WCD938X_TX_NEW_AMIC_MUX_CFG) & 0x80)) { - if (!wcd938x->bcs_dis) + if (!wcd938x->bcs_dis) { wcd938x_tx_connect_port(component, MBHC, SWR_CLK_RATE_4P8MHZ, true); - set_bit(AMIC2_BCS_ENABLE, &wcd938x->status_mask); + set_bit(AMIC2_BCS_ENABLE, &wcd938x->status_mask); + } } if (strnstr(w->name, "ADC", sizeof("ADC"))) { set_bit(w->shift - ADC1, &wcd938x->status_mask); @@ -1831,8 +1832,7 @@ static int wcd938x_codec_enable_adc(struct snd_soc_dapm_widget *w, wcd938x_tx_connect_port(component, ADC1 + w->shift, 0, false); if (w->shift + ADC1 == ADC2 && test_bit(AMIC2_BCS_ENABLE, &wcd938x->status_mask)) { - if (!wcd938x->bcs_dis) - wcd938x_tx_connect_port(component, MBHC, 0, + wcd938x_tx_connect_port(component, MBHC, 0, false); clear_bit(AMIC2_BCS_ENABLE, &wcd938x->status_mask); }