diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_plane.c')
| -rw-r--r-- | drivers/gpu/drm/omapdrm/omap_plane.c | 16 | 
1 files changed, 12 insertions, 4 deletions
| diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/omapdrm/omap_plane.c index 046d5e660c0..3cf31ee59aa 100644 --- a/drivers/gpu/drm/omapdrm/omap_plane.c +++ b/drivers/gpu/drm/omapdrm/omap_plane.c @@ -225,6 +225,11 @@ int omap_plane_mode_set(struct drm_plane *plane,  		omap_plane->apply_done_cb.arg = arg;  	} +	if (plane->fb) +		drm_framebuffer_unreference(plane->fb); + +	drm_framebuffer_reference(fb); +  	plane->fb = fb;  	plane->crtc = crtc; @@ -241,10 +246,13 @@ static int omap_plane_update(struct drm_plane *plane,  	struct omap_plane *omap_plane = to_omap_plane(plane);  	omap_plane->enabled = true; -	if (plane->fb) -		drm_framebuffer_unreference(plane->fb); - -	drm_framebuffer_reference(fb); +	/* omap_plane_mode_set() takes adjusted src */ +	switch (omap_plane->win.rotation & 0xf) { +	case BIT(DRM_ROTATE_90): +	case BIT(DRM_ROTATE_270): +		swap(src_w, src_h); +		break; +	}  	return omap_plane_mode_set(plane, crtc, fb,  			crtc_x, crtc_y, crtc_w, crtc_h, | 
