mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 06:04:44 +01:00
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: 028a2ae256 ("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>
This commit is contained in:
parent
42a9a5c256
commit
b82fa9b0c2
1 changed files with 2 additions and 1 deletions
|
|
@ -424,9 +424,10 @@ static int aw88261_dev_reg_update(struct aw88261 *aw88261,
|
|||
if (ret)
|
||||
break;
|
||||
|
||||
/* keep all three bits from current hw status */
|
||||
read_val &= (~AW88261_AMPPD_MASK) | (~AW88261_PWDN_MASK) |
|
||||
(~AW88261_HMUTE_MASK);
|
||||
reg_val &= (AW88261_AMPPD_MASK | AW88261_PWDN_MASK | AW88261_HMUTE_MASK);
|
||||
reg_val &= (AW88261_AMPPD_MASK & AW88261_PWDN_MASK & AW88261_HMUTE_MASK);
|
||||
reg_val |= read_val;
|
||||
|
||||
/* enable uls hmute */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue