• Home
  • Raw
  • Download

Lines Matching full:entity

2  * Media entity
23 #include <media/media-entity.h>
30 return "entity"; in gobj_type()
109 "%s id %u: entity '%s'\n", in dev_dbg_obj()
135 pad->entity->name, pad->index); in dev_dbg_obj()
206 int media_entity_pads_init(struct media_entity *entity, u16 num_pads, in media_entity_pads_init() argument
209 struct media_device *mdev = entity->graph_obj.mdev; in media_entity_pads_init()
215 entity->num_pads = num_pads; in media_entity_pads_init()
216 entity->pads = pads; in media_entity_pads_init()
222 pads[i].entity = entity; in media_entity_pads_init()
226 &entity->pads[i].graph_obj); in media_entity_pads_init()
241 media_entity_other(struct media_entity *entity, struct media_link *link) in media_entity_other() argument
243 if (link->source->entity == entity) in media_entity_other()
244 return link->sink->entity; in media_entity_other()
246 return link->source->entity; in media_entity_other()
249 /* push an entity to traversal stack */
251 struct media_entity *entity) in stack_push() argument
258 graph->stack[graph->top].link = entity->links.next; in stack_push()
259 graph->stack[graph->top].entity = entity; in stack_push()
264 struct media_entity *entity; in stack_pop() local
266 entity = graph->stack[graph->top].entity; in stack_pop()
269 return entity; in stack_pop()
273 #define stack_top(en) ((en)->stack[(en)->top].entity)
304 struct media_entity *entity) in media_graph_walk_start() argument
307 media_entity_enum_set(&graph->ent_enum, entity); in media_graph_walk_start()
310 graph->stack[graph->top].entity = NULL; in media_graph_walk_start()
311 stack_push(graph, entity); in media_graph_walk_start()
312 dev_dbg(entity->graph_obj.mdev->dev, in media_graph_walk_start()
313 "begin graph walk at '%s'\n", entity->name); in media_graph_walk_start()
319 struct media_entity *entity = stack_top(graph); in media_graph_walk_iter() local
328 dev_dbg(entity->graph_obj.mdev->dev, in media_graph_walk_iter()
330 link->source->entity->name, link->source->index, in media_graph_walk_iter()
331 link->sink->entity->name, link->sink->index); in media_graph_walk_iter()
335 /* Get the entity in the other end of the link . */ in media_graph_walk_iter()
336 next = media_entity_other(entity, link); in media_graph_walk_iter()
338 /* Has the entity already been visited? */ in media_graph_walk_iter()
341 dev_dbg(entity->graph_obj.mdev->dev, in media_graph_walk_iter()
342 "walk: skipping entity '%s' (already seen)\n", in media_graph_walk_iter()
347 /* Push the new entity to stack and start over. */ in media_graph_walk_iter()
350 dev_dbg(entity->graph_obj.mdev->dev, "walk: pushing '%s' on stack\n", in media_graph_walk_iter()
356 struct media_entity *entity; in media_graph_walk_next() local
362 * Depth first search. Push entity to stack and continue from in media_graph_walk_next()
369 entity = stack_pop(graph); in media_graph_walk_next()
370 dev_dbg(entity->graph_obj.mdev->dev, in media_graph_walk_next()
371 "walk: returning entity '%s'\n", entity->name); in media_graph_walk_next()
373 return entity; in media_graph_walk_next()
377 int media_entity_get_fwnode_pad(struct media_entity *entity, in media_entity_get_fwnode_pad() argument
385 if (!entity->ops || !entity->ops->get_fwnode_pad) { in media_entity_get_fwnode_pad()
386 for (i = 0; i < entity->num_pads; i++) { in media_entity_get_fwnode_pad()
387 if (entity->pads[i].flags & direction_flags) in media_entity_get_fwnode_pad()
398 ret = entity->ops->get_fwnode_pad(&endpoint); in media_entity_get_fwnode_pad()
402 if (ret >= entity->num_pads) in media_entity_get_fwnode_pad()
405 if (!(entity->pads[ret].flags & direction_flags)) in media_entity_get_fwnode_pad()
416 __must_check int __media_pipeline_start(struct media_entity *entity, in __media_pipeline_start() argument
419 struct media_device *mdev = entity->graph_obj.mdev; in __media_pipeline_start()
421 struct media_entity *entity_err = entity; in __media_pipeline_start()
431 media_graph_walk_start(&pipe->graph, entity); in __media_pipeline_start()
433 while ((entity = media_graph_walk_next(graph))) { in __media_pipeline_start()
437 entity->stream_count++; in __media_pipeline_start()
439 if (WARN_ON(entity->pipe && entity->pipe != pipe)) { in __media_pipeline_start()
444 entity->pipe = pipe; in __media_pipeline_start()
447 if (entity->stream_count > 1) in __media_pipeline_start()
450 if (!entity->ops || !entity->ops->link_validate) in __media_pipeline_start()
453 bitmap_zero(active, entity->num_pads); in __media_pipeline_start()
454 bitmap_fill(has_no_links, entity->num_pads); in __media_pipeline_start()
456 list_for_each_entry(link, &entity->links, list) { in __media_pipeline_start()
457 struct media_pad *pad = link->sink->entity == entity in __media_pipeline_start()
480 ret = entity->ops->link_validate(link); in __media_pipeline_start()
482 dev_dbg(entity->graph_obj.mdev->dev, in __media_pipeline_start()
484 link->source->entity->name, in __media_pipeline_start()
486 entity->name, link->sink->index, ret); in __media_pipeline_start()
492 bitmap_or(active, active, has_no_links, entity->num_pads); in __media_pipeline_start()
494 if (!bitmap_full(active, entity->num_pads)) { in __media_pipeline_start()
496 dev_dbg(entity->graph_obj.mdev->dev, in __media_pipeline_start()
498 entity->name, in __media_pipeline_start()
500 active, entity->num_pads)); in __media_pipeline_start()
526 if (entity_err == entity) in __media_pipeline_start()
538 __must_check int media_pipeline_start(struct media_entity *entity, in media_pipeline_start() argument
541 struct media_device *mdev = entity->graph_obj.mdev; in media_pipeline_start()
545 ret = __media_pipeline_start(entity, pipe); in media_pipeline_start()
551 void __media_pipeline_stop(struct media_entity *entity) in __media_pipeline_stop() argument
553 struct media_graph *graph = &entity->pipe->graph; in __media_pipeline_stop()
554 struct media_pipeline *pipe = entity->pipe; in __media_pipeline_stop()
563 media_graph_walk_start(graph, entity); in __media_pipeline_stop()
565 while ((entity = media_graph_walk_next(graph))) { in __media_pipeline_stop()
567 if (!WARN_ON_ONCE(entity->stream_count <= 0)) { in __media_pipeline_stop()
568 entity->stream_count--; in __media_pipeline_stop()
569 if (entity->stream_count == 0) in __media_pipeline_stop()
570 entity->pipe = NULL; in __media_pipeline_stop()
580 void media_pipeline_stop(struct media_entity *entity) in media_pipeline_stop() argument
582 struct media_device *mdev = entity->graph_obj.mdev; in media_pipeline_stop()
585 __media_pipeline_stop(entity); in media_pipeline_stop()
594 struct media_entity *media_entity_get(struct media_entity *entity) in media_entity_get() argument
596 if (entity == NULL) in media_entity_get()
599 if (entity->graph_obj.mdev->dev && in media_entity_get()
600 !try_module_get(entity->graph_obj.mdev->dev->driver->owner)) in media_entity_get()
603 return entity; in media_entity_get()
607 void media_entity_put(struct media_entity *entity) in media_entity_put() argument
609 if (entity == NULL) in media_entity_put()
612 if (entity->graph_obj.mdev->dev) in media_entity_put()
613 module_put(entity->graph_obj.mdev->dev->driver->owner); in media_entity_put()
634 static void __media_entity_remove_link(struct media_entity *entity, in __media_entity_remove_link() argument
640 if (link->source->entity == entity) in __media_entity_remove_link()
641 remote = link->sink->entity; in __media_entity_remove_link()
643 remote = link->source->entity; in __media_entity_remove_link()
649 if (link->source->entity == entity) in __media_entity_remove_link()
727 struct media_entity *entity; in media_create_pad_links() local
764 media_device_for_each_entity(entity, mdev) { in media_create_pad_links()
765 if (entity->function != function) in media_create_pad_links()
770 entity, sink_pad, flags); in media_create_pad_links()
772 ret = media_create_pad_link(entity, source_pad, in media_create_pad_links()
782 void __media_entity_remove_links(struct media_entity *entity) in __media_entity_remove_links() argument
786 list_for_each_entry_safe(link, tmp, &entity->links, list) in __media_entity_remove_links()
787 __media_entity_remove_link(entity, link); in __media_entity_remove_links()
789 entity->num_links = 0; in __media_entity_remove_links()
790 entity->num_backlinks = 0; in __media_entity_remove_links()
794 void media_entity_remove_links(struct media_entity *entity) in media_entity_remove_links() argument
796 struct media_device *mdev = entity->graph_obj.mdev; in media_entity_remove_links()
798 /* Do nothing if the entity is not registered. */ in media_entity_remove_links()
803 __media_entity_remove_links(entity); in media_entity_remove_links()
813 ret = media_entity_call(link->source->entity, link_setup, in __media_entity_setup_link_notify()
818 ret = media_entity_call(link->sink->entity, link_setup, in __media_entity_setup_link_notify()
821 media_entity_call(link->source->entity, link_setup, in __media_entity_setup_link_notify()
852 source = link->source->entity; in __media_entity_setup_link()
853 sink = link->sink->entity; in __media_entity_setup_link()
895 list_for_each_entry(link, &source->entity->links, list) { in media_entity_find_link()
896 if (link->source->entity == source->entity && in media_entity_find_link()
898 link->sink->entity == sink->entity && in media_entity_find_link()
911 list_for_each_entry(link, &pad->entity->links, list) { in media_entity_remote_pad()
969 struct media_link *media_create_intf_link(struct media_entity *entity, in media_create_intf_link() argument
980 link->entity = entity; in media_create_intf_link()