diff options
Diffstat (limited to 'sound/pci/hda/patch_hdmi.c')
| -rw-r--r-- | sound/pci/hda/patch_hdmi.c | 18 | 
1 files changed, 17 insertions, 1 deletions
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index e405be7929e3..e6d0843ee9df 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 dyn_pcm_no_legacy;  	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 (legacy way) anymore. +	 */ +	if (spec->dyn_pcm_no_legacy) +		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)) @@ -2987,8 +2995,16 @@ static int patch_i915_tgl_hdmi(struct hda_codec *codec)  	 * the index indicate the port number.  	 */  	static const int map[] = {0x4, 0x6, 0x8, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf}; +	int ret; -	return intel_hsw_common_init(codec, 0x02, map, ARRAY_SIZE(map)); +	ret = intel_hsw_common_init(codec, 0x02, map, ARRAY_SIZE(map)); +	if (!ret) { +		struct hdmi_spec *spec = codec->spec; + +		spec->dyn_pcm_no_legacy = true; +	} + +	return ret;  }  /* Intel Baytrail and Braswell; with eld notifier */  | 
