OSDN Git Service

drm/amd/display: assign edid_blob_ptr with edid from debugfs
authorHersen Wu <hersenxs.wu@amd.com>
Tue, 4 Apr 2023 17:44:18 +0000 (13:44 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 24 Apr 2023 22:31:54 +0000 (18:31 -0400)
[Why] implementation change of drm_edid_override_set since linux
kernel 6.1, edid from debugfs is saved into connector->edid_override
immediatey, not saved to connector->edid_blob_ptr at the same time.

[How] call new drm_edid function drm_connector_update_edid_property
to assign connector->edid_blob_ptr with override edid from debugfs.

Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Reviewed-by: Chao-kai Wang <Stylon.Wang@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Hersen Wu <hersenxs.wu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 8a3c04f..deb7404 100644 (file)
@@ -6373,11 +6373,20 @@ static void create_eml_sink(struct amdgpu_dm_connector *aconnector)
        struct edid *edid;
 
        if (!aconnector->base.edid_blob_ptr) {
-               DRM_ERROR("No EDID firmware found on connector: %s ,forcing to OFF!\n",
-                               aconnector->base.name);
+               /* if connector->edid_override valid, pass
+                * it to edid_override to edid_blob_ptr
+                */
+               int count;
 
-               aconnector->base.force = DRM_FORCE_OFF;
-               return;
+               count = drm_edid_override_connector_update(&aconnector->base);
+
+               if (!aconnector->base.edid_blob_ptr) {
+                       DRM_ERROR("No EDID firmware found on connector: %s ,forcing to OFF!\n",
+                                       aconnector->base.name);
+
+                       aconnector->base.force = DRM_FORCE_OFF;
+                       return;
+               }
        }
 
        edid = (struct edid *) aconnector->base.edid_blob_ptr->data;