ASoC: sgtl5000: Fix wrong mask in some snd_soc_update_bits calls
authorAxel Lin <axel.lin@gmail.com>
Fri, 21 Oct 2011 01:54:43 +0000 (09:54 +0800)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Sat, 22 Oct 2011 09:35:20 +0000 (10:35 +0100)
Ensure all mask bits are clear before setting new value.

Signed-off-by: Axel Lin <axel.lin@gmail.com>
Acked-by: Dong Aisheng <b29396@freescale.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/codecs/sgtl5000.c

index 32b5bbdae523fed52d747dce6d6707e38782f11b..d15695d1c27397a7b3f2966c1806584e5e9a39bc 100644 (file)
@@ -723,7 +723,9 @@ static int sgtl5000_pcm_hw_params(struct snd_pcm_substream *substream,
                return -EINVAL;
        }
 
-       snd_soc_update_bits(codec, SGTL5000_CHIP_I2S_CTRL, i2s_ctl, i2s_ctl);
+       snd_soc_update_bits(codec, SGTL5000_CHIP_I2S_CTRL,
+                           SGTL5000_I2S_DLEN_MASK | SGTL5000_I2S_SCLKFREQ_MASK,
+                           i2s_ctl);
 
        return 0;
 }
@@ -1146,8 +1148,7 @@ static int sgtl5000_set_power_regs(struct snd_soc_codec *codec)
                vag = (vag - SGTL5000_ANA_GND_BASE) / SGTL5000_ANA_GND_STP;
 
        snd_soc_update_bits(codec, SGTL5000_CHIP_REF_CTRL,
-                       vag << SGTL5000_ANA_GND_SHIFT,
-                       vag << SGTL5000_ANA_GND_SHIFT);
+                       SGTL5000_ANA_GND_MASK, vag << SGTL5000_ANA_GND_SHIFT);
 
        /* set line out VAG to vddio / 2, in range (0.8v, 1.675v) */
        vag = vddio / 2;
@@ -1161,9 +1162,8 @@ static int sgtl5000_set_power_regs(struct snd_soc_codec *codec)
                    SGTL5000_LINE_OUT_GND_STP;
 
        snd_soc_update_bits(codec, SGTL5000_CHIP_LINE_OUT_CTRL,
-                       vag << SGTL5000_LINE_OUT_GND_SHIFT |
-                       SGTL5000_LINE_OUT_CURRENT_360u <<
-                               SGTL5000_LINE_OUT_CURRENT_SHIFT,
+                       SGTL5000_LINE_OUT_CURRENT_MASK |
+                       SGTL5000_LINE_OUT_GND_MASK,
                        vag << SGTL5000_LINE_OUT_GND_SHIFT |
                        SGTL5000_LINE_OUT_CURRENT_360u <<
                                SGTL5000_LINE_OUT_CURRENT_SHIFT);