On Mon, Apr 22, 2013 at 05:07:23PM +0200, Daniel Vetter wrote: > Automatic color range selection was added in > > commit 55bc60db5988c8366751d3d04dd690698a53412c > Author: Ville Syrj?l? <ville.syrjala at 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 at linux.intel.com> > Cc: Paulo Zanoni <paulo.r.zanoni at intel.com> > Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch> Reviewed-by: Ville Syrj?l? <ville.syrjala at linux.intel.com> > --- > drivers/gpu/drm/i915/intel_dp.c | 8 ++++++++ > drivers/gpu/drm/i915/intel_hdmi.c | 8 ++++++++ > drivers/gpu/drm/i915/intel_sdvo.c | 8 ++++++++ > 3 files changed, 24 insertions(+) > > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c > index 97edbb2..994a05d 100644 > --- a/drivers/gpu/drm/i915/intel_dp.c > +++ b/drivers/gpu/drm/i915/intel_dp.c > @@ -2649,6 +2649,9 @@ intel_dp_set_property(struct drm_connector *connector, > } > > 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) { > case INTEL_BROADCAST_RGB_AUTO: > intel_dp->color_range_auto = true; > @@ -2664,6 +2667,11 @@ intel_dp_set_property(struct drm_connector *connector, > default: > return -EINVAL; > } > + > + if (old_auto == intel_dp->color_range_auto && > + old_range == intel_dp->color_range) > + return 0; > + > goto done; > } > > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c > index 3942041..4dca486 100644 > --- a/drivers/gpu/drm/i915/intel_hdmi.c > +++ b/drivers/gpu/drm/i915/intel_hdmi.c > @@ -947,6 +947,9 @@ intel_hdmi_set_property(struct drm_connector *connector, > } > > 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) { > case INTEL_BROADCAST_RGB_AUTO: > intel_hdmi->color_range_auto = true; > @@ -962,6 +965,11 @@ intel_hdmi_set_property(struct drm_connector *connector, > default: > return -EINVAL; > } > + > + if (old_auto == intel_hdmi->color_range_auto && > + old_range == intel_hdmi->color_range) > + return 0; > + > goto done; > } > > diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c > index a618a6a..d154284 100644 > --- a/drivers/gpu/drm/i915/intel_sdvo.c > +++ b/drivers/gpu/drm/i915/intel_sdvo.c > @@ -1930,6 +1930,9 @@ intel_sdvo_set_property(struct drm_connector *connector, > } > > 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) { > case INTEL_BROADCAST_RGB_AUTO: > intel_sdvo->color_range_auto = true; > @@ -1947,6 +1950,11 @@ intel_sdvo_set_property(struct drm_connector *connector, > default: > return -EINVAL; > } > + > + if (old_auto == intel_sdvo->color_range_auto && > + old_range == intel_sdvo->color_range) > + return 0; > + > goto done; > } > > -- > 1.7.11.7 -- Ville Syrj?l? Intel OTC