media: ov5670: Add implementation for events
authorRicardo Ribalda <ribalda@chromium.org>
Wed, 6 Oct 2021 22:26:25 +0000 (00:26 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Fri, 8 Oct 2021 11:42:26 +0000 (13:42 +0200)
Use v4l2 control API helpers to support the events.

Fixes v4l2-compliance:

test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: FAIL

Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/i2c/ov5670.c

index 4918992..251f459 100644 (file)
@@ -7,6 +7,7 @@
 #include <linux/pm_runtime.h>
 #include <media/v4l2-ctrls.h>
 #include <media/v4l2-device.h>
+#include <media/v4l2-event.h>
 #include <media/v4l2-fwnode.h>
 
 #define OV5670_REG_CHIP_ID             0x300a
@@ -2420,6 +2421,12 @@ static int ov5670_identify_module(struct ov5670 *ov5670)
        return 0;
 }
 
+static const struct v4l2_subdev_core_ops ov5670_core_ops = {
+       .log_status = v4l2_ctrl_subdev_log_status,
+       .subscribe_event = v4l2_ctrl_subdev_subscribe_event,
+       .unsubscribe_event = v4l2_event_subdev_unsubscribe,
+};
+
 static const struct v4l2_subdev_video_ops ov5670_video_ops = {
        .s_stream = ov5670_set_stream,
 };
@@ -2436,6 +2443,7 @@ static const struct v4l2_subdev_sensor_ops ov5670_sensor_ops = {
 };
 
 static const struct v4l2_subdev_ops ov5670_subdev_ops = {
+       .core = &ov5670_core_ops,
        .video = &ov5670_video_ops,
        .pad = &ov5670_pad_ops,
        .sensor = &ov5670_sensor_ops,
@@ -2489,7 +2497,8 @@ static int ov5670_probe(struct i2c_client *client)
        }
 
        ov5670->sd.internal_ops = &ov5670_internal_ops;
-       ov5670->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
+       ov5670->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
+                           V4L2_SUBDEV_FL_HAS_EVENTS;
        ov5670->sd.entity.ops = &ov5670_subdev_entity_ops;
        ov5670->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;