drm: rcar-du: Add more formats to DRM_MODE_BLEND_PIXEL_NONE support
authorDamian Hobson-Garcia <dhobsong@igel.co.jp>
Fri, 28 Jul 2023 20:07:13 +0000 (16:07 -0400)
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Mon, 14 Aug 2023 10:47:30 +0000 (13:47 +0300)
Add additional pixel formats for which blending is disabled when
DRM_MODE_BLEND_PIXEL_NONE is set.

Refactor the fourcc selection into a separate function to handle the
increased number of formats.

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

index 9cbb5e6..c006bdf 100644 (file)
@@ -177,6 +177,37 @@ static const u32 rcar_du_vsp_formats_gen4[] = {
        DRM_FORMAT_Y212,
 };
 
+static u32 rcar_du_vsp_state_get_format(struct rcar_du_vsp_plane_state *state)
+{
+       u32 fourcc = state->format->fourcc;
+
+       if (state->state.pixel_blend_mode == DRM_MODE_BLEND_PIXEL_NONE) {
+               switch (fourcc) {
+               case DRM_FORMAT_ARGB1555:
+                       fourcc = DRM_FORMAT_XRGB1555;
+                       break;
+
+               case DRM_FORMAT_ARGB4444:
+                       fourcc = DRM_FORMAT_XRGB4444;
+                       break;
+
+               case DRM_FORMAT_ARGB8888:
+                       fourcc = DRM_FORMAT_XRGB8888;
+                       break;
+
+               case DRM_FORMAT_BGRA8888:
+                       fourcc = DRM_FORMAT_BGRX8888;
+                       break;
+
+               case DRM_FORMAT_RGBA1010102:
+                       fourcc = DRM_FORMAT_RGBX1010102;
+                       break;
+               }
+       }
+
+       return fourcc;
+}
+
 static void rcar_du_vsp_plane_setup(struct rcar_du_vsp_plane *plane)
 {
        struct rcar_du_vsp_plane_state *state =
@@ -190,7 +221,7 @@ static void rcar_du_vsp_plane_setup(struct rcar_du_vsp_plane *plane)
                .alpha = state->state.alpha >> 8,
                .zpos = state->state.zpos,
        };
-       u32 fourcc = state->format->fourcc;
+       u32 fourcc = rcar_du_vsp_state_get_format(state);
        unsigned int i;
 
        cfg.src.left = state->state.src.x1 >> 16;
@@ -207,22 +238,6 @@ static void rcar_du_vsp_plane_setup(struct rcar_du_vsp_plane *plane)
                cfg.mem[i] = sg_dma_address(state->sg_tables[i].sgl)
                           + fb->offsets[i];
 
-       if (state->state.pixel_blend_mode == DRM_MODE_BLEND_PIXEL_NONE) {
-               switch (fourcc) {
-               case DRM_FORMAT_ARGB1555:
-                       fourcc = DRM_FORMAT_XRGB1555;
-                       break;
-
-               case DRM_FORMAT_ARGB4444:
-                       fourcc = DRM_FORMAT_XRGB4444;
-                       break;
-
-               case DRM_FORMAT_ARGB8888:
-                       fourcc = DRM_FORMAT_XRGB8888;
-                       break;
-               }
-       }
-
        format = rcar_du_format_info(fourcc);
        cfg.pixelformat = format->v4l2;