diff options
Diffstat (limited to 'sound/pci/hda/hda_generic.c')
| -rw-r--r-- | sound/pci/hda/hda_generic.c | 18 | 
1 files changed, 11 insertions, 7 deletions
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c index 1d5797a9668..b36f6c5a92d 100644 --- a/sound/pci/hda/hda_generic.c +++ b/sound/pci/hda/hda_generic.c @@ -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);  |