diff options
-rw-r--r-- | sound/pci/hda/patch_hdmi.c | 13 |
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 | ||
1331 | static 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 | */ | ||
1340 | static 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 | ||