Skip to content

Commit

Permalink
media: subdev: Add for_each_active_route() macro
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Tomi Valkeinen <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
  • Loading branch information
Jacopo Mondi authored and mchehab committed Jan 22, 2023
1 parent 17bb9bf commit 837f92f
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 0 deletions.
1 change: 1 addition & 0 deletions .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
20 changes: 20 additions & 0 deletions drivers/media/v4l2-core/v4l2-subdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
13 changes: 13 additions & 0 deletions include/media/v4l2-subdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down

0 comments on commit 837f92f

Please sign in to comment.