mirror of
https://github.com/armbian/build.git
synced 2025-08-15 23:56:57 +02:00
111 lines
4.0 KiB
Diff
111 lines
4.0 KiB
Diff
From cbcd78524e95d5d2581ebcafdab2ff4d13ac64c1 Mon Sep 17 00:00:00 2001
|
|
From: Vedang Nagar <quic_vnagar@quicinc.com>
|
|
Date: Fri, 7 Feb 2025 13:24:53 +0530
|
|
Subject: [PATCH] media: iris: implement subscribe_event and unsubscribe_event
|
|
ioctls
|
|
|
|
Implement the subscribe_event and unsubscribe_event iocts with the
|
|
necessary hooks.
|
|
|
|
Signed-off-by: Vedang Nagar <quic_vnagar@quicinc.com>
|
|
Reviewed-by: Hans Verkuil <hverkuil@xs4all.nl>
|
|
Tested-by: Stefan Schmidt <stefan.schmidt@linaro.org> # x1e80100 (Dell XPS 13 9345)
|
|
Reviewed-by: Stefan Schmidt <stefan.schmidt@linaro.org>
|
|
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD
|
|
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-HDK
|
|
Signed-off-by: Dikshita Agarwal <quic_dikshita@quicinc.com>
|
|
Link: https://lore.kernel.org/r/20250207-qcom-video-iris-v10-13-ab66eeffbd20@quicinc.com
|
|
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
|
|
---
|
|
drivers/media/platform/qcom/iris/iris_vdec.c | 22 ++++++++++++++++++++
|
|
drivers/media/platform/qcom/iris/iris_vdec.h | 1 +
|
|
drivers/media/platform/qcom/iris/iris_vidc.c | 10 +++++++++
|
|
3 files changed, 33 insertions(+)
|
|
|
|
diff --git a/drivers/media/platform/qcom/iris/iris_vdec.c b/drivers/media/platform/qcom/iris/iris_vdec.c
|
|
index 081a9eda5c49..0ba60bcb9fa9 100644
|
|
--- a/drivers/media/platform/qcom/iris/iris_vdec.c
|
|
+++ b/drivers/media/platform/qcom/iris/iris_vdec.c
|
|
@@ -3,6 +3,7 @@
|
|
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*/
|
|
|
|
+#include <media/v4l2-event.h>
|
|
#include <media/v4l2-mem2mem.h>
|
|
|
|
#include "iris_buffer.h"
|
|
@@ -193,3 +194,24 @@ int iris_vdec_s_fmt(struct iris_inst *inst, struct v4l2_format *f)
|
|
|
|
return 0;
|
|
}
|
|
+
|
|
+int iris_vdec_subscribe_event(struct iris_inst *inst, const struct v4l2_event_subscription *sub)
|
|
+{
|
|
+ int ret = 0;
|
|
+
|
|
+ switch (sub->type) {
|
|
+ case V4L2_EVENT_EOS:
|
|
+ ret = v4l2_event_subscribe(&inst->fh, sub, 0, NULL);
|
|
+ break;
|
|
+ case V4L2_EVENT_SOURCE_CHANGE:
|
|
+ ret = v4l2_src_change_event_subscribe(&inst->fh, sub);
|
|
+ break;
|
|
+ case V4L2_EVENT_CTRL:
|
|
+ ret = v4l2_ctrl_subscribe_event(&inst->fh, sub);
|
|
+ break;
|
|
+ default:
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ return ret;
|
|
+}
|
|
diff --git a/drivers/media/platform/qcom/iris/iris_vdec.h b/drivers/media/platform/qcom/iris/iris_vdec.h
|
|
index ae456676e578..f64ce3234e6a 100644
|
|
--- a/drivers/media/platform/qcom/iris/iris_vdec.h
|
|
+++ b/drivers/media/platform/qcom/iris/iris_vdec.h
|
|
@@ -13,5 +13,6 @@ void iris_vdec_inst_deinit(struct iris_inst *inst);
|
|
int iris_vdec_enum_fmt(struct iris_inst *inst, struct v4l2_fmtdesc *f);
|
|
int iris_vdec_try_fmt(struct iris_inst *inst, struct v4l2_format *f);
|
|
int iris_vdec_s_fmt(struct iris_inst *inst, struct v4l2_format *f);
|
|
+int iris_vdec_subscribe_event(struct iris_inst *inst, const struct v4l2_event_subscription *sub);
|
|
|
|
#endif
|
|
diff --git a/drivers/media/platform/qcom/iris/iris_vidc.c b/drivers/media/platform/qcom/iris/iris_vidc.c
|
|
index 82bd0be8e5da..511cd13ac471 100644
|
|
--- a/drivers/media/platform/qcom/iris/iris_vidc.c
|
|
+++ b/drivers/media/platform/qcom/iris/iris_vidc.c
|
|
@@ -4,6 +4,7 @@
|
|
*/
|
|
|
|
#include <linux/pm_runtime.h>
|
|
+#include <media/v4l2-event.h>
|
|
#include <media/v4l2-ioctl.h>
|
|
#include <media/v4l2-mem2mem.h>
|
|
|
|
@@ -322,6 +323,13 @@ static int iris_g_selection(struct file *filp, void *fh, struct v4l2_selection *
|
|
return 0;
|
|
}
|
|
|
|
+static int iris_subscribe_event(struct v4l2_fh *fh, const struct v4l2_event_subscription *sub)
|
|
+{
|
|
+ struct iris_inst *inst = container_of(fh, struct iris_inst, fh);
|
|
+
|
|
+ return iris_vdec_subscribe_event(inst, sub);
|
|
+}
|
|
+
|
|
static struct v4l2_file_operations iris_v4l2_file_ops = {
|
|
.owner = THIS_MODULE,
|
|
.open = iris_open,
|
|
@@ -347,6 +355,8 @@ static const struct v4l2_ioctl_ops iris_v4l2_ioctl_ops = {
|
|
.vidioc_enum_framesizes = iris_enum_framesizes,
|
|
.vidioc_reqbufs = v4l2_m2m_ioctl_reqbufs,
|
|
.vidioc_g_selection = iris_g_selection,
|
|
+ .vidioc_subscribe_event = iris_subscribe_event,
|
|
+ .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
|
|
};
|
|
|
|
void iris_init_ops(struct iris_core *core)
|
|
--
|
|
2.34.1
|
|
|