[PATCH v2 02/11] drm: Add support_bits parameter to drm_property_create_bitmask() (original) (raw)

Sagar Arun Kamble sagar.a.kamble at intel.com
Tue Feb 11 03:02:32 PST 2014


Reviewed-by: Sagar Kamble <sagar.a.kamble at intel.com> Tested-by: Sagar Kamble <sagar.a.kamble at intel.com>

On Mon, 2014-02-10 at 16:05 +0200, ville.syrjala at linux.intel.com wrote:

From: Ville Syrjälä <ville.syrjala at linux.intel.com>

Make drmpropertycreatebitmask() a bit more generic by allowing the caller to specify which bits are in fact supported. This allows multiple callers to use the same enum list, but still create different versions of the same property with different list of supported bits. v2: Populate values[] array as non-sparse Make supportedbits 64bit Fix up omapdrm call site (Rob) Cc: Tomi Valkeinen <tomi.valkeinen at ti.com> Cc: Rob Clark <robdclark at gmail.com> Cc: Sagar Kamble <sagar.a.kamble at intel.com> Cc: dri-devel at lists.freedesktop.org Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com> --- This should also make my original "drm: Add drmmodecreaterotationproperty()" patch do the right thing. So patch 03/11 of the series needs to be replaced with the original. drivers/gpu/drm/drmcrtc.c | 18 ++++++++++++++---- drivers/gpu/drm/omapdrm/omapplane.c | 5 ++++- include/drm/drmcrtc.h | 3 ++- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drmcrtc.c b/drivers/gpu/drm/drmcrtc.c index 3b7d32d..6e099069 100644 --- a/drivers/gpu/drm/drmcrtc.c +++ b/drivers/gpu/drm/drmcrtc.c @@ -2906,10 +2906,12 @@ EXPORTSYMBOL(drmpropertycreateenum); struct drmproperty *drmpropertycreatebitmask(struct drmdevice *dev, int flags, const char *name, const struct drmpropenumlist *props, - int numvalues) + int numprops, + uint64t supportedbits) { struct drmproperty *property; - int i, ret; + int i, ret, index = 0; + int numvalues = hweight64(supportedbits); flags |= DRMMODEPROPBITMASK; @@ -2917,8 +2919,16 @@ struct drmproperty *drmpropertycreatebitmask(struct drmdevice *dev, if (!property) return NULL; - for (i = 0; i < numvalues; i++) {_ _- ret = drmpropertyaddenum(property, i,_ _+ for (i = 0; i < numprops; i++) {_ _+ if (!(supportedbits & (1ULL << props[i].type)))_ _+ continue;_ _+_ _+ if (WARNON(index >= numvalues)) { + drmpropertydestroy(dev, property); + return NULL; + } + + ret = drmpropertyaddenum(property, index++, props[i].type, props[i].name); if (ret) { diff --git a/drivers/gpu/drm/omapdrm/omapplane.c b/drivers/gpu/drm/omapdrm/omapplane.c index 046d5e6..0d97650 100644 --- a/drivers/gpu/drm/omapdrm/omapplane.c +++ b/drivers/gpu/drm/omapdrm/omapplane.c @@ -309,7 +309,10 @@ void omapplaneinstallproperties(struct drmplane *plane, { DRMREFLECTY, "reflect-y" }, }; prop = drmpropertycreatebitmask(dev, 0, "rotation", - props, ARRAYSIZE(props)); + props, ARRAYSIZE(props), + BIT(DRMROTATE0) | BIT(DRMROTATE90) | + BIT(DRMROTATE180) | BIT(DRMROTATE270) | + BIT(DRMREFLECTX) | BIT(DRMREFLECTY)); if (prop == NULL) return; priv->rotationprop = prop; diff --git a/include/drm/drmcrtc.h b/include/drm/drmcrtc.h index d5c46c1..4e6d2aa 100644 --- a/include/drm/drmcrtc.h +++ b/include/drm/drmcrtc.h @@ -1070,7 +1070,8 @@ extern struct drmproperty *drmpropertycreateenum(struct drmdevice *dev, int struct drmproperty *drmpropertycreatebitmask(struct drmdevice *dev, int flags, const char *name, const struct drmpropenumlist *props, - int numvalues); + int numprops, + uint64t supportedbits); struct drmproperty *drmpropertycreaterange(struct drmdevice *dev, int flags, const char *name, uint64t min, uint64t max);



More information about the dri-devel mailing list