• Takashi Iwai's avatar
    ALSA: hda/hdmi: Static PCM mapping again with AMD HDMI codecs · 090ddad4
    Takashi Iwai authored
    The recent code refactoring for HD-audio HDMI codec driver caused a
    regression on AMD/ATI HDMI codecs; namely, PulseAudioand pipewire
    don't recognize HDMI outputs any longer while the direct output via
    ALSA raw access still works.
    
    The problem turned out that, after the code refactoring, the driver
    assumes only the dynamic PCM assignment, and when a PCM stream that
    still isn't assigned to any pin gets opened, the driver tries to
    assign any free converter to the PCM stream.  This behavior is OK for
    Intel and other codecs, as they have arbitrary connections between
    pins and converters.  OTOH, on AMD chips that have a 1:1 mapping
    between pins and converters, this may end up with blocking the open of
    the next PCM stream for the pin that is tied with the formerly taken
    converter.
    
    Also, with the code refactoring, more PCM streams are exposed than
    necessary as we assume all converters can be used, while this isn't
    true for AMD case.  This may change the PCM stream assignment and
    confuse users as well.
    
    This patch fixes those problems by:
    
    - Introducing a flag spec->static_pcm_mapping, and if it's set, the
      driver applies the static mapping between pins and converters at the
      probe time
    - Limiting the number of PCM streams per pins, too; this avoids the
      superfluous PCM streams
    
    Fixes: ef6f5494 ("ALSA: hda/hdmi: Use only dynamic PCM device allocation")
    Cc: <stable@vger.kernel.org>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=216836Co-developed-by: default avatarJaroslav Kysela <perex@perex.cz>
    Signed-off-by: default avatarJaroslav Kysela <perex@perex.cz>
    Link: https://lore.kernel.org/r/20221228125714.16329-1-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    090ddad4
patch_hdmi.c 124 KB