]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: rockchip: rga: calculate x_div/y_div using v4l2_format_info
authorSven Püschel <s.pueschel@pengutronix.de>
Wed, 20 May 2026 22:44:18 +0000 (00:44 +0200)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Thu, 21 May 2026 10:32:19 +0000 (12:32 +0200)
Calculate the x_div and y_div variables with the information from
v4l2_format_info instead of storing these in the rga_fmt struct.

Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Sven Püschel <s.pueschel@pengutronix.de>
Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/platform/rockchip/rga/rga-hw.c
drivers/media/platform/rockchip/rga/rga.h

index 40498796507e015c44100373149782450e1995fe..17f7a67c0b4bb6f6391f6a69abf2b57eef4022b1 100644 (file)
@@ -42,6 +42,7 @@ rga_get_addr_offset(struct rga_frame *frm, struct rga_addr_offset *offset,
 {
        struct rga_corners_addr_offset offsets;
        struct rga_addr_offset *lt, *lb, *rt, *rb;
+       const struct v4l2_format_info *format_info;
        unsigned int x_div = 0,
                     y_div = 0, uv_stride = 0, pixel_width = 0;
 
@@ -50,8 +51,16 @@ rga_get_addr_offset(struct rga_frame *frm, struct rga_addr_offset *offset,
        rt = &offsets.right_top;
        rb = &offsets.right_bottom;
 
-       x_div = frm->fmt->x_div;
-       y_div = frm->fmt->y_div;
+       format_info = v4l2_format_info(frm->pix.pixelformat);
+       /* x_div is only used for the u/v planes.
+        * When the format doesn't have these, use 1 to avoid a division by zero.
+        */
+       if (format_info->bpp[1])
+               x_div = format_info->hdiv * format_info->bpp_div[1] /
+                       format_info->bpp[1];
+       else
+               x_div = 1;
+       y_div = format_info->vdiv;
        uv_stride = frm->stride / x_div;
        pixel_width = frm->stride / frm->pix.width;
 
@@ -476,128 +485,96 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_ALPHA_SWAP,
                .hw_format = RGA_COLOR_FMT_ABGR8888,
                .depth = 32,
-               .y_div = 1,
-               .x_div = 1,
        },
        {
                .fourcc = V4L2_PIX_FMT_ABGR32,
                .color_swap = RGA_COLOR_RB_SWAP,
                .hw_format = RGA_COLOR_FMT_ABGR8888,
                .depth = 32,
-               .y_div = 1,
-               .x_div = 1,
        },
        {
                .fourcc = V4L2_PIX_FMT_XBGR32,
                .color_swap = RGA_COLOR_RB_SWAP,
                .hw_format = RGA_COLOR_FMT_XBGR8888,
                .depth = 32,
-               .y_div = 1,
-               .x_div = 1,
        },
        {
                .fourcc = V4L2_PIX_FMT_RGB24,
                .color_swap = RGA_COLOR_NONE_SWAP,
                .hw_format = RGA_COLOR_FMT_RGB888,
                .depth = 24,
-               .y_div = 1,
-               .x_div = 1,
        },
        {
                .fourcc = V4L2_PIX_FMT_BGR24,
                .color_swap = RGA_COLOR_RB_SWAP,
                .hw_format = RGA_COLOR_FMT_RGB888,
                .depth = 24,
-               .y_div = 1,
-               .x_div = 1,
        },
        {
                .fourcc = V4L2_PIX_FMT_ARGB444,
                .color_swap = RGA_COLOR_RB_SWAP,
                .hw_format = RGA_COLOR_FMT_ABGR4444,
                .depth = 16,
-               .y_div = 1,
-               .x_div = 1,
        },
        {
                .fourcc = V4L2_PIX_FMT_ARGB555,
                .color_swap = RGA_COLOR_RB_SWAP,
                .hw_format = RGA_COLOR_FMT_ABGR1555,
                .depth = 16,
-               .y_div = 1,
-               .x_div = 1,
        },
        {
                .fourcc = V4L2_PIX_FMT_RGB565,
                .color_swap = RGA_COLOR_RB_SWAP,
                .hw_format = RGA_COLOR_FMT_BGR565,
                .depth = 16,
-               .y_div = 1,
-               .x_div = 1,
        },
        {
                .fourcc = V4L2_PIX_FMT_NV21,
                .color_swap = RGA_COLOR_UV_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV420SP,
                .depth = 12,
-               .y_div = 2,
-               .x_div = 1,
        },
        {
                .fourcc = V4L2_PIX_FMT_NV61,
                .color_swap = RGA_COLOR_UV_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV422SP,
                .depth = 16,
-               .y_div = 1,
-               .x_div = 1,
        },
        {
                .fourcc = V4L2_PIX_FMT_NV12,
                .color_swap = RGA_COLOR_NONE_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV420SP,
                .depth = 12,
-               .y_div = 2,
-               .x_div = 1,
        },
        {
                .fourcc = V4L2_PIX_FMT_NV12M,
                .color_swap = RGA_COLOR_NONE_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV420SP,
                .depth = 12,
-               .y_div = 2,
-               .x_div = 1,
        },
        {
                .fourcc = V4L2_PIX_FMT_NV16,
                .color_swap = RGA_COLOR_NONE_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV422SP,
                .depth = 16,
-               .y_div = 1,
-               .x_div = 1,
        },
        {
                .fourcc = V4L2_PIX_FMT_YUV420,
                .color_swap = RGA_COLOR_NONE_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV420P,
                .depth = 12,
-               .y_div = 2,
-               .x_div = 2,
        },
        {
                .fourcc = V4L2_PIX_FMT_YUV422P,
                .color_swap = RGA_COLOR_NONE_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV422P,
                .depth = 16,
-               .y_div = 1,
-               .x_div = 2,
        },
        {
                .fourcc = V4L2_PIX_FMT_YVU420,
                .color_swap = RGA_COLOR_UV_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV420P,
                .depth = 12,
-               .y_div = 2,
-               .x_div = 2,
        },
 };
 
index 640e51028534117a0e0a5f20b689c26e7dd9b55b..27b3c9b4f220cc974b326a58ca95fb8bf46b0064 100644 (file)
@@ -20,8 +20,6 @@
 struct rga_fmt {
        u32 fourcc;
        int depth;
-       u8 y_div;
-       u8 x_div;
        u8 color_swap;
        u8 hw_format;
 };