diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2014-05-28 19:14:36 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2014-06-02 18:37:33 -0400 |
commit | 7b555e068de613b52b068adf3c74f0c774c28365 (patch) | |
tree | 49b964b6f96a47c8c6a6eba2eb3beb3bd76d66eb | |
parent | f71d9ebd92437faf8dd1ada32ab5ddac4c6e5e67 (diff) |
drm/radeon: Setup HDMI_CONTROL for hdmi deep color gcp's (v2)
Program HDMI_CONTROL to send general control packets
for hdmi deep color mode signalling at every video
frame if bpc > 8.
This is only supported on evergreen / DCE-4 and later.
v2: rebase
Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/radeon/evergreen_hdmi.c | 30 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/evergreend.h | 3 |
2 files changed, 32 insertions, 1 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen_hdmi.c b/drivers/gpu/drm/radeon/evergreen_hdmi.c index 8579721e8971..b760ef52fdcd 100644 --- a/drivers/gpu/drm/radeon/evergreen_hdmi.c +++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c | |||
@@ -298,6 +298,7 @@ void evergreen_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode | |||
298 | struct hdmi_avi_infoframe frame; | 298 | struct hdmi_avi_infoframe frame; |
299 | uint32_t offset; | 299 | uint32_t offset; |
300 | ssize_t err; | 300 | ssize_t err; |
301 | uint32_t val; | ||
301 | int bpc = 8; | 302 | int bpc = 8; |
302 | 303 | ||
303 | if (!dig || !dig->afmt) | 304 | if (!dig || !dig->afmt) |
@@ -330,6 +331,35 @@ void evergreen_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode | |||
330 | 331 | ||
331 | WREG32(AFMT_AUDIO_CRC_CONTROL + offset, 0x1000); | 332 | WREG32(AFMT_AUDIO_CRC_CONTROL + offset, 0x1000); |
332 | 333 | ||
334 | val = RREG32(HDMI_CONTROL + offset); | ||
335 | val &= ~HDMI_DEEP_COLOR_ENABLE; | ||
336 | val &= ~HDMI_DEEP_COLOR_DEPTH_MASK; | ||
337 | |||
338 | switch (bpc) { | ||
339 | case 0: | ||
340 | case 6: | ||
341 | case 8: | ||
342 | case 16: | ||
343 | default: | ||
344 | DRM_DEBUG("%s: Disabling hdmi deep color for %d bpc.\n", | ||
345 | drm_get_connector_name(connector), bpc); | ||
346 | break; | ||
347 | case 10: | ||
348 | val |= HDMI_DEEP_COLOR_ENABLE; | ||
349 | val |= HDMI_DEEP_COLOR_DEPTH(HDMI_30BIT_DEEP_COLOR); | ||
350 | DRM_DEBUG("%s: Enabling hdmi deep color 30 for 10 bpc.\n", | ||
351 | drm_get_connector_name(connector)); | ||
352 | break; | ||
353 | case 12: | ||
354 | val |= HDMI_DEEP_COLOR_ENABLE; | ||
355 | val |= HDMI_DEEP_COLOR_DEPTH(HDMI_36BIT_DEEP_COLOR); | ||
356 | DRM_DEBUG("%s: Enabling hdmi deep color 36 for 12 bpc.\n", | ||
357 | drm_get_connector_name(connector)); | ||
358 | break; | ||
359 | } | ||
360 | |||
361 | WREG32(HDMI_CONTROL + offset, val); | ||
362 | |||
333 | WREG32(HDMI_VBI_PACKET_CONTROL + offset, | 363 | WREG32(HDMI_VBI_PACKET_CONTROL + offset, |
334 | HDMI_NULL_SEND | /* send null packets when required */ | 364 | HDMI_NULL_SEND | /* send null packets when required */ |
335 | HDMI_GC_SEND | /* send general control packets */ | 365 | HDMI_GC_SEND | /* send general control packets */ |
diff --git a/drivers/gpu/drm/radeon/evergreend.h b/drivers/gpu/drm/radeon/evergreend.h index f9c7963b3ee6..b066d6711b8d 100644 --- a/drivers/gpu/drm/radeon/evergreend.h +++ b/drivers/gpu/drm/radeon/evergreend.h | |||
@@ -517,10 +517,11 @@ | |||
517 | # define HDMI_ERROR_ACK (1 << 8) | 517 | # define HDMI_ERROR_ACK (1 << 8) |
518 | # define HDMI_ERROR_MASK (1 << 9) | 518 | # define HDMI_ERROR_MASK (1 << 9) |
519 | # define HDMI_DEEP_COLOR_ENABLE (1 << 24) | 519 | # define HDMI_DEEP_COLOR_ENABLE (1 << 24) |
520 | # define HDMI_DEEP_COLOR_DEPTH (((x) & 3) << 28) | 520 | # define HDMI_DEEP_COLOR_DEPTH(x) (((x) & 3) << 28) |
521 | # define HDMI_24BIT_DEEP_COLOR 0 | 521 | # define HDMI_24BIT_DEEP_COLOR 0 |
522 | # define HDMI_30BIT_DEEP_COLOR 1 | 522 | # define HDMI_30BIT_DEEP_COLOR 1 |
523 | # define HDMI_36BIT_DEEP_COLOR 2 | 523 | # define HDMI_36BIT_DEEP_COLOR 2 |
524 | # define HDMI_DEEP_COLOR_DEPTH_MASK (3 << 28) | ||
524 | #define HDMI_STATUS 0x7034 | 525 | #define HDMI_STATUS 0x7034 |
525 | # define HDMI_ACTIVE_AVMUTE (1 << 0) | 526 | # define HDMI_ACTIVE_AVMUTE (1 << 0) |
526 | # define HDMI_AUDIO_PACKET_ERROR (1 << 16) | 527 | # define HDMI_AUDIO_PACKET_ERROR (1 << 16) |