drm/edid: add a helper for EDID sysfs property show
authorJani Nikula <jani.nikula@intel.com>
Fri, 10 May 2024 15:08:12 +0000 (18:08 +0300)
committerJani Nikula <jani.nikula@intel.com>
Thu, 23 May 2024 11:37:24 +0000 (14:37 +0300)
Add a helper to get the EDID property for sysfs property show. This
hides all the edid_blob_ptr usage within drm_edid.c.

Reviewed-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/902c8e09d25b99391fd9c92d95af07c01d7b7cbd.1715353572.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/drm_crtc_internal.h
drivers/gpu/drm/drm_edid.c
drivers/gpu/drm/drm_sysfs.c

index 25aaae937ceb2463026f28a5eb3cba2d5e7b56fb..20e9d7b206a21aff041bff7559d63509b0dd8357 100644 (file)
@@ -303,6 +303,8 @@ const u8 *drm_edid_find_extension(const struct drm_edid *drm_edid,
                                  int ext_id, int *ext_index);
 void drm_edid_cta_sad_get(const struct cea_sad *cta_sad, u8 *sad);
 void drm_edid_cta_sad_set(struct cea_sad *cta_sad, const u8 *sad);
+ssize_t drm_edid_connector_property_show(struct drm_connector *connector,
+                                        char *buf, loff_t off, size_t count);
 
 /* drm_edid_load.c */
 #ifdef CONFIG_DRM_LOAD_EDID_FIRMWARE
index 0f7c4c5b14b9a2627d862d6bd64ad2034ea96358..f68a41eeb1fa80e4e6544eb8b484cd9bff268f3d 100644 (file)
@@ -6941,6 +6941,39 @@ out:
        return ret;
 }
 
+/* For sysfs edid show implementation */
+ssize_t drm_edid_connector_property_show(struct drm_connector *connector,
+                                        char *buf, loff_t off, size_t count)
+{
+       const void *edid;
+       size_t size;
+       ssize_t ret = 0;
+
+       mutex_lock(&connector->dev->mode_config.mutex);
+
+       if (!connector->edid_blob_ptr)
+               goto unlock;
+
+       edid = connector->edid_blob_ptr->data;
+       size = connector->edid_blob_ptr->length;
+       if (!edid)
+               goto unlock;
+
+       if (off >= size)
+               goto unlock;
+
+       if (off + count > size)
+               count = size - off;
+
+       memcpy(buf, edid + off, count);
+
+       ret = count;
+unlock:
+       mutex_unlock(&connector->dev->mode_config.mutex);
+
+       return ret;
+}
+
 /**
  * drm_edid_connector_update - Update connector information from EDID
  * @connector: Connector
index bd9b8ab4f82b521536981027a2c21abaaf4b4d27..fb3bbb6adcd16f3f325a2ae8e35f41851c00b272 100644 (file)
@@ -266,29 +266,9 @@ static ssize_t edid_show(struct file *filp, struct kobject *kobj,
 {
        struct device *connector_dev = kobj_to_dev(kobj);
        struct drm_connector *connector = to_drm_connector(connector_dev);
-       unsigned char *edid;
-       size_t size;
-       ssize_t ret = 0;
+       ssize_t ret;
 
-       mutex_lock(&connector->dev->mode_config.mutex);
-       if (!connector->edid_blob_ptr)
-               goto unlock;
-
-       edid = connector->edid_blob_ptr->data;
-       size = connector->edid_blob_ptr->length;
-       if (!edid)
-               goto unlock;
-
-       if (off >= size)
-               goto unlock;
-
-       if (off + count > size)
-               count = size - off;
-       memcpy(buf, edid + off, count);
-
-       ret = count;
-unlock:
-       mutex_unlock(&connector->dev->mode_config.mutex);
+       ret = drm_edid_connector_property_show(connector, buf, off, count);
 
        return ret;
 }