Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 775c199e authored by Karsten Wiese's avatar Karsten Wiese Committed by Takashi Iwai
Browse files

[ALSA] Don't set gpio mask register in snd_ice1712_gpio_write_bits()



Some calls to snd_ice1712_gpio_write() go wrong, if
snd_ice1712_gpio_write_bits() ran before and changed the gpio mask register.
Read the actual gpio value and combine it with the to be set bits in the cpu
instead.

Signed-off-by: default avatarKarsten Wiese <fzu@wemgehoertderstaat.de>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 988f0664
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -438,10 +438,14 @@ int snd_ice1712_gpio_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_valu
static inline void snd_ice1712_gpio_write_bits(struct snd_ice1712 *ice,
					       unsigned int mask, unsigned int bits)
{
	unsigned val;

	ice->gpio.direction |= mask;
	snd_ice1712_gpio_set_dir(ice, ice->gpio.direction);
	snd_ice1712_gpio_set_mask(ice, ~mask);
	snd_ice1712_gpio_write(ice, mask & bits);
	val = snd_ice1712_gpio_read(ice);
	val &= ~mask;
	val |= mask & bits;
	snd_ice1712_gpio_write(ice, val);
}

static inline int snd_ice1712_gpio_read_bits(struct snd_ice1712 *ice,