Em Sun, 29 Nov 2015 21:20:11 +0200
Sakari Ailus <sakari.ai...@iki.fi> escreveu:

description missing. Otherwise looks ok.

> Signed-off-by: Sakari Ailus <sakari.ai...@linux.intel.com>
> Cc: Javier Martinez Canillas <jav...@osg.samsung.com>
> Cc: Kamil Debski <k.deb...@samsung.com>
> Cc: Sylwester Nawrocki <s.nawro...@samsung.com>
> ---
>  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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to