> -----Original Message----- > From: Intel-gfx <intel-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Nemesa > Garg > Sent: Monday, July 8, 2024 1:39 PM > To: intel-gfx@xxxxxxxxxxxxxxxxxxxxx; dri-devel@xxxxxxxxxxxxxxxxxxxxx > Cc: Garg, Nemesa <nemesa.garg@xxxxxxxxx> > Subject: [1/5] drm: Introduce sharpness mode property > > Introduces the new crtc property "SHARPNESS_STRENGTH" that allows 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. > > Signed-off-by: Nemesa Garg <nemesa.garg@xxxxxxxxx> > --- > 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 22bbb2d83e30..825640ab39f6 100644 > --- a/drivers/gpu/drm/drm_atomic_uapi.c > +++ b/drivers/gpu/drm/drm_atomic_uapi.c > @@ -417,6 +417,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_prop) { Just in order to maintain similarity in the naming conventions can this be changed to either "prop_sharpness_strength" or "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 { > @@ -454,6 +456,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_prop) > + *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 > 3488ff067c69..4ff18786a226 100644 > --- a/drivers/gpu/drm/drm_crtc.c > +++ b/drivers/gpu/drm/drm_crtc.c > @@ -229,6 +229,24 @@ 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. > + * > + * 1 means minimum sharpness. > + * > + * 255 means 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. > + * 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) > @@ -939,3 +957,20 @@ int drm_crtc_create_scaling_filter_property(struct > drm_crtc *crtc, > return 0; > } > 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; > + No blank line over here. > + struct drm_property *prop = > + drm_property_create_range(dev, 0, "SHARPNESS_STRENGTH", > 0, 255); > + > + if (!prop) > + return -ENOMEM; > + > + crtc->sharpness_strength_prop = prop; > + drm_object_attach_property(&crtc->base, prop, 0); > + > + return 0; > +} > +EXPORT_SYMBOL(drm_crtc_create_sharpness_strength_property); > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index > 8b48a1974da3..1cdca5c82753 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. > + * Any value greater than 0 means enabling the featuring > + * 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_prop: property to apply > + * the intensity of the sharpness requested. > + */ > + struct drm_property *sharpness_strength_prop; > + > /** > * @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); > > +int drm_crtc_create_sharpness_strength_property(struct drm_crtc *crtc); > #endif /* __DRM_CRTC_H__ */ > -- > 2.25.1 Thanks and Regards, Arun R Murthy --------------------