return 1;
 }
 
+#define is_hdmi_cfg(conf) \
+       (get_defcfg_location(conf) == AC_JACK_LOC_HDMI)
+
 /**
  * snd_hda_get_pin_label - Get a label for the given I/O pin
  *
        unsigned int def_conf = snd_hda_codec_get_pincfg(codec, nid);
        const char *name = NULL;
        int i;
+       bool hdmi;
 
        if (indexp)
                *indexp = 0;
                                           label, maxlen, indexp);
        case AC_JACK_SPDIF_OUT:
        case AC_JACK_DIG_OTHER_OUT:
-               if (get_defcfg_location(def_conf) == AC_JACK_LOC_HDMI)
-                       name = "HDMI";
-               else
-                       name = "SPDIF";
-               if (cfg && indexp) {
-                       i = find_idx_in_nid_list(nid, cfg->dig_out_pins,
-                                                cfg->dig_outs);
-                       if (i >= 0)
-                               *indexp = i;
-               }
+               hdmi = is_hdmi_cfg(def_conf);
+               name = hdmi ? "HDMI" : "SPDIF";
+               if (cfg && indexp)
+                       for (i = 0; i < cfg->dig_outs; i++) {
+                               hda_nid_t pin = cfg->dig_out_pins[i];
+                               unsigned int c;
+                               if (pin == nid)
+                                       break;
+                               c = snd_hda_codec_get_pincfg(codec, pin);
+                               if (hdmi == is_hdmi_cfg(c))
+                                       (*indexp)++;
+                       }
                break;
        default:
                if (cfg) {