summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorKai Vehmanen <kai.vehmanen@linux.intel.com>2019-11-29 16:37:56 +0200
committerTakashi Iwai <tiwai@suse.de>2019-11-29 15:42:16 +0100
commit609f5485344b05a7eaffe9fdd09d42ad1c501cdf (patch)
tree1fcb873bd4263e58fffa9ec6c18ffd8198b2fdcf /sound
parent0c0fe9e6b95ce2e9e2c83bef5563cf223e849eda (diff)
downloadlinux-stable-609f5485344b05a7eaffe9fdd09d42ad1c501cdf.tar.gz
linux-stable-609f5485344b05a7eaffe9fdd09d42ad1c501cdf.tar.bz2
linux-stable-609f5485344b05a7eaffe9fdd09d42ad1c501cdf.zip
ALSA: hda: hdmi - preserve non-MST PCM routing for Intel platforms
Commit 5398e94fb753 ("ALSA: hda - Add DP-MST support for NVIDIA codecs") introduced a slight change of behaviour how non-MST monitors are assigned to PCMs on Intel platforms. In the drm_audio_component.h interface, the third parameter to pin_eld_notify() is pipe number. On Intel platforms, this value is -1 for MST. On other platforms, a non-zero pipe id is used to signal MST use. This difference leads to some subtle differences in hdmi_find_pcm_slot() with regards to how non-MST monitors are assigned to PCMs. This patch restores the original behaviour on Intel platforms while keeping the new allocation policy on other platforms. Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Link: https://lore.kernel.org/r/20191129143756.23941-2-kai.vehmanen@linux.intel.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/hda/patch_hdmi.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index a50736269584..0032bba8cc9d 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -1353,6 +1353,11 @@ static int hdmi_find_pcm_slot(struct hdmi_spec *spec,
i = spec->num_nids + (per_pin->dev_id - 1);
if (i < spec->pcm_used && !(test_bit(i, &spec->pcm_bitmap)))
return i;
+
+ /* keep legacy assignment for dev_id>0 on Intel platforms */
+ if (spec->intel_hsw_fixup)
+ if (!test_bit(per_pin->pin_nid_idx, &spec->pcm_bitmap))
+ return per_pin->pin_nid_idx;
}
/* have a second try; check the area over num_nids */