• Takashi Iwai's avatar
    ALSA: hda/hdmi: Preserve the previous PCM device upon re-enablement · f785f5ee
    Takashi Iwai authored
    When a DRM driver turns on or off the screen with the audio
    capability, it notifies the ELD to HD-audio HDMI codec driver via
    component ops.  HDMI codec driver, in turn, attaches or detaches the
    PCM stream for the given port on the fly.
    
    The problem is that, since the recent code change, the HDMI driver
    always treats the PCM stream assignment dynamically; this ended up the
    confusion of the PCM device appearance.  e.g. when a screen goes once
    off and on again, it may appear on a different PCM device before the
    screen-off.  Although the application should treat such a change, it
    doesn't seem working gracefully with the current pipewire (maybe
    PulseAudio, too).
    
    As a workaround, this patch changes the HDMI codec driver behavior
    slightly to be more consistent.  Now it remembers the previous PCM
    slot for the given port and try to assign to it.  That is, if a port
    is re-enabled, the driver tries to use the same PCM slot that was
    assigned to that port previously.  If it conflicts, a new slot is
    searched and used like before, instead.
    
    Note that multiple monitor connections are the only typical case where
    the PCM slot preservation is effective.  As long as only a single
    monitor is connected, the behavior isn't changed, and the first PCM
    slot is still assigned always.
    
    Fixes: ef6f5494 ("ALSA: hda/hdmi: Use only dynamic PCM device allocation")
    Reviewed-by: default avatarJaroslav Kysela <perex@perex.cz>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=217259
    Link: https://lore.kernel.org/r/20230331142217.19791-1-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    f785f5ee
patch_hdmi.c 124 KB