diff options
author | Chris Michael <cp.michael@samsung.com> | 2016-09-22 12:35:23 -0400 |
---|---|---|
committer | Chris Michael <cp.michael@samsung.com> | 2016-09-22 14:20:24 -0400 |
commit | bfff91bac5f74ff9bb93b32ebbd48a78b24f734c (patch) | |
tree | 8ca4b59e248c0e9560781c0261cc81480910eb11 | |
parent | a26262928272a901e129e236970981c72a35960d (diff) | |
download | efl-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.c | 45 |
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 * |