diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2013-04-18 09:26:08 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-04-22 10:39:13 -0400 |
commit | 91a440190c8414d7ef2d6a39d7185858a6ebc83c (patch) | |
tree | 50ed6e62ca70054e2119bb9efe42937cb4ccb9c5 /drivers/gpu/drm/radeon | |
parent | d3418eacad403033e95e49dc14afa37c2112c134 (diff) |
drm/radeon/evergreen: reorder HDMI setup
Driver fglrx setups audio and ACR packets after basic initialization,
which sounds sane, do the same.
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon')
-rw-r--r-- | drivers/gpu/drm/radeon/evergreen_hdmi.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen_hdmi.c b/drivers/gpu/drm/radeon/evergreen_hdmi.c index 0879355815d9..b1e5e60d23a8 100644 --- a/drivers/gpu/drm/radeon/evergreen_hdmi.c +++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c | |||
@@ -111,17 +111,6 @@ void evergreen_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode | |||
111 | 111 | ||
112 | WREG32(AFMT_AUDIO_CRC_CONTROL + offset, 0x1000); | 112 | WREG32(AFMT_AUDIO_CRC_CONTROL + offset, 0x1000); |
113 | 113 | ||
114 | WREG32(HDMI_AUDIO_PACKET_CONTROL + offset, | ||
115 | HDMI_AUDIO_DELAY_EN(1) | /* set the default audio delay */ | ||
116 | HDMI_AUDIO_PACKETS_PER_LINE(3)); /* should be suffient for all audio modes and small enough for all hblanks */ | ||
117 | |||
118 | WREG32(AFMT_AUDIO_PACKET_CONTROL + offset, | ||
119 | AFMT_60958_CS_UPDATE); /* allow 60958 channel status fields to be updated */ | ||
120 | |||
121 | WREG32(HDMI_ACR_PACKET_CONTROL + offset, | ||
122 | HDMI_ACR_AUTO_SEND | /* allow hw to sent ACR packets when required */ | ||
123 | HDMI_ACR_SOURCE); /* select SW CTS value */ | ||
124 | |||
125 | WREG32(HDMI_VBI_PACKET_CONTROL + offset, | 114 | WREG32(HDMI_VBI_PACKET_CONTROL + offset, |
126 | HDMI_NULL_SEND | /* send null packets when required */ | 115 | HDMI_NULL_SEND | /* send null packets when required */ |
127 | HDMI_GC_SEND | /* send general control packets */ | 116 | HDMI_GC_SEND | /* send general control packets */ |
@@ -139,6 +128,21 @@ void evergreen_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode | |||
139 | 128 | ||
140 | WREG32(HDMI_GC + offset, 0); /* unset HDMI_GC_AVMUTE */ | 129 | WREG32(HDMI_GC + offset, 0); /* unset HDMI_GC_AVMUTE */ |
141 | 130 | ||
131 | WREG32(HDMI_AUDIO_PACKET_CONTROL + offset, | ||
132 | HDMI_AUDIO_DELAY_EN(1) | /* set the default audio delay */ | ||
133 | HDMI_AUDIO_PACKETS_PER_LINE(3)); /* should be suffient for all audio modes and small enough for all hblanks */ | ||
134 | |||
135 | WREG32(AFMT_AUDIO_PACKET_CONTROL + offset, | ||
136 | AFMT_60958_CS_UPDATE); /* allow 60958 channel status fields to be updated */ | ||
137 | |||
138 | /* fglrx clears sth in AFMT_AUDIO_PACKET_CONTROL2 here */ | ||
139 | |||
140 | WREG32(HDMI_ACR_PACKET_CONTROL + offset, | ||
141 | HDMI_ACR_AUTO_SEND | /* allow hw to sent ACR packets when required */ | ||
142 | HDMI_ACR_SOURCE); /* select SW CTS value */ | ||
143 | |||
144 | evergreen_hdmi_update_ACR(encoder, mode->clock); | ||
145 | |||
142 | err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode); | 146 | err = drm_hdmi_avi_infoframe_from_display_mode(&frame, mode); |
143 | if (err < 0) { | 147 | if (err < 0) { |
144 | DRM_ERROR("failed to setup AVI infoframe: %zd\n", err); | 148 | DRM_ERROR("failed to setup AVI infoframe: %zd\n", err); |
@@ -152,7 +156,6 @@ void evergreen_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode | |||
152 | } | 156 | } |
153 | 157 | ||
154 | evergreen_hdmi_update_avi_infoframe(encoder, buffer, sizeof(buffer)); | 158 | evergreen_hdmi_update_avi_infoframe(encoder, buffer, sizeof(buffer)); |
155 | evergreen_hdmi_update_ACR(encoder, mode->clock); | ||
156 | 159 | ||
157 | WREG32_OR(HDMI_INFOFRAME_CONTROL0 + offset, | 160 | WREG32_OR(HDMI_INFOFRAME_CONTROL0 + offset, |
158 | HDMI_AVI_INFO_SEND | /* enable AVI info frames */ | 161 | HDMI_AVI_INFO_SEND | /* enable AVI info frames */ |