diff options
Diffstat (limited to 'sound/pci/hda/hda_codec.c')
-rw-r--r-- | sound/pci/hda/hda_codec.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index 97c68dd24ef5..ecdf30eb5879 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c | |||
@@ -494,7 +494,7 @@ static unsigned int get_num_conns(struct hda_codec *codec, hda_nid_t nid) | |||
494 | 494 | ||
495 | int snd_hda_get_num_raw_conns(struct hda_codec *codec, hda_nid_t nid) | 495 | int snd_hda_get_num_raw_conns(struct hda_codec *codec, hda_nid_t nid) |
496 | { | 496 | { |
497 | return get_num_conns(codec, nid) & AC_CLIST_LENGTH; | 497 | return snd_hda_get_raw_connections(codec, nid, NULL, 0); |
498 | } | 498 | } |
499 | 499 | ||
500 | /** | 500 | /** |
@@ -517,9 +517,6 @@ int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid, | |||
517 | hda_nid_t prev_nid; | 517 | hda_nid_t prev_nid; |
518 | int null_count = 0; | 518 | int null_count = 0; |
519 | 519 | ||
520 | if (snd_BUG_ON(!conn_list || max_conns <= 0)) | ||
521 | return -EINVAL; | ||
522 | |||
523 | parm = get_num_conns(codec, nid); | 520 | parm = get_num_conns(codec, nid); |
524 | if (!parm) | 521 | if (!parm) |
525 | return 0; | 522 | return 0; |
@@ -545,7 +542,8 @@ int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid, | |||
545 | AC_VERB_GET_CONNECT_LIST, 0); | 542 | AC_VERB_GET_CONNECT_LIST, 0); |
546 | if (parm == -1 && codec->bus->rirb_error) | 543 | if (parm == -1 && codec->bus->rirb_error) |
547 | return -EIO; | 544 | return -EIO; |
548 | conn_list[0] = parm & mask; | 545 | if (conn_list) |
546 | conn_list[0] = parm & mask; | ||
549 | return 1; | 547 | return 1; |
550 | } | 548 | } |
551 | 549 | ||
@@ -580,14 +578,20 @@ int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid, | |||
580 | continue; | 578 | continue; |
581 | } | 579 | } |
582 | for (n = prev_nid + 1; n <= val; n++) { | 580 | for (n = prev_nid + 1; n <= val; n++) { |
581 | if (conn_list) { | ||
582 | if (conns >= max_conns) | ||
583 | return -ENOSPC; | ||
584 | conn_list[conns] = n; | ||
585 | } | ||
586 | conns++; | ||
587 | } | ||
588 | } else { | ||
589 | if (conn_list) { | ||
583 | if (conns >= max_conns) | 590 | if (conns >= max_conns) |
584 | return -ENOSPC; | 591 | return -ENOSPC; |
585 | conn_list[conns++] = n; | 592 | conn_list[conns] = val; |
586 | } | 593 | } |
587 | } else { | 594 | conns++; |
588 | if (conns >= max_conns) | ||
589 | return -ENOSPC; | ||
590 | conn_list[conns++] = val; | ||
591 | } | 595 | } |
592 | prev_nid = val; | 596 | prev_nid = val; |
593 | } | 597 | } |
@@ -3140,7 +3144,7 @@ static unsigned int convert_to_spdif_status(unsigned short val) | |||
3140 | if (val & AC_DIG1_PROFESSIONAL) | 3144 | if (val & AC_DIG1_PROFESSIONAL) |
3141 | sbits |= IEC958_AES0_PROFESSIONAL; | 3145 | sbits |= IEC958_AES0_PROFESSIONAL; |
3142 | if (sbits & IEC958_AES0_PROFESSIONAL) { | 3146 | if (sbits & IEC958_AES0_PROFESSIONAL) { |
3143 | if (sbits & AC_DIG1_EMPHASIS) | 3147 | if (val & AC_DIG1_EMPHASIS) |
3144 | sbits |= IEC958_AES0_PRO_EMPHASIS_5015; | 3148 | sbits |= IEC958_AES0_PRO_EMPHASIS_5015; |
3145 | } else { | 3149 | } else { |
3146 | if (val & AC_DIG1_EMPHASIS) | 3150 | if (val & AC_DIG1_EMPHASIS) |