diff options
| author | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
|---|---|---|
| committer | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
| commit | 79828b4fa835f73cdaf4bffa48696abdcbea9d02 (patch) | |
| tree | 5e0fa7156acb75ba603022bc807df8f2fedb97a8 /drivers/gpu/drm/i915/intel_atomic_plane.c | |
| parent | 721b51fcf91898299d96f4b72cb9434cda29dce6 (diff) | |
| parent | 8c1a9d6323abf0fb1e5dad96cf3f1c783505ea5a (diff) | |
Merge remote-tracking branch 'asoc/fix/rt5645' into asoc-fix-rt5645
Diffstat (limited to 'drivers/gpu/drm/i915/intel_atomic_plane.c')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_atomic_plane.c | 41 | 
1 files changed, 15 insertions, 26 deletions
diff --git a/drivers/gpu/drm/i915/intel_atomic_plane.c b/drivers/gpu/drm/i915/intel_atomic_plane.c index 86ba4b2c3a65..f1ab8e4b9c11 100644 --- a/drivers/gpu/drm/i915/intel_atomic_plane.c +++ b/drivers/gpu/drm/i915/intel_atomic_plane.c @@ -56,6 +56,7 @@ intel_create_plane_state(struct drm_plane *plane)  	state->base.plane = plane;  	state->base.rotation = BIT(DRM_ROTATE_0); +	state->ckey.flags = I915_SET_COLORKEY_NONE;  	return state;  } @@ -114,8 +115,10 @@ static int intel_plane_atomic_check(struct drm_plane *plane,  	struct intel_crtc_state *crtc_state;  	struct intel_plane *intel_plane = to_intel_plane(plane);  	struct intel_plane_state *intel_state = to_intel_plane_state(state); +	struct drm_crtc_state *drm_crtc_state; +	int ret; -	crtc = crtc ? crtc : plane->crtc; +	crtc = crtc ? crtc : plane->state->crtc;  	intel_crtc = to_intel_crtc(crtc);  	/* @@ -127,16 +130,11 @@ static int intel_plane_atomic_check(struct drm_plane *plane,  	if (!crtc)  		return 0; -	/* FIXME: temporary hack necessary while we still use the plane update -	 * helper. */ -	if (state->state) { -		crtc_state = -			intel_atomic_get_crtc_state(state->state, intel_crtc); -		if (IS_ERR(crtc_state)) -			return PTR_ERR(crtc_state); -	} else { -		crtc_state = intel_crtc->config; -	} +	drm_crtc_state = drm_atomic_get_existing_crtc_state(state->state, crtc); +	if (WARN_ON(!drm_crtc_state)) +		return -EINVAL; + +	crtc_state = to_intel_crtc_state(drm_crtc_state);  	/*  	 * The original src/dest coordinates are stored in state->base, but @@ -160,20 +158,6 @@ static int intel_plane_atomic_check(struct drm_plane *plane,  	intel_state->clip.y2 =  		crtc_state->base.active ? crtc_state->pipe_src_h : 0; -	/* -	 * Disabling a plane is always okay; we just need to update -	 * fb tracking in a special way since cleanup_fb() won't -	 * get called by the plane helpers. -	 */ -	if (state->fb == NULL && plane->state->fb != NULL) { -		/* -		 * 'prepare' is never called when plane is being disabled, so -		 * we need to handle frontbuffer tracking as a special case -		 */ -		intel_crtc->atomic.disabled_planes |= -			(1 << drm_plane_index(plane)); -	} -  	if (state->fb && intel_rotation_90_or_270(state->rotation)) {  		if (!(state->fb->modifier[0] == I915_FORMAT_MOD_Y_TILED ||  			state->fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED)) { @@ -198,7 +182,12 @@ static int intel_plane_atomic_check(struct drm_plane *plane,  		}  	} -	return intel_plane->check_plane(plane, intel_state); +	intel_state->visible = false; +	ret = intel_plane->check_plane(plane, crtc_state, intel_state); +	if (ret) +		return ret; + +	return intel_plane_atomic_calc_changes(&crtc_state->base, state);  }  static void intel_plane_atomic_update(struct drm_plane *plane,  |