diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_plane.c')
| -rw-r--r-- | drivers/gpu/drm/omapdrm/omap_plane.c | 56 | 
1 files changed, 31 insertions, 25 deletions
| diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/omapdrm/omap_plane.c index 51dc24acea73..801da917507d 100644 --- a/drivers/gpu/drm/omapdrm/omap_plane.c +++ b/drivers/gpu/drm/omapdrm/omap_plane.c @@ -40,30 +40,32 @@ static void omap_plane_cleanup_fb(struct drm_plane *plane,  }  static void omap_plane_atomic_update(struct drm_plane *plane, -				     struct drm_plane_state *old_state) +				     struct drm_atomic_state *state)  {  	struct omap_drm_private *priv = plane->dev->dev_private;  	struct omap_plane *omap_plane = to_omap_plane(plane); -	struct drm_plane_state *state = plane->state; +	struct drm_plane_state *new_state = drm_atomic_get_new_plane_state(state, +									   plane);  	struct omap_overlay_info info;  	int ret; -	DBG("%s, crtc=%p fb=%p", omap_plane->name, state->crtc, state->fb); +	DBG("%s, crtc=%p fb=%p", omap_plane->name, new_state->crtc, +	    new_state->fb);  	memset(&info, 0, sizeof(info));  	info.rotation_type = OMAP_DSS_ROT_NONE;  	info.rotation = DRM_MODE_ROTATE_0; -	info.global_alpha = state->alpha >> 8; -	info.zorder = state->normalized_zpos; -	if (state->pixel_blend_mode == DRM_MODE_BLEND_PREMULTI) +	info.global_alpha = new_state->alpha >> 8; +	info.zorder = new_state->normalized_zpos; +	if (new_state->pixel_blend_mode == DRM_MODE_BLEND_PREMULTI)  		info.pre_mult_alpha = 1;  	else  		info.pre_mult_alpha = 0; -	info.color_encoding = state->color_encoding; -	info.color_range = state->color_range; +	info.color_encoding = new_state->color_encoding; +	info.color_range = new_state->color_range;  	/* update scanout: */ -	omap_framebuffer_update_scanout(state->fb, state, &info); +	omap_framebuffer_update_scanout(new_state->fb, new_state, &info);  	DBG("%dx%d -> %dx%d (%d)", info.width, info.height,  			info.out_width, info.out_height, @@ -73,8 +75,8 @@ static void omap_plane_atomic_update(struct drm_plane *plane,  	/* and finally, update omapdss: */  	ret = dispc_ovl_setup(priv->dispc, omap_plane->id, &info, -			      omap_crtc_timings(state->crtc), false, -			      omap_crtc_channel(state->crtc)); +			      omap_crtc_timings(new_state->crtc), false, +			      omap_crtc_channel(new_state->crtc));  	if (ret) {  		dev_err(plane->dev->dev, "Failed to setup plane %s\n",  			omap_plane->name); @@ -86,31 +88,35 @@ static void omap_plane_atomic_update(struct drm_plane *plane,  }  static void omap_plane_atomic_disable(struct drm_plane *plane, -				      struct drm_plane_state *old_state) +				      struct drm_atomic_state *state)  { +	struct drm_plane_state *new_state = drm_atomic_get_new_plane_state(state, +									   plane);  	struct omap_drm_private *priv = plane->dev->dev_private;  	struct omap_plane *omap_plane = to_omap_plane(plane); -	plane->state->rotation = DRM_MODE_ROTATE_0; -	plane->state->zpos = plane->type == DRM_PLANE_TYPE_PRIMARY -			   ? 0 : omap_plane->id; +	new_state->rotation = DRM_MODE_ROTATE_0; +	new_state->zpos = plane->type == DRM_PLANE_TYPE_PRIMARY ? 0 : omap_plane->id;  	dispc_ovl_enable(priv->dispc, omap_plane->id, false);  }  static int omap_plane_atomic_check(struct drm_plane *plane, -				   struct drm_plane_state *state) +				   struct drm_atomic_state *state)  { +	struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state, +										 plane);  	struct drm_crtc_state *crtc_state; -	if (!state->fb) +	if (!new_plane_state->fb)  		return 0; -	/* crtc should only be NULL when disabling (i.e., !state->fb) */ -	if (WARN_ON(!state->crtc)) +	/* crtc should only be NULL when disabling (i.e., !new_plane_state->fb) */ +	if (WARN_ON(!new_plane_state->crtc))  		return 0; -	crtc_state = drm_atomic_get_existing_crtc_state(state->state, state->crtc); +	crtc_state = drm_atomic_get_existing_crtc_state(state, +							new_plane_state->crtc);  	/* we should have a crtc state if the plane is attached to a crtc */  	if (WARN_ON(!crtc_state))  		return 0; @@ -118,17 +124,17 @@ static int omap_plane_atomic_check(struct drm_plane *plane,  	if (!crtc_state->enable)  		return 0; -	if (state->crtc_x < 0 || state->crtc_y < 0) +	if (new_plane_state->crtc_x < 0 || new_plane_state->crtc_y < 0)  		return -EINVAL; -	if (state->crtc_x + state->crtc_w > crtc_state->adjusted_mode.hdisplay) +	if (new_plane_state->crtc_x + new_plane_state->crtc_w > crtc_state->adjusted_mode.hdisplay)  		return -EINVAL; -	if (state->crtc_y + state->crtc_h > crtc_state->adjusted_mode.vdisplay) +	if (new_plane_state->crtc_y + new_plane_state->crtc_h > crtc_state->adjusted_mode.vdisplay)  		return -EINVAL; -	if (state->rotation != DRM_MODE_ROTATE_0 && -	    !omap_framebuffer_supports_rotation(state->fb)) +	if (new_plane_state->rotation != DRM_MODE_ROTATE_0 && +	    !omap_framebuffer_supports_rotation(new_plane_state->fb))  		return -EINVAL;  	return 0; | 
