On Thu May 21 00:44:30 2026 +0200, Sven Püschel wrote:
> In preparation to the RGA3 addition add feature flags, which can limit
> the exposed feature set of the video device, like rotating or selection
> support. This is necessary as the RGA3 doesn't initially implement the
> full feature set currently exposed by the driver.
> 
> 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 |  3 +++
 drivers/media/platform/rockchip/rga/rga.c    | 20 ++++++++++++--------
 drivers/media/platform/rockchip/rga/rga.h    |  6 ++++++
 3 files changed, 21 insertions(+), 8 deletions(-)

---

diff --git a/drivers/media/platform/rockchip/rga/rga-hw.c 
b/drivers/media/platform/rockchip/rga/rga-hw.c
index 616ea1bc1131..be1bc8ddbd03 100644
--- a/drivers/media/platform/rockchip/rga/rga-hw.c
+++ b/drivers/media/platform/rockchip/rga/rga-hw.c
@@ -602,6 +602,9 @@ const struct rga_hw rga2_hw = {
        .max_height = MAX_HEIGHT,
        .max_scaling_factor = MAX_SCALING_FACTOR,
        .stride_alignment = 4,
+       .features = RGA_FEATURE_FLIP
+                 | RGA_FEATURE_ROTATE
+                 | RGA_FEATURE_BG_COLOR,
 
        .setup_cmdbuf = rga_hw_setup_cmdbuf,
        .start = rga_hw_start,
diff --git a/drivers/media/platform/rockchip/rga/rga.c 
b/drivers/media/platform/rockchip/rga/rga.c
index 1878b4e26360..8d60e94da32d 100644
--- a/drivers/media/platform/rockchip/rga/rga.c
+++ b/drivers/media/platform/rockchip/rga/rga.c
@@ -177,17 +177,21 @@ static int rga_setup_ctrls(struct rga_ctx *ctx)
 
        v4l2_ctrl_handler_init(&ctx->ctrl_handler, 4);
 
-       v4l2_ctrl_new_std(&ctx->ctrl_handler, &rga_ctrl_ops,
-                         V4L2_CID_HFLIP, 0, 1, 1, 0);
+       if (rga->hw->features & RGA_FEATURE_FLIP) {
+               v4l2_ctrl_new_std(&ctx->ctrl_handler, &rga_ctrl_ops,
+                                 V4L2_CID_HFLIP, 0, 1, 1, 0);
 
-       v4l2_ctrl_new_std(&ctx->ctrl_handler, &rga_ctrl_ops,
-                         V4L2_CID_VFLIP, 0, 1, 1, 0);
+               v4l2_ctrl_new_std(&ctx->ctrl_handler, &rga_ctrl_ops,
+                                 V4L2_CID_VFLIP, 0, 1, 1, 0);
+       }
 
-       v4l2_ctrl_new_std(&ctx->ctrl_handler, &rga_ctrl_ops,
-                         V4L2_CID_ROTATE, 0, 270, 90, 0);
+       if (rga->hw->features & RGA_FEATURE_ROTATE)
+               v4l2_ctrl_new_std(&ctx->ctrl_handler, &rga_ctrl_ops,
+                                 V4L2_CID_ROTATE, 0, 270, 90, 0);
 
-       v4l2_ctrl_new_std(&ctx->ctrl_handler, &rga_ctrl_ops,
-                         V4L2_CID_BG_COLOR, 0, 0xffffffff, 1, 0);
+       if (rga->hw->features & RGA_FEATURE_BG_COLOR)
+               v4l2_ctrl_new_std(&ctx->ctrl_handler, &rga_ctrl_ops,
+                                 V4L2_CID_BG_COLOR, 0, 0xffffffff, 1, 0);
 
        if (ctx->ctrl_handler.error) {
                int err = ctx->ctrl_handler.error;
diff --git a/drivers/media/platform/rockchip/rga/rga.h 
b/drivers/media/platform/rockchip/rga/rga.h
index effe364a86b0..feaf40acd4ee 100644
--- a/drivers/media/platform/rockchip/rga/rga.h
+++ b/drivers/media/platform/rockchip/rga/rga.h
@@ -6,6 +6,7 @@
 #ifndef __RGA_H__
 #define __RGA_H__
 
+#include <linux/bits.h>
 #include <linux/clk.h>
 #include <linux/platform_device.h>
 #include <media/videobuf2-v4l2.h>
@@ -137,6 +138,10 @@ static inline void rga_mod(struct rockchip_rga *rga, u32 
reg, u32 val, u32 mask)
        rga_write(rga, reg, temp);
 };
 
+#define RGA_FEATURE_FLIP       BIT(0)
+#define RGA_FEATURE_ROTATE     BIT(1)
+#define RGA_FEATURE_BG_COLOR   BIT(2)
+
 struct rga_hw {
        const char *card_type;
        bool has_internal_iommu;
@@ -145,6 +150,7 @@ struct rga_hw {
        u32 max_width, max_height;
        u8 max_scaling_factor;
        u8 stride_alignment;
+       u8 features;
 
        void (*setup_cmdbuf)(struct rga_ctx *ctx);
        void (*start)(struct rockchip_rga *rga,
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to