| From 4e19247d31adb7a51c9ec27b279da4f009b02099 Mon Sep 17 00:00:00 2001 |
| From: Marek Vasut <marex@denx.de> |
| Date: Fri, 20 Dec 2019 17:44:50 +0100 |
| Subject: [PATCH] ASoC: sgtl5000: Fix VDDA and VDDIO comparison |
| |
| commit e19ecbf105b236a6334fab64d8fd5437b12ee019 upstream. |
| |
| Comparing the voltage of VDDA and VDDIO to determine whether or not to |
| enable VDDC manual override is insufficient. This is a problem in case |
| the VDDA is supplied from different regulator than VDDIO, while both |
| report the same voltage to the regulator framework. In that case where |
| VDDA and VDDIO is supplied by different regulators, the VDDC manual |
| override must not be applied. |
| |
| Fixes: b6319b061ba2 ("ASoC: sgtl5000: Fix charge pump source assignment") |
| Signed-off-by: Marek Vasut <marex@denx.de> |
| Cc: Fabio Estevam <festevam@gmail.com> |
| Cc: Igor Opaniuk <igor.opaniuk@toradex.com> |
| Cc: Marcel Ziswiler <marcel.ziswiler@toradex.com> |
| Cc: Mark Brown <broonie@kernel.org> |
| Cc: Oleksandr Suvorov <oleksandr.suvorov@toradex.com> |
| Link: https://lore.kernel.org/r/20191220164450.1395038-2-marex@denx.de |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c |
| index 8e5e48f6a24b..2208ca8ec37e 100644 |
| --- a/sound/soc/codecs/sgtl5000.c |
| +++ b/sound/soc/codecs/sgtl5000.c |
| @@ -1343,7 +1343,8 @@ static int sgtl5000_set_power_regs(struct snd_soc_component *component) |
| * if vddio == vdda the source of charge pump should be |
| * assigned manually to VDDIO |
| */ |
| - if (vddio == vdda) { |
| + if (regulator_is_equal(sgtl5000->supplies[VDDA].consumer, |
| + sgtl5000->supplies[VDDIO].consumer)) { |
| lreg_ctrl |= SGTL5000_VDDC_ASSN_OVRD; |
| lreg_ctrl |= SGTL5000_VDDC_MAN_ASSN_VDDIO << |
| SGTL5000_VDDC_MAN_ASSN_SHIFT; |
| -- |
| 2.7.4 |
| |