From 8b32076c27227cf5bed0c925c7a1a9680748424a Mon Sep 17 00:00:00 2001 From: Sylvia Tsai Date: Tue, 4 Apr 2017 17:28:17 -0400 Subject: [PATCH] drm/amd/display: Adding dm controlled signal type in dc_stream - Adding dm controlled signal type in dc_stream - Adding fallback to dvi signal when output signal is hdmi and the connector type is not Signed-off-by: Sylvia Tsai Acked-by: Harry Wentland Reviewed-by: Sylvia Tsai Signed-off-by: Alex Deucher --- .../gpu/drm/amd/display/dc/core/dc_resource.c | 30 +++++++++---------- drivers/gpu/drm/amd/display/dc/dc.h | 1 + 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c index 069f588a9e02..2d40864b7b48 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c @@ -1237,22 +1237,22 @@ static struct audio *find_first_free_audio(struct resource_context *res_ctx) static void update_stream_signal(struct core_stream *stream) { - const struct dc_sink *dc_sink = stream->public.sink; - - if (dc_sink->sink_signal == SIGNAL_TYPE_NONE) - stream->signal = stream->sink->link->public.connector_signal; - else if (dc_sink->sink_signal == SIGNAL_TYPE_DVI_SINGLE_LINK || - dc_sink->sink_signal == SIGNAL_TYPE_DVI_DUAL_LINK) - /* For asic supports dual link DVI, we should adjust signal type - * based on timing pixel clock. If pixel clock more than 165Mhz, - * signal is dual link, otherwise, single link. - */ - if (stream->public.timing.pix_clk_khz > TMDS_MAX_PIXEL_CLOCK_IN_KHZ) - stream->signal = SIGNAL_TYPE_DVI_DUAL_LINK; + if (stream->public.output_signal == SIGNAL_TYPE_NONE) { + const struct dc_sink *dc_sink = stream->public.sink; + + if (dc_sink->sink_signal == SIGNAL_TYPE_NONE) + stream->signal = + stream->sink->link-> + public.connector_signal; else - stream->signal = SIGNAL_TYPE_DVI_SINGLE_LINK; - else - stream->signal = dc_sink->sink_signal; + stream->signal = dc_sink->sink_signal; + } else { + stream->signal = stream->public.output_signal; + } + + if (stream->signal == SIGNAL_TYPE_DVI_SINGLE_LINK && + stream->public.timing.pix_clk_khz > TMDS_MAX_PIXEL_CLOCK_IN_KHZ) + stream->signal = SIGNAL_TYPE_DVI_DUAL_LINK; } bool resource_is_stream_unchanged( diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h index a27a6aba0df1..97af8f63eec3 100644 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h @@ -411,6 +411,7 @@ enum surface_update_type { struct dc_stream { const struct dc_sink *sink; struct dc_crtc_timing timing; + enum signal_type output_signal; enum dc_color_space output_color_space; -- 2.45.2