Audio: card fixed, needs a UCM for a usable Plasma sink #13
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Plasma showed no speakers. Root cause was two DT bugs (no sound card at all); those are fixed (kernel
bd8570fe7c81). What remains is userspace: the card exists but has no UCM, so PipeWire only offersoff/pro-audioand no routed "Speaker" sink.Fixed (kernel
bd8570fe7c81)q6asmdaihad nodai@Nchildren →q6asm-dai: No dais found in DT→ no card. Addeddai@0/dai@1.sound-name-prefix→ colliding "Digital PCM Volume" controls → card instantiation failed-EBUSY. Added FL/FR/RL/RR (matching the routing the sound node already references).Now: card 0 "S6" (Samsung Galaxy Tab S6) instantiates,
pcmC0D0ppresent, PipeWire sees a "Built-in Audio" device.Remaining — UCM (userspace)
wpctl status: device 43 "Built-in Audio", but the only sink is "Dummy Output".pactl list cardsshows only profilesoffandpro-audio— no routed analog output. Cause: no UCM config for this card.alsa-ucm-confis installed but only ships sdm845 (Qualcomm/sdm845/), and our machine driver issnd-sm8150, so it doesn't match.Plan
amixer -c S6 controls/tinymix) — the routing mixer (... Mixer MultiMedia1), the SEC_TDM path, and the CS35L41PCM Volume/Switch/DSP1controls per amp. Blocked today:alsa-utilswouldn't install (pacman PGP-signature error on the mirror — keyring refresh needed).HiFi/Speakerverb: enable MM1→SEC_TDM_RX_0 and the four amp switches, set safe volumes. Drop it in/usr/share/alsa/ucm2/conf.d/matching thesnd-sm8150/"S6" card.Notes / risks
Kernel side is done; this is a focused userspace-config task.
2026-08-21 (cont.): card + routing work; remaining blocker is the q6 TDM port not starting
Got much further than "no card". Progress and the precise remaining failure:
Done
bd8570fe).date -sthenalsa-utilsinstalled). Key controls:SEC_TDM_RX_0 Audio Mixer MultiMedia1(BOOLEAN, was off)<FL/FR/RL/RR> PCM Source= {ASP, DSP} — ASP bypasses the DSP (no firmware needed),<pfx> Digital PCM Volume0–913.91cee1ce): ourq6afedaihad no TDM slot/sync config at all (nabu has 6qcom,tdm-*props on its quaternary port); added them for port 40.Remaining blocker — the AFE port won't start
Even with routing set (
SEC_TDM_RX_0 Audio Mixer MultiMedia1=1, amps on ASP) and the TDM framing added, a test tone fails at stream prepare:-110= the ADSP not ACKing the AFE port-enable within the 1 s command timeout. The cs35l41 failures are secondary (no ASP clock because the port never started). So this is q6/ADSP-side TDM port bring-up, not the DT structure or the codec.Suspects (in order)
Next steps
snd_soc_dai_set_tdm_slot.Card and routing structure are solid; the fight is now the ADSP TDM port.
2026-08-22: ROOT CAUSE FOUND — the sm8150 machine driver only supports QUATERNARY TDM
The AFE timeout is not our DT and not the codec.
sound/soc/qcom/sm8150.cwas written forsm8150-xiaomi-nabu, which hangs its CS35L41 amps off QUATERNARY TDM. Ours are on SECONDARY TDM (cpu_dai->id=0x28= 40 =SECONDARY_TDM_RX_0), and the driver has threeswitch (cpu_dai->id)statements that only case on quaternary:sm8150_snd_startup()— sets the LPASS bit clock (Q6AFE_LPASS_CLK_ID_QUAD_TDM_IBIT, 12288000) and the DAI formatsm8150_snd_hw_params()— dispatches tosm8150_tdm_snd_hw_params()(slots, slot width, channel map)sm8150_snd_shutdown()— tears the clock back downEverything else falls through to
default: pr_err("%s: invalid dai id 0x%x"). That message was in our logs the whole time:So for our port no LPASS bit clock is ever started and no DAI format is set → the ADSP never brings the port up →
AFE enable for port 0x9010 failed -110→ the four amps then fail with-110downstream (no ASP clock). That fully explains the symptom, including why the DT TDM framing (91cee1ce) was necessary but not sufficient.Fix (in progress)
Patch all three switches to handle
SECONDARY_TDM_RX_0/SECONDARY_TDM_TX_0alongside quaternary, usingQ6AFE_LPASS_CLK_ID_SEC_TDM_IBIT(0x202) and a separatesec_tdm_clk_count. This generalises the driver rather than special-casing gts6l, so it should be upstreamable — any sm8150 board with amps on a non-quaternary TDM port hits this.Note for testing
CONFIG_MODVERSIONSand module signing are both off, so a rebuiltsnd-soc-sm8150.kocan be dropped in without a full kernel flash. Butmake sound/soc/qcom/snd-soc-sm8150.kofails at modpost (missingModule.symversin a single-module build) and leaves the old.koin place — I deployed a stale Aug-19 module on the first attempt and briefly mistook it for the patch not working. Check the.komtime againstsm8150.o, or just run a fullmake modules.Once a tone plays, the remaining work is the UCM profile (original scope of this issue) so PipeWire exposes a real Speaker sink instead of "Dummy Output".
2026-08-22 (cont.): driver gap fixed and confirmed; failure moved deeper into the ADSP
Kernel commit
5a461189af56—ASoC: qcom: sm8150: handle secondary TDM as well as quaternary. Patched all threecpu_dai->idswitches (startup,hw_params,shutdown) to handleSECONDARY_TDM_RX_0/TX_0withQ6AFE_LPASS_CLK_ID_SEC_TDM_IBITand its own refcount.Confirmed effect
invalid dai idcount is now 0 (was firing from bothhw_paramsandshutdownon every attempt). The driver now genuinely drives our port instead of ignoring it, so this was a real bug and the patch is right — it generalises the driver rather than special-casing gts6l, and should be upstreamable on its own merits.New failure point — deeper than the machine driver
The clock request itself now reaches q6afe and the ADSP does not ack it (
-110= timeout, not a rejection). So this is no longer "the driver ignores our port"; it is "the ADSP will not service AFE commands for the secondary TDM interface".Hypotheses for whoever picks this up, roughly in order
sm8150_tdm_snd_hw_paramsforcingslot_width = 32for S24_LE). Samsung's downstream runs sec-tdm at 6.144 MHz (8 x 16-bit x 48 kHz). A rate the ADSP does not support could plausibly go unanswered. Testing this means 16-bit slots and 6144000 together — they must be consistent.Practical notes
CONFIG_MODVERSIONSand module signing are off, sosnd-soc-sm8150.kocan be swapped without reflashing — butmake sound/soc/qcom/snd-soc-sm8150.kofails at modpost and silently leaves the old .ko in place. Always check the.komtime againstsm8150.o, or run a fullmake modules.sddm(or kill pipewire) beforespeaker-test, or you getDevice or resource busy.