@@ -946,3 +946,17 @@ bool v4l2_subdev_has_v4l2_control_redir(struct media_device *media,
return false;
}
+
+struct media_entity *v4l2_subdev_get_pipeline_entity_by_cid(struct media_device *media,
+ int cid)
+{
+ struct media_entity *entity = media->pipeline;
+
+ while (entity) {
+ if (v4l2_subdev_has_v4l2_control_redir(media, entity, cid))
+ return entity;
+ entity = entity->next;
+ }
+
+ return NULL;
+}
@@ -353,4 +353,19 @@ int v4l2_subdev_format_compare(struct v4l2_mbus_framefmt *fmt1,
bool v4l2_subdev_has_v4l2_control_redir(struct media_device *media,
struct media_entity *entity, int ctrl_id);
+/**
+ * @brief Get the first pipeline entity supporting the control
+ * @param media - media device.
+ * @param cid - v4l2 control identifier.
+ *
+ * Get the first entity in the media device pipeline,
+ * for which v4l2_control with cid is to be redirected
+ *
+ * @return associated entity if defined, or NULL if the
+ * control redirection wasn't defined for any entity
+ * in the pipeline
+ */
+struct media_entity *v4l2_subdev_get_pipeline_entity_by_cid(
+ struct media_device *media, int cid);
+
#endif