From: Oleksandr Suvorov <[email protected]>

[ 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: Oleksandr Suvorov <[email protected]>
Reviewed-by: Marcel Ziswiler <[email protected]>
Reviewed-by: Igor Opaniuk <[email protected]>
Reviewed-by: Fabio Estevam <[email protected]>
Link: 
https://lore.kernel.org/r/[email protected]
Signed-off-by: Mark Brown <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
---
 sound/soc/codecs/sgtl5000.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
index 0b11a2e01b2fc..b649675d190d2 100644
--- a/sound/soc/codecs/sgtl5000.c
+++ b/sound/soc/codecs/sgtl5000.c
@@ -1084,12 +1084,17 @@ 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 */
-               lreg_ctrl |= SGTL5000_VDDC_ASSN_OVRD;
-               lreg_ctrl |= SGTL5000_VDDC_MAN_ASSN_VDDIO <<
-                           SGTL5000_VDDC_MAN_ASSN_SHIFT;
+               /*
+                * 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);
-- 
2.20.1



Reply via email to