drm/amd/display: fix dc_get_edp_link_panel_inst to only consider links with panels
authorDmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Tue, 6 Dec 2022 15:06:14 +0000 (10:06 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 3 Jan 2023 21:57:57 +0000 (16:57 -0500)
This function is meant to be used on multi-edp systems and only makes sense
if only links with connected panels are considered.

Acked-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dc_link.h

index 2e18bcf..8565bbb 100644 (file)
@@ -335,15 +335,18 @@ static inline bool dc_get_edp_link_panel_inst(const struct dc *dc,
                unsigned int *inst_out)
 {
        struct dc_link *edp_links[MAX_NUM_EDP];
-       int edp_num;
+       int edp_num, i;
 
-       if (link->connector_signal != SIGNAL_TYPE_EDP)
+       *inst_out = 0;
+       if (link->connector_signal != SIGNAL_TYPE_EDP || !link->local_sink)
                return false;
        get_edp_links(dc, edp_links, &edp_num);
-       if ((edp_num > 1) && (link->link_index > edp_links[0]->link_index))
-               *inst_out = 1;
-       else
-               *inst_out = 0;
+       for (i = 0; i < edp_num; i++) {
+               if (link == edp_links[i])
+                       break;
+               if (edp_links[i]->local_sink)
+                       (*inst_out)++;
+       }
        return true;
 }