From: Ville Syrjälä <ville.syrj...@linux.intel.com>

The global mode_config.rotation_property is going away, switch over to
per-plane rotation_property.

Not sure I got the annoying crtc rotation_property handling right.
Might work, or migth not.

Cc: Tomi Valkeinen <tomi.valkeinen at ti.com>
Cc: Rob Clark <robdclark at gmail.com>
Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
 drivers/gpu/drm/omapdrm/omap_crtc.c  | 13 ++++-----
 drivers/gpu/drm/omapdrm/omap_drv.c   | 52 +++++++++++++++++-------------------
 drivers/gpu/drm/omapdrm/omap_plane.c | 12 ++++++---
 3 files changed, 39 insertions(+), 38 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c 
b/drivers/gpu/drm/omapdrm/omap_crtc.c
index 180f644e861e..16c691dbc372 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.c
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
@@ -438,13 +438,14 @@ static void omap_crtc_atomic_flush(struct drm_crtc *crtc,
        }
 }

-static bool omap_crtc_is_plane_prop(struct drm_device *dev,
+static bool omap_crtc_is_plane_prop(struct drm_crtc *crtc,
        struct drm_property *property)
 {
+       struct drm_device *dev = crtc->dev;
        struct omap_drm_private *priv = dev->dev_private;

        return property == priv->zorder_prop ||
-               property == dev->mode_config.rotation_property;
+               property == crtc->primary->rotation_property;
 }

 static int omap_crtc_atomic_set_property(struct drm_crtc *crtc,
@@ -452,9 +453,7 @@ static int omap_crtc_atomic_set_property(struct drm_crtc 
*crtc,
                                         struct drm_property *property,
                                         uint64_t val)
 {
-       struct drm_device *dev = crtc->dev;
-
-       if (omap_crtc_is_plane_prop(dev, property)) {
+       if (omap_crtc_is_plane_prop(crtc, property)) {
                struct drm_plane_state *plane_state;
                struct drm_plane *plane = crtc->primary;

@@ -479,9 +478,7 @@ static int omap_crtc_atomic_get_property(struct drm_crtc 
*crtc,
                                         struct drm_property *property,
                                         uint64_t *val)
 {
-       struct drm_device *dev = crtc->dev;
-
-       if (omap_crtc_is_plane_prop(dev, property)) {
+       if (omap_crtc_is_plane_prop(crtc, property)) {
                /*
                 * Delegate property get to the primary plane. The
                 * drm_atomic_plane_get_property() function isn't exported, but
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c 
b/drivers/gpu/drm/omapdrm/omap_drv.c
index f57a6910ac01..98040ec836f1 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -292,16 +292,6 @@ static int omap_modeset_init_properties(struct drm_device 
*dev)
 {
        struct omap_drm_private *priv = dev->dev_private;

-       if (priv->has_dmm) {
-               dev->mode_config.rotation_property =
-                       drm_mode_create_rotation_property(dev,
-                               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 (!dev->mode_config.rotation_property)
-                       return -ENOMEM;
-       }
-
        priv->zorder_prop = drm_property_create_range(dev, 0, "zorder", 0, 3);
        if (!priv->zorder_prop)
                return -ENOMEM;
@@ -752,24 +742,32 @@ static void dev_lastclose(struct drm_device *dev)

        DBG("lastclose: dev=%p", dev);

-       if (dev->mode_config.rotation_property) {
-               /* need to restore default rotation state.. not sure
-                * if there is a cleaner way to restore properties to
-                * default state?  Maybe a flag that properties should
-                * automatically be restored to default state on
-                * lastclose?
-                */
-               for (i = 0; i < priv->num_crtcs; i++) {
-                       drm_object_property_set_value(&priv->crtcs[i]->base,
-                                       dev->mode_config.rotation_property,
-                                       BIT(DRM_ROTATE_0));
-               }
+       /* need to restore default rotation state.. not sure
+        * if there is a cleaner way to restore properties to
+        * default state?  Maybe a flag that properties should
+        * automatically be restored to default state on
+        * lastclose?
+        */
+       for (i = 0; i < priv->num_crtcs; i++) {
+               struct drm_crtc *crtc = priv->crtcs[i];

-               for (i = 0; i < priv->num_planes; i++) {
-                       drm_object_property_set_value(&priv->planes[i]->base,
-                                       dev->mode_config.rotation_property,
-                                       BIT(DRM_ROTATE_0));
-               }
+               if (!crtc->primary->rotation_property)
+                       continue;
+
+               drm_object_property_set_value(&crtc->base,
+                                             crtc->primary->rotation_property,
+                                             BIT(DRM_ROTATE_0));
+       }
+
+       for (i = 0; i < priv->num_planes; i++) {
+               struct drm_plane *plane = priv->planes[i];
+
+               if (!plane->rotation_property)
+                       continue;
+
+               drm_object_property_set_value(&plane->base,
+                                             plane->rotation_property,
+                                             BIT(DRM_ROTATE_0));
        }

        if (priv->fbdev) {
diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c 
b/drivers/gpu/drm/omapdrm/omap_plane.c
index 08e911469a2f..c1df4c0422cb 100644
--- a/drivers/gpu/drm/omapdrm/omap_plane.c
+++ b/drivers/gpu/drm/omapdrm/omap_plane.c
@@ -211,9 +211,15 @@ void omap_plane_install_properties(struct drm_plane *plane,
        struct omap_drm_private *priv = dev->dev_private;

        if (priv->has_dmm) {
-               struct drm_property *prop = dev->mode_config.rotation_property;
-
-               drm_object_attach_property(obj, prop, BIT(DRM_ROTATE_0));
+               drm_plane_create_rotation_property(plane,
+                                                  BIT(DRM_ROTATE_0),
+                                                  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 (plane->rotation_property && obj != &plane->base)
+                       drm_object_attach_property(obj, 
plane->rotation_property,
+                                                  BIT(DRM_ROTATE_0));
        }

        drm_object_attach_property(obj, priv->zorder_prop, 0);
-- 
2.7.4

Reply via email to