ALSA: hda - Check unsol-cap in is_jack_detectalbe()
Takashi Iwai [Tue, 17 May 2011 09:28:16 +0000 (11:28 +0200)]
Also replace more open-codes with this function.

Signed-off-by: Takashi Iwai <tiwai@suse.de>

sound/pci/hda/hda_local.h
sound/pci/hda/patch_cirrus.c
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_sigmatel.c

index 01a7cf6..08ec073 100644 (file)
@@ -495,7 +495,8 @@ int snd_hda_jack_detect(struct hda_codec *codec, hda_nid_t nid);
 
 static inline bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid)
 {
-       return !!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_PRES_DETECT);
+       return (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_PRES_DETECT) &&
+               (get_wcaps(codec, nid) & AC_WCAP_UNSOL_CAP);
 }
 
 /* flags for hda_nid_item */
index 4ff70c1..26a1521 100644 (file)
@@ -922,7 +922,7 @@ static void init_output(struct hda_codec *codec)
                                    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP);
                if (!cfg->speaker_outs)
                        continue;
-               if (get_wcaps(codec, nid) & AC_WCAP_UNSOL_CAP) {
+               if (is_jack_detectable(codec, nid)) {
                        snd_hda_codec_write(codec, nid, 0,
                                            AC_VERB_SET_UNSOLICITED_ENABLE,
                                            AC_USRSP_EN | HP_EVENT);
index 1f00cdb..24bc8a6 100644 (file)
@@ -1628,7 +1628,7 @@ static void alc_init_auto_mic(struct hda_codec *codec)
        }
        if (!ext || !fixed)
                return;
-       if (!(get_wcaps(codec, ext) & AC_WCAP_UNSOL_CAP))
+       if (!is_jack_detectable(codec, ext))
                return; /* no unsol support */
        snd_printdd("realtek: Enable auto-mic switch on NID 0x%x/0x%x\n",
                    ext, fixed);
index 38f4317..8d26a51 100644 (file)
@@ -3114,8 +3114,7 @@ static int create_multi_out_ctls(struct hda_codec *codec, int num_outs,
 
        for (i = 0; i < num_outs && i < ARRAY_SIZE(chname); i++) {
                if (type == AUTO_PIN_HP_OUT && !spec->hp_detect) {
-                       wid_caps = get_wcaps(codec, pins[i]);
-                       if (wid_caps & AC_WCAP_UNSOL_CAP)
+                       if (is_jack_detectable(codec, pins[i]))
                                spec->hp_detect = 1;
                }
                nid = dac_nids[i];
@@ -3611,7 +3610,7 @@ static int stac_check_auto_mic(struct hda_codec *codec)
                        return 0;
        if (!fixed || (!ext && !dock))
                return 0; /* no input to switch */
-       if (!(get_wcaps(codec, ext) & AC_WCAP_UNSOL_CAP))
+       if (!is_jack_detectable(codec, ext))
                return 0; /* no unsol support */
        if (set_mic_route(codec, &spec->ext_mic, ext) ||
            set_mic_route(codec, &spec->int_mic, fixed) ||
@@ -3926,13 +3925,11 @@ static int stac9200_auto_create_hp_ctls(struct hda_codec *codec,
 {
        struct sigmatel_spec *spec = codec->spec;
        hda_nid_t pin = cfg->hp_pins[0];
-       unsigned int wid_caps;
 
        if (! pin)
                return 0;
 
-       wid_caps = get_wcaps(codec, pin);
-       if (wid_caps & AC_WCAP_UNSOL_CAP)
+       if (is_jack_detectable(codec, pin))
                spec->hp_detect = 1;
 
        return 0;
@@ -4143,7 +4140,7 @@ static int enable_pin_detect(struct hda_codec *codec, hda_nid_t nid,
        struct sigmatel_event *event;
        int tag;
 
-       if (!(get_wcaps(codec, nid) & AC_WCAP_UNSOL_CAP))
+       if (!is_jack_detectable(codec, nid))
                return 0;
        event = stac_get_event(codec, nid);
        if (event) {