[PATCH 1/1] media: Entities with sink pads must have at least one enabled link

Sakari Ailus sakari.ailus at iki.fi
Tue Nov 13 06:24:10 PST 2012


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.ailus at 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 majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
Sakari Ailus
e-mail: sakari.ailus at iki.fi	XMPP: sailus at retiisi.org.uk


More information about the dri-devel mailing list