media: vivid: add read-only int32 control
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Tue, 18 Aug 2020 14:37:09 +0000 (16:37 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 6 Apr 2021 14:04:24 +0000 (16:04 +0200)
This read-only int32 control is used to test read-only controls in
combination with requests. It is set by the driver to the buffer sequence
counter module 256.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/test-drivers/vivid/vivid-core.h
drivers/media/test-drivers/vivid/vivid-ctrls.c
drivers/media/test-drivers/vivid/vivid-kthread-cap.c

index 9c2d147..cdff6cd 100644 (file)
@@ -230,6 +230,7 @@ struct vivid_dev {
        struct v4l2_ctrl                *string;
        struct v4l2_ctrl                *bitmask;
        struct v4l2_ctrl                *int_menu;
+       struct v4l2_ctrl                *ro_int32;
        struct v4l2_ctrl                *test_pattern;
        struct v4l2_ctrl                *colorspace;
        struct v4l2_ctrl                *rgb_range_cap;
index 7957ead..8dc50fe 100644 (file)
@@ -33,6 +33,7 @@
 #define VIVID_CID_U16_MATRIX           (VIVID_CID_CUSTOM_BASE + 9)
 #define VIVID_CID_U8_4D_ARRAY          (VIVID_CID_CUSTOM_BASE + 10)
 #define VIVID_CID_AREA                 (VIVID_CID_CUSTOM_BASE + 11)
+#define VIVID_CID_RO_INTEGER           (VIVID_CID_CUSTOM_BASE + 12)
 
 #define VIVID_CID_VIVID_BASE           (0x00f00000 | 0xf000)
 #define VIVID_CID_VIVID_CLASS          (0x00f00000 | 1)
@@ -291,6 +292,17 @@ static const struct v4l2_ctrl_config vivid_ctrl_area = {
        .p_def.p_const = &area,
 };
 
+static const struct v4l2_ctrl_config vivid_ctrl_ro_int32 = {
+       .ops = &vivid_user_gen_ctrl_ops,
+       .id = VIVID_CID_RO_INTEGER,
+       .name = "Read-Only Integer 32 Bits",
+       .type = V4L2_CTRL_TYPE_INTEGER,
+       .flags = V4L2_CTRL_FLAG_READ_ONLY,
+       .min = 0,
+       .max = 255,
+       .step = 1,
+};
+
 /* Framebuffer Controls */
 
 static int vivid_fb_s_ctrl(struct v4l2_ctrl *ctrl)
@@ -1601,6 +1613,7 @@ int vivid_create_controls(struct vivid_dev *dev, bool show_ccs_cap,
        dev->string = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_string, NULL);
        dev->bitmask = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_bitmask, NULL);
        dev->int_menu = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_int_menu, NULL);
+       dev->ro_int32 = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_ro_int32, NULL);
        v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_area, NULL);
        v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_u32_array, NULL);
        v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_u16_matrix, NULL);
index 67fb3c0..c0dc609 100644 (file)
@@ -426,6 +426,7 @@ static void vivid_fillbuff(struct vivid_dev *dev, struct vivid_buffer *buf)
                is_loop = true;
 
        buf->vb.sequence = dev->vid_cap_seq_count;
+       v4l2_ctrl_s_ctrl(dev->ro_int32, buf->vb.sequence & 0xff);
        if (dev->field_cap == V4L2_FIELD_ALTERNATE) {
                /*
                 * 60 Hz standards start with the bottom field, 50 Hz standards
@@ -515,10 +516,11 @@ static void vivid_fillbuff(struct vivid_dev *dev, struct vivid_buffer *buf)
                mutex_unlock(dev->ctrl_hdl_user_aud.lock);
                tpg_gen_text(tpg, basep, line++ * line_height, 16, str);
                mutex_lock(dev->ctrl_hdl_user_gen.lock);
-               snprintf(str, sizeof(str), " int32 %d, int64 %lld, bitmask %08x ",
-                       dev->int32->cur.val,
-                       *dev->int64->p_cur.p_s64,
-                       dev->bitmask->cur.val);
+               snprintf(str, sizeof(str), " int32 %d, ro_int32 %d, int64 %lld, bitmask %08x ",
+                        dev->int32->cur.val,
+                        dev->ro_int32->cur.val,
+                        *dev->int64->p_cur.p_s64,
+                        dev->bitmask->cur.val);
                tpg_gen_text(tpg, basep, line++ * line_height, 16, str);
                snprintf(str, sizeof(str), " boolean %d, menu %s, string \"%s\" ",
                        dev->boolean->cur.val,