Commit 40df2f80 authored by Charlene Liu's avatar Charlene Liu Committed by Alex Deucher

drm/amd/display: color space ycbcr709 support

Signed-off-by: default avatarCharlene Liu <charlene.liu@amd.com>
Reviewed-by: default avatarDuke Du <Duke.Du@amd.com>
Acked-by: default avatarBhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 2f482c4f
...@@ -45,8 +45,10 @@ enum dc_color_space_type { ...@@ -45,8 +45,10 @@ enum dc_color_space_type {
COLOR_SPACE_RGB_LIMITED_TYPE, COLOR_SPACE_RGB_LIMITED_TYPE,
COLOR_SPACE_YCBCR601_TYPE, COLOR_SPACE_YCBCR601_TYPE,
COLOR_SPACE_YCBCR709_TYPE, COLOR_SPACE_YCBCR709_TYPE,
COLOR_SPACE_YCBCR2020_TYPE,
COLOR_SPACE_YCBCR601_LIMITED_TYPE, COLOR_SPACE_YCBCR601_LIMITED_TYPE,
COLOR_SPACE_YCBCR709_LIMITED_TYPE COLOR_SPACE_YCBCR709_LIMITED_TYPE,
COLOR_SPACE_YCBCR709_BLACK_TYPE,
}; };
static const struct tg_color black_color_format[] = { static const struct tg_color black_color_format[] = {
...@@ -80,7 +82,6 @@ static const struct out_csc_color_matrix_type output_csc_matrix[] = { ...@@ -80,7 +82,6 @@ static const struct out_csc_color_matrix_type output_csc_matrix[] = {
{ COLOR_SPACE_YCBCR709_TYPE, { COLOR_SPACE_YCBCR709_TYPE,
{ 0xE04, 0xF345, 0xFEB7, 0x1004, 0x5D3, 0x1399, 0x1FA, { 0xE04, 0xF345, 0xFEB7, 0x1004, 0x5D3, 0x1399, 0x1FA,
0x201, 0xFCCA, 0xF533, 0xE04, 0x1004} }, 0x201, 0xFCCA, 0xF533, 0xE04, 0x1004} },
/* TODO: correct values below */ /* TODO: correct values below */
{ COLOR_SPACE_YCBCR601_LIMITED_TYPE, { COLOR_SPACE_YCBCR601_LIMITED_TYPE,
{ 0xE00, 0xF447, 0xFDB9, 0x1000, 0x991, { 0xE00, 0xF447, 0xFDB9, 0x1000, 0x991,
...@@ -88,6 +89,12 @@ static const struct out_csc_color_matrix_type output_csc_matrix[] = { ...@@ -88,6 +89,12 @@ static const struct out_csc_color_matrix_type output_csc_matrix[] = {
{ COLOR_SPACE_YCBCR709_LIMITED_TYPE, { COLOR_SPACE_YCBCR709_LIMITED_TYPE,
{ 0xE00, 0xF349, 0xFEB7, 0x1000, 0x6CE, 0x16E3, { 0xE00, 0xF349, 0xFEB7, 0x1000, 0x6CE, 0x16E3,
0x24F, 0x200, 0xFCCB, 0xF535, 0xE00, 0x1000} }, 0x24F, 0x200, 0xFCCB, 0xF535, 0xE00, 0x1000} },
{ COLOR_SPACE_YCBCR2020_TYPE,
{ 0x1000, 0xF149, 0xFEB7, 0x0000, 0x0868, 0x15B2,
0x01E6, 0x0000, 0xFB88, 0xF478, 0x1000, 0x0000} },
{ COLOR_SPACE_YCBCR709_BLACK_TYPE,
{ 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000,
0x0000, 0x0200, 0x0000, 0x0000, 0x0000, 0x1000} },
}; };
static bool is_rgb_type( static bool is_rgb_type(
...@@ -149,6 +156,16 @@ static bool is_ycbcr709_type( ...@@ -149,6 +156,16 @@ static bool is_ycbcr709_type(
return ret; return ret;
} }
static bool is_ycbcr2020_type(
enum dc_color_space color_space)
{
bool ret = false;
if (color_space == COLOR_SPACE_2020_YCBCR)
ret = true;
return ret;
}
static bool is_ycbcr709_limited_type( static bool is_ycbcr709_limited_type(
enum dc_color_space color_space) enum dc_color_space color_space)
{ {
...@@ -174,7 +191,12 @@ enum dc_color_space_type get_color_space_type(enum dc_color_space color_space) ...@@ -174,7 +191,12 @@ enum dc_color_space_type get_color_space_type(enum dc_color_space color_space)
type = COLOR_SPACE_YCBCR601_LIMITED_TYPE; type = COLOR_SPACE_YCBCR601_LIMITED_TYPE;
else if (is_ycbcr709_limited_type(color_space)) else if (is_ycbcr709_limited_type(color_space))
type = COLOR_SPACE_YCBCR709_LIMITED_TYPE; type = COLOR_SPACE_YCBCR709_LIMITED_TYPE;
else if (is_ycbcr2020_type(color_space))
type = COLOR_SPACE_YCBCR2020_TYPE;
else if (color_space == COLOR_SPACE_YCBCR709)
type = COLOR_SPACE_YCBCR709_BLACK_TYPE;
else if (color_space == COLOR_SPACE_YCBCR709_BLACK)
type = COLOR_SPACE_YCBCR709_BLACK_TYPE;
return type; return type;
} }
...@@ -206,6 +228,7 @@ void color_space_to_black_color( ...@@ -206,6 +228,7 @@ void color_space_to_black_color(
switch (colorspace) { switch (colorspace) {
case COLOR_SPACE_YCBCR601: case COLOR_SPACE_YCBCR601:
case COLOR_SPACE_YCBCR709: case COLOR_SPACE_YCBCR709:
case COLOR_SPACE_YCBCR709_BLACK:
case COLOR_SPACE_YCBCR601_LIMITED: case COLOR_SPACE_YCBCR601_LIMITED:
case COLOR_SPACE_YCBCR709_LIMITED: case COLOR_SPACE_YCBCR709_LIMITED:
case COLOR_SPACE_2020_YCBCR: case COLOR_SPACE_2020_YCBCR:
......
...@@ -47,8 +47,8 @@ void update_stream_signal(struct dc_stream_state *stream, struct dc_sink *sink) ...@@ -47,8 +47,8 @@ void update_stream_signal(struct dc_stream_state *stream, struct dc_sink *sink)
if (dc_is_dvi_signal(stream->signal)) { if (dc_is_dvi_signal(stream->signal)) {
if (stream->ctx->dc->caps.dual_link_dvi && if (stream->ctx->dc->caps.dual_link_dvi &&
(stream->timing.pix_clk_100hz / 10) > TMDS_MAX_PIXEL_CLOCK && (stream->timing.pix_clk_100hz / 10) > TMDS_MAX_PIXEL_CLOCK &&
sink->sink_signal != SIGNAL_TYPE_DVI_SINGLE_LINK) sink->sink_signal != SIGNAL_TYPE_DVI_SINGLE_LINK)
stream->signal = SIGNAL_TYPE_DVI_DUAL_LINK; stream->signal = SIGNAL_TYPE_DVI_DUAL_LINK;
else else
stream->signal = SIGNAL_TYPE_DVI_SINGLE_LINK; stream->signal = SIGNAL_TYPE_DVI_SINGLE_LINK;
......
...@@ -534,6 +534,7 @@ enum dc_color_space { ...@@ -534,6 +534,7 @@ enum dc_color_space {
COLOR_SPACE_DOLBYVISION, COLOR_SPACE_DOLBYVISION,
COLOR_SPACE_APPCTRL, COLOR_SPACE_APPCTRL,
COLOR_SPACE_CUSTOMPOINTS, COLOR_SPACE_CUSTOMPOINTS,
COLOR_SPACE_YCBCR709_BLACK,
}; };
enum dc_dither_option { enum dc_dither_option {
......
...@@ -418,6 +418,7 @@ static void dce110_stream_encoder_dp_set_stream_attribute( ...@@ -418,6 +418,7 @@ static void dce110_stream_encoder_dp_set_stream_attribute(
break; break;
case COLOR_SPACE_YCBCR709: case COLOR_SPACE_YCBCR709:
case COLOR_SPACE_YCBCR709_LIMITED: case COLOR_SPACE_YCBCR709_LIMITED:
case COLOR_SPACE_YCBCR709_BLACK:
misc0 = misc0 | 0x18; /* bit3=1, bit4=1 */ misc0 = misc0 | 0x18; /* bit3=1, bit4=1 */
misc1 = misc1 & ~0x80; /* bit7 = 0*/ misc1 = misc1 & ~0x80; /* bit7 = 0*/
dynamic_range_ycbcr = 1; /*bt709*/ dynamic_range_ycbcr = 1; /*bt709*/
......
...@@ -415,6 +415,7 @@ void enc1_stream_encoder_dp_set_stream_attribute( ...@@ -415,6 +415,7 @@ void enc1_stream_encoder_dp_set_stream_attribute(
case COLOR_SPACE_APPCTRL: case COLOR_SPACE_APPCTRL:
case COLOR_SPACE_CUSTOMPOINTS: case COLOR_SPACE_CUSTOMPOINTS:
case COLOR_SPACE_UNKNOWN: case COLOR_SPACE_UNKNOWN:
case COLOR_SPACE_YCBCR709_BLACK:
/* do nothing */ /* do nothing */
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment