--- pci/cmipci.c.old 2006-12-07 17:07:25.000000000 +0300 +++ pci/cmipci.c 2006-12-20 18:18:01.000000000 +0300 @@ -2198,7 +2198,8 @@ static int _snd_cmipci_uswitch_put(struc val = inb(cm->iobase + args->reg); else val = snd_cmipci_read(cm, args->reg); - change = (val & args->mask) != (ucontrol->value.integer.value[0] ? args->mask : 0); + change = (val & args->mask) != (ucontrol->value.integer.value[0] ? + args->mask_on : (args->mask & ~args->mask_on)); if (change) { val &= ~args->mask; if (ucontrol->value.integer.value[0])