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