Loading asoc/codecs/wcd934x/wcd934x.c +20 −0 Original line number Diff line number Diff line Loading @@ -2178,6 +2178,18 @@ static void tavil_codec_clear_anc_tx_hold(struct tavil_priv *tavil) tavil_codec_set_tx_hold(tavil->codec, WCD934X_ANA_AMIC4, false); } static void tavil_ocp_control(struct snd_soc_codec *codec, bool enable) { if (enable) { snd_soc_update_bits(codec, WCD934X_HPH_OCP_CTL, 0x10, 0x10); snd_soc_update_bits(codec, WCD934X_RX_OCP_CTL, 0x0F, 0x02); } else { snd_soc_update_bits(codec, WCD934X_RX_OCP_CTL, 0x0F, 0x0F); snd_soc_update_bits(codec, WCD934X_HPH_OCP_CTL, 0x10, 0x00); } } static int tavil_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) Loading @@ -2191,6 +2203,7 @@ static int tavil_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w, switch (event) { case SND_SOC_DAPM_PRE_PMU: tavil_ocp_control(codec, false); if (TAVIL_IS_1_0(tavil->wcd9xxx)) snd_soc_update_bits(codec, WCD934X_HPH_REFBUFF_LP_CTL, 0x06, (0x03 << 1)); Loading Loading @@ -2287,8 +2300,10 @@ static int tavil_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w, ret = tavil_codec_enable_anc(w, kcontrol, event); } tavil_codec_override(codec, tavil->hph_mode, event); tavil_ocp_control(codec, true); break; case SND_SOC_DAPM_PRE_PMD: tavil_ocp_control(codec, false); blocking_notifier_call_chain(&tavil->mbhc->notifier, WCD_EVENT_PRE_HPHR_PA_OFF, &tavil->mbhc->wcd_mbhc); Loading Loading @@ -2327,6 +2342,7 @@ static int tavil_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w, WCD934X_CDC_RX2_RX_PATH_CFG0, 0x10, 0x00); } tavil_ocp_control(codec, true); break; }; Loading @@ -2346,6 +2362,7 @@ static int tavil_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w, switch (event) { case SND_SOC_DAPM_PRE_PMU: tavil_ocp_control(codec, false); if (TAVIL_IS_1_0(tavil->wcd9xxx)) snd_soc_update_bits(codec, WCD934X_HPH_REFBUFF_LP_CTL, 0x06, (0x03 << 1)); Loading Loading @@ -2439,8 +2456,10 @@ static int tavil_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w, ret = tavil_codec_enable_anc(w, kcontrol, event); } tavil_codec_override(codec, tavil->hph_mode, event); tavil_ocp_control(codec, true); break; case SND_SOC_DAPM_PRE_PMD: tavil_ocp_control(codec, false); blocking_notifier_call_chain(&tavil->mbhc->notifier, WCD_EVENT_PRE_HPHL_PA_OFF, &tavil->mbhc->wcd_mbhc); Loading Loading @@ -2480,6 +2499,7 @@ static int tavil_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w, snd_soc_update_bits(codec, WCD934X_CDC_RX1_RX_PATH_CFG0, 0x10, 0x00); } tavil_ocp_control(codec, true); break; }; Loading Loading
asoc/codecs/wcd934x/wcd934x.c +20 −0 Original line number Diff line number Diff line Loading @@ -2178,6 +2178,18 @@ static void tavil_codec_clear_anc_tx_hold(struct tavil_priv *tavil) tavil_codec_set_tx_hold(tavil->codec, WCD934X_ANA_AMIC4, false); } static void tavil_ocp_control(struct snd_soc_codec *codec, bool enable) { if (enable) { snd_soc_update_bits(codec, WCD934X_HPH_OCP_CTL, 0x10, 0x10); snd_soc_update_bits(codec, WCD934X_RX_OCP_CTL, 0x0F, 0x02); } else { snd_soc_update_bits(codec, WCD934X_RX_OCP_CTL, 0x0F, 0x0F); snd_soc_update_bits(codec, WCD934X_HPH_OCP_CTL, 0x10, 0x00); } } static int tavil_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) Loading @@ -2191,6 +2203,7 @@ static int tavil_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w, switch (event) { case SND_SOC_DAPM_PRE_PMU: tavil_ocp_control(codec, false); if (TAVIL_IS_1_0(tavil->wcd9xxx)) snd_soc_update_bits(codec, WCD934X_HPH_REFBUFF_LP_CTL, 0x06, (0x03 << 1)); Loading Loading @@ -2287,8 +2300,10 @@ static int tavil_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w, ret = tavil_codec_enable_anc(w, kcontrol, event); } tavil_codec_override(codec, tavil->hph_mode, event); tavil_ocp_control(codec, true); break; case SND_SOC_DAPM_PRE_PMD: tavil_ocp_control(codec, false); blocking_notifier_call_chain(&tavil->mbhc->notifier, WCD_EVENT_PRE_HPHR_PA_OFF, &tavil->mbhc->wcd_mbhc); Loading Loading @@ -2327,6 +2342,7 @@ static int tavil_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w, WCD934X_CDC_RX2_RX_PATH_CFG0, 0x10, 0x00); } tavil_ocp_control(codec, true); break; }; Loading @@ -2346,6 +2362,7 @@ static int tavil_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w, switch (event) { case SND_SOC_DAPM_PRE_PMU: tavil_ocp_control(codec, false); if (TAVIL_IS_1_0(tavil->wcd9xxx)) snd_soc_update_bits(codec, WCD934X_HPH_REFBUFF_LP_CTL, 0x06, (0x03 << 1)); Loading Loading @@ -2439,8 +2456,10 @@ static int tavil_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w, ret = tavil_codec_enable_anc(w, kcontrol, event); } tavil_codec_override(codec, tavil->hph_mode, event); tavil_ocp_control(codec, true); break; case SND_SOC_DAPM_PRE_PMD: tavil_ocp_control(codec, false); blocking_notifier_call_chain(&tavil->mbhc->notifier, WCD_EVENT_PRE_HPHL_PA_OFF, &tavil->mbhc->wcd_mbhc); Loading Loading @@ -2480,6 +2499,7 @@ static int tavil_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w, snd_soc_update_bits(codec, WCD934X_CDC_RX1_RX_PATH_CFG0, 0x10, 0x00); } tavil_ocp_control(codec, true); break; }; Loading