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

Reply via email to