Browse Source

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>
Lucas Stach 11 years ago
parent
commit
32f7110623
2 changed files with 6 additions and 1 deletions
  1. 2 1
      drivers/staging/imx-drm/ipuv3-crtc.c
  2. 4 0
      drivers/staging/imx-drm/ipuv3-plane.c

+ 2 - 1
drivers/staging/imx-drm/ipuv3-crtc.c

@@ -218,7 +218,8 @@ static irqreturn_t ipu_irq_handler(int irq, void *dev_id)
 
 	if (ipu_crtc->newfb) {
 		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);
 	}
 

+ 4 - 0
drivers/staging/imx-drm/ipuv3-plane.c

@@ -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, 1, eba);
 
+	/* cache offsets for subsequent pageflips */
+	ipu_plane->x = x;
+	ipu_plane->y = y;
+
 	return 0;
 }