diff options
author | Chris Michael <cp.michael@samsung.com> | 2016-09-22 12:28:07 -0400 |
---|---|---|
committer | Chris Michael <cp.michael@samsung.com> | 2016-09-22 14:20:24 -0400 |
commit | a26262928272a901e129e236970981c72a35960d (patch) | |
tree | 0bf18fc9df2797a18a34a50ca6bb6d66320e775f | |
parent | 2bda2273043ba3554f9d554bf99f13ceb9dc6c66 (diff) | |
download | efl-a26262928272a901e129e236970981c72a35960d.tar.gz |
ecore-drm2: Add code to use Atomic for Edid if available
Signed-off-by: Chris Michael <cp.michael@samsung.com>
-rw-r--r-- | src/lib/ecore_drm2/ecore_drm2_outputs.c | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/src/lib/ecore_drm2/ecore_drm2_outputs.c b/src/lib/ecore_drm2/ecore_drm2_outputs.c index 28d0400086..ebb831988a 100644 --- a/src/lib/ecore_drm2/ecore_drm2_outputs.c +++ b/src/lib/ecore_drm2/ecore_drm2_outputs.c @@ -189,6 +189,28 @@ _output_edid_parse(Ecore_Drm2_Output *output, const uint8_t *data, size_t len) return 0; } +#ifdef HAVE_ATOMIC_DRM +static void +_output_edid_atomic_find(Ecore_Drm2_Output *output) +{ + Ecore_Drm2_Connector_State *cstate; + int ret = 0; + + cstate = output->conn_state; + + ret = _output_edid_parse(output, cstate->edid.data, cstate->edid.len); + if (!ret) + { + if (output->edid.pnp[0] != '\0') + eina_stringshare_replace(&output->make, output->edid.pnp); + if (output->edid.monitor[0] != '\0') + eina_stringshare_replace(&output->model, output->edid.monitor); + if (output->edid.serial[0] != '\0') + eina_stringshare_replace(&output->serial, output->edid.serial); + } +} +#endif + static void _output_edid_find(Ecore_Drm2_Output *output, const drmModeConnector *conn) { @@ -700,7 +722,12 @@ _output_create(Ecore_Drm2_Device *dev, const drmModeRes *res, const drmModeConne _output_modes_create(dev, output, conn); - _output_edid_find(output, conn); +#ifdef HAVE_ATOMIC_DRM + if (_ecore_drm2_use_atomic) + _output_edid_atomic_find(output); + else +#endif + _output_edid_find(output, conn); if (output->connected) output->enabled = EINA_TRUE; @@ -960,9 +987,16 @@ ecore_drm2_output_edid_get(Ecore_Drm2_Output *output) unsigned char *blob; EINA_SAFETY_ON_NULL_RETURN_VAL(output, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(output->edid.blob, NULL); - blob = output->edid.blob; +#ifdef HAVE_ATOMIC_DRM + if (_ecore_drm2_use_atomic) + blob = output->conn_state->edid.data; + else +#endif + { + EINA_SAFETY_ON_NULL_RETURN_VAL(output->edid.blob, NULL); + blob = output->edid.blob; + } edid_str = malloc((128 * 2) + 1); if (edid_str) |