On Thu Mar 19 01:59:06 2026 +0200, Laurent Pinchart wrote:
> The V4L2 API requires drivers that expose controls to implement control
> notification events. This is enforced by v4l2-compliance. Add event
> handling to the VSP1 entities that create controls to fix the compliance
> failures.
>
> Reviewed-by: Jacopo Mondi <[email protected]>
> Tested-by: Niklas Söderlund <[email protected]>
> Reviewed-by: Jacopo Mondi <[email protected]>
> Tested-by: Lad Prabhakar <[email protected]> # HiHope
> RZ/G2M
> Link:
> https://patch.msgid.link/20260318235907.831556-13-laurent.pinchart+rene...@ideasonboard.com
> Signed-off-by: Laurent Pinchart <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>
Patch committed.
Thanks,
Hans Verkuil
drivers/media/platform/renesas/vsp1/vsp1_brx.c | 1 +
drivers/media/platform/renesas/vsp1/vsp1_clu.c | 1 +
drivers/media/platform/renesas/vsp1/vsp1_entity.c | 9 +++++++++
drivers/media/platform/renesas/vsp1/vsp1_entity.h | 2 ++
drivers/media/platform/renesas/vsp1/vsp1_histo.c | 1 +
drivers/media/platform/renesas/vsp1/vsp1_lut.c | 1 +
drivers/media/platform/renesas/vsp1/vsp1_rwpf.c | 1 +
drivers/media/platform/renesas/vsp1/vsp1_sru.c | 1 +
8 files changed, 17 insertions(+)
---
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_brx.c
b/drivers/media/platform/renesas/vsp1/vsp1_brx.c
index 911359faa600..b1a2c68e9944 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_brx.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_brx.c
@@ -269,6 +269,7 @@ static const struct v4l2_subdev_pad_ops brx_pad_ops = {
};
static const struct v4l2_subdev_ops brx_ops = {
+ .core = &vsp1_entity_core_ops,
.pad = &brx_pad_ops,
};
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_clu.c
b/drivers/media/platform/renesas/vsp1/vsp1_clu.c
index a56c038a2c71..04c466c4da81 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_clu.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_clu.c
@@ -130,6 +130,7 @@ static const struct v4l2_subdev_pad_ops clu_pad_ops = {
};
static const struct v4l2_subdev_ops clu_ops = {
+ .core = &vsp1_entity_core_ops,
.pad = &clu_pad_ops,
};
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_entity.c
b/drivers/media/platform/renesas/vsp1/vsp1_entity.c
index 892a2adfdf3a..839b75b62ceb 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_entity.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_entity.c
@@ -14,6 +14,7 @@
#include <media/media-entity.h>
#include <media/v4l2-ctrls.h>
+#include <media/v4l2-event.h>
#include <media/v4l2-subdev.h>
#include "vsp1.h"
@@ -396,6 +397,11 @@ static const struct v4l2_subdev_internal_ops
vsp1_entity_internal_ops = {
.init_state = vsp1_entity_init_state,
};
+const struct v4l2_subdev_core_ops vsp1_entity_core_ops = {
+ .subscribe_event = v4l2_ctrl_subdev_subscribe_event,
+ .unsubscribe_event = v4l2_event_subdev_unsubscribe,
+};
+
/*
-----------------------------------------------------------------------------
* Media Operations
*/
@@ -639,6 +645,9 @@ int vsp1_entity_init(struct vsp1_device *vsp1, struct
vsp1_entity *entity,
subdev->entity.ops = &vsp1->media_ops;
subdev->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
+ if (ops->core == &vsp1_entity_core_ops)
+ subdev->flags |= V4L2_SUBDEV_FL_HAS_EVENTS;
+
snprintf(subdev->name, sizeof(subdev->name), "%s %s",
dev_name(vsp1->dev), name);
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_entity.h
b/drivers/media/platform/renesas/vsp1/vsp1_entity.h
index 88daf83cd1ab..c0c1fe7d3e40 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_entity.h
+++ b/drivers/media/platform/renesas/vsp1/vsp1_entity.h
@@ -143,6 +143,8 @@ static inline struct vsp1_entity *to_vsp1_entity(struct
v4l2_subdev *subdev)
return container_of(subdev, struct vsp1_entity, subdev);
}
+extern const struct v4l2_subdev_core_ops vsp1_entity_core_ops;
+
int vsp1_entity_init(struct vsp1_device *vsp1, struct vsp1_entity *entity,
const char *name, unsigned int num_pads,
const struct v4l2_subdev_ops *ops, u32 function);
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_histo.c
b/drivers/media/platform/renesas/vsp1/vsp1_histo.c
index 79da56c456eb..3f87a2c9df0e 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_histo.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_histo.c
@@ -424,6 +424,7 @@ static const struct v4l2_subdev_pad_ops histo_pad_ops = {
};
static const struct v4l2_subdev_ops histo_ops = {
+ .core = &vsp1_entity_core_ops,
.pad = &histo_pad_ops,
};
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_lut.c
b/drivers/media/platform/renesas/vsp1/vsp1_lut.c
index 2ec4d596465d..94bdedcc5c92 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_lut.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_lut.c
@@ -106,6 +106,7 @@ static const struct v4l2_subdev_pad_ops lut_pad_ops = {
};
static const struct v4l2_subdev_ops lut_ops = {
+ .core = &vsp1_entity_core_ops,
.pad = &lut_pad_ops,
};
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_rwpf.c
b/drivers/media/platform/renesas/vsp1/vsp1_rwpf.c
index c9e6fb98f863..c72518b29f84 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_rwpf.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_rwpf.c
@@ -357,6 +357,7 @@ static const struct v4l2_subdev_pad_ops vsp1_rwpf_pad_ops =
{
};
const struct v4l2_subdev_ops vsp1_rwpf_subdev_ops = {
+ .core = &vsp1_entity_core_ops,
.pad = &vsp1_rwpf_pad_ops,
};
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_sru.c
b/drivers/media/platform/renesas/vsp1/vsp1_sru.c
index 37fd36d09045..94149da0c900 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_sru.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_sru.c
@@ -252,6 +252,7 @@ static const struct v4l2_subdev_pad_ops sru_pad_ops = {
};
static const struct v4l2_subdev_ops sru_ops = {
+ .core = &vsp1_entity_core_ops,
.pad = &sru_pad_ops,
};
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]