aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/patch_hdmi.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/hda/patch_hdmi.c')
-rw-r--r--sound/pci/hda/patch_hdmi.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index 2b64fabd5faa..c19c81d230bd 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -906,6 +906,7 @@ static int hdmi_setup_stream(struct hda_codec *codec, hda_nid_t cvt_nid,
906 hda_nid_t pin_nid, u32 stream_tag, int format) 906 hda_nid_t pin_nid, u32 stream_tag, int format)
907{ 907{
908 struct hdmi_spec *spec = codec->spec; 908 struct hdmi_spec *spec = codec->spec;
909 unsigned int param;
909 int err; 910 int err;
910 911
911 err = spec->ops.pin_hbr_setup(codec, pin_nid, is_hbr_format(format)); 912 err = spec->ops.pin_hbr_setup(codec, pin_nid, is_hbr_format(format));
@@ -915,6 +916,26 @@ static int hdmi_setup_stream(struct hda_codec *codec, hda_nid_t cvt_nid,
915 return err; 916 return err;
916 } 917 }
917 918
919 if (is_haswell_plus(codec)) {
920
921 /*
922 * on recent platforms IEC Coding Type is required for HBR
923 * support, read current Digital Converter settings and set
924 * ICT bitfield if needed.
925 */
926 param = snd_hda_codec_read(codec, cvt_nid, 0,
927 AC_VERB_GET_DIGI_CONVERT_1, 0);
928
929 param = (param >> 16) & ~(AC_DIG3_ICT);
930
931 /* on recent platforms ICT mode is required for HBR support */
932 if (is_hbr_format(format))
933 param |= 0x1;
934
935 snd_hda_codec_write(codec, cvt_nid, 0,
936 AC_VERB_SET_DIGI_CONVERT_3, param);
937 }
938
918 snd_hda_codec_setup_stream(codec, cvt_nid, stream_tag, 0, format); 939 snd_hda_codec_setup_stream(codec, cvt_nid, stream_tag, 0, format);
919 return 0; 940 return 0;
920} 941}