Loading asoc/codecs/wcd937x/wcd937x.c +12 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ enum { ALLOW_BUCK_DISABLE, HPH_COMP_DELAY, HPH_PA_DELAY, AMIC2_BCS_ENABLE, }; static const DECLARE_TLV_DB_SCALE(line_gain, 0, 7, 1); Loading Loading @@ -1305,10 +1306,21 @@ static int wcd937x_codec_enable_adc(struct snd_soc_dapm_widget *w, WCD937X_DIGITAL_CDC_ANA_CLK_CTL, 0x08, 0x08); snd_soc_component_update_bits(component, WCD937X_DIGITAL_CDC_ANA_CLK_CTL, 0x10, 0x10); /* Enable BCS for Headset mic */ if (w->shift == 1 && !(snd_soc_component_read32(component, WCD937X_TX_NEW_TX_CH2_SEL) & 0x80)) { wcd937x_tx_connect_port(codec, MBHC, true); set_bit(AMIC2_BCS_ENABLE, &wcd937x->status_mask); } wcd937x_tx_connect_port(component, ADC1 + (w->shift), true); break; case SND_SOC_DAPM_POST_PMD: wcd937x_tx_connect_port(component, ADC1 + (w->shift), false); if (w->shift == 1 && test_bit(AMIC2_BCS_ENABLE, &wcd937x->status_mask)) { wcd937x_tx_connect_port(codec, MBHC, false); clear_bit(AMIC2_BCS_ENABLE, &wcd937x->status_mask); } snd_soc_component_update_bits(component, WCD937X_DIGITAL_CDC_ANA_CLK_CTL, 0x08, 0x00); break; Loading asoc/codecs/wcd938x/wcd938x.c +12 −0 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ enum { ALLOW_BUCK_DISABLE, HPH_COMP_DELAY, HPH_PA_DELAY, AMIC2_BCS_ENABLE, }; enum { Loading Loading @@ -1442,10 +1443,21 @@ static int wcd938x_codec_enable_adc(struct snd_soc_dapm_widget *w, break; } set_bit(w->shift, &wcd938x->status_mask); /* Enable BCS for Headset mic */ if (w->shift == 1 && !(snd_soc_component_read32(component, WCD938X_TX_NEW_AMIC_MUX_CFG) & 0x80)) { wcd938x_tx_connect_port(component, MBHC, true); set_bit(AMIC2_BCS_ENABLE, &wcd938x->status_mask); } wcd938x_tx_connect_port(component, ADC1 + (w->shift), true); break; case SND_SOC_DAPM_POST_PMD: wcd938x_tx_connect_port(component, ADC1 + (w->shift), false); if (w->shift == 1 && test_bit(AMIC2_BCS_ENABLE, &wcd938x->status_mask)) { wcd938x_tx_connect_port(component, MBHC, false); clear_bit(AMIC2_BCS_ENABLE, &wcd938x->status_mask); } snd_soc_component_update_bits(component, WCD938X_DIGITAL_CDC_ANA_CLK_CTL, 0x08, 0x00); clear_bit(w->shift, &wcd938x->status_mask); Loading Loading
asoc/codecs/wcd937x/wcd937x.c +12 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ enum { ALLOW_BUCK_DISABLE, HPH_COMP_DELAY, HPH_PA_DELAY, AMIC2_BCS_ENABLE, }; static const DECLARE_TLV_DB_SCALE(line_gain, 0, 7, 1); Loading Loading @@ -1305,10 +1306,21 @@ static int wcd937x_codec_enable_adc(struct snd_soc_dapm_widget *w, WCD937X_DIGITAL_CDC_ANA_CLK_CTL, 0x08, 0x08); snd_soc_component_update_bits(component, WCD937X_DIGITAL_CDC_ANA_CLK_CTL, 0x10, 0x10); /* Enable BCS for Headset mic */ if (w->shift == 1 && !(snd_soc_component_read32(component, WCD937X_TX_NEW_TX_CH2_SEL) & 0x80)) { wcd937x_tx_connect_port(codec, MBHC, true); set_bit(AMIC2_BCS_ENABLE, &wcd937x->status_mask); } wcd937x_tx_connect_port(component, ADC1 + (w->shift), true); break; case SND_SOC_DAPM_POST_PMD: wcd937x_tx_connect_port(component, ADC1 + (w->shift), false); if (w->shift == 1 && test_bit(AMIC2_BCS_ENABLE, &wcd937x->status_mask)) { wcd937x_tx_connect_port(codec, MBHC, false); clear_bit(AMIC2_BCS_ENABLE, &wcd937x->status_mask); } snd_soc_component_update_bits(component, WCD937X_DIGITAL_CDC_ANA_CLK_CTL, 0x08, 0x00); break; Loading
asoc/codecs/wcd938x/wcd938x.c +12 −0 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ enum { ALLOW_BUCK_DISABLE, HPH_COMP_DELAY, HPH_PA_DELAY, AMIC2_BCS_ENABLE, }; enum { Loading Loading @@ -1442,10 +1443,21 @@ static int wcd938x_codec_enable_adc(struct snd_soc_dapm_widget *w, break; } set_bit(w->shift, &wcd938x->status_mask); /* Enable BCS for Headset mic */ if (w->shift == 1 && !(snd_soc_component_read32(component, WCD938X_TX_NEW_AMIC_MUX_CFG) & 0x80)) { wcd938x_tx_connect_port(component, MBHC, true); set_bit(AMIC2_BCS_ENABLE, &wcd938x->status_mask); } wcd938x_tx_connect_port(component, ADC1 + (w->shift), true); break; case SND_SOC_DAPM_POST_PMD: wcd938x_tx_connect_port(component, ADC1 + (w->shift), false); if (w->shift == 1 && test_bit(AMIC2_BCS_ENABLE, &wcd938x->status_mask)) { wcd938x_tx_connect_port(component, MBHC, false); clear_bit(AMIC2_BCS_ENABLE, &wcd938x->status_mask); } snd_soc_component_update_bits(component, WCD938X_DIGITAL_CDC_ANA_CLK_CTL, 0x08, 0x00); clear_bit(w->shift, &wcd938x->status_mask); Loading