Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd7e5309 authored by Sakari Ailus's avatar Sakari Ailus Committed by Mauro Carvalho Chehab
Browse files

[media] v4l: exynos4-is: Use the new media graph walk interface



The media graph walk requires initialisation and cleanup soon. Update the
users to perform the soon necessary API calls.

Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Cc: Javier Martinez Canillas <javier@osg.samsung.com>
Cc: Kamil Debski <k.debski@samsung.com>
Cc: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 28461451
Loading
Loading
Loading
Loading
+20 −11
Original line number Original line Diff line number Diff line
@@ -1046,10 +1046,10 @@ static int __fimc_md_modify_pipeline(struct media_entity *entity, bool enable)
}
}


/* Locking: called with entity->graph_obj.mdev->graph_mutex mutex held. */
/* Locking: called with entity->graph_obj.mdev->graph_mutex mutex held. */
static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable)
static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable,
				      struct media_entity_graph *graph)
{
{
	struct media_entity *entity_err = entity;
	struct media_entity *entity_err = entity;
	struct media_entity_graph graph;
	int ret;
	int ret;


	/*
	/*
@@ -1058,9 +1058,9 @@ static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable)
	 * through active links. This is needed as we cannot power on/off the
	 * through active links. This is needed as we cannot power on/off the
	 * subdevs in random order.
	 * subdevs in random order.
	 */
	 */
	media_entity_graph_walk_start(&graph, entity);
	media_entity_graph_walk_start(graph, entity);


	while ((entity = media_entity_graph_walk_next(&graph))) {
	while ((entity = media_entity_graph_walk_next(graph))) {
		if (!is_media_entity_v4l2_io(entity))
		if (!is_media_entity_v4l2_io(entity))
			continue;
			continue;


@@ -1071,10 +1071,11 @@ static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable)
	}
	}


	return 0;
	return 0;

err:
err:
	media_entity_graph_walk_start(&graph, entity_err);
	media_entity_graph_walk_start(graph, entity_err);


	while ((entity_err = media_entity_graph_walk_next(&graph))) {
	while ((entity_err = media_entity_graph_walk_next(graph))) {
		if (!is_media_entity_v4l2_io(entity_err))
		if (!is_media_entity_v4l2_io(entity_err))
			continue;
			continue;


@@ -1090,21 +1091,29 @@ static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable)
static int fimc_md_link_notify(struct media_link *link, unsigned int flags,
static int fimc_md_link_notify(struct media_link *link, unsigned int flags,
				unsigned int notification)
				unsigned int notification)
{
{
	struct media_entity_graph *graph =
		&container_of(link->graph_obj.mdev, struct fimc_md,
			      media_dev)->link_setup_graph;
	struct media_entity *sink = link->sink->entity;
	struct media_entity *sink = link->sink->entity;
	int ret = 0;
	int ret = 0;


	/* Before link disconnection */
	/* Before link disconnection */
	if (notification == MEDIA_DEV_NOTIFY_PRE_LINK_CH) {
	if (notification == MEDIA_DEV_NOTIFY_PRE_LINK_CH) {
		ret = media_entity_graph_walk_init(graph,
						   link->graph_obj.mdev);
		if (ret)
			return ret;
		if (!(flags & MEDIA_LNK_FL_ENABLED))
		if (!(flags & MEDIA_LNK_FL_ENABLED))
			ret = __fimc_md_modify_pipelines(sink, false);
			ret = __fimc_md_modify_pipelines(sink, false, graph);
#if 0
#if 0
		else
		else
			/* TODO: Link state change validation */
			/* TODO: Link state change validation */
#endif
#endif
	/* After link activation */
	/* After link activation */
	} else if (notification == MEDIA_DEV_NOTIFY_POST_LINK_CH &&
	} else if (notification == MEDIA_DEV_NOTIFY_POST_LINK_CH) {
		   (link->flags & MEDIA_LNK_FL_ENABLED)) {
		if (link->flags & MEDIA_LNK_FL_ENABLED)
		ret = __fimc_md_modify_pipelines(sink, true);
			ret = __fimc_md_modify_pipelines(sink, true, graph);
		media_entity_graph_walk_cleanup(graph);
	}
	}


	return ret ? -EPIPE : 0;
	return ret ? -EPIPE : 0;
+1 −0
Original line number Original line Diff line number Diff line
@@ -154,6 +154,7 @@ struct fimc_md {
	bool user_subdev_api;
	bool user_subdev_api;
	spinlock_t slock;
	spinlock_t slock;
	struct list_head pipelines;
	struct list_head pipelines;
	struct media_entity_graph link_setup_graph;
};
};


static inline
static inline