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

Commit 4eae67c6 authored by Oleksandr Suvorov's avatar Oleksandr Suvorov Committed by Greg Kroah-Hartman
Browse files

ASoC: sgtl5000: Fix charge pump source assignment

[ Upstream commit b6319b061ba279577fd7030a9848fbd6a17151e3 ]

If VDDA != VDDIO and any of them is greater than 3.1V, charge pump
source can be assigned automatically [1].

[1] https://www.nxp.com/docs/en/data-sheet/SGTL5000.pdf



Signed-off-by: default avatarOleksandr Suvorov <oleksandr.suvorov@toradex.com>
Reviewed-by: default avatarMarcel Ziswiler <marcel.ziswiler@toradex.com>
Reviewed-by: default avatarIgor Opaniuk <igor.opaniuk@toradex.com>
Reviewed-by: default avatarFabio Estevam <festevam@gmail.com>
Link: https://lore.kernel.org/r/20190719100524.23300-7-oleksandr.suvorov@toradex.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 22a46dcf
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -987,13 +987,18 @@ static int sgtl5000_set_power_regs(struct snd_soc_codec *codec)
					SGTL5000_INT_OSC_EN);
		/* Enable VDDC charge pump */
		ana_pwr |= SGTL5000_VDDC_CHRGPMP_POWERUP;
	} else if (vddio >= 3100 && vdda >= 3100) {
	} else {
		ana_pwr &= ~SGTL5000_VDDC_CHRGPMP_POWERUP;
		/* VDDC use VDDIO rail */
		/*
		 * if vddio == vdda the source of charge pump should be
		 * assigned manually to VDDIO
		 */
		if (vddio == vdda) {
			lreg_ctrl |= SGTL5000_VDDC_ASSN_OVRD;
			lreg_ctrl |= SGTL5000_VDDC_MAN_ASSN_VDDIO <<
				    SGTL5000_VDDC_MAN_ASSN_SHIFT;
		}
	}

	snd_soc_write(codec, SGTL5000_CHIP_LINREG_CTRL, lreg_ctrl);