Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
[linux-2.6-block.git] / sound / pci / hda / patch_cirrus.c
index 7b0446fa600967732b165b2c0c7280c9bfe9534b..4b200da1bd18dd5524517b7feb94fc7010948966 100644 (file)
@@ -500,7 +500,7 @@ static int add_mute(struct hda_codec *codec, const char *name, int index,
        knew.private_value = pval;
        snprintf(tmp, sizeof(tmp), "%s %s Switch", name, dir_sfx[dir]);
        *kctlp = snd_ctl_new1(&knew, codec);
-       return snd_hda_ctl_add(codec, *kctlp);
+       return snd_hda_ctl_add(codec, get_amp_nid_(pval), *kctlp);
 }
 
 static int add_volume(struct hda_codec *codec, const char *name,
@@ -513,7 +513,7 @@ static int add_volume(struct hda_codec *codec, const char *name,
        knew.private_value = pval;
        snprintf(tmp, sizeof(tmp), "%s %s Volume", name, dir_sfx[dir]);
        *kctlp = snd_ctl_new1(&knew, codec);
-       return snd_hda_ctl_add(codec, *kctlp);
+       return snd_hda_ctl_add(codec, get_amp_nid_(pval), *kctlp);
 }
 
 static void fix_volume_caps(struct hda_codec *codec, hda_nid_t dac)
@@ -536,14 +536,14 @@ static int add_vmaster(struct hda_codec *codec, hda_nid_t dac)
 
        spec->vmaster_sw =
                snd_ctl_make_virtual_master("Master Playback Switch", NULL);
-       err = snd_hda_ctl_add(codec, spec->vmaster_sw);
+       err = snd_hda_ctl_add(codec, dac, spec->vmaster_sw);
        if (err < 0)
                return err;
 
        snd_hda_set_vmaster_tlv(codec, dac, HDA_OUTPUT, tlv);
        spec->vmaster_vol =
                snd_ctl_make_virtual_master("Master Playback Volume", tlv);
-       err = snd_hda_ctl_add(codec, spec->vmaster_vol);
+       err = snd_hda_ctl_add(codec, dac, spec->vmaster_vol);
        if (err < 0)
                return err;
        return 0;
@@ -756,13 +756,13 @@ static int build_input(struct hda_codec *codec)
                if (!kctl)
                        return -ENOMEM;
                kctl->private_value = (long)spec->capture_bind[i];
-               err = snd_hda_ctl_add(codec, kctl);
+               err = snd_hda_ctl_add(codec, 0, kctl);
                if (err < 0)
                        return err;
        }
        
        if (spec->num_inputs > 1 && !spec->mic_detect) {
-               err = snd_hda_ctl_add(codec,
+               err = snd_hda_ctl_add(codec, 0,
                                      snd_ctl_new1(&cs_capture_source, codec));
                if (err < 0)
                        return err;
@@ -807,7 +807,7 @@ static void cs_automute(struct hda_codec *codec)
 {
        struct cs_spec *spec = codec->spec;
        struct auto_pin_cfg *cfg = &spec->autocfg;
-       unsigned int caps, present, hp_present;
+       unsigned int caps, hp_present;
        hda_nid_t nid;
        int i;
 
@@ -817,12 +817,7 @@ static void cs_automute(struct hda_codec *codec)
                caps = snd_hda_query_pin_caps(codec, nid);
                if (!(caps & AC_PINCAP_PRES_DETECT))
                        continue;
-               if (caps & AC_PINCAP_TRIG_REQ)
-                       snd_hda_codec_read(codec, nid, 0,
-                                          AC_VERB_SET_PIN_SENSE, 0);
-               present = snd_hda_codec_read(codec, nid, 0,
-                                            AC_VERB_GET_PIN_SENSE, 0);
-               hp_present |= (present & AC_PINSENSE_PRESENCE) != 0;
+               hp_present = snd_hda_jack_detect(codec, nid);
                if (hp_present)
                        break;
        }
@@ -844,15 +839,11 @@ static void cs_automic(struct hda_codec *codec)
        struct cs_spec *spec = codec->spec;
        struct auto_pin_cfg *cfg = &spec->autocfg;
        hda_nid_t nid;
-       unsigned int caps, present;
+       unsigned int present;
        
        nid = cfg->input_pins[spec->automic_idx];
-       caps = snd_hda_query_pin_caps(codec, nid);
-       if (caps & AC_PINCAP_TRIG_REQ)
-               snd_hda_codec_read(codec, nid, 0, AC_VERB_SET_PIN_SENSE, 0);
-       present = snd_hda_codec_read(codec, nid, 0,
-                                    AC_VERB_GET_PIN_SENSE, 0);
-       if (present & AC_PINSENSE_PRESENCE)
+       present = snd_hda_jack_detect(codec, nid);
+       if (present)
                change_cur_input(codec, spec->automic_idx, 0);
        else {
                unsigned int imic = (spec->automic_idx == AUTO_PIN_MIC) ?