At Mon, 2 Feb 2009 19:01:30 +0000 (GMT), Tony Vroon wrote: > > The Realtek ALC262 on the Tyan Thunder n6650W (S2915-E) mainboard has a > rather odd configuration template. As a result, the white AUX connector > can not be used. This rewrites the default config to more accurately > reflect the connector layout, colour and function. > Unfortunately the black CD_IN connector, which is suspected to be widget > 0x1c refuses to switch into input (0x20), instead opting to remain on 0x0. > As such, no mixer controls are exposed for it. Autoswitching is implemented > between the front headphone output and back line output. > > Signed-off-by: Tony Vroon <tony@xxxxxxxx> > -- > Takashi, this was done on top of 2.6.29-rc3. Please let me know if you'd > like it rebased onto anything else instead. Unfortunately I was unable > to resolve the recalcitrant widget problem, but at least the default > config printed for widget 0x14 makes sense now. Thanks, applied now. Could you make an update patch for Documentation/sound/alsa/HD-Audio-Models.txt? Takashi > > diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c > index 7884a4e..5759195 100644 > --- a/sound/pci/hda/patch_realtek.c > +++ b/sound/pci/hda/patch_realtek.c > @@ -103,6 +103,7 @@ enum { > ALC262_NEC, > ALC262_TOSHIBA_S06, > ALC262_TOSHIBA_RX1, > + ALC262_TYAN, > ALC262_AUTO, > ALC262_MODEL_LAST /* last tag */ > }; > @@ -9426,6 +9427,67 @@ static struct snd_kcontrol_new alc262_benq_t31_mixer[] = { > { } /* end */ > }; > > +static struct snd_kcontrol_new alc262_tyan_mixer[] = { > + HDA_CODEC_VOLUME("Master Playback Volume", 0x0c, 0x0, HDA_OUTPUT), > + HDA_BIND_MUTE("Master Playback Switch", 0x0c, 2, HDA_INPUT), > + HDA_CODEC_VOLUME("Aux Playback Volume", 0x0b, 0x06, HDA_INPUT), > + HDA_CODEC_MUTE("Aux Playback Switch", 0x0b, 0x06, HDA_INPUT), > + HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), > + HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), > + HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), > + HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), > + HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), > + HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), > + HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), > + HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), > + { } /* end */ > +}; > + > +static struct hda_verb alc262_tyan_verbs[] = { > + /* Headphone automute */ > + {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_HP_EVENT}, > + {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, > + {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, > + > + /* P11 AUX_IN, white 4-pin connector */ > + {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, > + {0x14, AC_VERB_SET_CONFIG_DEFAULT_BYTES_1, 0xe1}, > + {0x14, AC_VERB_SET_CONFIG_DEFAULT_BYTES_2, 0x93}, > + {0x14, AC_VERB_SET_CONFIG_DEFAULT_BYTES_3, 0x19}, > + > + {} > +}; > + > +/* unsolicited event for HP jack sensing */ > +static void alc262_tyan_automute(struct hda_codec *codec) > +{ > + unsigned int mute; > + unsigned int present; > + > + snd_hda_codec_read(codec, 0x1b, 0, AC_VERB_SET_PIN_SENSE, 0); > + present = snd_hda_codec_read(codec, 0x1b, 0, > + AC_VERB_GET_PIN_SENSE, 0); > + present = (present & 0x80000000) != 0; > + if (present) { > + /* mute line output on ATX panel */ > + snd_hda_codec_amp_stereo(codec, 0x15, HDA_OUTPUT, 0, > + HDA_AMP_MUTE, HDA_AMP_MUTE); > + } else { > + /* unmute line output if necessary */ > + mute = snd_hda_codec_amp_read(codec, 0x1b, 0, HDA_OUTPUT, 0); > + snd_hda_codec_amp_stereo(codec, 0x15, HDA_OUTPUT, 0, > + HDA_AMP_MUTE, mute); > + } > +} > + > +static void alc262_tyan_unsol_event(struct hda_codec *codec, > + unsigned int res) > +{ > + if ((res >> 26) != ALC880_HP_EVENT) > + return; > + alc262_tyan_automute(codec); > +} > + > #define alc262_capture_mixer alc882_capture_mixer > #define alc262_capture_alt_mixer alc882_capture_alt_mixer > > @@ -10534,6 +10596,7 @@ static const char *alc262_models[ALC262_MODEL_LAST] = { > [ALC262_ULTRA] = "ultra", > [ALC262_LENOVO_3000] = "lenovo-3000", > [ALC262_NEC] = "nec", > + [ALC262_TYAN] = "tyan", > [ALC262_AUTO] = "auto", > }; > > @@ -10574,6 +10637,7 @@ static struct snd_pci_quirk alc262_cfg_tbl[] = { > SND_PCI_QUIRK(0x1179, 0xff7b, "Toshiba S06", ALC262_TOSHIBA_S06), > SND_PCI_QUIRK(0x10cf, 0x1397, "Fujitsu", ALC262_FUJITSU), > SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FUJITSU), > + SND_PCI_QUIRK(0x10f1, 0x2915, "Tyan Thunder n6650W", ALC262_TYAN), > SND_PCI_QUIRK(0x144d, 0xc032, "Samsung Q1 Ultra", ALC262_ULTRA), > SND_PCI_QUIRK(0x144d, 0xc039, "Samsung Q1U EL", ALC262_ULTRA), > SND_PCI_QUIRK(0x144d, 0xc510, "Samsung Q45", ALC262_HIPPO), > @@ -10792,6 +10856,19 @@ static struct alc_config_preset alc262_presets[] = { > .unsol_event = alc262_hippo_unsol_event, > .init_hook = alc262_hippo_automute, > }, > + [ALC262_TYAN] = { > + .mixers = { alc262_tyan_mixer }, > + .init_verbs = { alc262_init_verbs, alc262_tyan_verbs}, > + .num_dacs = ARRAY_SIZE(alc262_dac_nids), > + .dac_nids = alc262_dac_nids, > + .hp_nid = 0x02, > + .dig_out_nid = ALC262_DIGOUT_NID, > + .num_channel_mode = ARRAY_SIZE(alc262_modes), > + .channel_mode = alc262_modes, > + .input_mux = &alc262_capture_source, > + .unsol_event = alc262_tyan_unsol_event, > + .init_hook = alc262_tyan_automute, > + }, > }; > > static int patch_alc262(struct hda_codec *codec) > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel