On Thu May 21 00:44:18 2026 +0200, Sven Püschel wrote:
> 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 <[email protected]>
> Signed-off-by: Sven Püschel <[email protected]>
> Signed-off-by: Nicolas Dufresne <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/rockchip/rga/rga-hw.c | 45 +++++++---------------------
 drivers/media/platform/rockchip/rga/rga.h    |  2 --
 2 files changed, 11 insertions(+), 36 deletions(-)

---

diff --git a/drivers/media/platform/rockchip/rga/rga-hw.c 
b/drivers/media/platform/rockchip/rga/rga-hw.c
index 40498796507e..17f7a67c0b4b 100644
--- a/drivers/media/platform/rockchip/rga/rga-hw.c
+++ b/drivers/media/platform/rockchip/rga/rga-hw.c
@@ -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,
        },
 };
 
diff --git a/drivers/media/platform/rockchip/rga/rga.h 
b/drivers/media/platform/rockchip/rga/rga.h
index 640e51028534..27b3c9b4f220 100644
--- a/drivers/media/platform/rockchip/rga/rga.h
+++ b/drivers/media/platform/rockchip/rga/rga.h
@@ -20,8 +20,6 @@
 struct rga_fmt {
        u32 fourcc;
        int depth;
-       u8 y_div;
-       u8 x_div;
        u8 color_swap;
        u8 hw_format;
 };
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to