aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames C Georgas <jgeorgas@rogers.com>2006-12-07 08:10:57 +0100
committerJaroslav Kysela <perex@server.perex.cz>2006-12-20 08:56:10 +0100
commite8bb036a46ec4a9d748672f54a6b2d62c82b6fbd (patch)
tree27fef55b23f193e1591c7fb67ec3918d0b71e067
parent[ALSA] snd-ca0106: Fix typos. (diff)
downloadlinux-dev-e8bb036a46ec4a9d748672f54a6b2d62c82b6fbd.tar.xz
linux-dev-e8bb036a46ec4a9d748672f54a6b2d62c82b6fbd.zip
[ALSA] ac97_codec - trivial fix for bit update functions
This patch fixes a couple of bit update functions in alsa-kernel/pci/ac97/ac97_codec.c, which could possibly corrupt bits not in the given mask. Specifically, it'll clobber unset bits in the target that are not in the mask, when the corresponding bit in the given new value is set. Signed-off-by: James C Georgas <jgeorgas@rogers.com> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
-rw-r--r--sound/pci/ac97/ac97_codec.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c
index 7abcb10b2754..91d8ceb4e9c2 100644
--- a/sound/pci/ac97/ac97_codec.c
+++ b/sound/pci/ac97/ac97_codec.c
@@ -382,7 +382,7 @@ int snd_ac97_update_bits_nolock(struct snd_ac97 *ac97, unsigned short reg,
unsigned short old, new;
old = snd_ac97_read_cache(ac97, reg);
- new = (old & ~mask) | value;
+ new = (old & ~mask) | (value & mask);
change = old != new;
if (change) {
ac97->regs[reg] = new;
@@ -399,7 +399,7 @@ static int snd_ac97_ad18xx_update_pcm_bits(struct snd_ac97 *ac97, int codec, uns
mutex_lock(&ac97->page_mutex);
old = ac97->spec.ad18xx.pcmreg[codec];
- new = (old & ~mask) | value;
+ new = (old & ~mask) | (value & mask);
change = old != new;
if (change) {
mutex_lock(&ac97->reg_mutex);