summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Michael <cp.michael@samsung.com>2016-09-22 12:28:07 -0400
committerChris Michael <cp.michael@samsung.com>2016-09-22 14:20:24 -0400
commita26262928272a901e129e236970981c72a35960d (patch)
tree0bf18fc9df2797a18a34a50ca6bb6d66320e775f
parent2bda2273043ba3554f9d554bf99f13ceb9dc6c66 (diff)
downloadefl-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.c40
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)