/* toggle internal speakers mute depending of presence of
         * the headphone jack
         */
-       bits = (!spec->hp_present && spec->cur_eapd) ? 0 : 0x80;
-       snd_hda_codec_amp_update(codec, 0x10, 0, HDA_OUTPUT, 0, 0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x10, 1, HDA_OUTPUT, 0, 0x80, bits);
+       bits = (!spec->hp_present && spec->cur_eapd) ? 0 : HDA_AMP_MUTE;
+       snd_hda_codec_amp_stereo(codec, 0x10, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
 
-       bits = spec->cur_eapd ? 0 : 0x80;
-       snd_hda_codec_amp_update(codec, 0x11, 0, HDA_OUTPUT, 0, 0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x11, 1, HDA_OUTPUT, 0, 0x80, bits);
+       bits = spec->cur_eapd ? 0 : HDA_AMP_MUTE;
+       snd_hda_codec_amp_stereo(codec, 0x11, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
        return 1;
 }
 
        int change;
 
        change = snd_hda_codec_amp_update(codec, 0x10, 0, HDA_OUTPUT, 0,
-                                         0x7f, valp[0] & 0x7f);
+                                         HDA_AMP_VOLMASK, valp[0]);
        change |= snd_hda_codec_amp_update(codec, 0x10, 1, HDA_OUTPUT, 0,
-                                          0x7f, valp[1] & 0x7f);
+                                          HDA_AMP_VOLMASK, valp[1]);
        snd_hda_codec_amp_update(codec, 0x11, 0, HDA_OUTPUT, 0,
-                                0x7f, valp[0] & 0x7f);
+                                HDA_AMP_VOLMASK, valp[0]);
        snd_hda_codec_amp_update(codec, 0x11, 1, HDA_OUTPUT, 0,
-                                0x7f, valp[1] & 0x7f);
+                                HDA_AMP_VOLMASK, valp[1]);
        return change;
 }
 
        spec->hp_present = snd_hda_codec_read(codec, 0x11, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
 
-       bits = (spec->hp_present || !spec->cur_eapd) ? 0x80 : 0; 
-       snd_hda_codec_amp_update(codec, 0x10, 0, HDA_OUTPUT, 0, 0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x10, 1, HDA_OUTPUT, 0, 0x80, bits);
+       bits = (spec->hp_present || !spec->cur_eapd) ? HDA_AMP_MUTE : 0; 
+       snd_hda_codec_amp_stereo(codec, 0x10, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
 }
 
 /* unsolicited event for HP jack sensing */
        /* toggle internal speakers mute depending of presence of
         * the headphone jack
         */
-       bits = (!spec->hp_present && spec->cur_eapd) ? 0 : 0x80;
-       snd_hda_codec_amp_update(codec, 0x1d, 0, HDA_OUTPUT, 0, 0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x1d, 1, HDA_OUTPUT, 0, 0x80, bits);
-       bits = spec->cur_eapd ? 0 : 0x80;
-       snd_hda_codec_amp_update(codec, 0x13, 0, HDA_OUTPUT, 0, 0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x13, 1, HDA_OUTPUT, 0, 0x80, bits);
+       bits = (!spec->hp_present && spec->cur_eapd) ? 0 : HDA_AMP_MUTE;
+       snd_hda_codec_amp_stereo(codec, 0x1d, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
+       bits = spec->cur_eapd ? 0 : HDA_AMP_MUTE;
+       snd_hda_codec_amp_stereo(codec, 0x13, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
        return 1;
 }
 
        int change;
 
        change = snd_hda_codec_amp_update(codec, 0x1d, 0, HDA_OUTPUT, 0,
-                                         0x7f, valp[0] & 0x7f);
+                                         HDA_AMP_VOLMASK, valp[0]);
        change |= snd_hda_codec_amp_update(codec, 0x1d, 1, HDA_OUTPUT, 0,
-                                          0x7f, valp[1] & 0x7f);
+                                          HDA_AMP_VOLMASK, valp[1]);
        snd_hda_codec_amp_update(codec, 0x13, 0, HDA_OUTPUT, 0,
-                                0x7f, valp[0] & 0x7f);
+                                HDA_AMP_VOLMASK, valp[0]);
        snd_hda_codec_amp_update(codec, 0x13, 1, HDA_OUTPUT, 0,
-                                0x7f, valp[1] & 0x7f);
+                                HDA_AMP_VOLMASK, valp[1]);
        return change;
 }
 
        spec->hp_present = snd_hda_codec_read(codec, 0x13, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
 
-       bits = (spec->hp_present || !spec->cur_eapd) ? 0x80 : 0;
-       snd_hda_codec_amp_update(codec, 0x1d, 0, HDA_OUTPUT, 0, 0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x1d, 1, HDA_OUTPUT, 0, 0x80, bits);
+       bits = (spec->hp_present || !spec->cur_eapd) ? HDA_AMP_MUTE : 0;
+       snd_hda_codec_amp_stereo(codec, 0x1d, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
        /* Mute/Unmute PCM 2 for good measure - some systems need this */
-       snd_hda_codec_amp_update(codec, 0x1c, 0, HDA_OUTPUT, 0, 0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x1c, 1, HDA_OUTPUT, 0, 0x80, bits);
+       snd_hda_codec_amp_stereo(codec, 0x1c, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
 }
 
 /* mute internal speaker if HP is plugged */
        spec->hp_present = snd_hda_codec_read(codec, 0x13, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
 
-       bits = spec->hp_present ? 0x80 : 0;
-       snd_hda_codec_amp_update(codec, 0x1d, 0, HDA_OUTPUT, 0, 0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x1d, 1, HDA_OUTPUT, 0, 0x80, bits);
+       bits = spec->hp_present ? HDA_AMP_MUTE : 0;
+       snd_hda_codec_amp_stereo(codec, 0x1d, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
        /* Mute/Unmute PCM 2 for good measure - some systems need this */
-       snd_hda_codec_amp_update(codec, 0x1c, 0, HDA_OUTPUT, 0, 0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x1c, 1, HDA_OUTPUT, 0, 0x80, bits);
+       snd_hda_codec_amp_stereo(codec, 0x1c, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
 }
 
 /* toggle input of built-in and mic jack appropriately */
 
                 * this turns out to be necessary in the future.
                 */
                if (val <= 2) {
-                       snd_hda_codec_amp_update(codec, nid, 0, HDA_OUTPUT, 0,
-                                                0x80, 0x80);
-                       snd_hda_codec_amp_update(codec, nid, 1, HDA_OUTPUT, 0,
-                                                0x80, 0x80);
-                       snd_hda_codec_amp_update(codec, nid, 0, HDA_INPUT, 0,
-                                                0x80, 0x00);
-                       snd_hda_codec_amp_update(codec, nid, 1, HDA_INPUT, 0,
-                                                0x80, 0x00);
+                       snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
+                                                HDA_AMP_MUTE, HDA_AMP_MUTE);
+                       snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT, 0,
+                                                HDA_AMP_MUTE, 0);
                } else {
-                       snd_hda_codec_amp_update(codec, nid, 0, HDA_INPUT, 0,
-                                                0x80, 0x80);
-                       snd_hda_codec_amp_update(codec, nid, 1, HDA_INPUT, 0,
-                                                0x80, 0x80);
-                       snd_hda_codec_amp_update(codec, nid, 0, HDA_OUTPUT, 0,
-                                                0x80, 0x00);
-                       snd_hda_codec_amp_update(codec, nid, 1, HDA_OUTPUT, 0,
-                                                0x80, 0x00);
+                       snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT, 0,
+                                                HDA_AMP_MUTE, HDA_AMP_MUTE);
+                       snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
+                                                HDA_AMP_MUTE, 0);
                }
        }
        return change;
 
        present = snd_hda_codec_read(codec, 0x14, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       bits = present ? 0x80 : 0;
-       snd_hda_codec_amp_update(codec, 0x15, 0, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x15, 1, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x16, 0, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x16, 1, HDA_OUTPUT, 0,
-                                0x80, bits);
+       bits = present ? HDA_AMP_MUTE : 0;
+       snd_hda_codec_amp_stereo(codec, 0x15, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
+       snd_hda_codec_amp_stereo(codec, 0x16, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
 }
 
 /* auto-toggle front mic */
 
        present = snd_hda_codec_read(codec, 0x18, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       bits = present ? 0x80 : 0;
-       snd_hda_codec_amp_update(codec, 0x0b, 0, HDA_INPUT, 1,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x0b, 1, HDA_INPUT, 1,
-                                0x80, bits);
+       bits = present ? HDA_AMP_MUTE : 0;
+       snd_hda_codec_amp_stereo(codec, 0x0b, HDA_INPUT, 1, HDA_AMP_MUTE, bits);
 }
 
 static void alc880_uniwill_automute(struct hda_codec *codec)
 
        present = snd_hda_codec_read(codec, 0x14, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       bits = present ? 0x80 : 0;
-       snd_hda_codec_amp_update(codec, 0x15, 0, HDA_INPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x15, 1, HDA_INPUT, 0,
-                                0x80, bits);
+       bits = present ? HDA_AMP_MUTE : 0;
+       snd_hda_codec_amp_stereo(codec, 0x15, HDA_INPUT, 0, HDA_AMP_MUTE, bits);
 }
 
 static void alc880_uniwill_p53_dcvol_automute(struct hda_codec *codec)
        unsigned int present;
        
        present = snd_hda_codec_read(codec, 0x21, 0,
-                                    AC_VERB_GET_VOLUME_KNOB_CONTROL, 0) & 0x7f;
-
-       snd_hda_codec_amp_update(codec, 0x0c, 0, HDA_OUTPUT, 0,
-                                0x7f, present);
-       snd_hda_codec_amp_update(codec, 0x0c, 1, HDA_OUTPUT, 0,
-                                0x7f,  present);
-
-       snd_hda_codec_amp_update(codec, 0x0d, 0, HDA_OUTPUT, 0,
-                                0x7f,  present);
-       snd_hda_codec_amp_update(codec, 0x0d, 1, HDA_OUTPUT, 0,
-                                0x7f, present);
-
+                                    AC_VERB_GET_VOLUME_KNOB_CONTROL, 0);
+       present &= HDA_AMP_VOLMASK;
+       snd_hda_codec_amp_stereo(codec, 0x0c, HDA_OUTPUT, 0,
+                                HDA_AMP_VOLMASK, present);
+       snd_hda_codec_amp_stereo(codec, 0x0d, HDA_OUTPUT, 0,
+                                HDA_AMP_VOLMASK, present);
 }
