[alsa-devel] [PATCH 2/2] [RFC] ALSA: hda: hdmi - preserve non-MST PCM routing for Intel platforms
Nikhil Mahale
nmahale at nvidia.com
Mon Dec 2 06:07:01 CET 2019
Thanks Kai, see inline -
On 11/29/19 8:07 PM, Kai Vehmanen wrote:
> 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.
Do you mean "on Intel platforms, this value is -1 for non-MST"?
I am looking into functions
intel_audio_codec_enable/intel_audio_codec_disable, they sets
pipe = -1 for non-MST cases, right?
> 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.
What exact change commit 5398e94fb753 ("ALSA: hda - Add DP-MST support
for NVIDIA codecs") made in behaviour on Intel platform? Sorry, it is not
clear to me from your reply on this thread.
For non-MST monitors, pipe = -1 is getting passed
to intel_pin_eld_notify().
check_presence_and_report -> pin_id_to_pin_index changes value of dev_id
from -1 to 0, comment there says "(dev_id == -1) means it is NON-MST pin
return the first virtual pin on this port". If this is the case, non-MST
monitor should get PCM of index 'pin_nid_idx' like it was happening
before commit 5398e94fb753. Isn't it?
Thanks,
Nikhil Mahale
> Signed-off-by: Kai Vehmanen <kai.vehmanen at linux.intel.com>
> ---
> sound/pci/hda/patch_hdmi.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
> index c3940c197122..1dd4c92254a4 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 */
>
More information about the Alsa-devel
mailing list