ALSA: hda-intel: Cleanups for widget connection list handling
This patch adds a check to snd_hda_get_connections() routine for presence of AC_WCAP_CONN_LIST. Also, make sure that negative error codes from noted route are handled on all places as errors. Signed-off-by: Jaroslav Kysela <perex@perex.cz> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
254da007f9
commit
16a433d8b3
|
@ -306,6 +306,12 @@ int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
|
|||
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 */
|
||||
|
|
|
@ -4501,12 +4501,6 @@ static int alc880_parse_auto_config(struct hda_codec *codec)
|
|||
&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 {
|
||||
|
|
|
@ -3389,7 +3389,7 @@ static int stac92xx_auto_create_mono_output_ctls(struct hda_codec *codec)
|
|||
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++) {
|
||||
|
@ -3535,7 +3535,7 @@ static int stac92xx_auto_create_spdif_mux_ctls(struct hda_codec *codec)
|
|||
spec->smux_nids[0],
|
||||
con_lst,
|
||||
HDA_MAX_NUM_INPUTS);
|
||||
if (!num_cons)
|
||||
if (num_cons <= 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (!labels)
|
||||
|
@ -3742,7 +3742,7 @@ static int stac92xx_parse_auto_config(struct hda_codec *codec, hda_nid_t dig_out
|
|||
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)
|
||||
|
@ -5169,6 +5169,8 @@ again:
|
|||
|
||||
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
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue