diff options
Diffstat (limited to 'sound/pci/hda/hda_proc.c')
-rw-r--r-- | sound/pci/hda/hda_proc.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/sound/pci/hda/hda_proc.c b/sound/pci/hda/hda_proc.c index 1e5aff5c48d1..743d77922bce 100644 --- a/sound/pci/hda/hda_proc.c +++ b/sound/pci/hda/hda_proc.c | |||
@@ -216,7 +216,7 @@ static void print_pin_caps(struct snd_info_buffer *buffer, | |||
216 | unsigned int caps, val; | 216 | unsigned int caps, val; |
217 | 217 | ||
218 | caps = snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP); | 218 | caps = snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP); |
219 | snd_iprintf(buffer, " Pincap 0x08%x:", caps); | 219 | snd_iprintf(buffer, " Pincap 0x%08x:", caps); |
220 | if (caps & AC_PINCAP_IN) | 220 | if (caps & AC_PINCAP_IN) |
221 | snd_iprintf(buffer, " IN"); | 221 | snd_iprintf(buffer, " IN"); |
222 | if (caps & AC_PINCAP_OUT) | 222 | if (caps & AC_PINCAP_OUT) |
@@ -229,8 +229,13 @@ static void print_pin_caps(struct snd_info_buffer *buffer, | |||
229 | snd_iprintf(buffer, " Detect"); | 229 | snd_iprintf(buffer, " Detect"); |
230 | if (caps & AC_PINCAP_BALANCE) | 230 | if (caps & AC_PINCAP_BALANCE) |
231 | snd_iprintf(buffer, " Balanced"); | 231 | snd_iprintf(buffer, " Balanced"); |
232 | if (caps & AC_PINCAP_LR_SWAP) | 232 | if (caps & AC_PINCAP_HDMI) { |
233 | snd_iprintf(buffer, " R/L"); | 233 | /* Realtek uses this bit as a different meaning */ |
234 | if ((codec->vendor_id >> 16) == 0x10ec) | ||
235 | snd_iprintf(buffer, " R/L"); | ||
236 | else | ||
237 | snd_iprintf(buffer, " HDMI"); | ||
238 | } | ||
234 | if (caps & AC_PINCAP_TRIG_REQ) | 239 | if (caps & AC_PINCAP_TRIG_REQ) |
235 | snd_iprintf(buffer, " Trigger"); | 240 | snd_iprintf(buffer, " Trigger"); |
236 | if (caps & AC_PINCAP_IMP_SENSE) | 241 | if (caps & AC_PINCAP_IMP_SENSE) |
@@ -552,9 +557,15 @@ static void print_codec_info(struct snd_info_entry *entry, | |||
552 | 557 | ||
553 | snd_iprintf(buffer, "Node 0x%02x [%s] wcaps 0x%x:", nid, | 558 | snd_iprintf(buffer, "Node 0x%02x [%s] wcaps 0x%x:", nid, |
554 | get_wid_type_name(wid_type), wid_caps); | 559 | get_wid_type_name(wid_type), wid_caps); |
555 | if (wid_caps & AC_WCAP_STEREO) | 560 | if (wid_caps & AC_WCAP_STEREO) { |
556 | snd_iprintf(buffer, " Stereo"); | 561 | unsigned int chans; |
557 | else | 562 | chans = (wid_caps & AC_WCAP_CHAN_CNT_EXT) >> 13; |
563 | chans = ((chans << 1) | 1) + 1; | ||
564 | if (chans == 2) | ||
565 | snd_iprintf(buffer, " Stereo"); | ||
566 | else | ||
567 | snd_iprintf(buffer, " %d-Channels", chans); | ||
568 | } else | ||
558 | snd_iprintf(buffer, " Mono"); | 569 | snd_iprintf(buffer, " Mono"); |
559 | if (wid_caps & AC_WCAP_DIGITAL) | 570 | if (wid_caps & AC_WCAP_DIGITAL) |
560 | snd_iprintf(buffer, " Digital"); | 571 | snd_iprintf(buffer, " Digital"); |
@@ -566,6 +577,8 @@ static void print_codec_info(struct snd_info_entry *entry, | |||
566 | snd_iprintf(buffer, " Stripe"); | 577 | snd_iprintf(buffer, " Stripe"); |
567 | if (wid_caps & AC_WCAP_LR_SWAP) | 578 | if (wid_caps & AC_WCAP_LR_SWAP) |
568 | snd_iprintf(buffer, " R/L"); | 579 | snd_iprintf(buffer, " R/L"); |
580 | if (wid_caps & AC_WCAP_CP_CAPS) | ||
581 | snd_iprintf(buffer, " CP"); | ||
569 | snd_iprintf(buffer, "\n"); | 582 | snd_iprintf(buffer, "\n"); |
570 | 583 | ||
571 | /* volume knob is a special widget that always have connection | 584 | /* volume knob is a special widget that always have connection |