The IPUv3 overlay plane may be placed over or under the primary plane. Set the zpos of the primary to an immutable position of 1 to have the possibility to place the other plane underneath it.
Set the zpos of other planes (the overlay plane) to a mutable value between 0 (the lowest possible value of a zpos) and directly above the primary plane with the latter being the default. Signed-off-by: Michael Tretter <[email protected]> --- Changes in v2: - Simplify and remove duplicate check for primary plane - Rephrase commit message --- drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c index dfd036f3195e..f078235ed07b 100644 --- a/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c +++ b/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c @@ -890,7 +890,7 @@ struct ipu_plane *ipu_plane_init(struct drm_device *dev, struct ipu_soc *ipu, { struct ipu_plane *ipu_plane; const uint64_t *modifiers = ipu_format_modifiers; - unsigned int zpos = (type == DRM_PLANE_TYPE_PRIMARY) ? 0 : 1; + unsigned int primary_zpos = 1; unsigned int format_count; const uint32_t *formats; int ret; @@ -923,17 +923,16 @@ struct ipu_plane *ipu_plane_init(struct drm_device *dev, struct ipu_soc *ipu, ipu_plane->dma = dma; ipu_plane->dp_flow = dp; - if (type == DRM_PLANE_TYPE_PRIMARY) + if (type == DRM_PLANE_TYPE_PRIMARY) { drm_plane_helper_add(&ipu_plane->base, &ipu_primary_plane_helper_funcs); - else - drm_plane_helper_add(&ipu_plane->base, &ipu_plane_helper_funcs); - - if (dp == IPU_DP_FLOW_SYNC_BG || dp == IPU_DP_FLOW_SYNC_FG) - ret = drm_plane_create_zpos_property(&ipu_plane->base, zpos, 0, - 1); - else ret = drm_plane_create_zpos_immutable_property(&ipu_plane->base, - 0); + primary_zpos); + } else { + drm_plane_helper_add(&ipu_plane->base, &ipu_plane_helper_funcs); + ret = drm_plane_create_zpos_property(&ipu_plane->base, + primary_zpos + 1, 0, + primary_zpos + 1); + } if (ret) return ERR_PTR(ret); -- 2.47.3
