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

Commit a26e7432 authored by Bhalchandra Gajare's avatar Bhalchandra Gajare
Browse files

ASoC: wcd934x: fix MAD enable sequence for ADC2



Microphone Activity Detection (MAD) hardware block in codec needs to
be in micbias mode and bandgap must be enabled whenever the input
to the MAD block is from ADC2. Change updates the codec register
sequence for MAD Input mixer control accordingly.

CRs-Fixed: 1085214
Change-Id: Ic57b1db8688ff634ed7d62279baa7c042d126550
Signed-off-by: default avatarBhalchandra Gajare <gajare@codeaurora.org>
parent 85d7e134
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -5049,14 +5049,18 @@ static int tavil_mad_input_put(struct snd_kcontrol *kcontrol,
	u32 adc, i, mic_bias_found = 0;
	int ret = 0;
	char *mad_input;
	bool is_adc2_input = false;

	tavil_mad_input = ucontrol->value.integer.value[0];

	if (strnstr(tavil_conn_mad_text[tavil_mad_input], "NOTUSED",
				sizeof("NOTUSED"))) {
		dev_err(codec->dev,
		dev_dbg(codec->dev,
			"%s: Unsupported tavil_mad_input = %s\n",
			__func__, tavil_conn_mad_text[tavil_mad_input]);
		/* Make sure the MAD register is updated */
		snd_soc_update_bits(codec, WCD934X_ANA_MAD_SETUP,
				    0x88, 0x00);
		return -EINVAL;
	}

@@ -5085,14 +5089,16 @@ static int tavil_mad_input_put(struct snd_kcontrol *kcontrol,
		snprintf(mad_amic_input_widget, 6, "%s%u", "AMIC", adc);

		mad_input_widget = mad_amic_input_widget;
		if (adc == 2)
			is_adc2_input = true;
	} else {
		/* DMIC type input widget*/
		mad_input_widget = tavil_conn_mad_text[tavil_mad_input];
	}

	dev_dbg(codec->dev,
		"%s: tavil input widget = %s\n", __func__,
		mad_input_widget);
		"%s: tavil input widget = %s, adc_input = %s\n", __func__,
		mad_input_widget, is_adc2_input ? "true" : "false");

	for (i = 0; i < card->num_of_dapm_routes; i++) {
		if (!strcmp(card->of_dapm_routes[i].sink, mad_input_widget)) {
@@ -5137,7 +5143,13 @@ static int tavil_mad_input_put(struct snd_kcontrol *kcontrol,
			    0x0F, tavil_mad_input);
	snd_soc_update_bits(codec, WCD934X_ANA_MAD_SETUP,
			    0x07, mic_bias_found);

	/* for adc2 input, mad should be in micbias mode with BG enabled */
	if (is_adc2_input)
		snd_soc_update_bits(codec, WCD934X_ANA_MAD_SETUP,
				    0x88, 0x88);
	else
		snd_soc_update_bits(codec, WCD934X_ANA_MAD_SETUP,
				    0x88, 0x00);
	return 0;
}