summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaulo Zanoni <paulo.r.zanoni@intel.com>2014-08-06 12:03:57 -0300
committerPaulo Zanoni <paulo.r.zanoni@intel.com>2014-08-07 15:41:55 -0300
commit053c10432254d2d58c33346f0ef08f024c3781ce (patch)
tree75ceb43c1a57037cb931881484b06050391b8dce
parent18d8ea7fe451ee73606d82b060f02e06fae16fc2 (diff)
igt_kms: optionally return the property from get_property
So we can use this function on places that also need the property pointer, without having to call drmModeGetProperty() again with the returned id. Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
-rw-r--r--lib/igt_kms.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 5dd67feb..664b9e83 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -595,42 +595,46 @@ static void igt_output_refresh(igt_output_t *output)
static bool
get_property(int drm_fd, uint32_t object_id, uint32_t object_type,
const char *name, uint32_t *prop_id /* out */,
- uint64_t *value /* out */)
+ uint64_t *value /* out */, drmModePropertyPtr *prop /* out */)
{
drmModeObjectPropertiesPtr proplist;
- drmModePropertyPtr prop = NULL;
+ drmModePropertyPtr _prop;
bool found = false;
int i;
proplist = drmModeObjectGetProperties(drm_fd, object_id, object_type);
for (i = 0; i < proplist->count_props; i++) {
- drmModeFreeProperty(prop);
- prop = drmModeGetProperty(drm_fd, proplist->props[i]);
- if (!prop)
+ _prop = drmModeGetProperty(drm_fd, proplist->props[i]);
+ if (!_prop)
continue;
- if (strcmp(prop->name, name) == 0) {
+ if (strcmp(_prop->name, name) == 0) {
found = true;
if (prop_id)
*prop_id = proplist->props[i];
if (value)
*value = proplist->prop_values[i];
- goto out;
+ if (prop)
+ *prop = _prop;
+ else
+ drmModeFreeProperty(_prop);
+
+ break;
}
+ drmModeFreeProperty(_prop);
}
-out:
- drmModeFreeProperty(prop);
drmModeFreeObjectProperties(proplist);
return found;
}
static bool
get_plane_property(int drm_fd, uint32_t plane_id, const char *name,
- uint32_t *prop_id /* out */, uint64_t *value /* out */)
+ uint32_t *prop_id /* out */, uint64_t *value /* out */,
+ drmModePropertyPtr *prop /* out */)
{
return get_property(drm_fd, plane_id, DRM_MODE_OBJECT_PLANE,
- name, prop_id, value);
+ name, prop_id, value, prop);
}
static void
@@ -654,7 +658,7 @@ static int get_drm_plane_type(int drm_fd, uint32_t plane_id)
bool has_prop;
has_prop = get_plane_property(drm_fd, plane_id, "type",
- NULL /* prop_id */, &value);
+ NULL /* prop_id */, &value, NULL);
if (has_prop)
return (int)value;
@@ -743,7 +747,8 @@ void igt_display_init(igt_display_t *display, int drm_fd)
get_plane_property(display->drm_fd, drm_plane->plane_id,
"rotation",
&plane->rotation_property,
- &prop_value);
+ &prop_value,
+ NULL);
plane->rotation = (igt_rotation_t)prop_value;
}