On 8/7/2025 11:21 AM, Nautiyal, Ankit K wrote:
Hi Nemesa,

Patch looks good to me. Just a couple of minor suggestions in the inline comments for slight improvements in documentation.

Also, IMO,  drm_crtc might be better than drm-crtc in the subject line.

Reviewed-by: Ankit Nautiyal <ankit.k.nauti...@intel.com>


On 7/24/2025 7:15 PM, Nemesa Garg wrote:
Introduces the new crtc property "SHARPNESS_STRENGTH" that allows

`Introduce a new crtc property` ...

Missed to mention this earlier.

Regards,

Ankit

the user to set the intensity so as to get the sharpness effect.
The value of this property can be set from 0-255.
It is useful in scenario when the output is blurry and user
want to sharpen the pixels. User can increase/decrease the
sharpness level depending on the content displayed.

v2: Rename crtc property variable [Arun]
     Add modeset detail in uapi doc[Uma]
v3: Fix build issue

Signed-off-by: Nemesa Garg <nemesa.g...@intel.com>
---
  drivers/gpu/drm/drm_atomic_uapi.c |  4 ++++
  drivers/gpu/drm/drm_crtc.c        | 35 +++++++++++++++++++++++++++++++
  include/drm/drm_crtc.h            | 17 +++++++++++++++
  3 files changed, 56 insertions(+)

diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
index ecc73d52bfae..2302c2bea28a 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -419,6 +419,8 @@ static int drm_atomic_crtc_set_property(struct drm_crtc *crtc,
          set_out_fence_for_crtc(state->state, crtc, fence_ptr);
      } else if (property == crtc->scaling_filter_property) {
          state->scaling_filter = val;
+    } else if (property == crtc->sharpness_strength_property) {
+        state->sharpness_strength = val;
      } else if (crtc->funcs->atomic_set_property) {
          return crtc->funcs->atomic_set_property(crtc, state, property, val);
      } else {
@@ -456,6 +458,8 @@ drm_atomic_crtc_get_property(struct drm_crtc *crtc,
          *val = 0;
      else if (property == crtc->scaling_filter_property)
          *val = state->scaling_filter;
+    else if (property == crtc->sharpness_strength_property)
+        *val = state->sharpness_strength;
      else if (crtc->funcs->atomic_get_property)
          return crtc->funcs->atomic_get_property(crtc, state, property, val);
      else {
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 46655339003d..1b7ce99cea5e 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -229,6 +229,25 @@ struct dma_fence *drm_crtc_create_fence(struct drm_crtc *crtc)
   *         Driver's default scaling filter
   *     Nearest Neighbor:
   *         Nearest Neighbor scaling filter
+ * SHARPNESS_STRENGTH:
+ *    Atomic property for setting the sharpness strength/intensity by userspace.
+ *
+ *    The value of this property is set as an integer value ranging
+ *    from 0 - 255 where:
+ *
+ *    0 means feature is disabled.


Should mention here that this is the default value.

+ *
+ *    1 means minimum sharpness.
+ *
+ *    255 means maximum sharpness.

These can just be:

0: Sharpness feature is disabled (default value).

1: Minimum sharpness.

255: Maximum sharpness.


+ *
+ *    User can gradually increase or decrease the sharpness level and can
+ *    set the optimum value depending on content and

this value will be
+ *    passed to kernel through the Uapi.

Use UAPI. Also, this  can be a separate sentence.


+ *    The setting of this property does not require modeset.
+ *    The sharpness effect takes place post blending on the final composed output. + *    If the feature is disabled, the content remains same without any sharpening effect + *    and when this feature is applied, it enhances the clarity of the content.
   */
    __printf(6, 0)
@@ -940,6 +959,22 @@ int drm_crtc_create_scaling_filter_property(struct drm_crtc *crtc,
  }
  EXPORT_SYMBOL(drm_crtc_create_scaling_filter_property);
  +int drm_crtc_create_sharpness_strength_property(struct drm_crtc *crtc)
+{
+    struct drm_device *dev = crtc->dev;
+    struct drm_property *prop =
+        drm_property_create_range(dev, 0, "SHARPNESS_STRENGTH", 0, 255);
+
+    if (!prop)
+        return -ENOMEM;
+
+    crtc->sharpness_strength_property = prop;
+    drm_object_attach_property(&crtc->base, prop, 0);
+
+    return 0;
+}
+EXPORT_SYMBOL(drm_crtc_create_sharpness_strength_property);
+
  /**
   * drm_crtc_in_clone_mode - check if the given CRTC state is in clone mode
   *
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index caa56e039da2..2b26b90e82e6 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -317,6 +317,16 @@ struct drm_crtc_state {
       */
      enum drm_scaling_filter scaling_filter;
  +    /**
+     * @sharpness_strength:
+     *
+     * Used by the user to set the sharpness intensity.
+     * The value ranges from 0-255.

Perhaps we can add about default value:

Default value is 0, which disables the sharpness feature.

+     * Any value greater than 0 means enabling the featuring

can simply be: Any value greater than 0 enables sharpening with the specified strength.


Regards,

Ankit

+     * along with setting the value for sharpness.
+     */
+    u8 sharpness_strength;
+
      /**
       * @event:
       *
@@ -1088,6 +1098,12 @@ struct drm_crtc {
       */
      struct drm_property *scaling_filter_property;
  +    /**
+     * @sharpness_strength_property: property to apply
+     * the intensity of the sharpness requested.
+     */
+    struct drm_property *sharpness_strength_property;
+
      /**
       * @state:
       *
@@ -1324,4 +1340,5 @@ static inline struct drm_crtc *drm_crtc_find(struct drm_device *dev,
  int drm_crtc_create_scaling_filter_property(struct drm_crtc *crtc,
                          unsigned int supported_filters);
  bool drm_crtc_in_clone_mode(struct drm_crtc_state *crtc_state);
+int drm_crtc_create_sharpness_strength_property(struct drm_crtc *crtc);
  #endif /* __DRM_CRTC_H__ */

Reply via email to