diff options
Diffstat (limited to 'sound/pci/oxygen/xonar_lib.c')
| -rw-r--r-- | sound/pci/oxygen/xonar_lib.c | 6 | 
1 files changed, 4 insertions, 2 deletions
| diff --git a/sound/pci/oxygen/xonar_lib.c b/sound/pci/oxygen/xonar_lib.c index b3ff71316653..0ebe7f5916f9 100644 --- a/sound/pci/oxygen/xonar_lib.c +++ b/sound/pci/oxygen/xonar_lib.c @@ -104,9 +104,10 @@ int xonar_gpio_bit_switch_get(struct snd_kcontrol *ctl,  {  	struct oxygen *chip = ctl->private_data;  	u16 bit = ctl->private_value; +	bool invert = ctl->private_value & XONAR_GPIO_BIT_INVERT;  	value->value.integer.value[0] = -		!!(oxygen_read16(chip, OXYGEN_GPIO_DATA) & bit); +		!!(oxygen_read16(chip, OXYGEN_GPIO_DATA) & bit) ^ invert;  	return 0;  } @@ -115,12 +116,13 @@ int xonar_gpio_bit_switch_put(struct snd_kcontrol *ctl,  {  	struct oxygen *chip = ctl->private_data;  	u16 bit = ctl->private_value; +	bool invert = ctl->private_value & XONAR_GPIO_BIT_INVERT;  	u16 old_bits, new_bits;  	int changed;  	spin_lock_irq(&chip->reg_lock);  	old_bits = oxygen_read16(chip, OXYGEN_GPIO_DATA); -	if (value->value.integer.value[0]) +	if (!!value->value.integer.value[0] ^ invert)  		new_bits = old_bits | bit;  	else  		new_bits = old_bits & ~bit; |