diff options
Diffstat (limited to 'sound/pci/oxygen/oxygen_mixer.c')
| -rw-r--r-- | sound/pci/oxygen/oxygen_mixer.c | 25 | 
1 files changed, 14 insertions, 11 deletions
diff --git a/sound/pci/oxygen/oxygen_mixer.c b/sound/pci/oxygen/oxygen_mixer.c index 26c7e8bcb22..c0dbb52d45b 100644 --- a/sound/pci/oxygen/oxygen_mixer.c +++ b/sound/pci/oxygen/oxygen_mixer.c @@ -618,9 +618,12 @@ static int ac97_volume_get(struct snd_kcontrol *ctl,  	mutex_lock(&chip->mutex);  	reg = oxygen_read_ac97(chip, codec, index);  	mutex_unlock(&chip->mutex); -	value->value.integer.value[0] = 31 - (reg & 0x1f); -	if (stereo) -		value->value.integer.value[1] = 31 - ((reg >> 8) & 0x1f); +	if (!stereo) { +		value->value.integer.value[0] = 31 - (reg & 0x1f); +	} else { +		value->value.integer.value[0] = 31 - ((reg >> 8) & 0x1f); +		value->value.integer.value[1] = 31 - (reg & 0x1f); +	}  	return 0;  } @@ -636,14 +639,14 @@ static int ac97_volume_put(struct snd_kcontrol *ctl,  	mutex_lock(&chip->mutex);  	oldreg = oxygen_read_ac97(chip, codec, index); -	newreg = oldreg; -	newreg = (newreg & ~0x1f) | -		(31 - (value->value.integer.value[0] & 0x1f)); -	if (stereo) -		newreg = (newreg & ~0x1f00) | -			((31 - (value->value.integer.value[1] & 0x1f)) << 8); -	else -		newreg = (newreg & ~0x1f00) | ((newreg & 0x1f) << 8); +	if (!stereo) { +		newreg = oldreg & ~0x1f; +		newreg |= 31 - (value->value.integer.value[0] & 0x1f); +	} else { +		newreg = oldreg & ~0x1f1f; +		newreg |= (31 - (value->value.integer.value[0] & 0x1f)) << 8; +		newreg |= 31 - (value->value.integer.value[1] & 0x1f); +	}  	change = newreg != oldreg;  	if (change)  		oxygen_write_ac97(chip, codec, index, newreg);  |