mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 15:10:38 +00:00
drm: Add support_bits parameter to drm_property_create_bitmask()
Make drm_property_create_bitmask() 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 supported_bits 64bit Fix up omapdrm call site (Rob) Cc: dri-devel@lists.freedesktop.org Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Imre Deak <imre.deak@intel.com> Reviewed-by: Sagar Kamble <sagar.a.kamble@intel.com> Acked-by: Dave Airlie <airlied@linux.ie> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
0659696196
commit
7689ffb32f
@ -3395,19 +3395,28 @@ EXPORT_SYMBOL(drm_property_create_enum);
|
||||
struct drm_property *drm_property_create_bitmask(struct drm_device *dev,
|
||||
int flags, const char *name,
|
||||
const struct drm_prop_enum_list *props,
|
||||
int num_values)
|
||||
int num_props,
|
||||
uint64_t supported_bits)
|
||||
{
|
||||
struct drm_property *property;
|
||||
int i, ret;
|
||||
int i, ret, index = 0;
|
||||
int num_values = hweight64(supported_bits);
|
||||
|
||||
flags |= DRM_MODE_PROP_BITMASK;
|
||||
|
||||
property = drm_property_create(dev, flags, name, num_values);
|
||||
if (!property)
|
||||
return NULL;
|
||||
for (i = 0; i < num_props; i++) {
|
||||
if (!(supported_bits & (1ULL << props[i].type)))
|
||||
continue;
|
||||
|
||||
for (i = 0; i < num_values; i++) {
|
||||
ret = drm_property_add_enum(property, i,
|
||||
if (WARN_ON(index >= num_values)) {
|
||||
drm_property_destroy(dev, property);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret = drm_property_add_enum(property, index++,
|
||||
props[i].type,
|
||||
props[i].name);
|
||||
if (ret) {
|
||||
|
@ -317,7 +317,10 @@ void omap_plane_install_properties(struct drm_plane *plane,
|
||||
{ DRM_REFLECT_Y, "reflect-y" },
|
||||
};
|
||||
prop = drm_property_create_bitmask(dev, 0, "rotation",
|
||||
props, ARRAY_SIZE(props));
|
||||
props, ARRAY_SIZE(props),
|
||||
BIT(DRM_ROTATE_0) | BIT(DRM_ROTATE_90) |
|
||||
BIT(DRM_ROTATE_180) | BIT(DRM_ROTATE_270) |
|
||||
BIT(DRM_REFLECT_X) | BIT(DRM_REFLECT_Y));
|
||||
if (prop == NULL)
|
||||
return;
|
||||
priv->rotation_prop = prop;
|
||||
|
@ -1006,7 +1006,8 @@ extern struct drm_property *drm_property_create_enum(struct drm_device *dev, int
|
||||
struct drm_property *drm_property_create_bitmask(struct drm_device *dev,
|
||||
int flags, const char *name,
|
||||
const struct drm_prop_enum_list *props,
|
||||
int num_values);
|
||||
int num_props,
|
||||
uint64_t supported_bits);
|
||||
struct drm_property *drm_property_create_range(struct drm_device *dev, int flags,
|
||||
const char *name,
|
||||
uint64_t min, uint64_t max);
|
||||
|
Loading…
x
Reference in New Issue
Block a user