aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/pci/hda/patch_hdmi.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index c3e3537b3196..e22323f50424 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -1328,7 +1328,16 @@ static int hdmi_choose_cvt(struct hda_codec *codec,
1328 return 0; 1328 return 0;
1329} 1329}
1330 1330
1331static void not_share_unassigned_cvt(struct hda_codec *codec, 1331/* Intel HDMI workaround to fix audio routing issue:
1332 * For some Intel display codecs, pins share the same connection list.
1333 * So a conveter can be selected by multiple pins and playback on any of these
1334 * pins will generate sound on the external display, because audio flows from
1335 * the same converter to the display pipeline. Also muting one pin may make
1336 * other pins have no sound output.
1337 * So this function assures that an assigned converter for a pin is not selected
1338 * by any other pins.
1339 */
1340static void intel_not_share_assigned_cvt(struct hda_codec *codec,
1332 hda_nid_t pin_nid, int mux_idx) 1341 hda_nid_t pin_nid, int mux_idx)
1333{ 1342{
1334 struct hdmi_spec *spec = codec->spec; 1343 struct hdmi_spec *spec = codec->spec;
@@ -1408,7 +1417,7 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo,
1408 1417
1409 /* configure unused pins to choose other converters */ 1418 /* configure unused pins to choose other converters */
1410 if (is_haswell(codec) || is_valleyview(codec)) 1419 if (is_haswell(codec) || is_valleyview(codec))
1411 not_share_unassigned_cvt(codec, per_pin->pin_nid, mux_idx); 1420 intel_not_share_assigned_cvt(codec, per_pin->pin_nid, mux_idx);
1412 1421
1413 snd_hda_spdif_ctls_assign(codec, pin_idx, per_cvt->cvt_nid); 1422 snd_hda_spdif_ctls_assign(codec, pin_idx, per_cvt->cvt_nid);
1414 1423