Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ebcc8f2e authored by Zhenyu Wang's avatar Zhenyu Wang Committed by Eric Anholt
Browse files

drm/i915: only set TV mode when any property changed



If there's no real property change, don't need to set TV mode again.

Signed-off-by: default avatarZhenyu Wang <zhenyu.z.wang@intel.com>
[anholt: checkpatch.pl fix]
Signed-off-by: default avatarEric Anholt <eric@anholt.net>
parent 580982d3
Loading
Loading
Loading
Loading
+20 −7
Original line number Original line Diff line number Diff line
@@ -1571,31 +1571,44 @@ intel_tv_set_property(struct drm_connector *connector, struct drm_property *prop
	struct intel_output *intel_output = to_intel_output(connector);
	struct intel_output *intel_output = to_intel_output(connector);
	struct intel_tv_priv *tv_priv = intel_output->dev_priv;
	struct intel_tv_priv *tv_priv = intel_output->dev_priv;
	int ret = 0;
	int ret = 0;
	bool changed = false;


	ret = drm_connector_property_set_value(connector, property, val);
	ret = drm_connector_property_set_value(connector, property, val);
	if (ret < 0)
	if (ret < 0)
		goto out;
		goto out;


	if (property == dev->mode_config.tv_left_margin_property)
	if (property == dev->mode_config.tv_left_margin_property &&
		tv_priv->margin[TV_MARGIN_LEFT] != val) {
		tv_priv->margin[TV_MARGIN_LEFT] = val;
		tv_priv->margin[TV_MARGIN_LEFT] = val;
	else if (property == dev->mode_config.tv_right_margin_property)
		changed = true;
	} else if (property == dev->mode_config.tv_right_margin_property &&
		tv_priv->margin[TV_MARGIN_RIGHT] != val) {
		tv_priv->margin[TV_MARGIN_RIGHT] = val;
		tv_priv->margin[TV_MARGIN_RIGHT] = val;
	else if (property == dev->mode_config.tv_top_margin_property)
		changed = true;
	} else if (property == dev->mode_config.tv_top_margin_property &&
		tv_priv->margin[TV_MARGIN_TOP] != val) {
		tv_priv->margin[TV_MARGIN_TOP] = val;
		tv_priv->margin[TV_MARGIN_TOP] = val;
	else if (property == dev->mode_config.tv_bottom_margin_property)
		changed = true;
	} else if (property == dev->mode_config.tv_bottom_margin_property &&
		tv_priv->margin[TV_MARGIN_BOTTOM] != val) {
		tv_priv->margin[TV_MARGIN_BOTTOM] = val;
		tv_priv->margin[TV_MARGIN_BOTTOM] = val;
	else if (property == dev->mode_config.tv_mode_property) {
		changed = true;
	} else if (property == dev->mode_config.tv_mode_property) {
		if (val >= NUM_TV_MODES) {
		if (val >= NUM_TV_MODES) {
			ret = -EINVAL;
			ret = -EINVAL;
			goto out;
			goto out;
		}
		}
		if (!strcmp(tv_priv->tv_format, tv_modes[val].name))
			goto out;

		tv_priv->tv_format = tv_modes[val].name;
		tv_priv->tv_format = tv_modes[val].name;
		intel_tv_mode_set(&intel_output->enc, NULL, NULL);
		changed = true;
	} else {
	} else {
		ret = -EINVAL;
		ret = -EINVAL;
		goto out;
		goto out;
	}
	}


	if (changed)
		intel_tv_mode_set(&intel_output->enc, NULL, NULL);
		intel_tv_mode_set(&intel_output->enc, NULL, NULL);
out:
out:
	return ret;
	return ret;