modetest: add an add_property_optional variant that does not print errors

As new features are added and others are declared to be legacy, it's
nice to be able to implement fallbacks. As such, create a
property-setting variant that does not generate errors which can very
well be entirely expected.

Will be used for gamma control in a future change.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
main
Ilia Mirkin 2019-06-02 14:33:26 -04:00
parent 78ea933460
commit 557d1a2e6f
1 changed files with 23 additions and 6 deletions

View File

@ -948,9 +948,10 @@ struct property_arg {
char name[DRM_PROP_NAME_LEN+1]; char name[DRM_PROP_NAME_LEN+1];
uint32_t prop_id; uint32_t prop_id;
uint64_t value; uint64_t value;
bool optional;
}; };
static void set_property(struct device *dev, struct property_arg *p) static bool set_property(struct device *dev, struct property_arg *p)
{ {
drmModeObjectProperties *props = NULL; drmModeObjectProperties *props = NULL;
drmModePropertyRes **props_info = NULL; drmModePropertyRes **props_info = NULL;
@ -982,13 +983,13 @@ static void set_property(struct device *dev, struct property_arg *p)
if (p->obj_type == 0) { if (p->obj_type == 0) {
fprintf(stderr, "Object %i not found, can't set property\n", fprintf(stderr, "Object %i not found, can't set property\n",
p->obj_id); p->obj_id);
return; return false;
} }
if (!props) { if (!props) {
fprintf(stderr, "%s %i has no properties\n", fprintf(stderr, "%s %i has no properties\n",
obj_type, p->obj_id); obj_type, p->obj_id);
return; return false;
} }
for (i = 0; i < (int)props->count_props; ++i) { for (i = 0; i < (int)props->count_props; ++i) {
@ -999,9 +1000,10 @@ static void set_property(struct device *dev, struct property_arg *p)
} }
if (i == (int)props->count_props) { if (i == (int)props->count_props) {
fprintf(stderr, "%s %i has no %s property\n", if (!p->optional)
obj_type, p->obj_id, p->name); fprintf(stderr, "%s %i has no %s property\n",
return; obj_type, p->obj_id, p->name);
return false;
} }
p->prop_id = props->props[i]; p->prop_id = props->props[i];
@ -1015,6 +1017,8 @@ static void set_property(struct device *dev, struct property_arg *p)
if (ret < 0) if (ret < 0)
fprintf(stderr, "failed to set %s %i property %s to %" PRIu64 ": %s\n", fprintf(stderr, "failed to set %s %i property %s to %" PRIu64 ": %s\n",
obj_type, p->obj_id, p->name, p->value, strerror(errno)); obj_type, p->obj_id, p->name, p->value, strerror(errno));
return true;
} }
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
@ -1072,6 +1076,19 @@ static void add_property(struct device *dev, uint32_t obj_id,
set_property(dev, &p); set_property(dev, &p);
} }
static bool add_property_optional(struct device *dev, uint32_t obj_id,
const char *name, uint64_t value)
{
struct property_arg p;
p.obj_id = obj_id;
strcpy(p.name, name);
p.value = value;
p.optional = true;
return set_property(dev, &p);
}
static int atomic_set_plane(struct device *dev, struct plane_arg *p, static int atomic_set_plane(struct device *dev, struct plane_arg *p,
int pattern, bool update) int pattern, bool update)
{ {