media: subdev: Add for_each_active_route() macro
authorJacopo Mondi <jacopo+renesas@jmondi.org>
Sun, 17 Oct 2021 18:24:42 +0000 (20:24 +0200)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Sun, 22 Jan 2023 08:35:57 +0000 (09:35 +0100)
Add a for_each_active_route() macro to replace the repeated pattern
of iterating on the active routes of a routing table.

Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
.clang-format
drivers/media/v4l2-core/v4l2-subdev.c
include/media/v4l2-subdev.h

index b628364..2c61b45 100644 (file)
@@ -190,6 +190,7 @@ ForEachMacros:
   - 'for_each_active_dev_scope'
   - 'for_each_active_drhd_unit'
   - 'for_each_active_iommu'
+  - 'for_each_active_route'
   - 'for_each_aggr_pgid'
   - 'for_each_available_child_of_node'
   - 'for_each_bench'
index d95cbea..730c31e 100644 (file)
@@ -1239,6 +1239,26 @@ int v4l2_subdev_set_routing(struct v4l2_subdev *sd,
 }
 EXPORT_SYMBOL_GPL(v4l2_subdev_set_routing);
 
+struct v4l2_subdev_route *
+__v4l2_subdev_next_active_route(const struct v4l2_subdev_krouting *routing,
+                               struct v4l2_subdev_route *route)
+{
+       if (route)
+               ++route;
+       else
+               route = &routing->routes[0];
+
+       for (; route < routing->routes + routing->num_routes; ++route) {
+               if (!(route->flags & V4L2_SUBDEV_ROUTE_FL_ACTIVE))
+                       continue;
+
+               return route;
+       }
+
+       return NULL;
+}
+EXPORT_SYMBOL_GPL(__v4l2_subdev_next_active_route);
+
 #endif /* CONFIG_VIDEO_V4L2_SUBDEV_API */
 
 #endif /* CONFIG_MEDIA_CONTROLLER */
index 1d2a1a7..9e34c70 100644 (file)
@@ -1440,6 +1440,19 @@ int v4l2_subdev_set_routing(struct v4l2_subdev *sd,
                            struct v4l2_subdev_state *state,
                            const struct v4l2_subdev_krouting *routing);
 
+struct v4l2_subdev_route *
+__v4l2_subdev_next_active_route(const struct v4l2_subdev_krouting *routing,
+                               struct v4l2_subdev_route *route);
+
+/**
+ * for_each_active_route - iterate on all active routes of a routing table
+ * @routing: The routing table
+ * @route: The route iterator
+ */
+#define for_each_active_route(routing, route) \
+       for ((route) = NULL;                  \
+            ((route) = __v4l2_subdev_next_active_route((routing), (route)));)
+
 #endif /* CONFIG_VIDEO_V4L2_SUBDEV_API */
 
 #endif /* CONFIG_MEDIA_CONTROLLER */