Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02383854 authored by Mengdong Lin's avatar Mengdong Lin Committed by Takashi Iwai
Browse files

ALSA: hda - not choose assigned converters for unused pins of Valleyview



For Valleyview display codec, if an unused pin chooses an assgined converter
selected by a used pin, playback on the unused pin can also give sound to the
output device of the used pin. It's because data flows from the same convertor
to the display port of the used pin. This issue is same as Haswell.

So this patch avoids using assinged convertors for unused pins.
The related function haswell_config_cvts() is renamed for code reuse.

Signed-off-by: default avatarMengdong Lin <mengdong.lin@intel.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 8e383953
Loading
Loading
Loading
Loading
+4 −3
Original line number Original line Diff line number Diff line
@@ -46,6 +46,7 @@ module_param(static_hdmi_pcm, bool, 0644);
MODULE_PARM_DESC(static_hdmi_pcm, "Don't restrict PCM parameters per ELD info");
MODULE_PARM_DESC(static_hdmi_pcm, "Don't restrict PCM parameters per ELD info");


#define is_haswell(codec)  ((codec)->vendor_id == 0x80862807)
#define is_haswell(codec)  ((codec)->vendor_id == 0x80862807)
#define is_valleyview(codec) ((codec)->vendor_id == 0x80862882)


struct hdmi_spec_per_cvt {
struct hdmi_spec_per_cvt {
	hda_nid_t cvt_nid;
	hda_nid_t cvt_nid;
@@ -1327,7 +1328,7 @@ static int hdmi_choose_cvt(struct hda_codec *codec,
	return 0;
	return 0;
}
}


static void haswell_config_cvts(struct hda_codec *codec,
static void not_share_unassigned_cvt(struct hda_codec *codec,
			hda_nid_t pin_nid, int mux_idx)
			hda_nid_t pin_nid, int mux_idx)
{
{
	struct hdmi_spec *spec = codec->spec;
	struct hdmi_spec *spec = codec->spec;
@@ -1406,8 +1407,8 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo,
			    mux_idx);
			    mux_idx);


	/* configure unused pins to choose other converters */
	/* configure unused pins to choose other converters */
	if (is_haswell(codec))
	if (is_haswell(codec) || is_valleyview(codec))
		haswell_config_cvts(codec, per_pin->pin_nid, mux_idx);
		not_share_unassigned_cvt(codec, per_pin->pin_nid, mux_idx);


	snd_hda_spdif_ctls_assign(codec, pin_idx, per_cvt->cvt_nid);
	snd_hda_spdif_ctls_assign(codec, pin_idx, per_cvt->cvt_nid);