From 245c03d614334a787e7f6cac8f0fcc2ac4bf2a24 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Fri, 16 Nov 2007 17:52:39 +0100 Subject: [PATCH] --- yaml --- r: 81509 b: refs/heads/master c: e171613949e350966f5cc8c9b0023a5f746f7a5d h: refs/heads/master i: 81507: 68fded18ef0466ce50a655e09faf949ced3034fd v: v3 --- [refs] | 2 +- trunk/sound/pci/hda/hda_codec.h | 1 + trunk/sound/pci/hda/hda_proc.c | 32 +++++++++++++++++++++++--------- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index 68a8ec66982c..87149ff86e1d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9b1fffddc80949fb4aa93fdcc57544bc2108ced3 +refs/heads/master: e171613949e350966f5cc8c9b0023a5f746f7a5d diff --git a/trunk/sound/pci/hda/hda_codec.h b/trunk/sound/pci/hda/hda_codec.h index 2bce925d84ef..03315105c904 100644 --- a/trunk/sound/pci/hda/hda_codec.h +++ b/trunk/sound/pci/hda/hda_codec.h @@ -135,6 +135,7 @@ enum { #define AC_PAR_PROC_CAP 0x10 #define AC_PAR_GPIO_CAP 0x11 #define AC_PAR_AMP_OUT_CAP 0x12 +#define AC_PAR_VOL_KNB_CAP 0x13 /* * AC_VERB_PARAMETERS results (32bit) diff --git a/trunk/sound/pci/hda/hda_proc.c b/trunk/sound/pci/hda/hda_proc.c index 000c6c45011b..7df1d16d1469 100644 --- a/trunk/sound/pci/hda/hda_proc.c +++ b/trunk/sound/pci/hda/hda_proc.c @@ -305,6 +305,12 @@ static void print_codec_info(struct snd_info_entry *entry, snd_iprintf(buffer, " Amp-Out"); snd_iprintf(buffer, "\n"); + /* volume knob is a special widget that always have connection + * list + */ + if (wid_type == AC_WID_VOL_KNB) + wid_caps |= AC_WCAP_CONN_LIST; + if (wid_caps & AC_WCAP_CONN_LIST) conn_len = snd_hda_get_connections(codec, nid, conn, HDA_MAX_CONNECTIONS); @@ -340,9 +346,15 @@ static void print_codec_info(struct snd_info_entry *entry, snd_iprintf(buffer, "\n"); break; case AC_WID_VOL_KNB: - snd_iprintf(buffer, " Volume-Knob: 0x%x\n", - snd_hda_codec_read(codec, nid, 0, - AC_VERB_GET_VOLUME_KNOB_CONTROL, 0)); + pinctls = snd_hda_param_read(codec, nid, + AC_PAR_VOL_KNB_CAP); + snd_iprintf(buffer, " Volume-Knob: delta=%d, " + "steps=%d, ", + (pinctls >> 7) & 1, pinctls & 0x7f); + pinctls = snd_hda_codec_read(codec, nid, 0, + AC_VERB_GET_VOLUME_KNOB_CONTROL, 0); + snd_iprintf(buffer, "direct=%d, val=%d\n", + (pinctls >> 7) & 1, pinctls & 0x7f); break; case AC_WID_AUD_OUT: case AC_WID_AUD_IN: @@ -365,13 +377,15 @@ static void print_codec_info(struct snd_info_entry *entry, curr = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONNECT_SEL, 0); snd_iprintf(buffer, " Connection: %d\n", conn_len); - snd_iprintf(buffer, " "); - for (c = 0; c < conn_len; c++) { - snd_iprintf(buffer, " 0x%02x", conn[c]); - if (c == curr) - snd_iprintf(buffer, "*"); + if (conn_len > 0) { + snd_iprintf(buffer, " "); + for (c = 0; c < conn_len; c++) { + snd_iprintf(buffer, " 0x%02x", conn[c]); + if (c == curr) + snd_iprintf(buffer, "*"); + } + snd_iprintf(buffer, "\n"); } - snd_iprintf(buffer, "\n"); } } snd_hda_power_down(codec);