From: James Courtier-Dutton Date: Sun, 10 Jul 2005 10:04:29 +0000 (+0200) Subject: [ALSA] ac97: Fix volume control bit size detection for STAC9704. X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=c9eab129fcbcef364b34fb3a70cb2531847e1edf;p=openwrt%2Fstaging%2Fblogic.git [ALSA] ac97: Fix volume control bit size detection for STAC9704. AC97 Codec Signed-off-by: James Courtier-Dutton --- diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c index 94cd989cff20..1f09653dc0f3 100644 --- a/sound/pci/ac97/ac97_codec.c +++ b/sound/pci/ac97/ac97_codec.c @@ -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];