Update of /cvsroot/alsa/alsa-kernel/pci/ac97
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15511

Modified Files:
        ac97_codec.c 
Log Message:
- fixed the detection of surround/LFE VRA on ALC650.



Index: ac97_codec.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/ac97/ac97_codec.c,v
retrieving revision 1.119
retrieving revision 1.120
diff -u -r1.119 -r1.120
--- ac97_codec.c        5 Feb 2004 10:37:10 -0000       1.119
+++ ac97_codec.c        9 Feb 2004 12:01:07 -0000       1.120
@@ -1526,38 +1526,40 @@
        return 0;
 }
 
-static int snd_ac97_test_rate(ac97_t *ac97, int reg, int rate)
+static int snd_ac97_test_rate(ac97_t *ac97, int reg, int shadow_reg, int rate)
 {
        unsigned short val;
        unsigned int tmp;
 
        tmp = ((unsigned int)rate * ac97->bus->clock) / 48000;
        snd_ac97_write_cache(ac97, reg, tmp & 0xffff);
+       if (shadow_reg)
+               snd_ac97_write_cache(ac97, shadow_reg, tmp & 0xffff);
        val = snd_ac97_read(ac97, reg);
        return val == (tmp & 0xffff);
 }
 
-static void snd_ac97_determine_rates(ac97_t *ac97, int reg, unsigned int *r_result)
+static void snd_ac97_determine_rates(ac97_t *ac97, int reg, int shadow_reg, unsigned 
int *r_result)
 {
        unsigned int result = 0;
 
        /* test a non-standard rate */
-       if (snd_ac97_test_rate(ac97, reg, 11000))
+       if (snd_ac97_test_rate(ac97, reg, shadow_reg, 11000))
                result |= SNDRV_PCM_RATE_CONTINUOUS;
        /* let's try to obtain standard rates */
-       if (snd_ac97_test_rate(ac97, reg, 8000))
+       if (snd_ac97_test_rate(ac97, reg, shadow_reg, 8000))
                result |= SNDRV_PCM_RATE_8000;
-       if (snd_ac97_test_rate(ac97, reg, 11025))
+       if (snd_ac97_test_rate(ac97, reg, shadow_reg, 11025))
                result |= SNDRV_PCM_RATE_11025;
-       if (snd_ac97_test_rate(ac97, reg, 16000))
+       if (snd_ac97_test_rate(ac97, reg, shadow_reg, 16000))
                result |= SNDRV_PCM_RATE_16000;
-       if (snd_ac97_test_rate(ac97, reg, 22050))
+       if (snd_ac97_test_rate(ac97, reg, shadow_reg, 22050))
                result |= SNDRV_PCM_RATE_22050;
-       if (snd_ac97_test_rate(ac97, reg, 32000))
+       if (snd_ac97_test_rate(ac97, reg, shadow_reg, 32000))
                result |= SNDRV_PCM_RATE_32000;
-       if (snd_ac97_test_rate(ac97, reg, 44100))
+       if (snd_ac97_test_rate(ac97, reg, shadow_reg, 44100))
                result |= SNDRV_PCM_RATE_44100;
-       if (snd_ac97_test_rate(ac97, reg, 48000))
+       if (snd_ac97_test_rate(ac97, reg, shadow_reg, 48000))
                result |= SNDRV_PCM_RATE_48000;
        *r_result = result;
 }
@@ -1866,8 +1868,8 @@
        if (ac97->ext_id & 0x0189)      /* L/R, MIC, SDAC, LDAC VRA support */
                snd_ac97_write_cache(ac97, AC97_EXTENDED_STATUS, ac97->ext_id & 
0x0189);
        if (ac97->ext_id & AC97_EI_VRA) {       /* VRA support */
-               snd_ac97_determine_rates(ac97, AC97_PCM_FRONT_DAC_RATE, 
&ac97->rates[AC97_RATES_FRONT_DAC]);
-               snd_ac97_determine_rates(ac97, AC97_PCM_LR_ADC_RATE, 
&ac97->rates[AC97_RATES_ADC]);
+               snd_ac97_determine_rates(ac97, AC97_PCM_FRONT_DAC_RATE, 0, 
&ac97->rates[AC97_RATES_FRONT_DAC]);
+               snd_ac97_determine_rates(ac97, AC97_PCM_LR_ADC_RATE, 0, 
&ac97->rates[AC97_RATES_ADC]);
        } else {
                ac97->rates[AC97_RATES_FRONT_DAC] = SNDRV_PCM_RATE_48000;
                ac97->rates[AC97_RATES_ADC] = SNDRV_PCM_RATE_48000;
@@ -1884,16 +1886,16 @@
                                                SNDRV_PCM_RATE_32000;
        }
        if (ac97->ext_id & AC97_EI_VRM) {       /* MIC VRA support */
-               snd_ac97_determine_rates(ac97, AC97_PCM_MIC_ADC_RATE, 
&ac97->rates[AC97_RATES_MIC_ADC]);
+               snd_ac97_determine_rates(ac97, AC97_PCM_MIC_ADC_RATE, 0, 
&ac97->rates[AC97_RATES_MIC_ADC]);
        } else {
                ac97->rates[AC97_RATES_MIC_ADC] = SNDRV_PCM_RATE_48000;
        }
        if (ac97->ext_id & AC97_EI_SDAC) {      /* SDAC support */
-               snd_ac97_determine_rates(ac97, AC97_PCM_SURR_DAC_RATE, 
&ac97->rates[AC97_RATES_SURR_DAC]);
+               snd_ac97_determine_rates(ac97, AC97_PCM_SURR_DAC_RATE, 
AC97_PCM_FRONT_DAC_RATE, &ac97->rates[AC97_RATES_SURR_DAC]);
                ac97->scaps |= AC97_SCAP_SURROUND_DAC;
        }
        if (ac97->ext_id & AC97_EI_LDAC) {      /* LDAC support */
-               snd_ac97_determine_rates(ac97, AC97_PCM_LFE_DAC_RATE, 
&ac97->rates[AC97_RATES_LFE_DAC]);
+               snd_ac97_determine_rates(ac97, AC97_PCM_LFE_DAC_RATE, 
AC97_PCM_FRONT_DAC_RATE, &ac97->rates[AC97_RATES_LFE_DAC]);
                ac97->scaps |= AC97_SCAP_CENTER_LFE_DAC;
        }
        /* additional initializations */



-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to