diff options
author | Rob Clark <rob@ti.com> | 2012-06-05 12:28:22 -0500 |
---|---|---|
committer | Rob Clark <rob@ti.com> | 2012-06-08 09:27:21 -0500 |
commit | 7b228e900f59cda3cafb60692be9dd7aced6ad96 (patch) | |
tree | a83fb716e3567ec9af83466a4de1b5241fc57c5f | |
parent | 86dece4cf2f7180b854fbd318fa1a57793f0deac (diff) |
Add support for bitmask properties
A bitmask property is similar to an enum. The enum value is a bit
position (0-63), and valid property values consist of a mask of
zero or more of (1 << enum_val[n]).
Signed-off-by: Rob Clark <rob@ti.com>
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
-rw-r--r-- | include/drm/drm_mode.h | 1 | ||||
-rw-r--r-- | xf86drmMode.c | 4 |
2 files changed, 3 insertions, 2 deletions
diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h index f303d94c..62ba997f 100644 --- a/include/drm/drm_mode.h +++ b/include/drm/drm_mode.h @@ -226,6 +226,7 @@ struct drm_mode_get_connector { #define DRM_MODE_PROP_IMMUTABLE (1<<2) #define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */ #define DRM_MODE_PROP_BLOB (1<<4) +#define DRM_MODE_PROP_BITMASK (1<<5) /* bitmask of enumerated types */ struct drm_mode_property_enum { __u64 value; diff --git a/xf86drmMode.c b/xf86drmMode.c index a60c7cb1..04fdf1ff 100644 --- a/xf86drmMode.c +++ b/xf86drmMode.c @@ -575,7 +575,7 @@ drmModePropertyPtr drmModeGetProperty(int fd, uint32_t property_id) if (prop.count_values) prop.values_ptr = VOID2U64(drmMalloc(prop.count_values * sizeof(uint64_t))); - if (prop.count_enum_blobs && (prop.flags & DRM_MODE_PROP_ENUM)) + if (prop.count_enum_blobs && (prop.flags & (DRM_MODE_PROP_ENUM | DRM_MODE_PROP_BITMASK))) prop.enum_blob_ptr = VOID2U64(drmMalloc(prop.count_enum_blobs * sizeof(struct drm_mode_property_enum))); if (prop.count_enum_blobs && (prop.flags & DRM_MODE_PROP_BLOB)) { @@ -597,7 +597,7 @@ drmModePropertyPtr drmModeGetProperty(int fd, uint32_t property_id) r->flags = prop.flags; if (prop.count_values) r->values = drmAllocCpy(U642VOID(prop.values_ptr), prop.count_values, sizeof(uint64_t)); - if (prop.flags & DRM_MODE_PROP_ENUM) { + if (prop.flags & (DRM_MODE_PROP_ENUM | DRM_MODE_PROP_BITMASK)) { r->count_enums = prop.count_enum_blobs; r->enums = drmAllocCpy(U642VOID(prop.enum_blob_ptr), prop.count_enum_blobs, sizeof(struct drm_mode_property_enum)); } else if (prop.flags & DRM_MODE_PROP_BLOB) { |