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

Commit a93f6698 authored by Aravind Kumar's avatar Aravind Kumar
Browse files

ASoC: msm8x16: update rx path register write sequence



The present code at times disables the pdm clock before
the complete sequence is powered down. The code was designed
in such a way so as to avoid dac being disabled after disabling
the pdm clock.
Alternatively, update the dapm supply widgets by giving
them subsequence id so that the supply widgets are getting
powered down in the correct order to avoid such instances.

CRs-Fixed: 73111
Change-Id: I07f3347b66823633d842f5bea2cd8e0526defa9e
Signed-off-by: default avatarAravind Kumar <akumark@codeaurora.org>
parent d420d8ef
Loading
Loading
Loading
Loading
+12 −37
Original line number Diff line number Diff line
@@ -1821,27 +1821,6 @@ static int msm8x16_wcd_tx_disable_pdm_clk(struct snd_soc_dapm_widget *w,
	}
	return 0;
}
static int msm8x16_wcd_codec_enable_rx1_rx2_dig_clk(
				struct snd_soc_dapm_widget *w,
				struct snd_kcontrol *kcontrol, int event)
{
	struct snd_soc_codec *codec = w->codec;
	struct msm8916_asoc_mach_data *pdata = NULL;

	pdata = snd_soc_card_get_drvdata(codec->card);

	dev_dbg(w->codec->dev, "%s event %d w->name %s\n", __func__,
			event, w->name);
	switch (event) {
	case SND_SOC_DAPM_POST_PMD:
		if (atomic_read(&pdata->mclk_rsc_ref) == 0)
			snd_soc_update_bits(codec,
				MSM8X16_WCD_A_CDC_CLK_PDM_CTL,
				0x03, 0x00);
		break;
	}
	return 0;
}

static int msm8x16_wcd_codec_enable_dig_clk(struct snd_soc_dapm_widget *w,
				     struct snd_kcontrol *kcontrol, int event)
@@ -1898,6 +1877,7 @@ static int msm8x16_wcd_codec_enable_dig_clk(struct snd_soc_dapm_widget *w,
		}
		break;
	case SND_SOC_DAPM_POST_PMD:
		if (msm8x16_wcd->rx_bias_count == 0)
			snd_soc_update_bits(codec,
					MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL,
					0x80, 0x00);
@@ -1909,11 +1889,6 @@ static int msm8x16_wcd_codec_enable_dig_clk(struct snd_soc_dapm_widget *w,
					MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL,
					0x20, 0x00);
		}
		if (atomic_read(&pdata->mclk_rsc_ref) == 0)
			snd_soc_update_bits(codec,
					MSM8X16_WCD_A_CDC_CLK_PDM_CTL,
					0x03, 0x00);
		break;
	}
	return 0;
}
@@ -2689,6 +2664,9 @@ static int msm8x16_wcd_codec_enable_clock_block(struct snd_soc_codec *codec,
	} else {
		snd_soc_update_bits(codec,
			MSM8X16_WCD_A_DIGITAL_CDC_TOP_CLK_CTL, 0x0C, 0x00);
		snd_soc_update_bits(codec,
				MSM8X16_WCD_A_CDC_CLK_PDM_CTL, 0x03, 0x00);

	}
	return 0;
}
@@ -3085,11 +3063,9 @@ static const struct snd_soc_dapm_widget msm8x16_wcd_dapm_widgets[] = {
		SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),

	SND_SOC_DAPM_SUPPLY("RX1 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL,
		0, 0, msm8x16_wcd_codec_enable_rx1_rx2_dig_clk,
		SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
		0, 0, NULL, 0),
	SND_SOC_DAPM_SUPPLY("RX2 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL,
		1, 0, msm8x16_wcd_codec_enable_rx1_rx2_dig_clk,
		SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
		1, 0, NULL, 0),
	SND_SOC_DAPM_SUPPLY("RX3 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL,
		2, 0, msm8x16_wcd_codec_enable_dig_clk, SND_SOC_DAPM_PRE_PMU |
		SND_SOC_DAPM_POST_PMD),
@@ -3146,18 +3122,17 @@ static const struct snd_soc_dapm_widget msm8x16_wcd_dapm_widgets[] = {
		msm8x16_wcd_codec_enable_charge_pump, SND_SOC_DAPM_PRE_PMU |
		SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),

	SND_SOC_DAPM_SUPPLY("RX_BIAS", SND_SOC_NOPM,
	SND_SOC_DAPM_SUPPLY_S("RX_BIAS", 1, SND_SOC_NOPM,
		0, 0, msm8x16_wcd_codec_enable_rx_bias,
		SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),

	SND_SOC_DAPM_SUPPLY("SPK_RX_BIAS",
		SND_SOC_NOPM, 0, 0,
	SND_SOC_DAPM_SUPPLY_S("SPK_RX_BIAS", 1, SND_SOC_NOPM, 0, 0,
		msm8x16_wcd_codec_enable_rx_bias, SND_SOC_DAPM_PRE_PMU |
		SND_SOC_DAPM_POST_PMD),

	/* TX */

	SND_SOC_DAPM_SUPPLY("CDC_CONN", MSM8X16_WCD_A_CDC_CLK_OTHR_CTL,
	SND_SOC_DAPM_SUPPLY_S("CDC_CONN", -2, MSM8X16_WCD_A_CDC_CLK_OTHR_CTL,
		2, 0, NULL, 0),


+1 −1
Original line number Diff line number Diff line
@@ -385,7 +385,7 @@ static int msm8x16_mclk_event(struct snd_soc_dapm_widget *w,

static const struct snd_soc_dapm_widget msm8939_dapm_widgets[] = {

	SND_SOC_DAPM_SUPPLY("MCLK",  SND_SOC_NOPM, 0, 0,
	SND_SOC_DAPM_SUPPLY_S("MCLK", -1, SND_SOC_NOPM, 0, 0,
	msm8x16_mclk_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),

	SND_SOC_DAPM_MIC("Handset Mic", NULL),
+1 −1
Original line number Diff line number Diff line
@@ -238,7 +238,7 @@ static int msm8x16_mclk_event(struct snd_soc_dapm_widget *w,

static const struct snd_soc_dapm_widget msm8x16_dapm_widgets[] = {

	SND_SOC_DAPM_SUPPLY("MCLK",  SND_SOC_NOPM, 0, 0,
	SND_SOC_DAPM_SUPPLY_S("MCLK", -1, SND_SOC_NOPM, 0, 0,
	msm8x16_mclk_event, SND_SOC_DAPM_POST_PMD),
	SND_SOC_DAPM_MIC("Handset Mic", NULL),
	SND_SOC_DAPM_MIC("Headset Mic", NULL),