staging: drm/imx: don't drop crtc offsets when doing pageflip

CRTC offsets are only set with the initial modeset, any
subseqent pageflips assume them to be kept the same, so
we need to remember the current state until another modeset
changes it.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Lucas Stach 2014-01-10 16:17:30 +01:00 committed by Greg Kroah-Hartman
parent bc2b067aab
commit 32f7110623
2 changed files with 6 additions and 1 deletions

View File

@ -218,7 +218,8 @@ static irqreturn_t ipu_irq_handler(int irq, void *dev_id)
if (ipu_crtc->newfb) { if (ipu_crtc->newfb) {
ipu_crtc->newfb = NULL; ipu_crtc->newfb = NULL;
ipu_plane_set_base(ipu_crtc->plane[0], ipu_crtc->base.fb, 0, 0); ipu_plane_set_base(ipu_crtc->plane[0], ipu_crtc->base.fb,
ipu_crtc->plane[0]->x, ipu_crtc->plane[0]->y);
ipu_crtc_handle_pageflip(ipu_crtc); ipu_crtc_handle_pageflip(ipu_crtc);
} }

View File

@ -83,6 +83,10 @@ int ipu_plane_set_base(struct ipu_plane *ipu_plane, struct drm_framebuffer *fb,
ipu_cpmem_set_buffer(cpmem, 0, eba); ipu_cpmem_set_buffer(cpmem, 0, eba);
ipu_cpmem_set_buffer(cpmem, 1, eba); ipu_cpmem_set_buffer(cpmem, 1, eba);
/* cache offsets for subsequent pageflips */
ipu_plane->x = x;
ipu_plane->y = y;
return 0; return 0;
} }