diff options
author | Timofei V. Bondarenko <tim@ipi.ac.ru> | 2006-12-20 13:20:07 -0500 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2007-01-09 03:06:18 -0500 |
commit | 8c670714223d58086695d007b76b3e3ead54e4f5 (patch) | |
tree | d2a1010beb44676e193db7718ac3fbd08d1b7b21 /sound | |
parent | 6afeb11de5b28e47adea1459c35e598bb98424d6 (diff) |
[ALSA] _snd_cmipci_uswitch_put doesn't set zero flags
Playing with spdif output on cmipci i've noticed the SPDO5V option does
not change appropriate bits the register.
The _snd_cmipci_uswitch_put checks the change in flags in wrong way.
If 'active' state of an option corresponds to a _zero_ bits in a hw
register then function fails. The SPDO5V is the sample.
In the most cases 'active' state of option is set through an non-zerio
bits in a register. This case works fine.
The fix attached.
Unfortunately i was unable to change spdif output voltage anyway.
Although the register changes right at least.
From: Timofei V. Bondarenko <tim@ipi.ac.ru>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/cmipci.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c index 71c58df4af28..70face7e1048 100644 --- a/sound/pci/cmipci.c +++ b/sound/pci/cmipci.c | |||
@@ -2198,7 +2198,8 @@ static int _snd_cmipci_uswitch_put(struct snd_kcontrol *kcontrol, | |||
2198 | val = inb(cm->iobase + args->reg); | 2198 | val = inb(cm->iobase + args->reg); |
2199 | else | 2199 | else |
2200 | val = snd_cmipci_read(cm, args->reg); | 2200 | val = snd_cmipci_read(cm, args->reg); |
2201 | change = (val & args->mask) != (ucontrol->value.integer.value[0] ? args->mask : 0); | 2201 | change = (val & args->mask) != (ucontrol->value.integer.value[0] ? |
2202 | args->mask_on : (args->mask & ~args->mask_on)); | ||
2202 | if (change) { | 2203 | if (change) { |
2203 | val &= ~args->mask; | 2204 | val &= ~args->mask; |
2204 | if (ucontrol->value.integer.value[0]) | 2205 | if (ucontrol->value.integer.value[0]) |