if (snd_BUG_ON(!conn_list || max_conns <= 0))
                return -EINVAL;
 
+       if ((get_wcaps(codec, nid) & AC_WCAP_CONN_LIST) == 0) {
+               snd_printk(KERN_WARNING "hda_codec: "
+                          "connection list not available for 0x%x\n", nid);
+               return -EINVAL;
+       }
+
        parm = snd_hda_param_read(codec, nid, AC_PAR_CONNLIST_LEN);
        if (parm & AC_CLIST_LONG) {
                /* long form */
 
                                              &dig_nid, 1);
                if (err < 0)
                        continue;
-               if (dig_nid > 0x7f) {
-                       printk(KERN_ERR "alc880_auto: invalid dig_nid "
-                               "connection 0x%x for NID 0x%x\n", dig_nid,
-                               spec->autocfg.dig_out_pins[i]);
-                       continue;
-               }
                if (!i)
                        spec->multiout.dig_out_nid = dig_nid;
                else {
 
                                spec->mono_nid,
                                con_lst,
                                HDA_MAX_NUM_INPUTS);
-       if (!num_cons || num_cons > ARRAY_SIZE(stac92xx_mono_labels))
+       if (num_cons <= 0 || num_cons > ARRAY_SIZE(stac92xx_mono_labels))
                return -EINVAL;
 
        for (i = 0; i < num_cons; i++) {
                                spec->smux_nids[0],
                                con_lst,
                                HDA_MAX_NUM_INPUTS);
-       if (!num_cons)
+       if (num_cons <= 0)
                return -EINVAL;
 
        if (!labels)
                if (snd_hda_get_connections(codec,
                                spec->autocfg.mono_out_pin, conn_list, 1) &&
                                snd_hda_get_connections(codec, conn_list[0],
-                               conn_list, 1)) {
+                               conn_list, 1) > 0) {
 
                                int wcaps = get_wcaps(codec, conn_list[0]);
                                int wid_type = (wcaps & AC_WCAP_TYPE)
 
        num_dacs = snd_hda_get_connections(codec, nid,
                                conn, STAC92HD83_DAC_COUNT + 1) - 1;
+       if (num_dacs < 0)
+               num_dacs = STAC92HD83_DAC_COUNT;
 
        /* set port X to select the last DAC
         */