forked from luck/tmp_suning_uos_patched
[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: Sakari 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: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
28461451c0
commit
fd7e5309a5
@ -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. */
|
||||
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_graph graph;
|
||||
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
|
||||
* 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))
|
||||
continue;
|
||||
|
||||
@ -1071,10 +1071,11 @@ static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable)
|
||||
}
|
||||
|
||||
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))
|
||||
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,
|
||||
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;
|
||||
int ret = 0;
|
||||
|
||||
/* Before link disconnection */
|
||||
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))
|
||||
ret = __fimc_md_modify_pipelines(sink, false);
|
||||
ret = __fimc_md_modify_pipelines(sink, false, graph);
|
||||
#if 0
|
||||
else
|
||||
/* TODO: Link state change validation */
|
||||
#endif
|
||||
/* After link activation */
|
||||
} else if (notification == MEDIA_DEV_NOTIFY_POST_LINK_CH &&
|
||||
(link->flags & MEDIA_LNK_FL_ENABLED)) {
|
||||
ret = __fimc_md_modify_pipelines(sink, true);
|
||||
} else if (notification == MEDIA_DEV_NOTIFY_POST_LINK_CH) {
|
||||
if (link->flags & MEDIA_LNK_FL_ENABLED)
|
||||
ret = __fimc_md_modify_pipelines(sink, true, graph);
|
||||
media_entity_graph_walk_cleanup(graph);
|
||||
}
|
||||
|
||||
return ret ? -EPIPE : 0;
|
||||
|
@ -154,6 +154,7 @@ struct fimc_md {
|
||||
bool user_subdev_api;
|
||||
spinlock_t slock;
|
||||
struct list_head pipelines;
|
||||
struct media_entity_graph link_setup_graph;
|
||||
};
|
||||
|
||||
static inline
|
||||
|
Loading…
Reference in New Issue
Block a user