static int wm8903_set_bias_level(struct snd_soc_codec *codec,
                                 enum snd_soc_bias_level level)
 {
-       u16 reg;
-
        switch (level) {
        case SND_SOC_BIAS_ON:
+               break;
        case SND_SOC_BIAS_PREPARE:
-               reg = snd_soc_read(codec, WM8903_VMID_CONTROL_0);
-               reg &= ~(WM8903_VMID_RES_MASK);
-               reg |= WM8903_VMID_RES_50K;
-               snd_soc_write(codec, WM8903_VMID_CONTROL_0, reg);
+               snd_soc_update_bits(codec, WM8903_VMID_CONTROL_0,
+                                   WM8903_VMID_RES_MASK,
+                                   WM8903_VMID_RES_50K);
                break;
 
        case SND_SOC_BIAS_STANDBY:
                                            WM8903_CP_DYN_V);
                }
 
-               reg = snd_soc_read(codec, WM8903_VMID_CONTROL_0);
-               reg &= ~(WM8903_VMID_RES_MASK);
-               reg |= WM8903_VMID_RES_250K;
-               snd_soc_write(codec, WM8903_VMID_CONTROL_0, reg);
+               snd_soc_update_bits(codec, WM8903_VMID_CONTROL_0,
+                                   WM8903_VMID_RES_MASK,
+                                   WM8903_VMID_RES_250K);
                break;
 
        case SND_SOC_BIAS_OFF: