Merge branch 'topic/snd-printk' into for-linus
[pandora-kernel.git] / sound / pci / hda / hda_generic.c
index 1d5797a..b36f6c5 100644 (file)
@@ -121,11 +121,17 @@ static int add_new_node(struct hda_codec *codec, struct hda_gspec *spec, hda_nid
        if (node == NULL)
                return -ENOMEM;
        node->nid = nid;
-       nconns = snd_hda_get_connections(codec, nid, conn_list,
-                                        HDA_MAX_CONNECTIONS);
-       if (nconns < 0) {
-               kfree(node);
-               return nconns;
+       node->wid_caps = get_wcaps(codec, nid);
+       node->type = get_wcaps_type(node->wid_caps);
+       if (node->wid_caps & AC_WCAP_CONN_LIST) {
+               nconns = snd_hda_get_connections(codec, nid, conn_list,
+                                                HDA_MAX_CONNECTIONS);
+               if (nconns < 0) {
+                       kfree(node);
+                       return nconns;
+               }
+       } else {
+               nconns = 0;
        }
        if (nconns <= ARRAY_SIZE(node->slist))
                node->conn_list = node->slist;
@@ -140,8 +146,6 @@ static int add_new_node(struct hda_codec *codec, struct hda_gspec *spec, hda_nid
        }
        memcpy(node->conn_list, conn_list, nconns * sizeof(hda_nid_t));
        node->nconns = nconns;
-       node->wid_caps = get_wcaps(codec, nid);
-       node->type = (node->wid_caps & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT;
 
        if (node->type == AC_WID_PIN) {
                node->pin_caps = snd_hda_query_pin_caps(codec, node->nid);