]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Refactor dc_link_aux_transfer_raw
authorMatthew Stewart <Matthew.Stewart2@amd.com>
Thu, 2 Apr 2026 21:42:54 +0000 (17:42 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 11 May 2026 20:10:41 +0000 (16:10 -0400)
[Why & How]
The logic for choosing between the dce_aux_transfer function variants is
moved into dce_aux.c rather than link_ddc.c.

The "dce_aux_transfer_with_retries" function now uses
dce_aux_transfer_raw in its implementation as the logic is equivalent.

Reviewed-by: Nevenko Stupar <nevenko.stupar@amd.com>
Reviewed-by: Gabe Teeger <gabe.teeger@amd.com>
Signed-off-by: Matthew Stewart <Matthew.Stewart2@amd.com>
Signed-off-by: James Lin <pinglei.lin@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/dce/dce_aux.c
drivers/gpu/drm/amd/display/dc/dce/dce_aux.h
drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c

index eee58f946fae0e298ca890669b778202fbd1cb63..181944ce77aba42e24380b8ff8450cbce5700c4b 100644 (file)
@@ -559,6 +559,18 @@ static enum i2caux_transaction_action i2caux_action_from_payload(struct aux_payl
 int dce_aux_transfer_raw(struct ddc_service *ddc,
                struct aux_payload *payload,
                enum aux_return_code_type *operation_result)
+{
+       if (ddc->ctx->dc->debug.enable_dmub_aux_for_legacy_ddc ||
+           !ddc->ddc_pin) {
+               return dce_aux_transfer_dmub_raw(ddc, payload, operation_result);
+       } else {
+               return dce_aux_transfer_raw_with_ddc_pin(ddc, payload, operation_result);
+       }
+}
+
+int dce_aux_transfer_raw_with_ddc_pin(struct ddc_service *ddc,
+               struct aux_payload *payload,
+               enum aux_return_code_type *operation_result)
 {
        struct ddc *ddc_pin = ddc->ddc_pin;
        struct dce_aux *aux_engine;
@@ -740,13 +752,7 @@ bool dce_aux_transfer_with_retries(struct ddc_service *ddc,
                if (payload->write)
                        dce_aux_log_payload("  write", payload->data, payload->length, 16);
 
-               /* Check whether aux to be processed via dmub or dcn directly */
-               if (ddc->ctx->dc->debug.enable_dmub_aux_for_legacy_ddc
-                       || ddc->ddc_pin == NULL) {
-                       ret = dce_aux_transfer_dmub_raw(ddc, payload, &operation_result);
-               } else {
-                       ret = dce_aux_transfer_raw(ddc, payload, &operation_result);
-               }
+               ret = dce_aux_transfer_raw(ddc, payload, &operation_result);
 
                DC_TRACE_LEVEL_MESSAGE(DAL_TRACE_LEVEL_INFORMATION,
                                        LOG_FLAG_I2cAux_DceAux,
index c850ed49281f3919e7dc9c7633db3796069dd400..8f474569401661c2441fd986fd2d4dfa737a4558 100644 (file)
@@ -304,6 +304,10 @@ int dce_aux_transfer_raw(struct ddc_service *ddc,
                struct aux_payload *cmd,
                enum aux_return_code_type *operation_result);
 
+int dce_aux_transfer_raw_with_ddc_pin(struct ddc_service *ddc,
+               struct aux_payload *cmd,
+               enum aux_return_code_type *operation_result);
+
 int dce_aux_transfer_dmub_raw(struct ddc_service *ddc,
                struct aux_payload *payload,
                enum aux_return_code_type *operation_result);
index 1bf0903a3cf8a15b0f957b973fbb32fd23451533..a0ea853f5f6457d33a10587afb0c8d32b29a408f 100644 (file)
@@ -401,12 +401,7 @@ int link_aux_transfer_raw(struct ddc_service *ddc,
                struct aux_payload *payload,
                enum aux_return_code_type *operation_result)
 {
-       if (ddc->ctx->dc->debug.enable_dmub_aux_for_legacy_ddc ||
-           !ddc->ddc_pin) {
-               return dce_aux_transfer_dmub_raw(ddc, payload, operation_result);
-       } else {
-               return dce_aux_transfer_raw(ddc, payload, operation_result);
-       }
+       return dce_aux_transfer_raw(ddc, payload, operation_result);
 }
 
 uint32_t link_get_fixed_vs_pe_retimer_write_address(struct dc_link *link)