aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/ecore_drm
diff options
context:
space:
mode:
authorChris Michael <cp.michael@samsung.com>2015-05-06 09:33:17 -0400
committerChris Michael <cp.michael@samsung.com>2015-05-07 14:39:46 -0400
commit0341d08831436faa6d280ec8b040654c417491a2 (patch)
treea6e921433fe9a9a5700f5705ee626fbf3e36ac12 /src/lib/ecore_drm
parentecore-drm: Add API function to return output modes (diff)
downloadefl-0341d08831436faa6d280ec8b040654c417491a2.tar.gz
ecore-drm: Add some debug code to spit out planes and plane properties
Summary: This adds a debug function to spit out planes and their properties while debugging rotation support Signed-off-by: Chris Michael <cp.michael@samsung.com>
Diffstat (limited to 'src/lib/ecore_drm')
-rw-r--r--src/lib/ecore_drm/ecore_drm_output.c124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/lib/ecore_drm/ecore_drm_output.c b/src/lib/ecore_drm/ecore_drm_output.c
index fbd2a2a53e..5a1f5312cd 100644
--- a/src/lib/ecore_drm/ecore_drm_output.c
+++ b/src/lib/ecore_drm/ecore_drm_output.c
@@ -706,6 +706,123 @@ next:
}
}
+static void
+_ecore_drm_output_planes_get(Ecore_Drm_Device *dev)
+{
+ drmModePlaneRes *pres;
+ unsigned int i = 0, j = 0;
+ int k = 0;
+
+ pres = drmModeGetPlaneResources(dev->drm.fd);
+ if (!pres) return;
+
+ for (; i < pres->count_planes; i++)
+ {
+ drmModePlane *plane;
+ drmModeObjectPropertiesPtr props;
+ int type = -1;
+
+ plane = drmModeGetPlane(dev->drm.fd, pres->planes[i]);
+ if (!plane) continue;
+
+ props = drmModeObjectGetProperties(dev->drm.fd, plane->plane_id,
+ DRM_MODE_OBJECT_PLANE);
+ if (!props) goto free_plane;
+
+ DBG("Plane %u Properties:", plane->plane_id);
+
+ for (j = 0; type == -1 && j < props->count_props; j++)
+ {
+ drmModePropertyPtr prop;
+
+ prop = drmModeGetProperty(dev->drm.fd, props->props[j]);
+ if (!prop) continue;
+
+ if (!strcmp(prop->name, "type"))
+ {
+ type = props->prop_values[j];
+ DBG("\tType: %d", type);
+ for (k = 0; k < prop->count_enums; k++)
+ {
+ DBG("\t\t%s=%llu", prop->enums[k].name,
+ prop->enums[k].value);
+ }
+ }
+
+ drmModeFreeProperty(prop);
+ }
+
+ DBG("\tFormats:");
+ for (j = 0; j < plane->count_formats; j++)
+ DBG("\t\t%4.4s", (char *)&plane->formats[j]);
+
+ for (j = 0; j < props->count_props; j++ )
+ {
+ drmModePropertyPtr prop;
+
+ prop = drmModeGetProperty(dev->drm.fd, props->props[j]);
+ if (!prop) continue;
+
+ DBG("\tProperty Name: %s", prop->name);
+
+ if (prop->flags & DRM_MODE_PROP_RANGE)
+ {
+ DBG("\t\tRange Property");
+ for (k = 0; k < prop->count_values; k++)
+ DBG("\t\t\t%"PRIu64, prop->values[k]);
+ }
+ if (prop->flags & DRM_MODE_PROP_ENUM)
+ {
+ DBG("\t\tEnum Property");
+ for (k = 0; k < prop->count_enums; k++)
+ DBG("\t\t\t%s=%llu", prop->enums[k].name,
+ prop->enums[k].value);
+ }
+ if (prop->flags & DRM_MODE_PROP_BITMASK)
+ {
+ DBG("\t\tBitmask Property");
+ for (k = 0; k < prop->count_enums; k++)
+ DBG("\t\t\t%s=0x%llx", prop->enums[k].name,
+ (1LL << prop->enums[k].value));
+ }
+
+ if (!strcmp(prop->name, "rotation"))
+ {
+ DBG("\t\tSupported Rotations:");
+ for (k = 0; k < prop->count_enums; k++)
+ {
+ if (!strcmp(prop->enums[k].name, "rotate-0"))
+ DBG("\t\t\tRotate 0");
+ else if (!strcmp(prop->enums[k].name, "rotate-90"))
+ DBG("\t\t\tRotate 90");
+ else if (!strcmp(prop->enums[k].name, "rotate-180"))
+ DBG("\t\t\tRotate 180");
+ else if (!strcmp(prop->enums[k].name, "rotate-270"))
+ DBG("\t\t\tRotate 270");
+ else if (!strcmp(prop->enums[k].name, "reflect-x"))
+ DBG("\t\t\tReflect X");
+ else if (!strcmp(prop->enums[k].name, "reflect-y"))
+ DBG("\t\t\tReflect Y");
+ else
+ DBG("\t\t\t%s", prop->enums[k].name);
+ }
+ }
+
+ drmModeFreeProperty(prop);
+ }
+
+ DBG("\tCurrent Crtc: %d", plane->crtc_id);
+ DBG("\tPossible Crtcs: 0x%08x", plane->possible_crtcs);
+
+ drmModeFreeObjectProperties(props);
+
+free_plane:
+ drmModeFreePlane(plane);
+ }
+
+ drmModeFreePlaneResources(pres);
+}
+
/* public functions */
/**
@@ -752,6 +869,12 @@ ecore_drm_outputs_create(Ecore_Drm_Device *dev)
dev->max_width = res->max_width;
dev->max_height = res->max_height;
+ /* DBG("Dev Size"); */
+ /* DBG("\tMin Width: %u", res->min_width); */
+ /* DBG("\tMin Height: %u", res->min_height); */
+ /* DBG("\tMax Width: %u", res->max_width); */
+ /* DBG("\tMax Height: %u", res->max_height); */
+
for (i = 0; i < res->count_connectors; i++)
{
/* get the connector */
@@ -775,6 +898,7 @@ next:
}
/* TODO: Planes */
+ _ecore_drm_output_planes_get(dev);
ret = EINA_TRUE;
if (eina_list_count(dev->outputs) < 1)