]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ASoC: wm8580: Use snd_soc_update_bits for read-modify-write
authorAxel Lin <axel.lin@gmail.com>
Mon, 17 Oct 2011 03:50:46 +0000 (11:50 +0800)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 17 Oct 2011 21:49:28 +0000 (22:49 +0100)
Use snd_soc_update_bits for read-modify-write register access instead of
open-coding it using snd_soc_read and snd_soc_write

Signed-off-by: Axel Lin <axel.lin@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/codecs/wm8580.c

index b256727094743f70c3bce31e75d8d8cb2cd8e97b..8212b3c8bfdd90da61cfe426344c13aa6deadae8 100644 (file)
@@ -430,8 +430,7 @@ static int wm8580_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
        /* Always disable the PLL - it is not safe to leave it running
         * while reprogramming it.
         */
-       reg = snd_soc_read(codec, WM8580_PWRDN2);
-       snd_soc_write(codec, WM8580_PWRDN2, reg | pwr_mask);
+       snd_soc_update_bits(codec, WM8580_PWRDN2, pwr_mask, pwr_mask);
 
        if (!freq_in || !freq_out)
                return 0;
@@ -449,8 +448,7 @@ static int wm8580_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
        snd_soc_write(codec, WM8580_PLLA4 + offset, reg);
 
        /* All done, turn it on */
-       reg = snd_soc_read(codec, WM8580_PWRDN2);
-       snd_soc_write(codec, WM8580_PWRDN2, reg & ~pwr_mask);
+       snd_soc_update_bits(codec, WM8580_PWRDN2, pwr_mask, 0);
 
        return 0;
 }
@@ -748,7 +746,6 @@ static int wm8580_digital_mute(struct snd_soc_dai *codec_dai, int mute)
 static int wm8580_set_bias_level(struct snd_soc_codec *codec,
        enum snd_soc_bias_level level)
 {
-       u16 reg;
        switch (level) {
        case SND_SOC_BIAS_ON:
        case SND_SOC_BIAS_PREPARE:
@@ -757,20 +754,19 @@ static int wm8580_set_bias_level(struct snd_soc_codec *codec,
        case SND_SOC_BIAS_STANDBY:
                if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) {
                        /* Power up and get individual control of the DACs */
-                       reg = snd_soc_read(codec, WM8580_PWRDN1);
-                       reg &= ~(WM8580_PWRDN1_PWDN | WM8580_PWRDN1_ALLDACPD);
-                       snd_soc_write(codec, WM8580_PWRDN1, reg);
+                       snd_soc_update_bits(codec, WM8580_PWRDN1,
+                                           WM8580_PWRDN1_PWDN |
+                                           WM8580_PWRDN1_ALLDACPD, 0);
 
                        /* Make VMID high impedance */
-                       reg = snd_soc_read(codec,  WM8580_ADC_CONTROL1);
-                       reg &= ~0x100;
-                       snd_soc_write(codec, WM8580_ADC_CONTROL1, reg);
+                       snd_soc_update_bits(codec, WM8580_ADC_CONTROL1,
+                                           0x100, 0);
                }
                break;
 
        case SND_SOC_BIAS_OFF:
-               reg = snd_soc_read(codec, WM8580_PWRDN1);
-               snd_soc_write(codec, WM8580_PWRDN1, reg | WM8580_PWRDN1_PWDN);
+               snd_soc_update_bits(codec, WM8580_PWRDN1,
+                                   WM8580_PWRDN1_PWDN, WM8580_PWRDN1_PWDN);
                break;
        }
        codec->dapm.bias_level = level;