summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorHans de Goede2018-02-25 11:46:50 +0100
committerMark Brown2018-03-01 20:13:03 +0100
commitbba4e685dae8643469ca6fac22f10ca81554586e (patch)
tree5298d3d54e9212452f9787296cb4a4398f801758 /sound
parentASoC: rt5651: Fix bias_level confusion (diff)
downloadkernel-qcow2-linux-bba4e685dae8643469ca6fac22f10ca81554586e.tar.gz
kernel-qcow2-linux-bba4e685dae8643469ca6fac22f10ca81554586e.tar.xz
kernel-qcow2-linux-bba4e685dae8643469ca6fac22f10ca81554586e.zip
ASoC: rt5651: Do not modify the LDO voltage control bits from set_bias_level()
The PWR_ANLG1 reg not only contains various power on/off bits, it also contains 2 bits which select if the LDO generates 1.0, 1.1 or 1.2V. Note there is a separate on/off bit for the LDO. rt5651_set_bias_level(BIAS_OFF) used to unconditionally clear the entire register, when jack-detection support was introduced a special case for jack-detect was added which hard-codes a register value to keep the LDO voltage at 1.2 volt. This commit removes the jack-detect special case, instead simply always leaving the LDO voltage control bits as is on BIAS_OFF. Tested-by: Carlo Caione <carlo@endlessm.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/codecs/rt5651.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/sound/soc/codecs/rt5651.c b/sound/soc/codecs/rt5651.c
index c565607f95f7..c93539ee2200 100644
--- a/sound/soc/codecs/rt5651.c
+++ b/sound/soc/codecs/rt5651.c
@@ -1555,11 +1555,12 @@ static int rt5651_set_bias_level(struct snd_soc_component *component,
snd_soc_component_write(component, RT5651_PWR_DIG2, 0x0000);
snd_soc_component_write(component, RT5651_PWR_VOL, 0x0000);
snd_soc_component_write(component, RT5651_PWR_MIXER, 0x0000);
+ /* Do not touch the LDO voltage select bits on bias-off */
+ snd_soc_component_update_bits(component, RT5651_PWR_ANLG1,
+ ~RT5651_PWR_LDO_DVO_MASK, 0);
if (rt5651->jd_src) {
snd_soc_component_write(component, RT5651_PWR_ANLG2, 0x0204);
- snd_soc_component_write(component, RT5651_PWR_ANLG1, 0x0002);
} else {
- snd_soc_component_write(component, RT5651_PWR_ANLG1, 0x0000);
snd_soc_component_write(component, RT5651_PWR_ANLG2, 0x0000);
}
break;