media: dw9714: Add implementation for events
authorRicardo Ribalda <ribalda@chromium.org>
Wed, 6 Oct 2021 22:26:23 +0000 (00:26 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Fri, 8 Oct 2021 11:41:48 +0000 (13:41 +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/dw9714.c

index c8b4292512dca41f0d39376f742cd527001bb17c..3863dfeb829346ff5cdd0ce2f20e9cad5d37830d 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>
 
 #define DW9714_NAME            "dw9714"
 #define DW9714_MAX_FOCUS_POS   1023
@@ -100,7 +101,15 @@ static const struct v4l2_subdev_internal_ops dw9714_int_ops = {
        .close = dw9714_close,
 };
 
-static const struct v4l2_subdev_ops dw9714_ops = { };
+static const struct v4l2_subdev_core_ops dw9714_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_ops dw9714_ops = {
+       .core = &dw9714_core_ops,
+};
 
 static void dw9714_subdev_cleanup(struct dw9714_device *dw9714_dev)
 {
@@ -137,7 +146,8 @@ static int dw9714_probe(struct i2c_client *client)
                return -ENOMEM;
 
        v4l2_i2c_subdev_init(&dw9714_dev->sd, client, &dw9714_ops);
-       dw9714_dev->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
+       dw9714_dev->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
+                               V4L2_SUBDEV_FL_HAS_EVENTS;
        dw9714_dev->sd.internal_ops = &dw9714_int_ops;
 
        rval = dw9714_init_controls(dw9714_dev);