|
@@ -2818,6 +2818,10 @@ static int patch_nvhdmi_8ch_7x(struct hda_codec *codec)
|
|
|
#define ATI_VERB_GET_MULTICHANNEL_7 0xf88
|
|
|
#define ATI_VERB_GET_MULTICHANNEL_MODE 0xf89
|
|
|
|
|
|
+/* AMD specific HDA cvt verbs */
|
|
|
+#define ATI_VERB_SET_RAMP_RATE 0x770
|
|
|
+#define ATI_VERB_GET_RAMP_RATE 0xf70
|
|
|
+
|
|
|
#define ATI_OUT_ENABLE 0x1
|
|
|
|
|
|
#define ATI_MULTICHANNEL_MODE_PAIRED 0
|
|
@@ -3049,6 +3053,23 @@ static int atihdmi_pin_hbr_setup(struct hda_codec *codec, hda_nid_t pin_nid,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int atihdmi_setup_stream(struct hda_codec *codec, hda_nid_t cvt_nid,
|
|
|
+ hda_nid_t pin_nid, u32 stream_tag, int format)
|
|
|
+{
|
|
|
+
|
|
|
+ if (is_amdhdmi_rev3_or_later(codec)) {
|
|
|
+ int ramp_rate = 180; /* default as per AMD spec */
|
|
|
+ /* disable ramp-up/down for non-pcm as per AMD spec */
|
|
|
+ if (format & AC_FMT_TYPE_NON_PCM)
|
|
|
+ ramp_rate = 0;
|
|
|
+
|
|
|
+ snd_hda_codec_write(codec, cvt_nid, 0, ATI_VERB_SET_RAMP_RATE, ramp_rate);
|
|
|
+ }
|
|
|
+
|
|
|
+ return hdmi_setup_stream(codec, cvt_nid, pin_nid, stream_tag, format);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
static int atihdmi_init(struct hda_codec *codec)
|
|
|
{
|
|
|
struct hdmi_spec *spec = codec->spec;
|
|
@@ -3095,6 +3116,7 @@ static int patch_atihdmi(struct hda_codec *codec)
|
|
|
spec->ops.pin_set_slot_channel = atihdmi_pin_set_slot_channel;
|
|
|
spec->ops.pin_setup_infoframe = atihdmi_pin_setup_infoframe;
|
|
|
spec->ops.pin_hbr_setup = atihdmi_pin_hbr_setup;
|
|
|
+ spec->ops.setup_stream = atihdmi_setup_stream;
|
|
|
|
|
|
if (!has_amd_full_remap_support(codec)) {
|
|
|
/* override to ATI/AMD-specific versions with pairwise mapping */
|