summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Michael <cp.michael@samsung.com>2016-09-22 12:35:23 -0400
committerChris Michael <cp.michael@samsung.com>2016-09-22 14:20:24 -0400
commitbfff91bac5f74ff9bb93b32ebbd48a78b24f734c (patch)
tree8ca4b59e248c0e9560781c0261cc81480910eb11
parenta26262928272a901e129e236970981c72a35960d (diff)
downloadefl-bfff91bac5f74ff9bb93b32ebbd48a78b24f734c.tar.gz
ecore-drm2: Add code to support setting DPMS levels via Atomic
Signed-off-by: Chris Michael <cp.michael@samsung.com>
-rw-r--r--src/lib/ecore_drm2/ecore_drm2_outputs.c45
1 files 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 ebb831988a..b667546657 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 *