From: Taimur Hassan <[email protected]>

[Why]
DPCD read is skipped first time after driver initialization.

Reviewed-by: Charlene Liu <[email protected]>
Acked-by: Alex Hung <[email protected]>
Signed-off-by: Taimur Hassan <[email protected]>
---
 .../link/protocols/link_edp_panel_control.c   | 49 +++++++++----------
 1 file changed, 24 insertions(+), 25 deletions(-)

diff --git 
a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c 
b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
index 5add2360fc94..8b360c09e0e8 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
@@ -46,43 +46,42 @@ void dp_set_panel_mode(struct dc_link *link, enum 
dp_panel_mode panel_mode)
 {
        union dpcd_edp_config edp_config_set;
        bool panel_mode_edp = false;
+       enum dc_status result;
 
        memset(&edp_config_set, '\0', sizeof(union dpcd_edp_config));
 
-       if (panel_mode != DP_PANEL_MODE_DEFAULT) {
+       switch (panel_mode) {
+       case DP_PANEL_MODE_EDP:
+       case DP_PANEL_MODE_SPECIAL:
+               panel_mode_edp = true;
+               break;
 
-               switch (panel_mode) {
-               case DP_PANEL_MODE_EDP:
-               case DP_PANEL_MODE_SPECIAL:
-                       panel_mode_edp = true;
-                       break;
+       default:
+               break;
+       }
 
-               default:
-                               break;
-               }
+       /*set edp panel mode in receiver*/
+       result = core_link_read_dpcd(
+               link,
+               DP_EDP_CONFIGURATION_SET,
+               &edp_config_set.raw,
+               sizeof(edp_config_set.raw));
+
+       if (result == DC_OK &&
+               edp_config_set.bits.PANEL_MODE_EDP
+               != panel_mode_edp) {
 
-               /*set edp panel mode in receiver*/
-               core_link_read_dpcd(
+               edp_config_set.bits.PANEL_MODE_EDP =
+               panel_mode_edp;
+               result = core_link_write_dpcd(
                        link,
                        DP_EDP_CONFIGURATION_SET,
                        &edp_config_set.raw,
                        sizeof(edp_config_set.raw));
 
-               if (edp_config_set.bits.PANEL_MODE_EDP
-                       != panel_mode_edp) {
-                       enum dc_status result;
-
-                       edp_config_set.bits.PANEL_MODE_EDP =
-                       panel_mode_edp;
-                       result = core_link_write_dpcd(
-                               link,
-                               DP_EDP_CONFIGURATION_SET,
-                               &edp_config_set.raw,
-                               sizeof(edp_config_set.raw));
-
-                       ASSERT(result == DC_OK);
-               }
+               ASSERT(result == DC_OK);
        }
+
        link->panel_mode = panel_mode;
        DC_LOG_DETECTION_DP_CAPS("Link: %d eDP panel mode supported: %d "
                 "eDP panel mode enabled: %d \n",
-- 
2.41.0

Reply via email to