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>main
parent
86dece4cf2
commit
7b228e900f
|
@ -226,6 +226,7 @@ struct drm_mode_get_connector {
|
||||||
#define DRM_MODE_PROP_IMMUTABLE (1<<2)
|
#define DRM_MODE_PROP_IMMUTABLE (1<<2)
|
||||||
#define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */
|
#define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */
|
||||||
#define DRM_MODE_PROP_BLOB (1<<4)
|
#define DRM_MODE_PROP_BLOB (1<<4)
|
||||||
|
#define DRM_MODE_PROP_BITMASK (1<<5) /* bitmask of enumerated types */
|
||||||
|
|
||||||
struct drm_mode_property_enum {
|
struct drm_mode_property_enum {
|
||||||
__u64 value;
|
__u64 value;
|
||||||
|
|
|
@ -575,7 +575,7 @@ drmModePropertyPtr drmModeGetProperty(int fd, uint32_t property_id)
|
||||||
if (prop.count_values)
|
if (prop.count_values)
|
||||||
prop.values_ptr = VOID2U64(drmMalloc(prop.count_values * sizeof(uint64_t)));
|
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)));
|
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)) {
|
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;
|
r->flags = prop.flags;
|
||||||
if (prop.count_values)
|
if (prop.count_values)
|
||||||
r->values = drmAllocCpy(U642VOID(prop.values_ptr), prop.count_values, sizeof(uint64_t));
|
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->count_enums = prop.count_enum_blobs;
|
||||||
r->enums = drmAllocCpy(U642VOID(prop.enum_blob_ptr), prop.count_enum_blobs, sizeof(struct drm_mode_property_enum));
|
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) {
|
} else if (prop.flags & DRM_MODE_PROP_BLOB) {
|
||||||
|
|
Loading…
Reference in New Issue