At Sun, 27 Apr 2008 01:38:19 -0500, Greg Zornetzer wrote: > > Hi all, > I recently acquired an ECS GF7100PVT-M3 motherboard, which appears to use > the IDT 92HD206 codec for HDA. Unfortunately, it doesn't appear to have > full support under ALSA. It gets detected as another Sigmatel chip. Analog > stereo output appears to work, but the mixer doesn't find any of the normal > inputs. > > I found the tech specs for the chip at > http://www.idt.com/products/getDoc.cfm?docID=13461840 > I've attached an lspci output and the codec file to this email. I'm not > much of an driver hacker, but if someone could give me an idea of what needs > to go into the patch_sigmatel.c file to make this thing work, I'd be willing > to try. I'm also more than willing to test out patches on my setup. The below is an entirely untested patch quickly made from the codec information you posted. Could you give it a try with the latest ALSA HG version? thanks, Takashi --- diff -r 19b486f73bd8 pci/hda/patch_sigmatel.c --- a/pci/hda/patch_sigmatel.c Fri Apr 25 14:25:04 2008 +0200 +++ b/pci/hda/patch_sigmatel.c Tue Apr 29 19:47:26 2008 +0200 @@ -364,6 +364,20 @@ 0x21, 0x22, }; +#define stac92hd206_pin_nids stac925x_pin_nids + +static hda_nid_t stac92hd206_dac_nids[4] = { + 0x02, 0x03, 0x04, 0x05, +}; + +static hda_nid_t stac92hd206_adc_nids[2] = { + 0x07, 0x08 +}; + +static hda_nid_t stac92hd206_mux_nids[2] = { + 0x15, 0x16 +}; + static int stac92xx_dmux_enum_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) { @@ -688,6 +702,12 @@ {} }; +static struct hda_verb stac92hd206_core_init[] = { + /* set master volume and direct control */ + { 0x24, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff}, + {} +}; + #define STAC_MONO_MUX \ { \ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ @@ -889,6 +909,17 @@ HDA_CODEC_VOLUME_IDX("Capture Volume", 0x2, 0x1A, 0x0, HDA_INPUT), HDA_CODEC_MUTE_IDX("Capture Switch", 0x2, 0x1d, 0x0, HDA_OUTPUT), HDA_CODEC_VOLUME_IDX("Mux Capture Volume", 0x2, 0x17, 0x0, HDA_OUTPUT), + { } /* end */ +}; + +static struct snd_kcontrol_new stac92hd206_mixer[] = { + STAC_INPUT_SOURCE(2), + HDA_CODEC_VOLUME_IDX("Capture Volume", 0, 0x15, 0, HDA_OUTPUT), + HDA_CODEC_MUTE_IDX("Capture Switch", 0, 0x1b, 0, HDA_OUTPUT), + HDA_CODEC_VOLUME_IDX("Capture Mux Volume", 0, 0x18, 0, HDA_INPUT), + HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x16, 0, HDA_OUTPUT), + HDA_CODEC_MUTE_IDX("Capture Switch", 1, 0x1c, 0, HDA_OUTPUT), + HDA_CODEC_VOLUME_IDX("Capture Mux Volume", 1, 0x19, 0, HDA_INPUT), { } /* end */ }; @@ -3463,6 +3494,53 @@ return 0; } +static int patch_stac92hd206(struct hda_codec *codec) +{ + struct sigmatel_spec *spec; + int err; + + spec = kzalloc(sizeof(*spec), GFP_KERNEL); + if (!spec) + return -ENOMEM; + + codec->spec = spec; + spec->num_pins = ARRAY_SIZE(stac92hd206_pin_nids); + spec->pin_nids = stac92hd206_pin_nids; + + /* no preset model yet */ + err = stac92xx_save_bios_config_regs(codec); + if (err < 0) { + stac92xx_free(codec); + return err; + } + spec->pin_configs = spec->bios_pin_configs; + + spec->multiout.max_channels = 2; + spec->multiout.num_dacs = 1; + spec->multiout.dac_nids = stac92hd206_dac_nids; + spec->adc_nids = stac92hd206_adc_nids; + spec->num_adcs = ARRAY_SIZE(stac92hd206_adc_nids); + spec->mux_nids = stac92hd206_mux_nids; + spec->num_muxes = ARRAY_SIZE(stac92hd206_mux_nids); + spec->num_pwrs = 0; + spec->num_dmics = 0; + + spec->init = stac92hd206_core_init; + spec->mixer = stac92hd206_mixer; + + err = stac92xx_parse_auto_config(codec, 0x1e, 0x20); + if (!err) + err = -EINVAL; + if (err < 0) { + stac92xx_free(codec); + return err; + } + + codec->patch_ops = stac92xx_patch_ops; + + return 0; +} + static struct hda_input_mux stac92hd73xx_dmux = { .num_items = 4, .items = { @@ -4289,6 +4367,8 @@ { .id = 0x83847635, .name = "STAC9250D", .patch = patch_stac925x }, { .id = 0x83847636, .name = "STAC9251", .patch = patch_stac925x }, { .id = 0x83847637, .name = "STAC9250D", .patch = patch_stac925x }, + { .id = 0x83847645, .name = "92HD206X", .patch = patch_stac92hd206 }, + { .id = 0x83847646, .name = "92HD206D", .patch = patch_stac92hd206 }, /* The following does not take into account .id=0x83847661 when subsys = * 104D0C00 which is STAC9225s. Because of this, some SZ Notebooks are * currently not fully supported. _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel