Hi all,

Comments would be appreciated, either positive or negative. The omap3isp
driver does the same check itself currently, but I think this is more
generic than that.

Thanks.

On Fri, Oct 26, 2012 at 10:46:17PM +0300, Sakari Ailus wrote:
> If an entity has sink pads, at least one of them must be connected to
> another pad with an enabled link. If a driver with multiple sink pads has
> more strict requirements the check should be done in the driver itself.
> 
> Just requiring one sink pad is connected with an enabled link is enough
> API-wise: entities with sink pads with only disabled links should not be
> allowed to stream in the first place, but also in a different operation mode
> a device might require only one of its pads connected with an active link.
> 
> If an entity has an ability to function as a source entity another logical
> entity connected to the aforementioned one should be used for the purpose.
> 
> Signed-off-by: Sakari Ailus <sakari.ai...@iki.fi>
> ---
>  drivers/media/media-entity.c |   16 +++++++++++++---
>  1 files changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c
> index e1cd132..8846ea7 100644
> --- a/drivers/media/media-entity.c
> +++ b/drivers/media/media-entity.c
> @@ -227,6 +227,7 @@ __must_check int media_entity_pipeline_start(struct 
> media_entity *entity,
>       media_entity_graph_walk_start(&graph, entity);
>  
>       while ((entity = media_entity_graph_walk_next(&graph))) {
> +             bool has_sink = false, active_sink = false;
>               unsigned int i;
>  
>               entity->stream_count++;
> @@ -243,18 +244,27 @@ __must_check int media_entity_pipeline_start(struct 
> media_entity *entity,
>               for (i = 0; i < entity->num_links; i++) {
>                       struct media_link *link = &entity->links[i];
>  
> +                     /* Are we the sink or not? */
> +                     if (link->sink->entity != entity)
> +                             continue;
> +
> +                     has_sink = true;
> +
>                       /* Is this pad part of an enabled link? */
>                       if (!(link->flags & MEDIA_LNK_FL_ENABLED))
>                               continue;
>  
> -                     /* Are we the sink or not? */
> -                     if (link->sink->entity != entity)
> -                             continue;
> +                     active_sink = true;
>  
>                       ret = entity->ops->link_validate(link);
>                       if (ret < 0 && ret != -ENOIOCTLCMD)
>                               goto error;
>               }
> +
> +             if (has_sink && !active_sink) {
> +                     ret = -EPIPE;
> +                     goto error;
> +             }
>       }
>  
>       mutex_unlock(&mdev->graph_mutex);
> -- 
> 1.7.2.5
> 
> --
> 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

-- 
Sakari Ailus
e-mail: sakari.ai...@iki.fi     XMPP: sai...@retiisi.org.uk
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to