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@xxxxxx> > --- > 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@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Sakari Ailus e-mail: sakari.ailus@xxxxxx XMPP: sailus@xxxxxxxxxxxxxx _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel