diff options
Diffstat (limited to 'sound/pci/hda/patch_hdmi.c')
-rw-r--r-- | sound/pci/hda/patch_hdmi.c | 21 |
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 | } |