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

[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
...@@ -1046,10 +1046,10 @@ static int __fimc_md_modify_pipeline(struct media_entity *entity, bool enable) ...@@ -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) ...@@ -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) ...@@ -1071,10 +1071,11 @@ static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable)
} }
return 0; return 0;
err:
media_entity_graph_walk_start(&graph, entity_err);
while ((entity_err = media_entity_graph_walk_next(&graph))) { err:
media_entity_graph_walk_start(graph, entity_err);
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) ...@@ -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;
......
...@@ -154,6 +154,7 @@ struct fimc_md { ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment