Use the pre-existing implementation in the BIOS parser, but call
the ExternalEncoderControl function for external encoders instead
of the built-in DAC load detection function.

Signed-off-by: Timur Kristóf <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/bios/bios_parser.c     | 11 ++++++++++-
 drivers/gpu/drm/amd/display/dc/dc_bios_types.h        |  3 ++-
 .../gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c |  3 ++-
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c 
b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
index 82877f7b3b6f..f56f3ee81a22 100644
--- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
+++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
@@ -794,11 +794,13 @@ static enum bp_result 
bios_parser_external_encoder_control(
 
 static enum bp_result bios_parser_dac_load_detection(
        struct dc_bios *dcb,
-       enum engine_id engine_id)
+       enum engine_id engine_id,
+       struct graphics_object_id ext_enc_id)
 {
        struct bios_parser *bp = BP_FROM_DCB(dcb);
        struct dc_context *ctx = dcb->ctx;
        struct bp_load_detection_parameters bp_params = {0};
+       struct bp_external_encoder_control ext_cntl = {0};
        enum bp_result bp_result = BP_RESULT_UNSUPPORTED;
        uint32_t bios_0_scratch;
        uint32_t device_id_mask = 0;
@@ -824,6 +826,13 @@ static enum bp_result bios_parser_dac_load_detection(
 
                bp_params.engine_id = engine_id;
                bp_result = bp->cmd_tbl.dac_load_detection(bp, &bp_params);
+       } else if (ext_enc_id.id) {
+               if (!bp->cmd_tbl.external_encoder_control)
+                       return BP_RESULT_UNSUPPORTED;
+
+               ext_cntl.action = EXTERNAL_ENCODER_CONTROL_DAC_LOAD_DETECT;
+               ext_cntl.encoder_id = ext_enc_id;
+               bp_result = bp->cmd_tbl.external_encoder_control(bp, &ext_cntl);
        }
 
        if (bp_result != BP_RESULT_OK)
diff --git a/drivers/gpu/drm/amd/display/dc/dc_bios_types.h 
b/drivers/gpu/drm/amd/display/dc/dc_bios_types.h
index 6f96c5cf39fe..526f71616f94 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_bios_types.h
+++ b/drivers/gpu/drm/amd/display/dc/dc_bios_types.h
@@ -102,7 +102,8 @@ struct dc_vbios_funcs {
                struct bp_external_encoder_control *cntl);
        enum bp_result (*dac_load_detection)(
                struct dc_bios *bios,
-               enum engine_id engine_id);
+               enum engine_id engine_id,
+               struct graphics_object_id ext_enc_id);
        enum bp_result (*transmitter_control)(
                struct dc_bios *bios,
                struct bp_transmitter_control *cntl);
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c 
b/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
index 3f5c833ce18a..83d43b62747d 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
@@ -723,7 +723,8 @@ dce110_dac_load_detect(struct dc_link *link)
        struct link_encoder *link_enc = link->link_enc;
        enum bp_result bp_result = BP_RESULT_FAILURE;
 
-       bp_result = bios->funcs->dac_load_detection(bios, 
link_enc->analog_engine);
+       bp_result = bios->funcs->dac_load_detection(
+                       bios, link_enc->analog_engine, link->ext_enc_id);
        return bp_result == BP_RESULT_OK;
 }
 
-- 
2.52.0

Reply via email to