Wire up the newly parsed did_panel_type from drm_display_info into
amdgpu_dm's panel type detection path. When neither the AMD VSDB
nor DPCD determines the panel type, fall back to the DisplayID
Display Device Technology field to set PANEL_TYPE_LCD or
PANEL_TYPE_OLED accordingly.

Assisted-by: Copilot:Claude-Opus-4.6
Signed-off-by: Chenyu Chen <[email protected]>
Reviewed-by: Mario Limonciello <[email protected]>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index e42a5eecdf46..353a4982333d 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -3944,11 +3944,13 @@ static void dm_set_panel_type(struct 
amdgpu_dm_connector *aconnector)
                        link->panel_type = PANEL_TYPE_OLED;
        }
 
-       /*
-        * TODO: get panel type from DID2 that has device technology field
-        * to specify if it's OLED or not. But we need to wait for DID2
-        * support in DC and EDID parser to be able to use it here.
-        */
+       /* If VSDB and DPCD didn't determine panel type, check DID */
+       if (link->panel_type == PANEL_TYPE_NONE) {
+               if (display_info->did_panel_type == DRM_MODE_PANEL_TYPE_LCD)
+                       link->panel_type = PANEL_TYPE_LCD;
+               else if (display_info->did_panel_type == 
DRM_MODE_PANEL_TYPE_OLED)
+                       link->panel_type = PANEL_TYPE_OLED;
+       }
 
        if (link->panel_type == PANEL_TYPE_NONE) {
                struct drm_amd_vsdb_info *vsdb = &display_info->amd_vsdb;
-- 
2.43.0

Reply via email to