Original drm_edid_get_monitor_name encapsulates raw edid in drm_edid and
then call get_monitor_name. AMD still stores the display name for
debugging, but it is migrating to drm_edid, on the other hand,
drm_dp_mst_topology and sil-sii8620 still use the raw edid version.

Split drm_edid_get_monitor_name into two helpers, one that gets monitor
name from raw edid and another from drm_edid.

Signed-off-by: Melissa Wen <m...@igalia.com>
---
 .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c |  2 +-
 drivers/gpu/drm/bridge/sil-sii8620.c          |  2 +-
 drivers/gpu/drm/display/drm_dp_mst_topology.c |  2 +-
 drivers/gpu/drm/drm_edid.c                    | 33 ++++++++++++++-----
 include/drm/drm_edid.h                        |  7 ++--
 5 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
index b1085f1195f7..514da4d5d300 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
@@ -134,7 +134,7 @@ enum dc_edid_status dm_helpers_parse_edid_caps(
        edid_caps->manufacture_week = product_id.week_of_manufacture;
        edid_caps->manufacture_year = product_id.year_of_manufacture;
 
-       drm_edid_get_monitor_name(edid_buf,
+       drm_edid_get_monitor_name(drm_edid,
                                  edid_caps->display_name,
                                  AUDIO_INFO_DISPLAY_NAME_SIZE_IN_CHARS);
 
diff --git a/drivers/gpu/drm/bridge/sil-sii8620.c 
b/drivers/gpu/drm/bridge/sil-sii8620.c
index 28a2e1ee04b2..c2d60b9c28fd 100644
--- a/drivers/gpu/drm/bridge/sil-sii8620.c
+++ b/drivers/gpu/drm/bridge/sil-sii8620.c
@@ -505,7 +505,7 @@ static void sii8620_identify_sink(struct sii8620 *ctx)
        else
                ctx->sink_type = SINK_DVI;
 
-       drm_edid_get_monitor_name(ctx->edid, sink_name, ARRAY_SIZE(sink_name));
+       drm_edid_raw_get_monitor_name(ctx->edid, sink_name, 
ARRAY_SIZE(sink_name));
 
        dev_info(dev, "detected sink(type: %s): %s\n",
                 sink_str[ctx->sink_type], sink_name);
diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c 
b/drivers/gpu/drm/display/drm_dp_mst_topology.c
index 3a1f1ffc7b55..b17a602516ee 100644
--- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
@@ -4896,7 +4896,7 @@ static void fetch_monitor_name(struct 
drm_dp_mst_topology_mgr *mgr,
        struct edid *mst_edid;
 
        mst_edid = drm_dp_mst_get_edid(port->connector, mgr, port);
-       drm_edid_get_monitor_name(mst_edid, name, namelen);
+       drm_edid_raw_get_monitor_name(mst_edid, name, namelen);
        kfree(mst_edid);
 }
 
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 13bc4c290b17..6e4cffd467f1 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -5575,27 +5575,23 @@ static int get_monitor_name(const struct drm_edid 
*drm_edid, char name[13])
 }
 
 /**
- * drm_edid_get_monitor_name - fetch the monitor name from the edid
- * @edid: monitor EDID information
+ * drm_edid_get_monitor_name - fetch the monitor name from the drm_edid
+ * @drm_edid: EDID
  * @name: pointer to a character array to hold the name of the monitor
  * @bufsize: The size of the name buffer (should be at least 14 chars.)
  *
  */
-void drm_edid_get_monitor_name(const struct edid *edid, char *name, int 
bufsize)
+void drm_edid_get_monitor_name(const struct drm_edid *drm_edid, char *name, 
int bufsize)
 {
        int name_length = 0;
 
        if (bufsize <= 0)
                return;
 
-       if (edid) {
+       if (drm_edid->edid) {
                char buf[13];
-               struct drm_edid drm_edid = {
-                       .edid = edid,
-                       .size = edid_size(edid),
-               };
 
-               name_length = min(get_monitor_name(&drm_edid, buf), bufsize - 
1);
+               name_length = min(get_monitor_name(drm_edid, buf), bufsize - 1);
                memcpy(name, buf, name_length);
        }
 
@@ -5603,6 +5599,25 @@ void drm_edid_get_monitor_name(const struct edid *edid, 
char *name, int bufsize)
 }
 EXPORT_SYMBOL(drm_edid_get_monitor_name);
 
+/**
+ * drm_edid_raw_get_monitor_name - fetch the monitor name from raw edid
+ * @edid: monitor EDID information
+ * @name: pointer to a character array to hold the name of the monitor
+ * @bufsize: The size of the name buffer (should be at least 14 chars.)
+ *
+ */
+void drm_edid_raw_get_monitor_name(const struct edid *edid, char *name, int 
bufsize)
+{
+       struct drm_edid drm_edid = {
+               .edid = edid,
+               .size = edid ? edid_size(edid) : 0,
+       };
+
+       drm_edid_get_monitor_name(&drm_edid, name, bufsize);
+}
+EXPORT_SYMBOL(drm_edid_raw_get_monitor_name);
+
+
 static void clear_eld(struct drm_connector *connector)
 {
        mutex_lock(&connector->eld_mutex);
diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
index eaac5e665892..ceb522c4f4c2 100644
--- a/include/drm/drm_edid.h
+++ b/include/drm/drm_edid.h
@@ -441,8 +441,11 @@ int drm_add_modes_noedid(struct drm_connector *connector,
 
 int drm_edid_header_is_valid(const void *edid);
 bool drm_edid_is_valid(struct edid *edid);
-void drm_edid_get_monitor_name(const struct edid *edid, char *name,
-                              int buflen);
+void drm_edid_get_monitor_name(const struct drm_edid *drm_edid,
+                              char *name,
+                              int bufsize);
+void drm_edid_raw_get_monitor_name(const struct edid *edid, char *name,
+                                  int bufsize);
 struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev,
                                           int hsize, int vsize, int fresh,
                                           bool rb);
-- 
2.47.2

Reply via email to