aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/hda_proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/hda/hda_proc.c')
-rw-r--r--sound/pci/hda/hda_proc.c25
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