Re: [Intel-gfx] [v3 09/13] drm/i915: Add rotation property for sprites

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 7/12/2014 3:29 AM, Daniel Vetter wrote:
On Tue, Jul 08, 2014 at 10:31:59AM +0530, sonika.jindal@xxxxxxxxx wrote:
From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>

Sprite planes support 180 degree rotation. The lower layers are now in
place, so hook in the standard rotation property to expose the feature
to the users.

v2: Moving rotation_property to drm_plane

This change is wrong and I haven't figured out who suggested it. The
actual property is global (i.e. we should only have 1), but then it can be
attached to different pieces.

So here's what we need to do instead:
- Add the rotation property to dev->mode_config.
- Convert omapdrm to also store it there by moving it out of the omap
   driver private structure.
- Probably better to just unconditionally set it up, but not sure.
- Adjust the fb helper code accordingly.
- Rip the omap restore rotation code in lastclose since the fb helper will
   now take care of this.

Ok, I will make this property a part of mode_config and will attach that to drm_plane, and will post the remaining patches.
-Sonika
I've merged the drm core parts for now but dropped the i915 implementation
and the fb helper patch again.

Thanks, Daniel


Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx
Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
Signed-off-by: Sonika Jindal <sonika.jindal@xxxxxxxxx>
Reviewed-by: Imre Deak <imre.deak@xxxxxxxxx>
---
  drivers/gpu/drm/i915/intel_sprite.c |   40 ++++++++++++++++++++++++++++++++++-
  include/drm/drm_crtc.h              |    1 +
  2 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index cbad738..aa63027 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -1202,6 +1202,29 @@ out_unlock:
  	return ret;
  }

+static int intel_plane_set_property(struct drm_plane *plane,
+				    struct drm_property *prop,
+				    uint64_t val)
+{
+	struct intel_plane *intel_plane = to_intel_plane(plane);
+	uint64_t old_val;
+	int ret = -ENOENT;
+
+	if (prop == plane->rotation_property) {
+		/* exactly one rotation angle please */
+		if (hweight32(val & 0xf) != 1)
+			return -EINVAL;
+
+		old_val = intel_plane->rotation;
+		intel_plane->rotation = val;
+		ret = intel_plane_restore(plane);
+		if (ret)
+			intel_plane->rotation = old_val;
+	}
+
+	return ret;
+}
+
  int intel_plane_restore(struct drm_plane *plane)
  {
  	struct intel_plane *intel_plane = to_intel_plane(plane);
@@ -1228,6 +1251,7 @@ static const struct drm_plane_funcs intel_plane_funcs = {
  	.update_plane = intel_update_plane,
  	.disable_plane = intel_disable_plane,
  	.destroy = intel_destroy_plane,
+	.set_property = intel_plane_set_property,
  };

  static uint32_t ilk_plane_formats[] = {
@@ -1338,8 +1362,22 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane)
  			     &intel_plane_funcs,
  			     plane_formats, num_plane_formats,
  			     false);
-	if (ret)
+	if (ret) {
  		kfree(intel_plane);
+		goto out;
+	}
+
+	if (!intel_plane->base.rotation_property)
+		intel_plane->base.rotation_property =
+			drm_mode_create_rotation_property(dev,
+							  BIT(DRM_ROTATE_0) |
+							  BIT(DRM_ROTATE_180));
+
+	if (intel_plane->base.rotation_property)
+		drm_object_attach_property(&intel_plane->base.base,
+					   intel_plane->base.rotation_property,
+					   intel_plane->rotation);

+ out:
  	return ret;
  }
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 08ed55e..6006c70 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -615,6 +615,7 @@ struct drm_plane {

  	const struct drm_plane_funcs *funcs;

+	struct drm_property *rotation_property;
  	struct drm_object_properties properties;

  	enum drm_plane_type type;
--
1.7.10.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel





[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux