|
@@ -494,7 +494,7 @@ static unsigned int get_num_conns(struct hda_codec *codec, hda_nid_t nid)
|
|
|
|
|
|
int snd_hda_get_num_raw_conns(struct hda_codec *codec, hda_nid_t nid)
|
|
|
{
|
|
|
- return get_num_conns(codec, nid) & AC_CLIST_LENGTH;
|
|
|
+ return snd_hda_get_raw_connections(codec, nid, NULL, 0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -517,9 +517,6 @@ int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid,
|
|
|
hda_nid_t prev_nid;
|
|
|
int null_count = 0;
|
|
|
|
|
|
- if (snd_BUG_ON(!conn_list || max_conns <= 0))
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
parm = get_num_conns(codec, nid);
|
|
|
if (!parm)
|
|
|
return 0;
|
|
@@ -545,7 +542,8 @@ int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid,
|
|
|
AC_VERB_GET_CONNECT_LIST, 0);
|
|
|
if (parm == -1 && codec->bus->rirb_error)
|
|
|
return -EIO;
|
|
|
- conn_list[0] = parm & mask;
|
|
|
+ if (conn_list)
|
|
|
+ conn_list[0] = parm & mask;
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
@@ -580,14 +578,20 @@ int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid,
|
|
|
continue;
|
|
|
}
|
|
|
for (n = prev_nid + 1; n <= val; n++) {
|
|
|
+ if (conn_list) {
|
|
|
+ if (conns >= max_conns)
|
|
|
+ return -ENOSPC;
|
|
|
+ conn_list[conns] = n;
|
|
|
+ }
|
|
|
+ conns++;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (conn_list) {
|
|
|
if (conns >= max_conns)
|
|
|
return -ENOSPC;
|
|
|
- conn_list[conns++] = n;
|
|
|
+ conn_list[conns] = val;
|
|
|
}
|
|
|
- } else {
|
|
|
- if (conns >= max_conns)
|
|
|
- return -ENOSPC;
|
|
|
- conn_list[conns++] = val;
|
|
|
+ conns++;
|
|
|
}
|
|
|
prev_nid = val;
|
|
|
}
|