Message ID | 902c8e09d25b99391fd9c92d95af07c01d7b7cbd.1715353572.git.jani.nikula@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups | expand |
> -----Original Message----- > From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf Of Jani > Nikula > Sent: Friday, May 10, 2024 8:38 PM > To: dri-devel@lists.freedesktop.org > Cc: amd-gfx@lists.freedesktop.org; nouveau@lists.freedesktop.org; intel- > gfx@lists.freedesktop.org; Nikula, Jani <jani.nikula@intel.com> > Subject: [RESEND 5/6] drm/edid: add a helper for EDID sysfs property show > > Add a helper to get the EDID property for sysfs property show. This hides all > the edid_blob_ptr usage within drm_edid.c. > > Signed-off-by: Jani Nikula <jani.nikula@intel.com> LGTM, Reviewed-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com> > --- > drivers/gpu/drm/drm_crtc_internal.h | 2 ++ > drivers/gpu/drm/drm_edid.c | 33 +++++++++++++++++++++++++++++ > drivers/gpu/drm/drm_sysfs.c | 24 ++------------------- > 3 files changed, 37 insertions(+), 22 deletions(-) > > diff --git a/drivers/gpu/drm/drm_crtc_internal.h > b/drivers/gpu/drm/drm_crtc_internal.h > index 25aaae937ceb..20e9d7b206a2 100644 > --- a/drivers/gpu/drm/drm_crtc_internal.h > +++ b/drivers/gpu/drm/drm_crtc_internal.h > @@ -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 > diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index > 4f54c91b31b2..97362dd2330b 100644 > --- a/drivers/gpu/drm/drm_edid.c > +++ b/drivers/gpu/drm/drm_edid.c > @@ -6969,6 +6969,39 @@ static int > _drm_edid_connector_property_update(struct drm_connector *connector, > 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 > diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c > index bd9b8ab4f82b..fb3bbb6adcd1 100644 > --- a/drivers/gpu/drm/drm_sysfs.c > +++ b/drivers/gpu/drm/drm_sysfs.c > @@ -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; > } > -- > 2.39.2
diff --git a/drivers/gpu/drm/drm_crtc_internal.h b/drivers/gpu/drm/drm_crtc_internal.h index 25aaae937ceb..20e9d7b206a2 100644 --- a/drivers/gpu/drm/drm_crtc_internal.h +++ b/drivers/gpu/drm/drm_crtc_internal.h @@ -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 diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 4f54c91b31b2..97362dd2330b 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -6969,6 +6969,39 @@ static int _drm_edid_connector_property_update(struct drm_connector *connector, 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 diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c index bd9b8ab4f82b..fb3bbb6adcd1 100644 --- a/drivers/gpu/drm/drm_sysfs.c +++ b/drivers/gpu/drm/drm_sysfs.c @@ -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; }
Add a helper to get the EDID property for sysfs property show. This hides all the edid_blob_ptr usage within drm_edid.c. Signed-off-by: Jani Nikula <jani.nikula@intel.com> --- drivers/gpu/drm/drm_crtc_internal.h | 2 ++ drivers/gpu/drm/drm_edid.c | 33 +++++++++++++++++++++++++++++ drivers/gpu/drm/drm_sysfs.c | 24 ++------------------- 3 files changed, 37 insertions(+), 22 deletions(-)