[PATCH] ALSA: hda/hdmi: let new platforms assign the pcm slot dynamically

Takashi Iwai tiwai at suse.de
Tue Feb 23 14:09:37 CET 2021


On Tue, 23 Feb 2021 13:22:05 +0100,
Hui Wang wrote:
> 
> If the platform set the dyn_pcm_assign to true, it will call
> hdmi_find_pcm_slot() to find a pcm slot when hdmi/dp monitor is
> connected and need to create a pcm.
> 
> So far only intel_hsw_common_init() and patch_nvhdmi() set the
> dyn_pcm_assign to true, here we let tgl platforms assign the pcm slot
> dynamically first, if the driver runs for a period of time and there
> is no regression reported, we could set no_fixed_assgin to true in
> the intel_hsw_common_init(), and then set it to true in the
> patch_nvhdmi().
> 
> This change comes from the discussion between Takashi and
> Kai Vehmanen. Please refer to:
> https://github.com/alsa-project/alsa-lib/pull/118
> 
> Signed-off-by: Hui Wang <hui.wang at canonical.com>

As this would "fix" actual use cases, I'd love to merge this for 5.12,
but of course it needs to be verified beforehand.

So this was actually tested in your side, right?


thanks,

Takashi

> ---
>  sound/pci/hda/patch_hdmi.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
> index e405be7929e3..379a4d786b3b 100644
> --- a/sound/pci/hda/patch_hdmi.c
> +++ b/sound/pci/hda/patch_hdmi.c
> @@ -157,6 +157,7 @@ struct hdmi_spec {
>  
>  	bool dyn_pin_out;
>  	bool dyn_pcm_assign;
> +	bool no_fixed_assign;
>  	bool intel_hsw_fixup;	/* apply Intel platform-specific fixups */
>  	/*
>  	 * Non-generic VIA/NVIDIA specific
> @@ -1345,6 +1346,12 @@ static int hdmi_find_pcm_slot(struct hdmi_spec *spec,
>  {
>  	int i;
>  
> +	/* on the new machines, try to assign the pcm slot dynamically,
> +	 * not use the preferred fixed map anymore.
> +	 */
> +	if (spec->no_fixed_assign)
> +		goto last_try;
> +
>  	/*
>  	 * generic_hdmi_build_pcms() may allocate extra PCMs on some
>  	 * platforms (with maximum of 'num_nids + dev_num - 1')
> @@ -1374,6 +1381,7 @@ static int hdmi_find_pcm_slot(struct hdmi_spec *spec,
>  			return i;
>  	}
>  
> + last_try:
>  	/* the last try; check the empty slots in pins */
>  	for (i = 0; i < spec->num_nids; i++) {
>  		if (!test_bit(i, &spec->pcm_bitmap))
> @@ -2937,6 +2945,9 @@ static int intel_hsw_common_init(struct hda_codec *codec, hda_nid_t vendor_nid,
>  	spec->port_num = port_num;
>  	spec->intel_hsw_fixup = true;
>  
> +	if (port_num > 6)
> +		spec->no_fixed_assign = true;
> +
>  	intel_haswell_enable_all_pins(codec, true);
>  	intel_haswell_fixup_enable_dp12(codec);
>  
> -- 
> 2.25.1
> 


More information about the Alsa-devel mailing list