linux/sound/soc
Liviu Nicoara b2047b8cad
ASoC: codecs: lpass-wsa-macro: rewrite the interpolator volume after enabling clocks
Commit 902f497a1f ("ASoC: codecs: lpass-wsa-macro: remove useless
gain read/write sequence") removed the read and write of the digital
volume register in wsa_macro_enable_interpolator(), on the grounds that
writing back the value just read does nothing. The comment above it,
"apply gain after int clk is enabled", was left in place.

On the Dell XPS 13 9345 (X1E80100, four WSA8845 amplifiers on two WSA
macros) the write does something: a volume change made while the path
is idle does not take effect when playback starts. Lowering the digital
volume from 81 to 63 with nothing playing, then playing a test tone,
gave about the same level as before the change. With the rewrite
restored, lowering it from 81 to 69 while idle played audibly quieter,
and restoring 81 while idle brought the level back. Changes made during
playback take effect with or without the rewrite.

The register already holds the new value when this happens. Without the
rewrite, after an idle change from 69 to 81, playback stayed at the old
level while the register, read from the hardware through /dev/mem, held
the new one (0xfd). Writing that same value back through /dev/mem
brought the level up at once.

This is the behaviour described in commit 46188db080 ("ASoC: codecs:
lpass-wsa-macro: fix compander volume hack"): "the volume registers
still need to be written after enabling clocks in order for any prior
updates to take effect." The value read comes from the register cache,
so the write pushes the last requested volume to the hardware once its
clock runs.

Restore the rewrite in the interpolator's POST_PMU event only. The mix
path event removed later in the same series is not brought back.

Fixes: 902f497a1f ("ASoC: codecs: lpass-wsa-macro: remove useless gain read/write sequence")
Cc: stable@vger.kernel.org
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Liviu Nicoara <lnicoara@thinkoid.org>
Reviewed-by: Johan Hovold <johan@kernel.org>
Link: https://patch.msgid.link/20260929115755.6096-1-lnicoara@thinkoid.org
Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-29 14:08:32 +01:00
..
adi
amd ASoC: amd: acp-config: Add ACP70 DMI quirk for ASUS UM5406GA 2026-09-28 16:02:14 +01:00
apple
atmel
au1x
bcm ASoC: bcm: bcm63xx: Publish the OF module aliases 2026-09-07 15:56:19 +01:00
cirrus
codecs ASoC: codecs: lpass-wsa-macro: rewrite the interpolator volume after enabling clocks 2026-09-29 14:08:32 +01:00
dwc ASoC: dwc: Propagate -EPROBE_DEFER from IRQ lookup 2026-08-10 15:37:27 +01:00
fsl ASoC: fsl_micfil: balance mclk enable/disable 2026-09-01 13:48:14 +01:00
generic treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
google
hisilicon
img
intel ASoC: Intel: Add quirk to block match table for Lenovo Yoga Slim 7 2026-09-28 14:26:13 +01:00
jz4740
kirkwood
loongson ASoC: loongson: Fix naming of machine event and DAPM widgets 2026-08-18 19:48:27 +01:00
mediatek ASoC: Updates for v7.3 2026-08-18 08:35:39 +02:00
meson treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
mxs ASoC: mxs-sgtl5000: Drop redundant probe error messages 2026-08-12 18:37:46 +01:00
pxa ASoC: pxa: Drop redundant probe error messages 2026-08-12 18:20:48 +01:00
qcom ASoC: qcom: lpass-cpu: use DAI table index for playback constraints 2026-09-28 12:44:37 +01:00
renesas ASoC: renesas: Use auto-cleanup for firmware loading 2026-08-10 15:34:15 +01:00
rockchip ASoC: rockchip: spdif: Return the original error code 2026-08-13 15:46:08 +01:00
samsung Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
sdca ASoC: SDCA: Add better pm_runtime error handling in func probe 2026-09-24 12:45:04 +01:00
sdw_utils ASoC: sdw_utils: cs_amp: Delete bogus and incorrect capture channel fixup 2026-09-14 00:37:41 +01:00
sof treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
sophgo
spacemit ASoC: spacemit: advertise only DMA-backed DAI streams 2026-08-12 19:46:34 +01:00
spear
sprd ASoC: sprd: validate compress buffer sizes against fixed allocations 2026-08-31 22:40:34 +01:00
starfive
sti ASoC: sti: initialize IRQ lock before requesting IRQ 2026-08-31 13:29:13 +01:00
stm Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
sunxi
tegra ASoC: tegra: Fix ASRC Stream6 input threshold control 2026-09-21 15:24:41 +02:00
ti ASoC: ti: omap-twl4030: Check for missing card name after parsing 2026-08-11 14:58:08 +01:00
uniphier
ux500 ASoC: ux500: Parenthesize MSP_{RX,TX}_CLKPOL_BIT() arguments 2026-09-16 20:04:26 +01:00
xilinx ASoC: Updates for v7.3 2026-08-18 08:35:39 +02:00
xtensa
Kconfig
Makefile
soc-ac97.c
soc-acpi.c
soc-card-test.c
soc-card.c
soc-component.c
soc-compress.c
soc-core.c
soc-dai.c
soc-dapm.c ASoC: dapm: Fix off-by-one check on the second enum channel 2026-08-26 15:56:52 +01:00
soc-devres.c
soc-generic-dmaengine-pcm.c ASoC: soc-generic-dmaengine: Fix DMA channel request warning 2026-08-26 14:14:09 +01:00
soc-jack.c
soc-link.c
soc-ops-test.c
soc-ops.c
soc-pcm.c ASoC: soc-pcm: Apply snd_soc_dai_link_ch_map.codec_ch_mask to codec params 2026-09-14 00:37:41 +01:00
soc-topology-test.c
soc-topology.c
soc-usb.c
soc-utils-test.c
soc-utils.c