The sub-device's sub-notifier is hidded in the sub-device and not meant to
be accessed directly by drivers. Still the driver may wish to set callbacks
to the notifier. Add a function to do that:
v4l2_subdev_notifier_set_callbacks().

Signed-off-by: Sakari Ailus <sakari.ai...@linux.intel.com>
---
Well, this appears to be quite straightforward. The code is entirely untested
but trivial at the same time. 

 drivers/media/v4l2-core/v4l2-subdev.c | 20 ++++++++++++++++++++
 include/media/v4l2-subdev.h           |  6 ++++++
 2 files changed, 26 insertions(+)

diff --git a/drivers/media/v4l2-core/v4l2-subdev.c 
b/drivers/media/v4l2-core/v4l2-subdev.c
index a6976d4a52ac..8629224bfdba 100644
--- a/drivers/media/v4l2-core/v4l2-subdev.c
+++ b/drivers/media/v4l2-core/v4l2-subdev.c
@@ -666,3 +666,23 @@ int 
v4l2_subdev_fwnode_reference_parse_sensor_common(struct v4l2_subdev *sd)
        return v4l2_fwnode_reference_parse_sensor_common(sd->dev, subnotifier);
 }
 EXPORT_SYMBOL_GPL(v4l2_subdev_fwnode_reference_parse_sensor_common);
+
+int v4l2_subdev_notifier_set_callbacks(
+       struct v4l2_subdev *sd,
+       int (*bound)(struct v4l2_async_notifier *notifier,
+                    struct v4l2_subdev *subdev,
+                    struct v4l2_async_subdev *asd),
+       int (*complete)(struct v4l2_async_notifier *notifier))
+{
+       struct v4l2_async_notifier *subnotifier =
+               v4l2_subdev_get_subnotifier(sd);
+
+       if (!subnotifier)
+               return -ENOMEM;
+
+       subnotifier->bound = bound;
+       subnotifier->complete = complete;
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(v4l2_subdev_notifier_set_callbacks);
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index e309a2e2030b..ee85b64ad4f4 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -1012,4 +1012,10 @@ int v4l2_subdev_fwnode_endpoints_parse(
 
 int v4l2_subdev_fwnode_reference_parse_sensor_common(struct v4l2_subdev *sd);
 
+int v4l2_subdev_notifier_set_callbacks(
+       struct v4l2_subdev *sd,
+       int (*bound)(struct v4l2_async_notifier *notifier,
+                    struct v4l2_subdev *subdev,
+                    struct v4l2_async_subdev *asd),
+       int (*complete)(struct v4l2_async_notifier *notifier));
 #endif
-- 
2.11.0

Reply via email to