+
 static void alc880_uniwill_p53_unsol_event(struct hda_codec *codec,
                                           unsigned int res)
 {
 
        present = snd_hda_codec_read(codec, 0x1b, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       bits = present ? 0x80 : 0;
-       snd_hda_codec_amp_update(codec, 0x17, 0, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x17, 1, HDA_OUTPUT, 0,
-                                0x80, bits);
+       bits = present ? HDA_AMP_MUTE : 0;
+       snd_hda_codec_amp_stereo(codec, 0x17, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
 }
 
 static void alc880_lg_unsol_event(struct hda_codec *codec, unsigned int res)
 
        present = snd_hda_codec_read(codec, 0x1b, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       bits = present ? 0x80 : 0;
-       snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0,
-                                0x80, bits);
+       bits = present ? HDA_AMP_MUTE : 0;
+       snd_hda_codec_amp_stereo(codec, 0x14, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
 }
 
 static void alc880_lg_lw_unsol_event(struct hda_codec *codec, unsigned int res)
                snd_hda_codec_write_cache(codec, nid, 0,
                                          AC_VERB_SET_PIN_WIDGET_CONTROL,
                                          new_ctl);
-               val = ucontrol->value.enumerated.item[0] >= 3 ? 0x80 : 0x00;
-               snd_hda_codec_amp_update(codec, nid, 0, HDA_OUTPUT, 0,
-                                        0x80, val);
-               snd_hda_codec_amp_update(codec, nid, 1, HDA_OUTPUT, 0,
-                                        0x80, val);
+               val = ucontrol->value.enumerated.item[0] >= 3 ?
+                       HDA_AMP_MUTE : 0;
+               snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
+                                        HDA_AMP_MUTE, val);
                return 1;
        }
        return 0;
        if (*cur_val == idx)
                return 0;
        for (i = 0; i < imux->num_items; i++) {
-               unsigned int v = (i == idx) ? 0x00 : 0x80;
-               snd_hda_codec_amp_update(codec, nid, 0, HDA_INPUT,
-                                        imux->items[i].index,
-                                        0x80, v);
-               snd_hda_codec_amp_update(codec, nid, 1, HDA_INPUT,
+               unsigned int v = (i == idx) ? 0 : HDA_AMP_MUTE;
+               snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT,
                                         imux->items[i].index,
-                                        0x80, v);
+                                        HDA_AMP_MUTE, v);
        }
        *cur_val = idx;
        return 1;
 
        present = snd_hda_codec_read(codec, 0x14, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       snd_hda_codec_amp_update(codec, 0x18, 0, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
-       snd_hda_codec_amp_update(codec, 0x18, 1, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
-       snd_hda_codec_amp_update(codec, 0x1a, 0, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
-       snd_hda_codec_amp_update(codec, 0x1a, 1, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
+       snd_hda_codec_amp_stereo(codec, 0x18, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
+       snd_hda_codec_amp_stereo(codec, 0x1a, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
 }
 
 /* Processes unsolicited events. */
  
        present = snd_hda_codec_read(codec, 0x14, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       snd_hda_codec_amp_update(codec, 0x1b, 0, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
-       snd_hda_codec_amp_update(codec, 0x1b, 1, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
+       snd_hda_codec_amp_stereo(codec, 0x1b, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
        snd_hda_codec_write_cache(codec, 1, 0, AC_VERB_SET_GPIO_DATA,
                                  present ? 1 : 3);
 }
        if (*cur_val == idx)
                return 0;
        for (i = 0; i < imux->num_items; i++) {
-               unsigned int v = (i == idx) ? 0x00 : 0x80;
-               snd_hda_codec_amp_update(codec, nid, 0, HDA_INPUT,
+               unsigned int v = (i == idx) ? 0 : HDA_AMP_MUTE;
+               snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT,
                                         imux->items[i].index,
-                                        0x80, v);
-               snd_hda_codec_amp_update(codec, nid, 1, HDA_INPUT,
-                                        imux->items[i].index,
-                                        0x80, v);
+                                        HDA_AMP_MUTE, v);
        }
        *cur_val = idx;
        return 1;
  
        present = snd_hda_codec_read(codec, 0x1b, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
-       snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
-       snd_hda_codec_amp_update(codec, 0x15, 0, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
-       snd_hda_codec_amp_update(codec, 0x15, 1, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
-       
+       snd_hda_codec_amp_stereo(codec, 0x14, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
+       snd_hda_codec_amp_stereo(codec, 0x15, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
 }
 
 /* toggle RCA according to the front-jack state */
  
        present = snd_hda_codec_read(codec, 0x14, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       snd_hda_codec_amp_update(codec, 0x15, 0, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
-       snd_hda_codec_amp_update(codec, 0x15, 1, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
-       
+       snd_hda_codec_amp_stereo(codec, 0x15, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
 }
+
 static void alc883_lenovo_ms7195_unsol_event(struct hda_codec *codec,
                                             unsigned int res)
 {
  
        present = snd_hda_codec_read(codec, 0x14, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       snd_hda_codec_amp_update(codec, 0x15, 0, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
-       snd_hda_codec_amp_update(codec, 0x15, 1, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
+       snd_hda_codec_amp_stereo(codec, 0x15, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
 }
 
 static void alc883_medion_md2_unsol_event(struct hda_codec *codec,
 
        present = snd_hda_codec_read(codec, 0x14, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       bits = present ? 0x80 : 0;
-       snd_hda_codec_amp_update(codec, 0x1b, 0, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x1b, 1, HDA_OUTPUT, 0,
-                                0x80, bits);
+       bits = present ? HDA_AMP_MUTE : 0;
+       snd_hda_codec_amp_stereo(codec, 0x1b, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
        snd_hda_codec_write_cache(codec, 1, 0, AC_VERB_SET_GPIO_DATA,
                                  present ? 1 : 3);
 }
 
        present = snd_hda_codec_read(codec, 0x14, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       bits = present ? 0x80 : 0;
-       snd_hda_codec_amp_update(codec, 0x15, 0, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x15, 1, HDA_OUTPUT, 0,
-                                0x80, bits);
+       bits = present ? HDA_AMP_MUTE : 0;
+       snd_hda_codec_amp_stereo(codec, 0x15, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
 }
 
 static void alc883_lenovo_101e_all_automute(struct hda_codec *codec)
 
        present = snd_hda_codec_read(codec, 0x1b, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       bits = present ? 0x80 : 0;
-       snd_hda_codec_amp_update(codec, 0x15, 0, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x15, 1, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0,
-                                0x80, bits);
+       bits = present ? HDA_AMP_MUTE : 0;
+       snd_hda_codec_amp_stereo(codec, 0x15, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
+       snd_hda_codec_amp_stereo(codec, 0x14, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
 }
 
 static void alc883_lenovo_101e_unsol_event(struct hda_codec *codec,
        spec->jack_present = (present & 0x80000000) != 0;
        if (spec->jack_present) {
                /* mute internal speaker */
-               snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0,
-                                        0x80, 0x80);
-               snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0,
-                                        0x80, 0x80);
+               snd_hda_codec_amp_stereo(codec, 0x14, HDA_OUTPUT, 0,
+                                        HDA_AMP_MUTE, HDA_AMP_MUTE);
        } else {
                /* unmute internal speaker if necessary */
                mute = snd_hda_codec_amp_read(codec, 0x15, 0, HDA_OUTPUT, 0);
-               snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0,
-                                        0x80, mute & 0x80);
-               mute = snd_hda_codec_amp_read(codec, 0x15, 1, HDA_OUTPUT, 0);
-               snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0,
-                                        0x80, mute & 0x80);
+               snd_hda_codec_amp_stereo(codec, 0x14, HDA_OUTPUT, 0,
+                                        HDA_AMP_MUTE, mute);
        }
 }
 
        present = (present & 0x80000000) != 0;
        if (present) {
                /* mute internal speaker */
-               snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0,
-                                        0x80, 0x80);
-               snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0,
-                                        0x80, 0x80);
+               snd_hda_codec_amp_stereo(codec, 0x14, HDA_OUTPUT, 0,
+                                        HDA_AMP_MUTE, HDA_AMP_MUTE);
        } else {
                /* unmute internal speaker if necessary */
                mute = snd_hda_codec_amp_read(codec, 0x1b, 0, HDA_OUTPUT, 0);
-               snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0,
-                                        0x80, mute & 0x80);
-               mute = snd_hda_codec_amp_read(codec, 0x1b, 1, HDA_OUTPUT, 0);
-               snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0,
-                                        0x80, mute & 0x80);
+               snd_hda_codec_amp_stereo(codec, 0x14, HDA_OUTPUT, 0,
+                                        HDA_AMP_MUTE, mute);
        }
 }
 
        }
        if (spec->jack_present) {
                /* mute internal speaker */
-               snd_hda_codec_amp_update(codec, 0x15, 0, HDA_OUTPUT, 0,
-                                        0x80, 0x80);
-               snd_hda_codec_amp_update(codec, 0x15, 1, HDA_OUTPUT, 0,
-                                        0x80, 0x80);
+               snd_hda_codec_amp_stereo(codec, 0x15, HDA_OUTPUT, 0,
+                                        HDA_AMP_MUTE, HDA_AMP_MUTE);
        } else {
                /* unmute internal speaker if necessary */
                mute = snd_hda_codec_amp_read(codec, 0x14, 0, HDA_OUTPUT, 0);
-               snd_hda_codec_amp_update(codec, 0x15, 0, HDA_OUTPUT, 0,
-                                        0x80, mute & 0x80);
-               mute = snd_hda_codec_amp_read(codec, 0x14, 1, HDA_OUTPUT, 0);
-               snd_hda_codec_amp_update(codec, 0x15, 1, HDA_OUTPUT, 0,
-                                        0x80, mute & 0x80);
+               snd_hda_codec_amp_stereo(codec, 0x15, HDA_OUTPUT, 0,
+                                        HDA_AMP_MUTE, mute);
        }
 }
 
        int change;
 
        change = snd_hda_codec_amp_update(codec, 0x0c, 0, HDA_OUTPUT, 0,
-                                         0x7f, valp[0] & 0x7f);
+                                         HDA_AMP_VOLMASK, valp[0]);
        change |= snd_hda_codec_amp_update(codec, 0x0c, 1, HDA_OUTPUT, 0,
-                                          0x7f, valp[1] & 0x7f);
+                                          HDA_AMP_VOLMASK, valp[1]);
        snd_hda_codec_amp_update(codec, 0x0d, 0, HDA_OUTPUT, 0,
-                                0x7f, valp[0] & 0x7f);
+                                HDA_AMP_VOLMASK, valp[0]);
        snd_hda_codec_amp_update(codec, 0x0d, 1, HDA_OUTPUT, 0,
-                                0x7f, valp[1] & 0x7f);
+                                HDA_AMP_VOLMASK, valp[1]);
        return change;
 }
 
        int change;
 
        change = snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0,
-                                         0x80, valp[0] ? 0 : 0x80);
+                                         HDA_AMP_MUTE,
+                                         valp[0] ? 0 : HDA_AMP_MUTE);
        change |= snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0,
-                                          0x80, valp[1] ? 0 : 0x80);
+                                          HDA_AMP_MUTE,
+                                          valp[1] ? 0 : HDA_AMP_MUTE);
        if (change)
                alc262_fujitsu_automute(codec, 0);
        return change;
        if (*cur_val == idx)
                return 0;
        for (i = 0; i < imux->num_items; i++) {
-               unsigned int v = (i == idx) ? 0x00 : 0x80;
-               snd_hda_codec_amp_update(codec, nid, 0, HDA_INPUT,
-                                        imux->items[i].index, 0x80, v);
-               snd_hda_codec_amp_update(codec, nid, 1, HDA_INPUT,
-                                        imux->items[i].index, 0x80, v);
+               unsigned int v = (i == idx) ? 0 : HDA_AMP_MUTE;
+               snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT,
+                                        imux->items[i].index,
+                                        HDA_AMP_MUTE, v);
                 snd_hda_codec_write_cache(codec, nid, 0,
                                          AC_VERB_SET_CONNECT_SEL,
                                          idx );
 
        present = snd_hda_codec_read(codec, 0x0f, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       snd_hda_codec_amp_update(codec, 0x16, 0, HDA_INPUT, 0,
-                                0x80, present ? 0x80 : 0);
-       snd_hda_codec_amp_update(codec, 0x16, 1, HDA_INPUT, 0,
-                                0x80, present ? 0x80 : 0);
-       snd_hda_codec_amp_update(codec, 0x1a, 0, HDA_INPUT, 3,
-                                0x80, present ? 0 : 0x80);
-       snd_hda_codec_amp_update(codec, 0x1a, 1, HDA_INPUT, 3,
-                                0x80, present ? 0 : 0x80);
+       snd_hda_codec_amp_stereo(codec, 0x16, HDA_INPUT, 0,
+                                HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
+       snd_hda_codec_amp_stereo(codec, 0x1a, HDA_INPUT, 3,
+                                HDA_AMP_MUTE, present ? 0 : HDA_AMP_MUTE);
 }
 
 static void alc861_toshiba_unsol_event(struct hda_codec *codec,
        if (*cur_val == idx)
                return 0;
        for (i = 0; i < imux->num_items; i++) {
-               unsigned int v = (i == idx) ? 0x00 : 0x80;
-               snd_hda_codec_amp_update(codec, nid, 0, HDA_INPUT,
-                                        imux->items[i].index, 0x80, v);
-               snd_hda_codec_amp_update(codec, nid, 1, HDA_INPUT,
-                                        imux->items[i].index, 0x80, v);
+               unsigned int v = (i == idx) ? 0 : HDA_AMP_MUTE;
+               snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT,
+                                        imux->items[i].index,
+                                        HDA_AMP_MUTE, v);
        }
        *cur_val = idx;
        return 1;
 
        present = snd_hda_codec_read(codec, 0x1b, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       bits = present ? 0x80 : 0;
-       snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0,
-                                0x80, bits);
+       bits = present ? HDA_AMP_MUTE : 0;
+       snd_hda_codec_amp_stereo(codec, 0x14, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
 }
 
 static void alc861vd_lenovo_mic_automute(struct hda_codec *codec)
 
        present = snd_hda_codec_read(codec, 0x18, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       bits = present ? 0x80 : 0;
-       snd_hda_codec_amp_update(codec, 0x0b, 0, HDA_INPUT, 1,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x0b, 1, HDA_INPUT, 1,
-                                0x80, bits);
+       bits = present ? HDA_AMP_MUTE : 0;
+       snd_hda_codec_amp_stereo(codec, 0x0b, HDA_INPUT, 1,
+                                HDA_AMP_MUTE, bits);
 }
 
 static void alc861vd_lenovo_automute(struct hda_codec *codec)
 
        present = snd_hda_codec_read(codec, 0x15, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
-       snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0,
-                                0x80, present ? 0x80 : 0);
+       snd_hda_codec_amp_stereo(codec, 0x14, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
 }
 
 static void alc861vd_dallas_unsol_event(struct hda_codec *codec, unsigned int res)
        if (*cur_val == idx)
                return 0;
        for (i = 0; i < imux->num_items; i++) {
-               unsigned int v = (i == idx) ? 0x00 : 0x80;
-               snd_hda_codec_amp_update(codec, nid, 0, HDA_INPUT,
-                                        imux->items[i].index, 0x80, v);
-               snd_hda_codec_amp_update(codec, nid, 1, HDA_INPUT,
-                                        imux->items[i].index, 0x80, v);
+               unsigned int v = (i == idx) ? 0 : HDA_AMP_MUTE;
+               snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT,
+                                        imux->items[i].index,
+                                        HDA_AMP_MUTE, v);
        }
        *cur_val = idx;
        return 1;
 
        present = snd_hda_codec_read(codec, 0x14, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       bits = present ? 0x80 : 0;
-       snd_hda_codec_amp_update(codec, 0x15, 0, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x15, 1, HDA_OUTPUT, 0,
-                                0x80, bits);
+       bits = present ? HDA_AMP_MUTE : 0;
+       snd_hda_codec_amp_stereo(codec, 0x15, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
 }
 
 static void alc662_lenovo_101e_all_automute(struct hda_codec *codec)
 
        present = snd_hda_codec_read(codec, 0x1b, 0,
                                     AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
-       bits = present ? 0x80 : 0;
-       snd_hda_codec_amp_update(codec, 0x15, 0, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x15, 1, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0,
-                                0x80, bits);
-       snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0,
-                                0x80, bits);
+       bits = present ? HDA_AMP_MUTE : 0;
+       snd_hda_codec_amp_stereo(codec, 0x15, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
+       snd_hda_codec_amp_stereo(codec, 0x14, HDA_OUTPUT, 0,
+                                HDA_AMP_MUTE, bits);
 }
 
 static void alc662_lenovo_101e_unsol_event(struct hda_codec *codec,