drm/i915: avoid full modeset when changing the color range properties
Automatic color range selection was added in
commit 55bc60db59
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date: Thu Jan 17 16:31:29 2013 +0200
drm/i915: Add "Automatic" mode for the "Broadcast RGB" property
but that removed the check to avoid a full modeset if the value is
unchanged. Unfortunately X sets all properties with their current
value at start-up, resulting in some ugly flickering which shouldn't
be there.
v2: Change old_range from bool to uint32_t, spotted by Ville.
v3: Actually git add everything ;-)
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
@@ -2428,6 +2428,9 @@ intel_dp_set_property(struct drm_connector *connector,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (property == dev_priv->broadcast_rgb_property) {
|
if (property == dev_priv->broadcast_rgb_property) {
|
||||||
|
bool old_auto = intel_dp->color_range_auto;
|
||||||
|
uint32_t old_range = intel_dp->color_range;
|
||||||
|
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case INTEL_BROADCAST_RGB_AUTO:
|
case INTEL_BROADCAST_RGB_AUTO:
|
||||||
intel_dp->color_range_auto = true;
|
intel_dp->color_range_auto = true;
|
||||||
@@ -2443,6 +2446,11 @@ intel_dp_set_property(struct drm_connector *connector,
|
|||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (old_auto == intel_dp->color_range_auto &&
|
||||||
|
old_range == intel_dp->color_range)
|
||||||
|
return 0;
|
||||||
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -920,6 +920,9 @@ intel_hdmi_set_property(struct drm_connector *connector,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (property == dev_priv->broadcast_rgb_property) {
|
if (property == dev_priv->broadcast_rgb_property) {
|
||||||
|
bool old_auto = intel_hdmi->color_range_auto;
|
||||||
|
uint32_t old_range = intel_hdmi->color_range;
|
||||||
|
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case INTEL_BROADCAST_RGB_AUTO:
|
case INTEL_BROADCAST_RGB_AUTO:
|
||||||
intel_hdmi->color_range_auto = true;
|
intel_hdmi->color_range_auto = true;
|
||||||
@@ -935,6 +938,11 @@ intel_hdmi_set_property(struct drm_connector *connector,
|
|||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (old_auto == intel_hdmi->color_range_auto &&
|
||||||
|
old_range == intel_hdmi->color_range)
|
||||||
|
return 0;
|
||||||
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1930,6 +1930,9 @@ intel_sdvo_set_property(struct drm_connector *connector,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (property == dev_priv->broadcast_rgb_property) {
|
if (property == dev_priv->broadcast_rgb_property) {
|
||||||
|
bool old_auto = intel_sdvo->color_range_auto;
|
||||||
|
uint32_t old_range = intel_sdvo->color_range;
|
||||||
|
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case INTEL_BROADCAST_RGB_AUTO:
|
case INTEL_BROADCAST_RGB_AUTO:
|
||||||
intel_sdvo->color_range_auto = true;
|
intel_sdvo->color_range_auto = true;
|
||||||
@@ -1947,6 +1950,11 @@ intel_sdvo_set_property(struct drm_connector *connector,
|
|||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (old_auto == intel_sdvo->color_range_auto &&
|
||||||
|
old_range == intel_sdvo->color_range)
|
||||||
|
return 0;
|
||||||
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user