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

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

Merge "ASoC: wcd9335: Add ANC support on speaker path"

parents 66357514 865796ae
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");
@@ -3822,7 +3824,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);
@@ -3872,6 +3875,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);
@@ -4263,6 +4267,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)
@@ -6923,6 +6956,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"},
@@ -6955,6 +6992,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"},
@@ -10059,12 +10100,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);

@@ -10838,6 +10885,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"),
@@ -10899,10 +10949,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,
@@ -13409,6 +13463,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);