summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2009-03-12 17:06:07 +0100
committerTakashi Iwai <tiwai@suse.de>2009-03-12 17:06:07 +0100
commit9421f9543b3a0a870499f64498406003de8214b4 (patch)
treec8246e6a92d250f481c22b51d5113e73445da782 /sound
parent3b7523fc828e41b2988feb400704e01b67859d78 (diff)
downloadlinux-9421f9543b3a0a870499f64498406003de8214b4.tar.gz
linux-9421f9543b3a0a870499f64498406003de8214b4.tar.bz2
linux-9421f9543b3a0a870499f64498406003de8214b4.zip
ALSA: hda - Print multiple out-amp values of pin widgets on Conext codecs
Add a flag to work around the non-standard amp-value handling on Conexant codecs. Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/hda/hda_codec.h3
-rw-r--r--sound/pci/hda/hda_proc.c10
-rw-r--r--sound/pci/hda/patch_conexant.c3
3 files changed, 14 insertions, 2 deletions
diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
index 2ea628478a91..079e1ab718d4 100644
--- a/sound/pci/hda/hda_codec.h
+++ b/sound/pci/hda/hda_codec.h
@@ -793,6 +793,9 @@ struct hda_codec {
* status change
* (e.g. Realtek codecs)
*/
+ unsigned int pin_amp_workaround:1; /* pin out-amp takes index
+ * (e.g. Conexant codecs)
+ */
#ifdef CONFIG_SND_HDA_POWER_SAVE
unsigned int power_on :1; /* current (global) power-state */
unsigned int power_transition :1; /* power-state in transition */
diff --git a/sound/pci/hda/hda_proc.c b/sound/pci/hda/hda_proc.c
index 144b85276d5a..93b25ba4d00b 100644
--- a/sound/pci/hda/hda_proc.c
+++ b/sound/pci/hda/hda_proc.c
@@ -554,8 +554,14 @@ static void print_codec_info(struct snd_info_entry *entry,
snd_iprintf(buffer, " Amp-Out caps: ");
print_amp_caps(buffer, codec, nid, HDA_OUTPUT);
snd_iprintf(buffer, " Amp-Out vals: ");
- print_amp_vals(buffer, codec, nid, HDA_OUTPUT,
- wid_caps & AC_WCAP_STEREO, 1);
+ if (wid_type == AC_WID_PIN &&
+ codec->pin_amp_workaround)
+ print_amp_vals(buffer, codec, nid, HDA_OUTPUT,
+ wid_caps & AC_WCAP_STEREO,
+ conn_len);
+ else
+ print_amp_vals(buffer, codec, nid, HDA_OUTPUT,
+ wid_caps & AC_WCAP_STEREO, 1);
}
switch (wid_type) {
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
index bc016fade192..1f2ad76ca94b 100644
--- a/sound/pci/hda/patch_conexant.c
+++ b/sound/pci/hda/patch_conexant.c
@@ -1066,6 +1066,7 @@ static int patch_cxt5045(struct hda_codec *codec)
if (!spec)
return -ENOMEM;
codec->spec = spec;
+ codec->pin_amp_workaround = 1;
spec->multiout.max_channels = 2;
spec->multiout.num_dacs = ARRAY_SIZE(cxt5045_dac_nids);
@@ -1501,6 +1502,7 @@ static int patch_cxt5047(struct hda_codec *codec)
if (!spec)
return -ENOMEM;
codec->spec = spec;
+ codec->pin_amp_workaround = 1;
spec->multiout.max_channels = 2;
spec->multiout.num_dacs = ARRAY_SIZE(cxt5047_dac_nids);
@@ -1847,6 +1849,7 @@ static int patch_cxt5051(struct hda_codec *codec)
if (!spec)
return -ENOMEM;
codec->spec = spec;
+ codec->pin_amp_workaround = 1;
codec->patch_ops = conexant_patch_ops;
codec->patch_ops.init = cxt5051_init;