Hi Takashi, some days ago i reported the same problem with snd-hda-intel in the mail "Sound on Asus A6T-AP005H". I've tried your patch with both alsa 1.0.12 and 1.0.13rc1. On 1.0.13rc1 the kernel throws an exception at the beginning of the boot process. On 1.0.12 the system boots, but there is no difference in the behavior compared to the unpatched driver. Dmesg says:
hda_codec: Unknown model for ALC861, trying auto-probe from BIOS... The sound section of 'lspci -v' is: 00:10.1 Audio device: nVidia Corporation MCP51 High Definition Audio (rev a2) Subsystem: ASUSTeK Computer Inc. Unknown device 1367 Flags: bus master, 66MHz, fast devsel, latency 0, IRQ 10 Memory at dceb8000 (32-bit, non-prefetchable) [size=16K] Capabilities: [44] Power Management version 2 Capabilities: [50] Message Signalled Interrupts: 64bit+ Queue=0/0 Enable- Capabilities: [6c] HyperTransport: MSI Mapping I'm willing to help with the driver anyway i can. So if you have any other patches, please send them to me and i'll test them. Best regards, simeon Takashi Iwai wrote: > At Tue, 05 Sep 2006 17:18:00 +0200, > I wrote: >> At Tue, 05 Sep 2006 23:29:46 +1000, >> Vini Engel wrote: >>> Does anyone have any information on how to make the hda-intel driver >>> work properly when the codec is recognised as generic? My sound works >>> but I have no mic and no headphones output. >>> >>> The mixer shows only the master volume and PCM, the input tab has only >>> capture. The sound comes out well but the rest doesn't work. When I >>> first installed FC5 on this machine I noticed an interesting thing, the >>> mixer showed me the master volume control but when I ran XMMS and used >>> the volume control on XMMS I noticed that the mixer had died then when I >>> loaded it back the PCM control was there. >>> >>> I have done some research and found that people with different laptops >>> have to pass a parameter to the module when loading it. I haven't seen >>> anything that could possible relate to my card and laptop so if anyone >>> here has had any similar issue and would like to share the experience I >>> will much appreciate. >>> >>> My laptop is a Compaq V3000Z, with a AMD Turion 64 X2. I am running >>> Fedora Core 5 and kernel 2.6.17-1.2174_FC5. >>> >>> Below is some information that I collected from my proc file system. >>> >>> I have had a look into the driver's code and found that the vendor ID >>> (below) is nowhere there. Perhaps that might be the reason that it >>> doesn't work properly? >> Yes, it looks like a Conexant codec that we don't support. That is, >> there is no codec-specific code for this chip but everyhing is parsed >> by the generic parser. >> >> The mic problem is known and fixed recently. The headphone output is >> unlikely fixed yet. Anyway, try ALSA 1.0.13rc1. > > The patch below might fix the headphone problem, too. Give it a try. > It's to HG version but should be applicable to 1.0.13rc1, too. > > > Takashi > > diff -r 63e58b008259 pci/hda/hda_generic.c > --- a/pci/hda/hda_generic.c Mon Sep 04 13:03:51 2006 +0200 > +++ b/pci/hda/hda_generic.c Tue Sep 05 18:16:32 2006 +0200 > @@ -46,11 +46,18 @@ struct hda_gnode { > }; > > /* patch-specific record */ > + > +#define MAX_PCM_VOLS 2 > +struct pcm_vol { > + struct hda_gnode *node; /* Node for PCM volume */ > + unsigned int index; /* connection of PCM volume */ > +}; > + > struct hda_gspec { > struct hda_gnode *dac_node[2]; /* DAC node */ > struct hda_gnode *out_pin_node[2]; /* Output pin (Line-Out) node */ > - struct hda_gnode *pcm_vol_node[2]; /* Node for PCM volume */ > - unsigned int pcm_vol_index[2]; /* connection of PCM volume */ > + struct pcm_vol pcm_vol[MAX_PCM_VOLS]; /* PCM volumes */ > + unsigned int pcm_vol_nodes; /* number of PCM volumes */ > > struct hda_gnode *adc_node; /* ADC node */ > struct hda_gnode *cap_vol_node; /* Node for capture volume */ > @@ -285,9 +292,11 @@ static int parse_output_path(struct hda_ > return node == spec->dac_node[dac_idx]; > } > spec->dac_node[dac_idx] = node; > - if (node->wid_caps & AC_WCAP_OUT_AMP) { > - spec->pcm_vol_node[dac_idx] = node; > - spec->pcm_vol_index[dac_idx] = 0; > + if ((node->wid_caps & AC_WCAP_OUT_AMP) && > + spec->pcm_vol_nodes < MAX_PCM_VOLS) { > + spec->pcm_vol[spec->pcm_vol_nodes].node = node; > + spec->pcm_vol[spec->pcm_vol_nodes].index = 0; > + spec->pcm_vol_nodes++; > } > return 1; /* found */ > } > @@ -307,13 +316,16 @@ static int parse_output_path(struct hda_ > select_input_connection(codec, node, i); > unmute_input(codec, node, i); > unmute_output(codec, node); > - if (! spec->pcm_vol_node[dac_idx]) { > - if (node->wid_caps & AC_WCAP_IN_AMP) { > - spec->pcm_vol_node[dac_idx] = node; > - spec->pcm_vol_index[dac_idx] = i; > - } else if (node->wid_caps & AC_WCAP_OUT_AMP) { > - spec->pcm_vol_node[dac_idx] = node; > - spec->pcm_vol_index[dac_idx] = 0; > + if (spec->dac_node[dac_idx] && > + spec->pcm_vol_nodes < MAX_PCM_VOLS && > + !(spec->dac_node[dac_idx]->wid_caps & > + AC_WCAP_OUT_AMP)) { > + if ((node->wid_caps & AC_WCAP_IN_AMP) || > + (node->wid_caps & AC_WCAP_OUT_AMP)) { > + int n = spec->pcm_vol_nodes; > + spec->pcm_vol[n].node = node; > + spec->pcm_vol[n].index = i; > + spec->pcm_vol_nodes++; > } > } > return 1; > @@ -370,7 +382,9 @@ static struct hda_gnode *parse_output_ja > /* set PIN-Out enable */ > snd_hda_codec_write(codec, node->nid, 0, > AC_VERB_SET_PIN_WIDGET_CONTROL, > - AC_PINCTL_OUT_EN | AC_PINCTL_HP_EN); > + AC_PINCTL_OUT_EN | > + ((node->pin_caps & > AC_PINCAP_HP_DRV) ? > + AC_PINCTL_HP_EN : 0)); > return node; > } > } > @@ -745,18 +759,37 @@ static int check_existing_control(struct > /* > * build output mixer controls > */ > +static int create_output_mixers(struct hda_codec *codec, const char **names) > +{ > + struct hda_gspec *spec = codec->spec; > + int i, err; > + > + for (i = 0; i < spec->pcm_vol_nodes; i++) { > + err = create_mixer(codec, spec->pcm_vol[i].node, > + spec->pcm_vol[i].index, > + names[i], "Playback"); > + if (err < 0) > + return err; > + } > + return 0; > +} > + > static int build_output_controls(struct hda_codec *codec) > { > struct hda_gspec *spec = codec->spec; > - static const char *types[2] = { "Master", "Headphone" }; > - int i, err; > - > - for (i = 0; i < 2 && spec->pcm_vol_node[i]; i++) { > - err = create_mixer(codec, spec->pcm_vol_node[i], > - spec->pcm_vol_index[i], > - types[i], "Playback"); > - if (err < 0) > - return err; > + static const char *types_speaker[] = { "Speaker", "Headphone" }; > + static const char *types_line[] = { "Front", "Headphone" }; > + > + switch (spec->pcm_vol_nodes) { > + case 1: > + return create_mixer(codec, spec->pcm_vol[0].node, > + spec->pcm_vol[0].index, > + "Master", "Playback"); > + case 2: > + if (defcfg_type(spec->out_pin_node[0]) == AC_JACK_SPEAKER) > + return create_output_mixers(codec, types_speaker); > + else > + return create_output_mixers(codec, types_line); > } > return 0; > } > > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Alsa-user mailing list > Alsa-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/alsa-user > ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ Alsa-user mailing list Alsa-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/alsa-user