[RFC 1/1] v4l2-subdev: Add a function to set sub-device notifier callbacks

Sakari Ailus
2017-07-19T22:33:31Z

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.ailus@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