Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3968f84b authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ASoC: wcd934x: Update OCP before HPH PA enable/disable"

parents 3162dd48 3a460702
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -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)
@@ -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));
@@ -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);
@@ -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;
	};

@@ -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));
@@ -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);
@@ -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;
	};