mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
ALSA: ice1724 - aureon - fix wm8770 volume offset
The volume register is from 0..0x7f and 0..0x1a range is mute. Also, fix mute combining in wm_vol_put(). The wrong behaviour was noticed by Peter Christensen. Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
21956b61f5
commit
9d4c746445
@ -703,11 +703,13 @@ static void wm_set_vol(struct snd_ice1712 *ice, unsigned int index, unsigned sho
|
|||||||
{
|
{
|
||||||
unsigned char nvol;
|
unsigned char nvol;
|
||||||
|
|
||||||
if ((master & WM_VOL_MUTE) || (vol & WM_VOL_MUTE))
|
if ((master & WM_VOL_MUTE) || (vol & WM_VOL_MUTE)) {
|
||||||
nvol = 0;
|
nvol = 0;
|
||||||
else
|
} else {
|
||||||
nvol = ((vol % WM_VOL_CNT) * (master % WM_VOL_CNT)) /
|
nvol = ((vol % WM_VOL_CNT) * (master % WM_VOL_CNT)) /
|
||||||
WM_VOL_MAX;
|
WM_VOL_MAX;
|
||||||
|
nvol += 0x1b;
|
||||||
|
}
|
||||||
|
|
||||||
wm_put(ice, index, nvol);
|
wm_put(ice, index, nvol);
|
||||||
wm_put_nocache(ice, index, 0x180 | nvol);
|
wm_put_nocache(ice, index, 0x180 | nvol);
|
||||||
@ -778,7 +780,7 @@ static int wm_master_vol_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_
|
|||||||
for (ch = 0; ch < 2; ch++) {
|
for (ch = 0; ch < 2; ch++) {
|
||||||
unsigned int vol = ucontrol->value.integer.value[ch];
|
unsigned int vol = ucontrol->value.integer.value[ch];
|
||||||
if (vol > WM_VOL_MAX)
|
if (vol > WM_VOL_MAX)
|
||||||
continue;
|
vol = WM_VOL_MAX;
|
||||||
vol |= spec->master[ch] & WM_VOL_MUTE;
|
vol |= spec->master[ch] & WM_VOL_MUTE;
|
||||||
if (vol != spec->master[ch]) {
|
if (vol != spec->master[ch]) {
|
||||||
int dac;
|
int dac;
|
||||||
@ -834,8 +836,8 @@ static int wm_vol_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *
|
|||||||
for (i = 0; i < voices; i++) {
|
for (i = 0; i < voices; i++) {
|
||||||
unsigned int vol = ucontrol->value.integer.value[i];
|
unsigned int vol = ucontrol->value.integer.value[i];
|
||||||
if (vol > WM_VOL_MAX)
|
if (vol > WM_VOL_MAX)
|
||||||
continue;
|
vol = WM_VOL_MAX;
|
||||||
vol |= spec->vol[ofs+i];
|
vol |= spec->vol[ofs+i] & WM_VOL_MUTE;
|
||||||
if (vol != spec->vol[ofs+i]) {
|
if (vol != spec->vol[ofs+i]) {
|
||||||
spec->vol[ofs+i] = vol;
|
spec->vol[ofs+i] = vol;
|
||||||
idx = WM_DAC_ATTEN + ofs + i;
|
idx = WM_DAC_ATTEN + ofs + i;
|
||||||
|
Loading…
Reference in New Issue
Block a user