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

Commit 216150a2 authored by Phani Kumar Uppalapati's avatar Phani Kumar Uppalapati
Browse files

ASoC: wcd934x: Update headphone register sequence for wcd934x v1.1



Update codec register sequence for headphone path enable for
wcd934x version 1.1.

Change-Id: I0a16e19f825aa192c12c6c7522e417dd99c68f41
Signed-off-by: default avatarPhani Kumar Uppalapati <phaniu@codeaurora.org>
parent 116d2e85
Loading
Loading
Loading
Loading
+53 −22
Original line number Diff line number Diff line
@@ -1856,6 +1856,7 @@ static int tavil_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w,

	switch (event) {
	case SND_SOC_DAPM_PRE_PMU:
		if (TAVIL_IS_1_0(tavil->wcd9xxx))
			snd_soc_update_bits(codec, WCD934X_HPH_REFBUFF_LP_CTL,
					    0x06, (0x03 << 1));
		set_bit(HPH_PA_DELAY, &tavil->status_mask);
@@ -1919,6 +1920,7 @@ static int tavil_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w,
		blocking_notifier_call_chain(&tavil->mbhc->notifier,
					     WCD_EVENT_POST_HPHR_PA_OFF,
					     &tavil->mbhc->wcd_mbhc);
		if (TAVIL_IS_1_0(tavil->wcd9xxx))
			snd_soc_update_bits(codec, WCD934X_HPH_REFBUFF_LP_CTL,
					    0x06, 0x0);
		break;
@@ -1939,6 +1941,7 @@ static int tavil_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w,

	switch (event) {
	case SND_SOC_DAPM_PRE_PMU:
		if (TAVIL_IS_1_0(tavil->wcd9xxx))
			snd_soc_update_bits(codec, WCD934X_HPH_REFBUFF_LP_CTL,
					    0x06, (0x03 << 1));
		set_bit(HPH_PA_DELAY, &tavil->status_mask);
@@ -2001,6 +2004,7 @@ static int tavil_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w,
		blocking_notifier_call_chain(&tavil->mbhc->notifier,
					     WCD_EVENT_POST_HPHL_PA_OFF,
					     &tavil->mbhc->wcd_mbhc);
		if (TAVIL_IS_1_0(tavil->wcd9xxx))
			snd_soc_update_bits(codec, WCD934X_HPH_REFBUFF_LP_CTL,
					    0x06, 0x0);
		break;
@@ -2127,9 +2131,10 @@ static int tavil_codec_hphr_dac_event(struct snd_soc_dapm_widget *w,
		snd_soc_update_bits(codec, WCD934X_HPH_NEW_INT_HPH_TIMER1,
				    0x02, 0x00);
		/* Set RDAC gain */
		snd_soc_update_bits(codec, WCD934X_HPH_NEW_INT_RDAC_GAIN_CTL,
		if (TAVIL_IS_1_0(tavil->wcd9xxx))
			snd_soc_update_bits(codec,
					    WCD934X_HPH_NEW_INT_RDAC_GAIN_CTL,
					    0xF0, 0x40);

		if (dsd_conf &&
		    (snd_soc_read(codec, WCD934X_CDC_DSD1_PATH_CTL) & 0x01))
			hph_mode = CLS_H_HIFI;
@@ -2152,7 +2157,9 @@ static int tavil_codec_hphr_dac_event(struct snd_soc_dapm_widget *w,
					    WCD934X_SIDO_NEW_VOUT_D_FREQ2,
					    0x01, 0x0);
		/* Re-set RDAC gain */
		snd_soc_update_bits(codec, WCD934X_HPH_NEW_INT_RDAC_GAIN_CTL,
		if (TAVIL_IS_1_0(tavil->wcd9xxx))
			snd_soc_update_bits(codec,
					    WCD934X_HPH_NEW_INT_RDAC_GAIN_CTL,
					    0xF0, 0x0);
		break;
	default:
@@ -2196,7 +2203,9 @@ static int tavil_codec_hphl_dac_event(struct snd_soc_dapm_widget *w,
		snd_soc_update_bits(codec, WCD934X_HPH_NEW_INT_HPH_TIMER1,
				    0x02, 0x00);
		/* Set RDAC gain */
		snd_soc_update_bits(codec, WCD934X_HPH_NEW_INT_RDAC_GAIN_CTL,
		if (TAVIL_IS_1_0(tavil->wcd9xxx))
			snd_soc_update_bits(codec,
					    WCD934X_HPH_NEW_INT_RDAC_GAIN_CTL,
					    0xF0, 0x40);
		if (dsd_conf &&
		    (snd_soc_read(codec, WCD934X_CDC_DSD0_PATH_CTL) & 0x01))
@@ -2220,7 +2229,9 @@ static int tavil_codec_hphl_dac_event(struct snd_soc_dapm_widget *w,
					    WCD934X_SIDO_NEW_VOUT_D_FREQ2,
					    0x01, 0x0);
		/* Re-set RDAC gain */
		snd_soc_update_bits(codec, WCD934X_HPH_NEW_INT_RDAC_GAIN_CTL,
		if (TAVIL_IS_1_0(tavil->wcd9xxx))
			snd_soc_update_bits(codec,
					    WCD934X_HPH_NEW_INT_RDAC_GAIN_CTL,
					    0xF0, 0x0);
		break;
	default:
@@ -2794,11 +2805,15 @@ static void tavil_codec_hphdelay_lutbypass(struct snd_soc_codec *codec,
	}
}

static void tavil_codec_hd2_control(struct snd_soc_codec *codec,
static void tavil_codec_hd2_control(struct tavil_priv *priv,
				    u16 interp_idx, int event)
{
	u16 hd2_scale_reg;
	u16 hd2_enable_reg = 0;
	struct snd_soc_codec *codec = priv->codec;

	if (TAVIL_IS_1_1(priv->wcd9xxx))
		return;

	switch (interp_idx) {
	case INTERP_HPHL:
@@ -2976,7 +2991,7 @@ int tavil_codec_enable_interp_clk(struct snd_soc_codec *codec,
			snd_soc_update_bits(codec, main_reg, 0x20, 0x20);
			tavil_codec_idle_detect_control(codec, interp_idx,
							event);
			tavil_codec_hd2_control(codec, interp_idx, event);
			tavil_codec_hd2_control(tavil, interp_idx, event);
			tavil_codec_hphdelay_lutbypass(codec, interp_idx,
						       event);
			tavil_config_compander(codec, interp_idx, event);
@@ -2991,7 +3006,7 @@ int tavil_codec_enable_interp_clk(struct snd_soc_codec *codec,
			tavil_config_compander(codec, interp_idx, event);
			tavil_codec_hphdelay_lutbypass(codec, interp_idx,
						       event);
			tavil_codec_hd2_control(codec, interp_idx, event);
			tavil_codec_hd2_control(tavil, interp_idx, event);
			tavil_codec_idle_detect_control(codec, interp_idx,
							event);
			/* Clk Disable */
@@ -7828,6 +7843,13 @@ static const struct tavil_reg_mask_val tavil_codec_reg_defaults[] = {
	{WCD934X_HPH_R_TEST, 0x01, 0x01},
};

static const struct tavil_reg_mask_val tavil_codec_reg_init_1_1_val[] = {
	{WCD934X_CDC_COMPANDER1_CTL7, 0x1E, 0x06},
	{WCD934X_CDC_COMPANDER2_CTL7, 0x1E, 0x06},
	{WCD934X_HPH_NEW_INT_RDAC_HD2_CTL_L, 0xFF, 0x84},
	{WCD934X_HPH_NEW_INT_RDAC_HD2_CTL_R, 0xFF, 0x84},
};

static const struct tavil_reg_mask_val tavil_codec_reg_init_common_val[] = {
	{WCD934X_CDC_CLSH_K2_MSB, 0x0F, 0x00},
	{WCD934X_CDC_CLSH_K2_LSB, 0xFF, 0x60},
@@ -7854,8 +7876,9 @@ static const struct tavil_reg_mask_val tavil_codec_reg_init_common_val[] = {
	{WCD934X_CPE_SS_SVA_CFG, 0x60, 0x00},
};

static void tavil_codec_init_reg(struct snd_soc_codec *codec)
static void tavil_codec_init_reg(struct tavil_priv *priv)
{
	struct snd_soc_codec *codec = priv->codec;
	u32 i;

	for (i = 0; i < ARRAY_SIZE(tavil_codec_reg_init_common_val); i++)
@@ -7863,6 +7886,14 @@ static void tavil_codec_init_reg(struct snd_soc_codec *codec)
				    tavil_codec_reg_init_common_val[i].reg,
				    tavil_codec_reg_init_common_val[i].mask,
				    tavil_codec_reg_init_common_val[i].val);

	if (TAVIL_IS_1_1(priv->wcd9xxx)) {
		for (i = 0; i < ARRAY_SIZE(tavil_codec_reg_init_1_1_val); i++)
			snd_soc_update_bits(codec,
					tavil_codec_reg_init_1_1_val[i].reg,
					tavil_codec_reg_init_1_1_val[i].mask,
					tavil_codec_reg_init_1_1_val[i].val);
	}
}

static void tavil_update_reg_defaults(struct tavil_priv *tavil)
@@ -8361,7 +8392,7 @@ static int tavil_soc_codec_probe(struct snd_soc_codec *codec)
	for (i = 0; i < COMPANDER_MAX; i++)
		tavil->comp_enabled[i] = 0;

	tavil_codec_init_reg(codec);
	tavil_codec_init_reg(tavil);
	tavil_enable_sido_buck(codec);

	pdata = dev_get_platdata(codec->dev->parent);
+3 −2
Original line number Diff line number Diff line
@@ -369,6 +369,7 @@ static inline void wcd_clsh_gm3_boost_disable(struct snd_soc_codec *codec,

	if (mode == CLS_H_HIFI || mode == CLS_H_LOHIFI ||
	    mode == CLS_AB_HIFI || mode == CLS_AB) {
		if (TAVIL_IS_1_0(wcd9xxx))
			snd_soc_update_bits(codec, WCD9XXX_HPH_CNP_WG_CTL,
					    0x80, 0x0); /* disable GM3 Boost */
		snd_soc_update_bits(codec, WCD9XXX_FLYBACK_VNEG_CTRL_4,