[Intel-gfx] [PATCH] drm: Add standardized boolean props
Rob Clark
robdclark at gmail.com
Wed Jan 21 13:38:12 PST 2015
On Wed, Jan 21, 2015 at 2:47 AM, Daniel Vetter <daniel.vetter at ffwll.ch> wrote:
> Not a new type exposed to userspace, just a standard way to create
> them since between range, bitmask and enum there's 3 different ways to
> pull out a boolean prop.
>
> Also add the kerneldoc for the recently added new prop types, which
> Rob forgot all about.
>
> v2: Fixup kerneldoc, spotted by Rob.
>
> Cc: Rob Clark <robdclark at gmail.com>
> Signed-off-by: Daniel Vetter <daniel.vetter at intel.com>
Reviewed-by: Rob Clark <robdclark at gmail.com>
> ---
> drivers/gpu/drm/drm_crtc.c | 66 +++++++++++++++++++++++++++++++++++++++++++---
> include/drm/drm_crtc.h | 2 ++
> 2 files changed, 65 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index 071d7465043a..56e3256d5249 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -3712,7 +3712,7 @@ static struct drm_property *property_create_range(struct drm_device *dev,
> }
>
> /**
> - * drm_property_create_range - create a new ranged property type
> + * drm_property_create_range - create a new unsigned ranged property type
> * @dev: drm device
> * @flags: flags specifying the property type
> * @name: name of the property
> @@ -3723,8 +3723,8 @@ static struct drm_property *property_create_range(struct drm_device *dev,
> * object with drm_object_attach_property. The returned property object must be
> * freed with drm_property_destroy.
> *
> - * Userspace is allowed to set any integer value in the (min, max) range
> - * inclusive.
> + * Userspace is allowed to set any unsigned integer value in the (min, max)
> + * range inclusive.
> *
> * Returns:
> * A pointer to the newly created property on success, NULL on failure.
> @@ -3738,6 +3738,24 @@ struct drm_property *drm_property_create_range(struct drm_device *dev, int flags
> }
> EXPORT_SYMBOL(drm_property_create_range);
>
> +/**
> + * drm_property_create_signed_range - create a new signed ranged property type
> + * @dev: drm device
> + * @flags: flags specifying the property type
> + * @name: name of the property
> + * @min: minimum value of the property
> + * @max: maximum value of the property
> + *
> + * This creates a new generic drm property which can then be attached to a drm
> + * object with drm_object_attach_property. The returned property object must be
> + * freed with drm_property_destroy.
> + *
> + * Userspace is allowed to set any signed integer value in the (min, max)
> + * range inclusive.
> + *
> + * Returns:
> + * A pointer to the newly created property on success, NULL on failure.
> + */
> struct drm_property *drm_property_create_signed_range(struct drm_device *dev,
> int flags, const char *name,
> int64_t min, int64_t max)
> @@ -3747,6 +3765,23 @@ struct drm_property *drm_property_create_signed_range(struct drm_device *dev,
> }
> EXPORT_SYMBOL(drm_property_create_signed_range);
>
> +/**
> + * drm_property_create_object - create a new object property type
> + * @dev: drm device
> + * @flags: flags specifying the property type
> + * @name: name of the property
> + * @type: object type from DRM_MODE_OBJECT_* defines
> + *
> + * This creates a new generic drm property which can then be attached to a drm
> + * object with drm_object_attach_property. The returned property object must be
> + * freed with drm_property_destroy.
> + *
> + * Userspace is only allowed to set this to any property value of the given
> + * @type. Only useful for atomic properties, which is enforced.
> + *
> + * Returns:
> + * A pointer to the newly created property on success, NULL on failure.
> + */
> struct drm_property *drm_property_create_object(struct drm_device *dev,
> int flags, const char *name, uint32_t type)
> {
> @@ -3754,6 +3789,9 @@ struct drm_property *drm_property_create_object(struct drm_device *dev,
>
> flags |= DRM_MODE_PROP_OBJECT;
>
> + if (WARN_ON(!(flags & DRM_MODE_PROP_ATOMIC)))
> + return NULL;
> +
> property = drm_property_create(dev, flags, name, 1);
> if (!property)
> return NULL;
> @@ -3765,6 +3803,28 @@ struct drm_property *drm_property_create_object(struct drm_device *dev,
> EXPORT_SYMBOL(drm_property_create_object);
>
> /**
> + * drm_property_create_bool - create a new boolean property type
> + * @dev: drm device
> + * @flags: flags specifying the property type
> + * @name: name of the property
> + *
> + * This creates a new generic drm property which can then be attached to a drm
> + * object with drm_object_attach_property. The returned property object must be
> + * freed with drm_property_destroy.
> + *
> + * This is implemented as a ranged property with only {0, 1} as valid values.
> + *
> + * Returns:
> + * A pointer to the newly created property on success, NULL on failure.
> + */
> +struct drm_property *drm_property_create_bool(struct drm_device *dev, int flags,
> + const char *name)
> +{
> + return drm_property_create_range(dev, flags, name, 0, 1);
> +}
> +EXPORT_SYMBOL(drm_property_create_bool);
> +
> +/**
> * drm_property_add_enum - add a possible value to an enumeration property
> * @property: enumeration property to change
> * @index: index of the new enumeration
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> index b9bdcc1ae038..8022ab11958a 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -1357,6 +1357,8 @@ struct drm_property *drm_property_create_signed_range(struct drm_device *dev,
> int64_t min, int64_t max);
> struct drm_property *drm_property_create_object(struct drm_device *dev,
> int flags, const char *name, uint32_t type);
> +struct drm_property *drm_property_create_bool(struct drm_device *dev, int flags,
> + const char *name);
> extern void drm_property_destroy(struct drm_device *dev, struct drm_property *property);
> extern int drm_property_add_enum(struct drm_property *property, int index,
> uint64_t value, const char *name);
> --
> 2.1.4
>
More information about the Intel-gfx
mailing list