Prefer using the struct drm_edid based callback.

v2: Fix build (goto out;)

Signed-off-by: Jani Nikula <jani.nik...@intel.com>
---
 drivers/gpu/drm/bridge/analogix/anx7625.c | 30 ++++++++---------------
 1 file changed, 10 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c 
b/drivers/gpu/drm/bridge/analogix/anx7625.c
index ef31033439bc..25f7afa408c2 100644
--- a/drivers/gpu/drm/bridge/analogix/anx7625.c
+++ b/drivers/gpu/drm/bridge/analogix/anx7625.c
@@ -1782,24 +1782,14 @@ static ssize_t anx7625_aux_transfer(struct drm_dp_aux 
*aux,
        return ret;
 }
 
-static struct edid *anx7625_get_edid(struct anx7625_data *ctx)
+static const struct drm_edid *anx7625_edid_read(struct anx7625_data *ctx)
 {
        struct device *dev = ctx->dev;
        struct s_edid_data *p_edid = &ctx->slimport_edid_p;
        int edid_num;
-       u8 *edid;
 
-       edid = kmalloc(FOUR_BLOCK_SIZE, GFP_KERNEL);
-       if (!edid) {
-               DRM_DEV_ERROR(dev, "Fail to allocate buffer\n");
-               return NULL;
-       }
-
-       if (ctx->slimport_edid_p.edid_block_num > 0) {
-               memcpy(edid, ctx->slimport_edid_p.edid_raw_data,
-                      FOUR_BLOCK_SIZE);
-               return (struct edid *)edid;
-       }
+       if (ctx->slimport_edid_p.edid_block_num > 0)
+               goto out;
 
        pm_runtime_get_sync(dev);
        _anx7625_hpd_polling(ctx, 5000 * 100);
@@ -1808,14 +1798,14 @@ static struct edid *anx7625_get_edid(struct 
anx7625_data *ctx)
 
        if (edid_num < 1) {
                DRM_DEV_ERROR(dev, "Fail to read EDID: %d\n", edid_num);
-               kfree(edid);
                return NULL;
        }
 
        p_edid->edid_block_num = edid_num;
 
-       memcpy(edid, ctx->slimport_edid_p.edid_raw_data, FOUR_BLOCK_SIZE);
-       return (struct edid *)edid;
+out:
+       return drm_edid_alloc(ctx->slimport_edid_p.edid_raw_data,
+                             FOUR_BLOCK_SIZE);
 }
 
 static enum drm_connector_status anx7625_sink_detect(struct anx7625_data *ctx)
@@ -2488,15 +2478,15 @@ anx7625_bridge_detect(struct drm_bridge *bridge)
        return anx7625_sink_detect(ctx);
 }
 
-static struct edid *anx7625_bridge_get_edid(struct drm_bridge *bridge,
-                                           struct drm_connector *connector)
+static const struct drm_edid *anx7625_bridge_edid_read(struct drm_bridge 
*bridge,
+                                                      struct drm_connector 
*connector)
 {
        struct anx7625_data *ctx = bridge_to_anx7625(bridge);
        struct device *dev = ctx->dev;
 
        DRM_DEV_DEBUG_DRIVER(dev, "drm bridge get edid\n");
 
-       return anx7625_get_edid(ctx);
+       return anx7625_edid_read(ctx);
 }
 
 static const struct drm_bridge_funcs anx7625_bridge_funcs = {
@@ -2511,7 +2501,7 @@ static const struct drm_bridge_funcs anx7625_bridge_funcs 
= {
        .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
        .atomic_reset = drm_atomic_helper_bridge_reset,
        .detect = anx7625_bridge_detect,
-       .get_edid = anx7625_bridge_get_edid,
+       .edid_read = anx7625_bridge_edid_read,
 };
 
 static int anx7625_register_i2c_dummy_clients(struct anx7625_data *ctx,
-- 
2.39.2

Reply via email to