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

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

Merge "ASoC: msm8x16-wcd: add support of line out in diangu codec"

parents 8ae561b9 802e3b1a
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -544,6 +544,10 @@ const u8 msm8x16_wcd_reset_reg_defaults[MSM8X16_WCD_CACHE_SIZE] = {
			MSM8X16_WCD_A_ANALOG_RX_HPH_STATUS__POR,
		[MSM8X16_WCD_A_ANALOG_RX_EAR_STATUS] =
			MSM8X16_WCD_A_ANALOG_RX_EAR_STATUS__POR,
		[MSM8X16_WCD_A_ANALOG_RX_LO_DAC_CTL] =
			MSM8X16_WCD_A_ANALOG_RX_LO_DAC_CTL__POR,
		[MSM8X16_WCD_A_ANALOG_RX_LO_EN_CTL] =
			MSM8X16_WCD_A_ANALOG_RX_RX_LO_EN_CTL__POR,
		[MSM8X16_WCD_A_ANALOG_SPKR_DAC_CTL] =
			MSM8X16_WCD_A_ANALOG_SPKR_DAC_CTL__POR,
		[MSM8X16_WCD_A_ANALOG_SPKR_DRV_CLIP_DET] =
+64 −0
Original line number Diff line number Diff line
@@ -2935,6 +2935,17 @@ static const struct snd_kcontrol_new spkr_switch[] = {
		MSM8X16_WCD_A_ANALOG_SPKR_DAC_CTL, 7, 1, 0)
};

static const char * const lo_text[] = {
	"ZERO", "Switch",
};

static const struct soc_enum lo_enum =
	SOC_ENUM_SINGLE(SND_SOC_NOPM, 0, ARRAY_SIZE(hph_text), hph_text);

static const struct snd_kcontrol_new lo_mux[] = {
	SOC_DAPM_ENUM("LINE_OUT", lo_enum)
};

static void msm8x16_wcd_codec_enable_adc_block(struct snd_soc_codec *codec,
					 int enable)
{
@@ -3939,6 +3950,41 @@ static int msm8x16_wcd_hphl_dac_event(struct snd_soc_dapm_widget *w,
	return 0;
}

static int msm8x16_wcd_lo_dac_event(struct snd_soc_dapm_widget *w,
	struct snd_kcontrol *kcontrol, int event)
{
	struct snd_soc_codec *codec = w->codec;

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

	switch (event) {
	case SND_SOC_DAPM_PRE_PMU:
		snd_soc_update_bits(codec,
			MSM8X16_WCD_A_ANALOG_RX_LO_EN_CTL, 0x80, 0x80);
		snd_soc_update_bits(codec,
			MSM8X16_WCD_A_ANALOG_RX_LO_DAC_CTL, 0x08, 0x08);
		snd_soc_update_bits(codec,
			MSM8X16_WCD_A_ANALOG_RX_LO_DAC_CTL, 0x40, 0x40);
		break;
	case SND_SOC_DAPM_POST_PMU:
		snd_soc_update_bits(codec,
			MSM8X16_WCD_A_ANALOG_RX_LO_DAC_CTL, 0x80, 0x80);
		snd_soc_update_bits(codec,
			MSM8X16_WCD_A_ANALOG_RX_LO_DAC_CTL, 0x08, 0x08);
		break;
	case SND_SOC_DAPM_POST_PMD:
		usleep_range(20000, 20100);
		snd_soc_update_bits(codec,
			MSM8X16_WCD_A_ANALOG_RX_LO_DAC_CTL, 0x80, 0x00);
		snd_soc_update_bits(codec,
			MSM8X16_WCD_A_ANALOG_RX_LO_DAC_CTL, 0x40, 0x00);
		snd_soc_update_bits(codec,
			MSM8X16_WCD_A_ANALOG_RX_LO_EN_CTL, 0x80, 0x00);
		break;
	}
	return 0;
}

static int msm8x16_wcd_hphr_dac_event(struct snd_soc_dapm_widget *w,
	struct snd_kcontrol *kcontrol, int event)
{
@@ -4110,6 +4156,10 @@ static const struct snd_soc_dapm_route audio_map[] = {
	{"SPK PA", NULL, "SPK_RX_BIAS"},
	{"SPK PA", NULL, "SPK DAC"},
	{"SPK DAC", "Switch", "RX3 CHAIN"},
	{"LINE_OUT", "Switch", "LINEOUT DAC"},
	{"LINEOUT DAC", NULL, "RX3 CHAIN"},
	{"LINEOUT PA", NULL, "LINEOUT DAC"},
	{"LINEOUT", NULL, "LINEOUT PA"},
	{"SPK DAC", NULL, "VDD_SPKDRV"},

	{"RX1 CHAIN", NULL, "RX1 CLK"},
@@ -4668,14 +4718,28 @@ static const struct snd_soc_dapm_widget msm8x16_wcd_dapm_widgets[] = {
	SND_SOC_DAPM_MIXER("SPK DAC", SND_SOC_NOPM, 0, 0,
		spkr_switch, ARRAY_SIZE(spkr_switch)),

	SND_SOC_DAPM_MUX("LINE_OUT",
		SND_SOC_NOPM, 0, 0, lo_mux),

	SND_SOC_DAPM_DAC_E("LINEOUT DAC", NULL,
		SND_SOC_NOPM, 0, 0, msm8x16_wcd_lo_dac_event,
		SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
		SND_SOC_DAPM_POST_PMD),

	/* Speaker */
	SND_SOC_DAPM_OUTPUT("SPK_OUT"),

	/* Lineout */
	SND_SOC_DAPM_OUTPUT("LINEOUT"),

	SND_SOC_DAPM_PGA_E("SPK PA", MSM8X16_WCD_A_ANALOG_SPKR_DRV_CTL,
			6, 0 , NULL, 0, msm8x16_wcd_codec_enable_spk_pa,
			SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
			SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),

	SND_SOC_DAPM_PGA_E("LINEOUT PA", MSM8X16_WCD_A_ANALOG_RX_LO_EN_CTL,
			4, 0 , NULL, 0, NULL, 0),

	SND_SOC_DAPM_SUPPLY("VDD_SPKDRV", SND_SOC_NOPM, 0, 0,
			    msm89xx_wcd_codec_enable_vdd_spkr,
			    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
+4 −0
Original line number Diff line number Diff line
@@ -255,6 +255,10 @@
#define MSM8X16_WCD_A_ANALOG_RX_HPH_STATUS__POR			(0x0C)
#define MSM8X16_WCD_A_ANALOG_RX_EAR_STATUS		(0x1A1)
#define MSM8X16_WCD_A_ANALOG_RX_EAR_STATUS__POR			(0x00)
#define MSM8X16_WCD_A_ANALOG_RX_LO_DAC_CTL		(0x1AC)
#define MSM8X16_WCD_A_ANALOG_RX_LO_DAC_CTL__POR	(0x00)
#define MSM8X16_WCD_A_ANALOG_RX_LO_EN_CTL	(0x1AD)
#define MSM8X16_WCD_A_ANALOG_RX_RX_LO_EN_CTL__POR	(0x00)
#define MSM8X16_WCD_A_ANALOG_SPKR_DAC_CTL		(0x1B0)
#define MSM8X16_WCD_A_ANALOG_SPKR_DAC_CTL__POR			(0x83)
#define MSM8X16_WCD_A_ANALOG_SPKR_DRV_CLIP_DET		(0x1B1)