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
parent
78ea933460
commit
557d1a2e6f
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue