Hi,
On Mon, 3 Apr 2023, Jaroslav Kysela wrote:
The question is, if ELD contains a serial number of the monitor. If there is no unique identification for similar monitors (one model), then we have no way to identify the audio devices properly.
[...]
If I look to drm_edid_to_eld() function in drivers/gpu/drm/drm_edid.c I don't see any unique information to be copied for the identical monitors.
right, if you have two identical monitors, and to make things worse, you connect them via a DP-MST hub, we have a problem.
ELD certainly does not have the serial info. It does have a PortID field, but that is an implementation specific field (in the HDA spec) and at least based on quick check, seem to be zero filled on most systems. Plus, existing apps (e.g. both Pulseaudio and Pipewire) only consider Monitor_Name_String in ELD.
EDID does have fields for serial number and date of mfg. Not sure how widely implemented the serial number is, but I can see at least org.gnome.Mutter.DisplayConfig ([1] as used by e.g. GNOME Display Settings panel) do expose it and use it to identify displays (and e.g. remember the display layout).
In practise, Takashi's patch will probably cover a large amount of cases. If you don't have a hub in between, the pin NID will be stable. If you have identical monitors, you might have to guess the right monitor on the first time, but subsequently the pin NID reuse will pick the same PCM for same monitor. With a hub in between, we are at mercy of how the DP-MST device ids are allocated (if you have monitors of same type).
So indeed next step would be to expose the EDID serial number, and make that available via ALSA so that apps could link a PCM to a monitor name plus serial number. As this is not part of ELD, this is somewhat larger task (need to extend drm_audio_component.h to pass this info, need to extend the ALSA user-space interface and get updates to clients).
[1] https://gitlab.gnome.org/GNOME/mutter/-/blob/main/data/dbus-interfaces/org.g... , https://wiki.gnome.org/Initiatives/Wayland/Gaps/DisplayConfig
Br, Kai