[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