Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

ASoC: codecs: aw88261: Fix erroneous bitmask logic in Awinic init

The aw88261_dev_reg_update() function sets the Awinic registers in a
rather nonuniform way:
- most registers get directly overwritten from the firmware blob
- but a handful of them need more delicate logic to preserve
some bits from their current value, according to a register-
specific mask
For the latter, the logic is basically
NEW = (OLD & MASK) | (VAL & ~MASK)
However, the ~MASK value is hand-computed, and in the specific case
of the SYSCTRL register, in a buggy way.
This patch restores the proper ~MASK value.

Fixes: 028a2ae25691 ("ASoC: codecs: Add aw88261 amplifier driver")
Signed-off-by: Alexandre Ferrieux <alexandre.ferrieux@orange.com>
Link: https://patch.msgid.link/20260211-aw88261-fwname-v1-1-e24e833a019d@fairphone.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Alexandre Ferrieux and committed by
Mark Brown
b82fa9b0 42a9a5c2

+2 -1
+2 -1
sound/soc/codecs/aw88261.c
··· 424 424 if (ret) 425 425 break; 426 426 427 + /* keep all three bits from current hw status */ 427 428 read_val &= (~AW88261_AMPPD_MASK) | (~AW88261_PWDN_MASK) | 428 429 (~AW88261_HMUTE_MASK); 429 - reg_val &= (AW88261_AMPPD_MASK | AW88261_PWDN_MASK | AW88261_HMUTE_MASK); 430 + reg_val &= (AW88261_AMPPD_MASK & AW88261_PWDN_MASK & AW88261_HMUTE_MASK); 430 431 reg_val |= read_val; 431 432 432 433 /* enable uls hmute */