]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amdgpu/amdgpu_connectors: use struct drm_edid instead of struct edid
authorJoshua Peisach <jpeisach@ubuntu.com>
Tue, 3 Mar 2026 21:18:22 +0000 (16:18 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 6 Mar 2026 21:32:27 +0000 (16:32 -0500)
Some amdgpu code is still using deprecated edid functions. Switch to
the newer functions and update the amdgpu_connector struct's edid type
to the drm_edid type.

At the same time, use the raw EDID when we need to for speaker
allocations and for determining if the input is digital.

Signed-off-by: Joshua Peisach <jpeisach@ubuntu.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
drivers/gpu/drm/amd/amdgpu/dce_v8_0.c

index d1bf2e150c1ad3a6722862b5845803831082ea7f..6336cadad164b0b2bba55b1a12ef95766596b0fb 100644 (file)
@@ -246,10 +246,10 @@ amdgpu_connector_find_encoder(struct drm_connector *connector,
        return NULL;
 }
 
-static struct edid *
+static const struct drm_edid *
 amdgpu_connector_get_hardcoded_edid(struct amdgpu_device *adev)
 {
-       return drm_edid_duplicate(drm_edid_raw(adev->mode_info.bios_hardcoded_edid));
+       return drm_edid_dup(adev->mode_info.bios_hardcoded_edid);
 }
 
 static void amdgpu_connector_get_edid(struct drm_connector *connector)
@@ -268,8 +268,8 @@ static void amdgpu_connector_get_edid(struct drm_connector *connector)
        if ((amdgpu_connector_encoder_get_dp_bridge_encoder_id(connector) !=
             ENCODER_OBJECT_ID_NONE) &&
            amdgpu_connector->ddc_bus->has_aux) {
-               amdgpu_connector->edid = drm_get_edid(connector,
-                                                     &amdgpu_connector->ddc_bus->aux.ddc);
+               amdgpu_connector->edid = drm_edid_read_ddc(connector,
+                                                         &amdgpu_connector->ddc_bus->aux.ddc);
        } else if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
                   (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) {
                struct amdgpu_connector_atom_dig *dig = amdgpu_connector->con_priv;
@@ -277,14 +277,14 @@ static void amdgpu_connector_get_edid(struct drm_connector *connector)
                if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT ||
                     dig->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) &&
                    amdgpu_connector->ddc_bus->has_aux)
-                       amdgpu_connector->edid = drm_get_edid(connector,
-                                                             &amdgpu_connector->ddc_bus->aux.ddc);
+                       amdgpu_connector->edid = drm_edid_read_ddc(connector,
+                                                                 &amdgpu_connector->ddc_bus->aux.ddc);
                else if (amdgpu_connector->ddc_bus)
-                       amdgpu_connector->edid = drm_get_edid(connector,
-                                                             &amdgpu_connector->ddc_bus->adapter);
+                       amdgpu_connector->edid = drm_edid_read_ddc(connector,
+                                                                 &amdgpu_connector->ddc_bus->adapter);
        } else if (amdgpu_connector->ddc_bus) {
-               amdgpu_connector->edid = drm_get_edid(connector,
-                                                     &amdgpu_connector->ddc_bus->adapter);
+               amdgpu_connector->edid = drm_edid_read_ddc(connector,
+                                                         &amdgpu_connector->ddc_bus->adapter);
        }
 
        if (!amdgpu_connector->edid) {
@@ -292,7 +292,7 @@ static void amdgpu_connector_get_edid(struct drm_connector *connector)
                if (((connector->connector_type == DRM_MODE_CONNECTOR_LVDS) ||
                     (connector->connector_type == DRM_MODE_CONNECTOR_eDP))) {
                        amdgpu_connector->edid = amdgpu_connector_get_hardcoded_edid(adev);
-                       drm_connector_update_edid_property(connector, amdgpu_connector->edid);
+                       drm_edid_connector_update(connector, amdgpu_connector->edid);
                }
        }
 }
@@ -311,11 +311,11 @@ static int amdgpu_connector_ddc_get_modes(struct drm_connector *connector)
        int ret;
 
        if (amdgpu_connector->edid) {
-               drm_connector_update_edid_property(connector, amdgpu_connector->edid);
-               ret = drm_add_edid_modes(connector, amdgpu_connector->edid);
+               drm_edid_connector_update(connector, amdgpu_connector->edid);
+               ret = drm_edid_connector_add_modes(connector);
                return ret;
        }
-       drm_connector_update_edid_property(connector, NULL);
+       drm_edid_connector_update(connector, NULL);
        return 0;
 }
 
@@ -883,7 +883,7 @@ amdgpu_connector_vga_detect(struct drm_connector *connector, bool force)
                        ret = connector_status_connected;
                } else {
                        amdgpu_connector->use_digital =
-                               !!(amdgpu_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
+                               drm_edid_is_digital(amdgpu_connector->edid);
 
                        /* some oems have boards with separate digital and analog connectors
                         * with a shared ddc line (often vga + hdmi)
@@ -1063,7 +1063,7 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)
                        broken_edid = true; /* defer use_digital to later */
                } else {
                        amdgpu_connector->use_digital =
-                               !!(amdgpu_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
+                               drm_edid_is_digital(amdgpu_connector->edid);
 
                        /* some oems have boards with separate digital and analog connectors
                         * with a shared ddc line (often vga + hdmi)
index dc8d2f52c7d615a94a294929ae680560fb04bf60..c4e0255814e0be408f676f14a3a212b275059a9e 100644 (file)
@@ -624,7 +624,7 @@ struct amdgpu_connector {
        bool use_digital;
        /* we need to mind the EDID between detect
           and get modes due to analog/digital/tvencoder */
-       struct edid *edid;
+       const struct drm_edid *edid;
        void *con_priv;
        bool dac_load_detect;
        bool detected_by_load; /* if the connection status was determined by load */
index f1052acea5ecc39f210294d21b970ff05e034da2..c8f465158e7110e46cb1e77242c186abc6e9c022 100644 (file)
@@ -1298,7 +1298,7 @@ static void dce_v10_0_audio_write_speaker_allocation(struct drm_encoder *encoder
                return;
        }
 
-       sad_count = drm_edid_to_speaker_allocation(amdgpu_connector->edid, &sadb);
+       sad_count = drm_edid_to_speaker_allocation(drm_edid_raw(amdgpu_connector->edid), &sadb);
        if (sad_count < 0) {
                DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
                sad_count = 0;
@@ -1368,7 +1368,7 @@ static void dce_v10_0_audio_write_sad_regs(struct drm_encoder *encoder)
                return;
        }
 
-       sad_count = drm_edid_to_sad(amdgpu_connector->edid, &sads);
+       sad_count = drm_edid_to_sad(drm_edid_raw(amdgpu_connector->edid), &sads);
        if (sad_count < 0)
                DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
        if (sad_count <= 0)
index c153a6e1e22a931b62fc81e16f32d8ba0d5256e1..58d0da5c2a74fd45a7f0cfbbcb39690b6597ada5 100644 (file)
@@ -1265,7 +1265,7 @@ static void dce_v6_0_audio_write_speaker_allocation(struct drm_encoder *encoder)
                return;
        }
 
-       sad_count = drm_edid_to_speaker_allocation(amdgpu_connector->edid, &sadb);
+       sad_count = drm_edid_to_speaker_allocation(drm_edid_raw(amdgpu_connector->edid), &sadb);
        if (sad_count < 0) {
                DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
                sad_count = 0;
@@ -1346,7 +1346,7 @@ static void dce_v6_0_audio_write_sad_regs(struct drm_encoder *encoder)
                return;
        }
 
-       sad_count = drm_edid_to_sad(amdgpu_connector->edid, &sads);
+       sad_count = drm_edid_to_sad(drm_edid_raw(amdgpu_connector->edid), &sads);
        if (sad_count < 0)
                DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
        if (sad_count <= 0)
index a85a9e32fde48d746dee1093cc7578b8522b3add..6d19f6d94d2527f282ff8f6122a427539b614cf2 100644 (file)
@@ -1271,7 +1271,7 @@ static void dce_v8_0_audio_write_speaker_allocation(struct drm_encoder *encoder)
                return;
        }
 
-       sad_count = drm_edid_to_speaker_allocation(amdgpu_connector->edid, &sadb);
+       sad_count = drm_edid_to_speaker_allocation(drm_edid_raw(amdgpu_connector->edid), &sadb);
        if (sad_count < 0) {
                DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
                sad_count = 0;
@@ -1339,7 +1339,7 @@ static void dce_v8_0_audio_write_sad_regs(struct drm_encoder *encoder)
                return;
        }
 
-       sad_count = drm_edid_to_sad(amdgpu_connector->edid, &sads);
+       sad_count = drm_edid_to_sad(drm_edid_raw(amdgpu_connector->edid), &sads);
        if (sad_count < 0)
                DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
        if (sad_count <= 0)