[alsa-devel] [PATCH] ASoC: sgtl5000: Fix VDDA and VDDIO comparison
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 --- sound/soc/codecs/sgtl5000.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c index 93da6b58c97df..b4568f417d78e 100644 --- a/sound/soc/codecs/sgtl5000.c +++ b/sound/soc/codecs/sgtl5000.c @@ -28,6 +28,8 @@
#include "sgtl5000.h"
+#include "../../../drivers/regulator/internal.h" + #define SGTL5000_DAP_REG_OFFSET 0x0100 #define SGTL5000_MAX_REG_OFFSET 0x013A
@@ -1344,7 +1346,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 (sgtl5000->supplies[VDDA].consumer->rdev == + sgtl5000->supplies[VDDIO].consumer->rdev) { lreg_ctrl |= SGTL5000_VDDC_ASSN_OVRD; lreg_ctrl |= SGTL5000_VDDC_MAN_ASSN_VDDIO << SGTL5000_VDDC_MAN_ASSN_SHIFT;
On Thu, Dec 19, 2019 at 10:32:57PM +0100, Marek Vasut wrote:
#include "sgtl5000.h"
+#include "../../../drivers/regulator/internal.h"
This sort of peering inside the internals of the framework is obviously not OK, please add an interface for this if it's needed.
On 12/20/19 2:00 PM, Mark Brown wrote:
On Thu, Dec 19, 2019 at 10:32:57PM +0100, Marek Vasut wrote:
#include "sgtl5000.h"
+#include "../../../drivers/regulator/internal.h"
This sort of peering inside the internals of the framework is obviously not OK, please add an interface for this if it's needed.
It's needed, unless there is a better way to compare two regulators in the driver already. Is there ?
On Fri, Dec 20, 2019 at 02:01:30PM +0100, Marek Vasut wrote:
On 12/20/19 2:00 PM, Mark Brown wrote:
This sort of peering inside the internals of the framework is obviously not OK, please add an interface for this if it's needed.
It's needed, unless there is a better way to compare two regulators in the driver already. Is there ?
Like I said above "please add an interface for this if it's needed".
On 12/20/19 2:02 PM, Mark Brown wrote:
On Fri, Dec 20, 2019 at 02:01:30PM +0100, Marek Vasut wrote:
On 12/20/19 2:00 PM, Mark Brown wrote:
This sort of peering inside the internals of the framework is obviously not OK, please add an interface for this if it's needed.
It's needed, unless there is a better way to compare two regulators in the driver already. Is there ?
Like I said above "please add an interface for this if it's needed".
I'm asking whether such a thing exists already :)
If not, then I'll add it in V2.
On Fri, Dec 20, 2019 at 02:10:13PM +0100, Marek Vasut wrote:
On 12/20/19 2:02 PM, Mark Brown wrote:
Like I said above "please add an interface for this if it's needed".
I'm asking whether such a thing exists already :)
If not, then I'll add it in V2.
You'll need to add it.
participants (2)
-
Marek Vasut
-
Mark Brown