Em Sun, 29 Nov 2015 21:20:11 +0200 Sakari Ailus <sakari.ailus@xxxxxx> escreveu: description missing. Otherwise looks ok. > Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> > Cc: Javier Martinez Canillas <javier@xxxxxxxxxxxxxxx> > Cc: Kamil Debski <k.debski@xxxxxxxxxxx> > Cc: Sylwester Nawrocki <s.nawrocki@xxxxxxxxxxx> > --- > drivers/media/platform/exynos4-is/media-dev.c | 31 +++++++++++++++++---------- > drivers/media/platform/exynos4-is/media-dev.h | 1 + > 2 files changed, 21 insertions(+), 11 deletions(-) > > diff --git a/drivers/media/platform/exynos4-is/media-dev.c b/drivers/media/platform/exynos4-is/media-dev.c > index d55b4f3..704040c 100644 > --- a/drivers/media/platform/exynos4-is/media-dev.c > +++ b/drivers/media/platform/exynos4-is/media-dev.c > @@ -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; > diff --git a/drivers/media/platform/exynos4-is/media-dev.h b/drivers/media/platform/exynos4-is/media-dev.h > index 9a69913..e80c55d 100644 > --- a/drivers/media/platform/exynos4-is/media-dev.h > +++ b/drivers/media/platform/exynos4-is/media-dev.h > @@ -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 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html