mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
drm: RIP mode_config->rotation_property
Now that all drivers have been converted over to the per-plane rotation property, we can just nuke the global rotation property. v2: Rebase due to BIT(),__builtin_ffs() & co. Deal with superfluous code shuffling Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1477077768-4274-4-git-send-email-ville.syrjala@linux.intel.com
This commit is contained in:
parent
574a37b1bb
commit
6686df8cf1
@ -705,8 +705,7 @@ int drm_atomic_plane_set_property(struct drm_plane *plane,
|
||||
state->src_w = val;
|
||||
} else if (property == config->prop_src_h) {
|
||||
state->src_h = val;
|
||||
} else if (property == config->rotation_property ||
|
||||
property == plane->rotation_property) {
|
||||
} else if (property == plane->rotation_property) {
|
||||
if (!is_power_of_2(val & DRM_ROTATE_MASK))
|
||||
return -EINVAL;
|
||||
state->rotation = val;
|
||||
@ -766,8 +765,7 @@ drm_atomic_plane_get_property(struct drm_plane *plane,
|
||||
*val = state->src_w;
|
||||
} else if (property == config->prop_src_h) {
|
||||
*val = state->src_h;
|
||||
} else if (property == config->rotation_property ||
|
||||
property == plane->rotation_property) {
|
||||
} else if (property == plane->rotation_property) {
|
||||
*val = state->rotation;
|
||||
} else if (property == plane->zpos_property) {
|
||||
*val = state->zpos;
|
||||
|
@ -89,7 +89,7 @@
|
||||
* On top of this basic transformation additional properties can be exposed by
|
||||
* the driver:
|
||||
*
|
||||
* - Rotation is set up with drm_mode_create_rotation_property(). It adds a
|
||||
* - Rotation is set up with drm_plane_create_rotation_property(). It adds a
|
||||
* rotation and reflection step between the source and destination rectangles.
|
||||
* Without this property the rectangle is only scaled, but not rotated or
|
||||
* reflected.
|
||||
@ -105,18 +105,12 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* drm_mode_create_rotation_property - create a new rotation property
|
||||
* @dev: DRM device
|
||||
* drm_plane_create_rotation_property - create a new rotation property
|
||||
* @plane: drm plane
|
||||
* @rotation: initial value of the rotation property
|
||||
* @supported_rotations: bitmask of supported rotations and reflections
|
||||
*
|
||||
* This creates a new property with the selected support for transformations.
|
||||
* The resulting property should be stored in @rotation_property in
|
||||
* &drm_mode_config. It then must be attached to each plane which supports
|
||||
* rotations using drm_object_attach_property().
|
||||
*
|
||||
* FIXME: Probably better if the rotation property is created on each plane,
|
||||
* like the zpos property. Otherwise it's not possible to allow different
|
||||
* rotation modes on different planes.
|
||||
*
|
||||
* Since a rotation by 180° degress is the same as reflecting both along the x
|
||||
* and the y axis the rotation property is somewhat redundant. Drivers can use
|
||||
@ -144,24 +138,6 @@
|
||||
* rotation. After reflection, the rotation is applied to the image sampled from
|
||||
* the source rectangle, before scaling it to fit the destination rectangle.
|
||||
*/
|
||||
struct drm_property *drm_mode_create_rotation_property(struct drm_device *dev,
|
||||
unsigned int supported_rotations)
|
||||
{
|
||||
static const struct drm_prop_enum_list props[] = {
|
||||
{ __builtin_ffs(DRM_ROTATE_0) - 1, "rotate-0" },
|
||||
{ __builtin_ffs(DRM_ROTATE_90) - 1, "rotate-90" },
|
||||
{ __builtin_ffs(DRM_ROTATE_180) - 1, "rotate-180" },
|
||||
{ __builtin_ffs(DRM_ROTATE_270) - 1, "rotate-270" },
|
||||
{ __builtin_ffs(DRM_REFLECT_X) - 1, "reflect-x" },
|
||||
{ __builtin_ffs(DRM_REFLECT_Y) - 1, "reflect-y" },
|
||||
};
|
||||
|
||||
return drm_property_create_bitmask(dev, 0, "rotation",
|
||||
props, ARRAY_SIZE(props),
|
||||
supported_rotations);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_mode_create_rotation_property);
|
||||
|
||||
int drm_plane_create_rotation_property(struct drm_plane *plane,
|
||||
unsigned int rotation,
|
||||
unsigned int supported_rotations)
|
||||
|
@ -392,15 +392,10 @@ static int restore_fbdev_mode(struct drm_fb_helper *fb_helper)
|
||||
if (plane->type != DRM_PLANE_TYPE_PRIMARY)
|
||||
drm_plane_force_disable(plane);
|
||||
|
||||
if (plane->rotation_property) {
|
||||
if (plane->rotation_property)
|
||||
drm_mode_plane_set_obj_prop(plane,
|
||||
plane->rotation_property,
|
||||
DRM_ROTATE_0);
|
||||
} else if (dev->mode_config.rotation_property) {
|
||||
drm_mode_plane_set_obj_prop(plane,
|
||||
dev->mode_config.rotation_property,
|
||||
DRM_ROTATE_0);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < fb_helper->crtc_count; i++) {
|
||||
|
@ -52,8 +52,6 @@ static inline bool drm_rotation_90_or_270(unsigned int rotation)
|
||||
return rotation & (DRM_ROTATE_90 | DRM_ROTATE_270);
|
||||
}
|
||||
|
||||
struct drm_property *drm_mode_create_rotation_property(struct drm_device *dev,
|
||||
unsigned int supported_rotations);
|
||||
int drm_plane_create_rotation_property(struct drm_plane *plane,
|
||||
unsigned int rotation,
|
||||
unsigned int supported_rotations);
|
||||
|
@ -1155,11 +1155,6 @@ struct drm_mode_config {
|
||||
* CURSOR, PRIMARY and OVERLAY legacy uses of planes.
|
||||
*/
|
||||
struct drm_property *plane_type_property;
|
||||
/**
|
||||
* @rotation_property: Optional property for planes or CRTCs to specifiy
|
||||
* rotation.
|
||||
*/
|
||||
struct drm_property *rotation_property;
|
||||
/**
|
||||
* @prop_src_x: Default atomic plane property for the plane source
|
||||
* position in the connected &drm_framebuffer.
|
||||
|
Loading…
Reference in New Issue
Block a user