[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