From 3282baae4b9ae0ffaf102a8aa44ae04639573d21 Mon Sep 17 00:00:00 2001 From: Sylvia Tsai Date: Tue, 4 Apr 2017 17:28:17 -0400 Subject: [PATCH 0338/4131] 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 --- drivers/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 069f588..2d40864 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 a27a6ab..97af8f6 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.7.4