Hi again, I finally solved the problem, see below.
> > there should be somewhere a line like: > > setting EAM bit on cs4294 CODEC > > > > this doesn't appear in your logs. > > Definitely not. > > > The code part which should set your codec into 4channel mode is in > > alsa-kernel/pci/cs46xx/cs46xx_lib.c and looks like > > ------ > > #ifdef CONFIG_SND_CS46XX_NEW_DSP > > if (chip->nr_ac97_codecs == 1 && > > snd_cs46xx_codec_read(chip,AC97_VENDOR_ID2, > > CS46XX_PRIMARY_CODEC_INDEX) == 0x592d) { > > /* set primary cs4294 codec into Extended Audio Mode */ > > snd_printdd("setting EAM bit on cs4294 CODEC\n"); > > snd_cs46xx_codec_write(chip,AC97_CSR_ACMODE,0x200, > > CS46XX_PRIMARY_CODEC_INDEX); > > } > > /* do soundcard specific mixer setup */ > > if (chip->mixer_init) { > > snd_printdd ("calling chip->mixer_init(chip);\n"); > > chip->mixer_init(chip); > > } > > #endif > > ------ > > most probably commenting out the fist if(...) should make your 4channel > > output work, i.e. changing it to > > > > #ifdef CONFIG_SND_CS46XX_NEW_DSP > > if (1) { > > /* set primary cs4294 codec into Extended Audio Mode */ > > snd_printdd("setting EAM bit on cs4294 CODEC\n"); > > snd_cs46xx_codec_write(chip,AC97_CSR_ACMODE,0x200, > > CS46XX_PRIMARY_CODEC_INDEX); > > } > > /* do soundcard specific mixer setup */ > > if (chip->mixer_init) { > > snd_printdd ("calling chip->mixer_init(chip);\n"); > > chip->mixer_init(chip); > > } > > #endif > > > > but that's not the idea behind the detection ;-) your codec seems to be > > not identified correcly. > > the last output of cat /proc/asound/card0/ac97#0regs reads > > 0:7e = 592d > > for me. that seems to correspond to the snd_cs46xx_codec_read(...) == > > 0x592d in the code above. perhaps you get another output of > > cat /proc/asound/card0/ac97#0regs ? > > no, it says > 0:7e = 592b > Maybe some detection problem? Maybe I'll try to override the auto-detection > as you suggested. I have now made the following change to alsa-kernel/pci/cs46xx/cs46xx_lib.c: if (chip->nr_ac97_codecs == 1 && snd_cs46xx_codec_read(chip, AC97_VENDOR_ID2, CS46XX_PRIMARY_CODEC_INDEX) == 0x592d) to: if (chip->nr_ac97_codecs == 1 && (snd_cs46xx_codec_read(chip, AC97_VENDOR_ID2, CS46XX_PRIMARY_CODEC_INDEX) == 0x592b || snd_cs46xx_codec_read(chip, AC97_VENDOR_ID2, CS46XX_PRIMARY_CODEC_INDEX) == 0x592d) ) so it should detect both chips, with ID 0x592b and 0x592d . Changing this did the job, In depth I don't really know what side-effects this change might have. Johannes ------------------------------------------------------- This SF.Net email sponsored by: Free pre-built ASP.NET sites including Data Reports, E-commerce, Portals, and Forums are available now. Download today and enter to win an XBOX or Visual Studio .NET. http://aspnet.click-url.com/go/psa00100006ave/direct;at.asp_061203_01/01 _______________________________________________ Alsa-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-user