]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ASoC: sgtl5000: Fix charge pump source assignment
authorOleksandr Suvorov <oleksandr.suvorov@toradex.com>
Fri, 19 Jul 2019 10:05:37 +0000 (10:05 +0000)
committerMark Brown <broonie@kernel.org>
Mon, 22 Jul 2019 12:26:27 +0000 (13:26 +0100)
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 <oleksandr.suvorov@toradex.com>
Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Reviewed-by: Igor Opaniuk <igor.opaniuk@toradex.com>
Reviewed-by: Fabio Estevam <festevam@gmail.com>
Link: https://lore.kernel.org/r/20190719100524.23300-7-oleksandr.suvorov@toradex.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/sgtl5000.c

index 23f4ae2f072307e4d3587ae1c275e140fa2b34b5..aa1f9637d8950a7fe4bff5d6cb5a5ffc8995cf65 100644 (file)
@@ -1338,12 +1338,17 @@ static int sgtl5000_set_power_regs(struct snd_soc_component *component)
                                        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_component_write(component, SGTL5000_CHIP_LINREG_CTRL, lreg_ctrl);