devilhorns pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=bfff91bac5f74ff9bb93b32ebbd48a78b24f734c

commit bfff91bac5f74ff9bb93b32ebbd48a78b24f734c
Author: Chris Michael <cp.mich...@samsung.com>
Date:   Thu Sep 22 12:35:23 2016 -0400

    ecore-drm2: Add code to support setting DPMS levels via Atomic
    
    Signed-off-by: Chris Michael <cp.mich...@samsung.com>
---
 src/lib/ecore_drm2/ecore_drm2_outputs.c | 45 +++++++++++++++++++++++++++++++--
 1 file changed, 43 insertions(+), 2 deletions(-)

diff --git a/src/lib/ecore_drm2/ecore_drm2_outputs.c 
b/src/lib/ecore_drm2/ecore_drm2_outputs.c
index ebb8319..b667546 100644
--- a/src/lib/ecore_drm2/ecore_drm2_outputs.c
+++ b/src/lib/ecore_drm2/ecore_drm2_outputs.c
@@ -408,6 +408,42 @@ _output_dpms_property_get(int fd, const drmModeConnector 
*conn)
    return NULL;
 }
 
+#ifdef HAVE_ATOMIC_DRM
+static Eina_Bool
+_output_dpms_atomic_set(Ecore_Drm2_Output *output, int level)
+{
+   Ecore_Drm2_Crtc_State *cstate;
+   drmModeAtomicReq *req = NULL;
+   Eina_Bool ret = EINA_TRUE;
+
+   req = drmModeAtomicAlloc();
+   if (!req) return EINA_FALSE;
+
+   drmModeAtomicSetCursor(req, 0);
+
+   cstate = output->crtc_state;
+
+   if (drmModeAtomicAddProperty(req, cstate->obj_id,
+                                cstate->active.id, level) < 0)
+     {
+        ERR("Failed to add connector property DPMS");
+        ret = EINA_FALSE;
+        goto err;
+     }
+
+   if (drmModeAtomicCommit(output->fd, req, 0, NULL))
+     {
+        ERR("Could not set dpms property: %m");
+        ret = EINA_FALSE;
+     }
+
+err:
+   drmModeAtomicFree(req);
+
+   return ret;
+}
+#endif
+
 static void
 _output_backlight_init(Ecore_Drm2_Output *output, unsigned int conn_type)
 {
@@ -976,8 +1012,13 @@ ecore_drm2_output_dpms_set(Ecore_Drm2_Output *output, int 
level)
    EINA_SAFETY_ON_NULL_RETURN(output);
    EINA_SAFETY_ON_TRUE_RETURN(!output->enabled);
 
-   drmModeConnectorSetProperty(output->fd, output->conn_id,
-                               output->dpms->prop_id, level);
+#ifdef HAVE_ATOMIC_DRM
+   if (_ecore_drm2_use_atomic)
+     _output_dpms_atomic_set(output, level);
+   else
+#endif
+     drmModeConnectorSetProperty(output->fd, output->conn_id,
+                                 output->dpms->prop_id, level);
 }
 
 EAPI char *

-- 


Reply via email to