On Thu, 05 Nov 2026 17:02:38 +0100, Kai Vehmanen wrote: > > The ELD Port_ID field (bytes 8..15 of the baseline block) is typically > zero on Linux today: drm_edid_to_eld() leaves it empty and no in-tree driver > fills it in. amdgpu, radeon and nouveau pass the raw connector->eld to > the audio component. On the amdgpu DC Azalia register path the value > is a hardcoded constant, the same for every port. > Only closed display drivers fill the value. > > Pipewire added support for "Port_ID" in merge request: > https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/3025 > > As a result, when two identical monitors are connected their ELDs are > byte-identical, and userspace (e.g. PipeWire/WirePlumber) cannot > passively tell which HDMI/DP PCM belongs to which DRM connector. > > This series adds a DRM helper that fills Port_ID with a common layout, > and uses it in i915: > > bits 63:48 - PCI domain of the DRM device > bits 47:32 - PCI bus/device/function of the DRM device > bits 31:0 - DRM connector object ID > > The upper half follows the layout documented for the AMD Azalia sink > info registers (dce_audio.c: "PORT_ID1 = 16bit BDF"). The aim is for > this to become a convention other drivers can opt into. For drivers > that copy connector->eld to the audio component (amdgpu DM, radeon, > nouveau), adopting it would be a one-line change. Comments from the > AMD and nouveau folks on whether the layout works for them are very > welcome. > > An alternative would be to fill Port_ID directly in drm_edid_to_eld(), > so every driver gets it without changes. I went with an opt-in helper > to avoid changing the ELD contents seen by all drivers and existing > userspace at once. > > The value is exposed to userspace via the ALSA ELD control and > /proc/asound/cardX/eld#Y. > > Kai Vehmanen (2): > drm/eld: Add drm_eld_set_port_id() helper > drm/i915/audio: Populate ELD Port_ID
Reviewed-by: Takashi Iwai <[email protected]> thanks, Takashi
