/*
* rcar_du_plane.c -- R-Car Display Unit Planes
*
- * Copyright (C) 2013 Renesas Corporation
+ * Copyright (C) 2013-2014 Renesas Electronics Corporation
*
* Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com)
*
else
mwr = plane->pitch * 8 / plane->format->bpp;
- rcar_du_plane_write(rgrp, index, PnMWR, mwr);
+ if ((plane->interlace_flag) && (plane->format->bpp == 32))
+ rcar_du_plane_write(rgrp, index, PnMWR, mwr * 2);
+ else
+ rcar_du_plane_write(rgrp, index, PnMWR, mwr);
/* The Y position is expressed in raster line units and must be doubled
* for 32bpp formats, according to the R8A7790 datasheet. No mention of
* require a halved Y position value.
*/
rcar_du_plane_write(rgrp, index, PnSPXR, plane->src_x);
- rcar_du_plane_write(rgrp, index, PnSPYR, plane->src_y *
- (plane->format->bpp == 32 ? 2 : 1));
+ if ((!plane->interlace_flag) && (plane->format->bpp == 32))
+ rcar_du_plane_write(rgrp, index, PnSPYR, plane->src_y * 2);
+ else
+ rcar_du_plane_write(rgrp, index, PnSPYR, plane->src_y);
rcar_du_plane_write(rgrp, index, PnDSA0R, plane->dma[0]);
if (plane->format->planes == 2) {
rplane->height = crtc_h;
rcar_du_plane_compute_base(rplane, fb);
+
+ if (crtc->mode.flags & DRM_MODE_FLAG_INTERLACE)
+ rplane->interlace_flag = true;
+ else
+ rplane->interlace_flag = false;
rcar_du_plane_setup(rplane);
mutex_lock(&rplane->group->planes.lock);
plane->hwplane = &planes->planes[i + 2];
plane->hwplane->zpos = 1;
+ plane->hwplane->interlace_flag = false;
ret = drm_plane_init(rcdu->ddev, &plane->plane, crtcs,
&rcar_du_plane_funcs, formats,