Skip to content

SM8750: enable audio over hdmi on the konkr pocket fit elite - #3187

Open
slaide wants to merge 6 commits into
ROCKNIX:nextfrom
slaide:sm8750-hdmi-audio-konkr
Open

SM8750: enable audio over hdmi on the konkr pocket fit elite#3187
slaide wants to merge 6 commits into
ROCKNIX:nextfrom
slaide:sm8750-hdmi-audio-konkr

Conversation

@slaide

@slaide slaide commented Aug 14, 2026

Copy link
Copy Markdown

Summary

  • What is the goal of this PR? (e.g. Bump up an emulator version, implement a new feature. )

Enable HDMI/DisplayPort audio over USB-C on the KONKR Pocket FIT Elite.

Testing

  • How was this tested? (e.g. Built and tested on specific devices, manual testing steps, URLs for CI/CD build artifacts.)
  • Test results: (e.g. Screenshots, logs, performance metrics if applicable.)

tested on my konkr pocket fit elite with a usb-c to hdmi adapter. if audio would be routed to speakers and hdmi (display output) is connected, audio is routed there instead. headphones override this, so display output + headphones connected -> route to headphones.

Additional Context

  • Add any other information that might be helpful for the reviewer (e.g., performance implications, potential risks, specific areas to focus on.)

requires extra-firmware #8!

odin 3 has the same problem but the code to fix that does not overlap much with the code here, so its not in here.

claude: the code here adds a DISPLAY_PORT_RX_0 graph plus a MultiMedia4 stream to the topology (HDMI becomes hw:0,3), a dp-dai-link in the board DTS, and an HDMI UCM device. Two kernel patch fixes: 0612 was starting every playback LPASS port at .prepare (needed only for the MI2S amps' PLL check), which makes the DSP reject APM_CMD_GRAPH_START on DisplayPort; new 0618 stops msm_dp_audio_prepare() returning -EINVAL with the display off, since pipewire prepares every UCM device's PCM while building the card and one failure discards the whole profile. Also moves the KONKR UCM profile from the device filesystem overlay to an alsa-ucm-conf patch, matching the Odin 3 profile next to it.


AI Usage

While ROCKNIX doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it
helps set the right context for reviewers.

Did you use AI tools to help write this code? YES | PARTIALLY | NO

yes

Patrick Hennig added 6 commits August 14, 2026 23:19
The early port start exists because the aw88166/aw88261 amps check their
PLL against BCLK at DAPM PRE_PMU, before the PCM trigger. It was applied
to every playback lpass dai, DisplayPort included, and there it makes
the DSP reject APM_CMD_GRAPH_START: the DP controller only enables its
audio path from the codec dai's prepare, which runs after the cpu dai's.

Guard it on the MI2S RX dai ids; DisplayPort and codec DMA start at
trigger as upstream does.
New patch 0618. msm_dp_audio_prepare() returned -EINVAL when the display
is not powered on. Skipping the register programming is right, the error
is not: pipewire prepares the PCM of every UCM device while it builds
the card, which happens with nothing plugged in, and one failure there
makes it discard the whole profile, so the card loses its speaker and
headphone sinks too.
The blob gains a DISPLAY_PORT_RX_0 device subgraph plus a MultiMedia4
stream that feeds only it, so DisplayPort is hw:0,3 and the speaker path
is untouched. It lives in extra-firmware; this bumps the pointer at it.

- New devices/SM8750/audio-topology/ with the m4 source for this board
  and a README covering the build and verify recipe.
- extra-firmware temporarily points at slaide/extra-firmware branch
  sm8750-konkr-dp-audio, to be repointed once that is merged.
- linux package.mk comment corrected: the blob is SEC MI2S on SD1 with
  the DisplayPort backend, not a QUATERNARY retarget.
sound node gains a dp-dai-link (q6apmbedai DISPLAY_PORT_RX_0 ->
&mdss_dp0). That link is also what creates the DP0 Jack control.
It was a device filesystem overlay, the Odin3 profile next to it is an
alsa-ucm-conf patch. Same files, same content, one place to look for
SM8750 profiles.
The UCM profile gains an HDMI device on hw:,3, so the three outputs are
three sinks in one card profile and picking one is a default-sink
change.

The order comes from JackHWMute, not from PlaybackPriority: wireplumber
picks the default sink by node priority and its alsa monitor derives
that from the PCM device number alone, so the speakers on hw:,0 outrank
everything. Availability it does honour, so headphones mute Speaker and
HDMI, and HDMI mutes Speaker, giving headphones > HDMI > speakers in
every combination.

The verb attaches MultiMedia4 to the DisplayPort backend and leaves it
attached: pipewire opens as well as prepares every device's PCM while it
builds the card, and DPCM refuses an open with no backend connected.
@slaide
slaide force-pushed the sm8750-hdmi-audio-konkr branch from 5c80009 to 06c1cdf Compare August 14, 2026 21:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant