mirror of
https://github.com/torvalds/linux.git
synced 2024-10-28 15:51:43 +00:00
drm: add drm_property_change_is_valid
Move code from drm_mode_connector_property_set_ioctl to a new function, so we can reuse this code when we add crtc properties. Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com> Reviewed-by: Rob Clark <rob.clark@linaro.org> Tested-by: Rob Clark <rob.clark@linaro.org> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
4ab2c7f154
commit
26a3481586
|
@ -3074,6 +3074,24 @@ int drm_mode_connector_update_edid_property(struct drm_connector *connector,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_mode_connector_update_edid_property);
|
EXPORT_SYMBOL(drm_mode_connector_update_edid_property);
|
||||||
|
|
||||||
|
static bool drm_property_change_is_valid(struct drm_property *property,
|
||||||
|
__u64 value)
|
||||||
|
{
|
||||||
|
if (property->flags & DRM_MODE_PROP_IMMUTABLE)
|
||||||
|
return false;
|
||||||
|
if (property->flags & DRM_MODE_PROP_RANGE) {
|
||||||
|
if (value < property->values[0] || value > property->values[1])
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < property->num_values; i++)
|
||||||
|
if (property->values[i] == value)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int drm_mode_connector_property_set_ioctl(struct drm_device *dev,
|
int drm_mode_connector_property_set_ioctl(struct drm_device *dev,
|
||||||
void *data, struct drm_file *file_priv)
|
void *data, struct drm_file *file_priv)
|
||||||
{
|
{
|
||||||
|
@ -3110,28 +3128,9 @@ int drm_mode_connector_property_set_ioctl(struct drm_device *dev,
|
||||||
}
|
}
|
||||||
property = obj_to_property(obj);
|
property = obj_to_property(obj);
|
||||||
|
|
||||||
if (property->flags & DRM_MODE_PROP_IMMUTABLE)
|
if (!drm_property_change_is_valid(property, out_resp->value))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (property->flags & DRM_MODE_PROP_RANGE) {
|
|
||||||
if (out_resp->value < property->values[0])
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
if (out_resp->value > property->values[1])
|
|
||||||
goto out;
|
|
||||||
} else {
|
|
||||||
int found = 0;
|
|
||||||
for (i = 0; i < property->num_values; i++) {
|
|
||||||
if (property->values[i] == out_resp->value) {
|
|
||||||
found = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!found) {
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do DPMS ourselves */
|
/* Do DPMS ourselves */
|
||||||
if (property == connector->dev->mode_config.dpms_property) {
|
if (property == connector->dev->mode_config.dpms_property) {
|
||||||
if (connector->funcs->dpms)
|
if (connector->funcs->dpms)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user