drm/rockchip: cdn-dp: switch to struct drm_edid
authorJani Nikula <jani.nikula@intel.com>
Tue, 16 Apr 2024 13:22:27 +0000 (16:22 +0300)
committerJani Nikula <jani.nikula@intel.com>
Mon, 22 Apr 2024 18:44:31 +0000 (21:44 +0300)
Prefer struct drm_edid based functions over struct edid.

Acked-by: Heiko Stuebner <heiko@sntech.de>
Link: https://patchwork.freedesktop.org/patch/msgid/59d2feb9f8b28d1a1cf49077a35941aa9b3d36af.1713273659.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/rockchip/cdn-dp-core.c
drivers/gpu/drm/rockchip/cdn-dp-core.h

index 419542c66b536f2e2c0b5235163b3b989dd36d9c..bd7aa891b839d1566ccf1f4eebb738e436fa5b31 100644 (file)
@@ -262,20 +262,21 @@ static const struct drm_connector_funcs cdn_dp_atomic_connector_funcs = {
 static int cdn_dp_connector_get_modes(struct drm_connector *connector)
 {
        struct cdn_dp_device *dp = connector_to_dp(connector);
-       struct edid *edid;
        int ret = 0;
 
        mutex_lock(&dp->lock);
-       edid = dp->edid;
-       if (edid) {
+
+       if (dp->drm_edid) {
+               /* FIXME: get rid of drm_edid_raw() */
+               const struct edid *edid = drm_edid_raw(dp->drm_edid);
+
                DRM_DEV_DEBUG_KMS(dp->dev, "got edid: width[%d] x height[%d]\n",
                                  edid->width_cm, edid->height_cm);
 
-               dp->sink_has_audio = drm_detect_monitor_audio(edid);
-
-               drm_connector_update_edid_property(connector, edid);
-               ret = drm_add_edid_modes(connector, edid);
        }
+
+       ret = drm_edid_connector_add_modes(connector);
+
        mutex_unlock(&dp->lock);
 
        return ret;
@@ -380,9 +381,13 @@ static int cdn_dp_get_sink_capability(struct cdn_dp_device *dp)
                return ret;
        }
 
-       kfree(dp->edid);
-       dp->edid = drm_do_get_edid(&dp->connector,
-                                  cdn_dp_get_edid_block, dp);
+       drm_edid_free(dp->drm_edid);
+       dp->drm_edid = drm_edid_read_custom(&dp->connector,
+                                           cdn_dp_get_edid_block, dp);
+       drm_edid_connector_update(&dp->connector, dp->drm_edid);
+
+       dp->sink_has_audio = dp->connector.display_info.has_audio;
+
        return 0;
 }
 
@@ -488,8 +493,8 @@ static int cdn_dp_disable(struct cdn_dp_device *dp)
        dp->max_lanes = 0;
        dp->max_rate = 0;
        if (!dp->connected) {
-               kfree(dp->edid);
-               dp->edid = NULL;
+               drm_edid_free(dp->drm_edid);
+               dp->drm_edid = NULL;
        }
 
        return 0;
@@ -1131,8 +1136,8 @@ static void cdn_dp_unbind(struct device *dev, struct device *master, void *data)
        pm_runtime_disable(dev);
        if (dp->fw_loaded)
                release_firmware(dp->fw);
-       kfree(dp->edid);
-       dp->edid = NULL;
+       drm_edid_free(dp->drm_edid);
+       dp->drm_edid = NULL;
 }
 
 static const struct component_ops cdn_dp_component_ops = {
index 5b2fed1f5f552a2bb58026d9f8cdbba49240a8fc..8e6e95d269da6e659994b76361723ebf19a05618 100644 (file)
@@ -70,7 +70,7 @@ struct cdn_dp_device {
        struct drm_display_mode mode;
        struct platform_device *audio_pdev;
        struct work_struct event_work;
-       struct edid *edid;
+       const struct drm_edid *drm_edid;
 
        struct mutex lock;
        bool connected;