Lines Matching defs:entity
3 * Media entity
14 #include <media/media-entity.h>
21 return "entity";
100 "%s id %u: entity '%s'\n",
126 pad->entity->name, pad->index);
197 int media_entity_pads_init(struct media_entity *entity, u16 num_pads,
200 struct media_device *mdev = entity->graph_obj.mdev;
206 entity->num_pads = num_pads;
207 entity->pads = pads;
213 pads[i].entity = entity;
217 &entity->pads[i].graph_obj);
232 media_entity_other(struct media_entity *entity, struct media_link *link)
234 if (link->source->entity == entity)
235 return link->sink->entity;
237 return link->source->entity;
240 /* push an entity to traversal stack */
242 struct media_entity *entity)
249 graph->stack[graph->top].link = entity->links.next;
250 graph->stack[graph->top].entity = entity;
255 struct media_entity *entity;
257 entity = graph->stack[graph->top].entity;
260 return entity;
264 #define stack_top(en) ((en)->stack[(en)->top].entity)
295 struct media_entity *entity)
298 media_entity_enum_set(&graph->ent_enum, entity);
301 graph->stack[graph->top].entity = NULL;
302 stack_push(graph, entity);
303 dev_dbg(entity->graph_obj.mdev->dev,
304 "begin graph walk at '%s'\n", entity->name);
310 struct media_entity *entity = stack_top(graph);
319 dev_dbg(entity->graph_obj.mdev->dev,
321 link->source->entity->name, link->source->index,
322 link->sink->entity->name, link->sink->index);
326 /* Get the entity in the other end of the link . */
327 next = media_entity_other(entity, link);
329 /* Has the entity already been visited? */
332 dev_dbg(entity->graph_obj.mdev->dev,
333 "walk: skipping entity '%s' (already seen)\n",
338 /* Push the new entity to stack and start over. */
341 dev_dbg(entity->graph_obj.mdev->dev, "walk: pushing '%s' on stack\n",
347 struct media_entity *entity;
353 * Depth first search. Push entity to stack and continue from
360 entity = stack_pop(graph);
361 dev_dbg(entity->graph_obj.mdev->dev,
362 "walk: returning entity '%s'\n", entity->name);
364 return entity;
368 int media_entity_get_fwnode_pad(struct media_entity *entity,
376 if (!entity->ops || !entity->ops->get_fwnode_pad) {
377 for (i = 0; i < entity->num_pads; i++) {
378 if (entity->pads[i].flags & direction_flags)
389 ret = entity->ops->get_fwnode_pad(entity, &endpoint);
393 if (ret >= entity->num_pads)
396 if (!(entity->pads[ret].flags & direction_flags))
407 __must_check int __media_pipeline_start(struct media_entity *entity,
410 struct media_device *mdev = entity->graph_obj.mdev;
412 struct media_entity *entity_err = entity;
422 media_graph_walk_start(&pipe->graph, entity);
424 while ((entity = media_graph_walk_next(graph))) {
428 entity->stream_count++;
430 if (entity->pipe && entity->pipe != pipe) {
432 entity->name,
438 entity->pipe = pipe;
441 if (entity->stream_count > 1)
444 if (!entity->ops || !entity->ops->link_validate)
447 bitmap_zero(active, entity->num_pads);
448 bitmap_fill(has_no_links, entity->num_pads);
450 list_for_each_entry(link, &entity->links, list) {
451 struct media_pad *pad = link->sink->entity == entity
474 ret = entity->ops->link_validate(link);
476 dev_dbg(entity->graph_obj.mdev->dev,
478 link->source->entity->name,
480 entity->name, link->sink->index, ret);
486 bitmap_or(active, active, has_no_links, entity->num_pads);
488 if (!bitmap_full(active, entity->num_pads)) {
490 dev_dbg(entity->graph_obj.mdev->dev,
492 entity->name,
494 active, entity->num_pads));
520 if (entity_err == entity)
532 __must_check int media_pipeline_start(struct media_entity *entity,
535 struct media_device *mdev = entity->graph_obj.mdev;
539 ret = __media_pipeline_start(entity, pipe);
545 void __media_pipeline_stop(struct media_entity *entity)
547 struct media_graph *graph = &entity->pipe->graph;
548 struct media_pipeline *pipe = entity->pipe;
557 media_graph_walk_start(graph, entity);
559 while ((entity = media_graph_walk_next(graph))) {
561 if (!WARN_ON_ONCE(entity->stream_count <= 0)) {
562 entity->stream_count--;
563 if (entity->stream_count == 0)
564 entity->pipe = NULL;
574 void media_pipeline_stop(struct media_entity *entity)
576 struct media_device *mdev = entity->graph_obj.mdev;
579 __media_pipeline_stop(entity);
601 static void __media_entity_remove_link(struct media_entity *entity,
607 if (link->source->entity == entity)
608 remote = link->sink->entity;
610 remote = link->source->entity;
616 if (link->source->entity == entity)
632 int media_get_pad_index(struct media_entity *entity, bool is_sink,
638 if (!entity)
641 for (i = 0; i < entity->num_pads; i++) {
642 if (entity->pads[i].flags & MEDIA_PAD_FL_SINK)
644 else if (entity->pads[i].flags & MEDIA_PAD_FL_SOURCE)
651 if (entity->pads[i].sig_type == sig_type)
725 struct media_entity *entity;
762 media_device_for_each_entity(entity, mdev) {
763 if (entity->function != function)
768 entity, sink_pad, flags);
770 ret = media_create_pad_link(entity, source_pad,
780 void __media_entity_remove_links(struct media_entity *entity)
784 list_for_each_entry_safe(link, tmp, &entity->links, list)
785 __media_entity_remove_link(entity, link);
787 entity->num_links = 0;
788 entity->num_backlinks = 0;
792 void media_entity_remove_links(struct media_entity *entity)
794 struct media_device *mdev = entity->graph_obj.mdev;
796 /* Do nothing if the entity is not registered. */
801 __media_entity_remove_links(entity);
811 ret = media_entity_call(link->source->entity, link_setup,
816 ret = media_entity_call(link->sink->entity, link_setup,
819 media_entity_call(link->source->entity, link_setup,
850 source = link->source->entity;
851 sink = link->sink->entity;
893 list_for_each_entry(link, &source->entity->links, list) {
894 if (link->source->entity == source->entity &&
896 link->sink->entity == sink->entity &&
909 list_for_each_entry(link, &pad->entity->links, list) {
967 struct media_link *media_create_intf_link(struct media_entity *entity,
978 link->entity = entity;