[ALSA] ac97: Fix volume control bit size detection for STAC9704.
authorJames Courtier-Dutton <James@superbug.co.uk>
Sun, 10 Jul 2005 10:04:29 +0000 (12:04 +0200)
committerJaroslav Kysela <perex@suse.cz>
Thu, 28 Jul 2005 10:22:27 +0000 (12:22 +0200)
AC97 Codec

Signed-off-by: James Courtier-Dutton <James@superbug.co.uk>
sound/pci/ac97/ac97_codec.c

index 94cd989cff20e0c57036a71b26ede4ef1f00e9ff..1f09653dc0f3b99124f6d2e7eacad0a6f38db64b 100644 (file)
@@ -1078,6 +1078,11 @@ static void check_volume_resolution(ac97_t *ac97, int reg, unsigned char *lo_max
        for (i = 0 ; i < ARRAY_SIZE(cbit); i++) {
                unsigned short val;
                snd_ac97_write(ac97, reg, 0x8080 | cbit[i] | (cbit[i] << 8));
+               /* Do the read twice due to buffers on some ac97 codecs.
+                * e.g. The STAC9704 returns exactly what you wrote the the register
+                * if you read it immediately. This causes the detect routine to fail.
+                */
+               val = snd_ac97_read(ac97, reg);
                val = snd_ac97_read(ac97, reg);
                if (! *lo_max && (val & 0x7f) == cbit[i])
                        *lo_max = max[i];