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

Commit 865796ae authored by Sudheer Papothi's avatar Sudheer Papothi Committed by Gerrit - the friendly Code Review server
Browse files

ASoC: wcd9335: Add ANC support on speaker path



On msmcobalt reference platform, earpiece path is not connected
to receiver, instead speaker path is used as receiver. So handset
AANC(Adaptive Active Noise cancellation) needs to be supported
on speaker path. Change enables ANC support on speaker path.

Change-Id: I8104994adc30810085cce73662f5abd5e15106ad
Signed-off-by: default avatarSudheer Papothi <spapothi@codeaurora.org>
Signed-off-by: default avatarVidyakumar Athota <vathota@codeaurora.org>
parent d2afad6a
Loading
Loading
Loading
Loading
+59 −4
Original line number Diff line number Diff line
@@ -2276,6 +2276,7 @@ static int tasha_put_anc_func(struct snd_kcontrol *kcontrol,
		snd_soc_dapm_enable_pin(dapm, "ANC HPHL");
		snd_soc_dapm_enable_pin(dapm, "ANC EAR PA");
		snd_soc_dapm_enable_pin(dapm, "ANC EAR");
		snd_soc_dapm_enable_pin(dapm, "ANC SPK1 PA");
		snd_soc_dapm_disable_pin(dapm, "LINEOUT2");
		snd_soc_dapm_disable_pin(dapm, "LINEOUT2 PA");
		snd_soc_dapm_disable_pin(dapm, "LINEOUT1");
@@ -2297,6 +2298,7 @@ static int tasha_put_anc_func(struct snd_kcontrol *kcontrol,
		snd_soc_dapm_disable_pin(dapm, "ANC HPHL PA");
		snd_soc_dapm_disable_pin(dapm, "ANC EAR PA");
		snd_soc_dapm_disable_pin(dapm, "ANC EAR");
		snd_soc_dapm_disable_pin(dapm, "ANC SPK1 PA");
		snd_soc_dapm_enable_pin(dapm, "LINEOUT2");
		snd_soc_dapm_enable_pin(dapm, "LINEOUT2 PA");
		snd_soc_dapm_enable_pin(dapm, "LINEOUT1");
@@ -3826,7 +3828,8 @@ static int tasha_codec_enable_anc(struct snd_soc_dapm_widget *w,
		i = 0;
		anc_cal_size = anc_writes_size;

		if (!strcmp(w->name, "RX INT0 DAC"))
		if (!strcmp(w->name, "RX INT0 DAC") ||
		    !strcmp(w->name, "ANC SPK1 PA"))
			tasha_realign_anc_coeff(codec,
					WCD9335_CDC_ANC0_IIR_COEFF_1_CTL,
					WCD9335_CDC_ANC0_IIR_COEFF_2_CTL);
@@ -3876,6 +3879,7 @@ static int tasha_codec_enable_anc(struct snd_soc_dapm_widget *w,
	case SND_SOC_DAPM_POST_PMD:
		if (!strcmp(w->name, "ANC HPHL PA") ||
		    !strcmp(w->name, "ANC EAR PA") ||
		    !strcmp(w->name, "ANC SPK1 PA") ||
		    !strcmp(w->name, "ANC LINEOUT1 PA")) {
			snd_soc_update_bits(codec,
				WCD9335_CDC_ANC0_MODE_1_CTL, 0x30, 0x00);
@@ -4267,6 +4271,35 @@ static int tasha_codec_enable_lineout_pa(struct snd_soc_dapm_widget *w,
	return ret;
}

static int tasha_codec_enable_spk_anc(struct snd_soc_dapm_widget *w,
				      struct snd_kcontrol *kcontrol,
				      int event)
{
	int ret = 0;
	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
	struct tasha_priv *tasha = snd_soc_codec_get_drvdata(codec);

	dev_dbg(codec->dev, "%s %s %d %d\n", __func__, w->name, event,
		tasha->anc_func);

	if (!tasha->anc_func)
		return 0;

	switch (event) {
	case SND_SOC_DAPM_PRE_PMU:
		ret = tasha_codec_enable_anc(w, kcontrol, event);
		snd_soc_update_bits(codec, WCD9335_CDC_RX7_RX_PATH_CFG0,
				    0x10, 0x10);
		break;
	case SND_SOC_DAPM_POST_PMD:
		snd_soc_update_bits(codec, WCD9335_CDC_RX7_RX_PATH_CFG0,
				    0x10, 0x00);
		ret = tasha_codec_enable_anc(w, kcontrol, event);
		break;
	}
	return ret;
}

static int tasha_codec_enable_ear_pa(struct snd_soc_dapm_widget *w,
				     struct snd_kcontrol *kcontrol,
				     int event)
@@ -6919,6 +6952,10 @@ static const struct snd_soc_dapm_route audio_map[] = {
	{"RX INT7 CHAIN", NULL, "RX_BIAS"},
	{"SPK1 OUT", NULL, "RX INT7 CHAIN"},

	{"ANC SPKR PA Enable", "Switch", "RX INT7 CHAIN"},
	{"ANC SPK1 PA", NULL, "ANC SPKR PA Enable"},
	{"SPK1 OUT", NULL, "ANC SPK1 PA"},

	{"SPL SRC3 MUX", "SRC_IN_SPKRR", "RX INT8_1 MIX1"},
	{"RX INT8 SPLINE MIX", NULL, "RX INT8_1 MIX1"},
	{"RX INT8 SPLINE MIX", "SPKRR Switch", "SPL SRC3 MUX"},
@@ -6951,6 +6988,10 @@ static const struct snd_soc_dapm_route audio_map[] = {
	{"ANC EAR Enable", "Switch", "ADC MUX11"},
	{"RX INT0 MIX2", NULL, "ANC EAR Enable"},

	{"ANC OUT EAR SPKR Enable", "Switch", "ADC MUX10"},
	{"ANC OUT EAR SPKR Enable", "Switch", "ADC MUX11"},
	{"RX INT7 MIX2", NULL, "ANC OUT EAR SPKR Enable"},

	{"ANC LINEOUT1 Enable", "Switch", "ADC MUX10"},
	{"ANC LINEOUT1 Enable", "Switch", "ADC MUX11"},
	{"RX INT3 MIX2", NULL, "ANC LINEOUT1 Enable"},
@@ -10023,12 +10064,18 @@ static const struct snd_kcontrol_new anc_hphr_switch =
static const struct snd_kcontrol_new anc_ear_switch =
	SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0);

static const struct snd_kcontrol_new anc_ear_spkr_switch =
	SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0);

static const struct snd_kcontrol_new anc_lineout1_switch =
	SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0);

static const struct snd_kcontrol_new anc_lineout2_switch =
	SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0);

static const struct snd_kcontrol_new anc_spkr_pa_switch =
	SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0);

static const struct snd_kcontrol_new adc_us_mux0_switch =
	SOC_DAPM_SINGLE("US_Switch", SND_SOC_NOPM, 0, 1, 0);

@@ -10794,6 +10841,9 @@ static const struct snd_soc_dapm_widget tasha_dapm_widgets[] = {
				tasha_codec_enable_lineout_pa,
				SND_SOC_DAPM_POST_PMU |
				SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
	SND_SOC_DAPM_PGA_E("ANC SPK1 PA", SND_SOC_NOPM, 0, 0, NULL, 0,
			   tasha_codec_enable_spk_anc,
			   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),

	SND_SOC_DAPM_OUTPUT("HPHL"),
	SND_SOC_DAPM_OUTPUT("HPHR"),
@@ -10855,10 +10905,14 @@ static const struct snd_soc_dapm_widget tasha_dapm_widgets[] = {
			&anc_hphr_switch),
	SND_SOC_DAPM_SWITCH("ANC EAR Enable", SND_SOC_NOPM, 0, 0,
			&anc_ear_switch),
	SND_SOC_DAPM_SWITCH("ANC OUT EAR SPKR Enable", SND_SOC_NOPM, 0, 0,
			    &anc_ear_spkr_switch),
	SND_SOC_DAPM_SWITCH("ANC LINEOUT1 Enable", SND_SOC_NOPM, 0, 0,
			&anc_lineout1_switch),
	SND_SOC_DAPM_SWITCH("ANC LINEOUT2 Enable", SND_SOC_NOPM, 0, 0,
			&anc_lineout2_switch),
	SND_SOC_DAPM_SWITCH("ANC SPKR PA Enable", SND_SOC_NOPM, 0, 0,
			    &anc_spkr_pa_switch),
};

static int tasha_get_channel_map(struct snd_soc_dai *dai,
@@ -13365,6 +13419,7 @@ static int tasha_codec_probe(struct snd_soc_codec *codec)
	snd_soc_dapm_disable_pin(dapm, "ANC HPHR PA");
	snd_soc_dapm_disable_pin(dapm, "ANC EAR PA");
	snd_soc_dapm_disable_pin(dapm, "ANC EAR");
	snd_soc_dapm_disable_pin(dapm, "ANC SPK1 PA");
	mutex_unlock(&tasha->codec_mutex);
	snd_soc_dapm_sync(dapm);