drm: rcar-du: Add DRM_MODE_BLEND_PREMULTI support
authorTakanari Hayama <taki@igel.co.jp>
Wed, 10 Aug 2022 08:37:10 +0000 (17:37 +0900)
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Wed, 7 Sep 2022 20:48:39 +0000 (23:48 +0300)
R-Car DU driver implicitly supports DRM_MODE_BLEND_COVERAGE only.
This adds a support for DRM_MODE_BLEND_PREMULTI. As a consequence,
DRM_MODE_BLEND_PREMULTI becomes the default. If DRM_MODE_BLEND_COVERAGE
is desired, it should be set explicitly.

This behavior comes from how DRM blend mode is supported.
drm_plane_create_blend_mode_property() creates the blend mode property
with the default value of DRM_MODE_BLEND_PREMULTI. This default value
cannot be modified from the atomic driver.

Signed-off-by: Takanari Hayama <taki@igel.co.jp>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
drivers/gpu/drm/rcar-du/rcar_du_vsp.c

index 10b7f1d..3d56096 100644 (file)
@@ -171,6 +171,8 @@ static void rcar_du_vsp_plane_setup(struct rcar_du_vsp_plane *plane)
        format = rcar_du_format_info(state->format->fourcc);
        cfg.pixelformat = format->v4l2;
 
+       cfg.premult = state->state.pixel_blend_mode == DRM_MODE_BLEND_PREMULTI;
+
        vsp1_du_atomic_update(plane->vsp->vsp, crtc->vsp_pipe,
                              plane->index, &cfg);
 }
@@ -436,6 +438,10 @@ int rcar_du_vsp_init(struct rcar_du_vsp *vsp, struct device_node *np,
                drm_plane_create_zpos_property(&plane->plane, i, 0,
                                               num_planes - 1);
 
+               drm_plane_create_blend_mode_property(&plane->plane,
+                                       BIT(DRM_MODE_BLEND_PREMULTI) |
+                                       BIT(DRM_MODE_BLEND_COVERAGE));
+
                vsp->num_planes++;
        }