[alsa-devel] ALC269 mixer nodes
Takashi Iwai
tiwai at suse.de
Tue Aug 3 09:22:58 CEST 2010
At Tue, 03 Aug 2010 09:18:24 +0200,
I wrote:
>
> At Tue, 03 Aug 2010 08:49:05 +0200,
> David Henningsson wrote:
> >
> > 2010-08-02 16:50, Takashi Iwai skrev:
> > > At Mon, 02 Aug 2010 16:30:57 +0200,
> > > David Henningsson wrote:
> > >>
> > >> Here's yet another ALC269 which I'm unsure of how to fix the right way.
> > >> There is no way to enable the microphone, and I think the trouble has to
> > >> do with that the auto parser does not check whether the node is a mixer
> > >> or a selector. It might be that the "alc269" vs "alc269vb" detection is
> > >> wrong as well (btw, what does vb stand for?).
> > >>
> > >> I unfortunately do not have the full alsa-info output, but the
> > >> codec-proc is here:
> > >> http://launchpadlibrarian.net/49076615/Card0.Codecs.codec.2.txt
> > >> and PCI IDs:
> > >> http://launchpadlibrarian.net/49076618/PciMultimedia.txt
> > >
> > > Are you sure that it's the result with the very latest driver?
> >
> > The codec-proc might not have been generated with the very latest
> > driver, but when I run it through hda-emu (with a just-pulled
> > sound-2.6.git as hda-dir), I get errors as:
> >
> > send: NID=0x23, VERB=0x701(set_connect_sel), PARM=0x1
> > invalid connect select for node 0x23
> >
> > ...which makes me believe the error is still there. The error above
> > comes from patch_realtek.c:14366, btw.
>
> This isn't a critical bug. The codec shall ignore this verb.
> (of course it should be corrected, though.)
... and the fix patch is below.
Takashi
---
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index cf14b00..e340eee 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -5166,6 +5166,19 @@ static void fixup_automic_adc(struct hda_codec *codec)
spec->auto_mic = 0; /* disable auto-mic to be sure */
}
+/* select or unmute the given capsrc route */
+static void select_or_unmute_capsrc(struct hda_codec *codec, hda_nid_t cap,
+ int idx)
+{
+ if (get_wcaps_type(get_wcaps(codec, cap)) == AC_WID_AUD_MIX) {
+ snd_hda_codec_amp_stereo(codec, cap, HDA_INPUT, idx,
+ HDA_AMP_MUTE, 0);
+ } else {
+ snd_hda_codec_write_cache(codec, cap, 0,
+ AC_VERB_SET_CONNECT_SEL, idx);
+ }
+}
+
/* set the default connection to that pin */
static int init_capsrc_for_pin(struct hda_codec *codec, hda_nid_t pin)
{
@@ -5180,14 +5193,7 @@ static int init_capsrc_for_pin(struct hda_codec *codec, hda_nid_t pin)
idx = get_connection_index(codec, cap, pin);
if (idx < 0)
continue;
- /* select or unmute this route */
- if (get_wcaps_type(get_wcaps(codec, cap)) == AC_WID_AUD_MIX) {
- snd_hda_codec_amp_stereo(codec, cap, HDA_INPUT, idx,
- HDA_AMP_MUTE, 0);
- } else {
- snd_hda_codec_write_cache(codec, cap, 0,
- AC_VERB_SET_CONNECT_SEL, idx);
- }
+ select_or_unmute_capsrc(codec, cap, idx);
return i; /* return the found index */
}
return -1; /* not found */
@@ -14363,9 +14369,8 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
/* set default input source */
if (!spec->dual_adc_switch)
- snd_hda_codec_write_cache(codec, spec->capsrc_nids[0],
- 0, AC_VERB_SET_CONNECT_SEL,
- spec->input_mux->items[0].index);
+ select_or_unmute_capsrc(codec, spec->capsrc_nids[0],
+ spec->input_mux->items[0].index);
err = alc_auto_add_mic_boost(codec);
if (err < 0)
More information about the Alsa-devel
mailing list