aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon
diff options
context:
space:
mode:
authorRafał Miłecki <zajec5@gmail.com>2013-04-18 09:26:08 -0400
committerAlex Deucher <alexander.deucher@amd.com>2013-04-22 10:39:13 -0400
commit91a440190c8414d7ef2d6a39d7185858a6ebc83c (patch)
tree50ed6e62ca70054e2119bb9efe42937cb4ccb9c5 /drivers/gpu/drm/radeon
parentd3418eacad403033e95e49dc14afa37c2112c134 (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.c27
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 */