Re: [PATCH] ASoC: qcom: sc8280xp: support Senary MI2S
From: Jorijn van der Graaf
Date: Sat Jul 04 2026 - 23:37:32 EST
On 7/5/26 2:40 AM, Val Packett wrote:
> Since
> https://lore.kernel.org/all/178104655633.212106.619790244001573816.b4-ty@b4/
> you no longer need to care about what the profile specifies. The aw88261
> driver properly participates in format negotiation now. The "firmware"
> register list binaries are therefore nearly irrelevant. Please don't add
> any more of this force-32-bit nonsense! We've just gotten rid of it on
> the Fairphone 5 and other kodiak devices.
I apologize for not catching this, I was developing on the 7.1-based
milos-mainline staging tree which doesn't include your series yet.
There a 16-bit stream plays silence, since the amp keeps the profile's
32-bit frame config, and I wrongly took that for a hardware
requirement.
To retest, I backported your series onto my 7.1 tree (together with
my pending power-up check fix [1], without which the amplifiers fail
an unrelated SYSST check on this board), and can confirm 1b92b0673d5e
("ASoC: codecs: aw88261: support changing sample rate and bit width")
works as advertised on the FP6: with the fixup dropped the backend runs S16
end-to-end and the amps get reprogrammed to 16-bit frames at 32fs
(I2SCTRL1 0x3408, SYSST 0x311 while playing) and sound is fine.
I'll send a v2 with the fixup dropped.
However, I could only get there after locally reverting caea99ac809d
("ASoC: codecs: aw88261: remove async start"): with the synchronous
start the amps can never power up on this platform. The Fairphone
(Gen. 6) uses the AudioReach/q6apm stack, where the BE port only
starts the I2S clocks at trigger time (q6apm_lpass_dai_trigger() ->
q6apm_graph_start(); prepare only prepares the graph). aw88261_start()
now runs synchronously from the DAPM PRE_PMU handler, i.e. during
prepare, before the trigger can ever run — so the power-up check
always sees SYSST = 0x0020 (NOCLKS) and gives up:
aw88261 6-0035: check pll lock fail,reg_val:0x0020
aw88261 6-0035: mode1 iis signal check error
...
aw88261 6-0035: aw88261_dev_start failed, cnt:4, ret:-1
aw88261 6-0035: start failure (-1)
A plain revert would bring back the missed-short-sounds problem you
fixed, so I fixed it on the platform side instead: starting the graph
at the end of q6apm_lpass_dai_prepare(), mirroring what
q6afe_dai_prepare() does on the legacy stack, makes the clocks run
before the DAPM power-up sequence. With that change and your series
untouched, the amplifiers start synchronously on the FP6, including
for the first short stream of the boot. I'll send that as an RFC
("ASoC: qcom: q6apm-lpass-dais: start the graph at prepare") right
after this mail. I may well be missing why AudioReach starts its
ports at trigger rather than at prepare like q6afe, so input from
you and Srinivas is very welcome there.
[1] https://lore.kernel.org/linux-sound/20260704192857.88366-1-jorijnvdgraaf@xxxxxxxxxxxxx/
Thank you for your review,
Jorijn van der Graaf