Lines Matching refs:entity
54 media_entity_init(struct media_entity *entity, u16 num_pads, in media_entity_init() argument
65 entity->group_id = 0; in media_entity_init()
66 entity->max_links = max_links; in media_entity_init()
67 entity->num_links = 0; in media_entity_init()
68 entity->num_backlinks = 0; in media_entity_init()
69 entity->num_pads = num_pads; in media_entity_init()
70 entity->pads = pads; in media_entity_init()
71 entity->links = links; in media_entity_init()
74 pads[i].entity = entity; in media_entity_init()
83 media_entity_cleanup(struct media_entity *entity) in media_entity_cleanup() argument
85 kfree(entity->links); in media_entity_cleanup()
94 media_entity_other(struct media_entity *entity, struct media_link *link) in media_entity_other() argument
96 if (link->source->entity == entity) in media_entity_other()
97 return link->sink->entity; in media_entity_other()
99 return link->source->entity; in media_entity_other()
104 struct media_entity *entity) in stack_push() argument
112 graph->stack[graph->top].entity = entity; in stack_push()
117 struct media_entity *entity; in stack_pop() local
119 entity = graph->stack[graph->top].entity; in stack_pop()
122 return entity; in stack_pop()
126 #define stack_top(en) ((en)->stack[(en)->top].entity)
139 struct media_entity *entity) in media_entity_graph_walk_start() argument
142 graph->stack[graph->top].entity = NULL; in media_entity_graph_walk_start()
145 if (WARN_ON(entity->id >= MEDIA_ENTITY_ENUM_MAX_ID)) in media_entity_graph_walk_start()
148 __set_bit(entity->id, graph->entities); in media_entity_graph_walk_start()
149 stack_push(graph, entity); in media_entity_graph_walk_start()
177 struct media_entity *entity = stack_top(graph); in media_entity_graph_walk_next() local
178 struct media_link *link = &entity->links[link_top(graph)]; in media_entity_graph_walk_next()
188 next = media_entity_other(entity, link); in media_entity_graph_walk_next()
225 __must_check int media_entity_pipeline_start(struct media_entity *entity, in media_entity_pipeline_start() argument
228 struct media_device *mdev = entity->parent; in media_entity_pipeline_start()
230 struct media_entity *entity_err = entity; in media_entity_pipeline_start()
235 media_entity_graph_walk_start(&graph, entity); in media_entity_pipeline_start()
237 while ((entity = media_entity_graph_walk_next(&graph))) { in media_entity_pipeline_start()
242 entity->stream_count++; in media_entity_pipeline_start()
243 WARN_ON(entity->pipe && entity->pipe != pipe); in media_entity_pipeline_start()
244 entity->pipe = pipe; in media_entity_pipeline_start()
247 if (entity->stream_count > 1) in media_entity_pipeline_start()
250 if (!entity->ops || !entity->ops->link_validate) in media_entity_pipeline_start()
253 bitmap_zero(active, entity->num_pads); in media_entity_pipeline_start()
254 bitmap_fill(has_no_links, entity->num_pads); in media_entity_pipeline_start()
256 for (i = 0; i < entity->num_links; i++) { in media_entity_pipeline_start()
257 struct media_link *link = &entity->links[i]; in media_entity_pipeline_start()
258 struct media_pad *pad = link->sink->entity == entity in media_entity_pipeline_start()
281 ret = entity->ops->link_validate(link); in media_entity_pipeline_start()
283 dev_dbg(entity->parent->dev, in media_entity_pipeline_start()
285 link->source->entity->name, in media_entity_pipeline_start()
287 entity->name, link->sink->index, ret); in media_entity_pipeline_start()
293 bitmap_or(active, active, has_no_links, entity->num_pads); in media_entity_pipeline_start()
295 if (!bitmap_full(active, entity->num_pads)) { in media_entity_pipeline_start()
297 dev_dbg(entity->parent->dev, in media_entity_pipeline_start()
299 entity->name, in media_entity_pipeline_start()
301 active, entity->num_pads)); in media_entity_pipeline_start()
326 if (entity_err == entity) in media_entity_pipeline_start()
348 void media_entity_pipeline_stop(struct media_entity *entity) in media_entity_pipeline_stop() argument
350 struct media_device *mdev = entity->parent; in media_entity_pipeline_stop()
355 media_entity_graph_walk_start(&graph, entity); in media_entity_pipeline_stop()
357 while ((entity = media_entity_graph_walk_next(&graph))) { in media_entity_pipeline_stop()
358 entity->stream_count--; in media_entity_pipeline_stop()
359 if (entity->stream_count == 0) in media_entity_pipeline_stop()
360 entity->pipe = NULL; in media_entity_pipeline_stop()
381 struct media_entity *media_entity_get(struct media_entity *entity) in media_entity_get() argument
383 if (entity == NULL) in media_entity_get()
386 if (entity->parent->dev && in media_entity_get()
387 !try_module_get(entity->parent->dev->driver->owner)) in media_entity_get()
390 return entity; in media_entity_get()
402 void media_entity_put(struct media_entity *entity) in media_entity_put() argument
404 if (entity == NULL) in media_entity_put()
407 if (entity->parent->dev) in media_entity_put()
408 module_put(entity->parent->dev->driver->owner); in media_entity_put()
416 static struct media_link *media_entity_add_link(struct media_entity *entity) in media_entity_add_link() argument
418 if (entity->num_links >= entity->max_links) { in media_entity_add_link()
419 struct media_link *links = entity->links; in media_entity_add_link()
420 unsigned int max_links = entity->max_links + 2; in media_entity_add_link()
427 for (i = 0; i < entity->num_links; i++) in media_entity_add_link()
430 entity->max_links = max_links; in media_entity_add_link()
431 entity->links = links; in media_entity_add_link()
434 return &entity->links[entity->num_links++]; in media_entity_add_link()
478 void __media_entity_remove_links(struct media_entity *entity) in __media_entity_remove_links() argument
482 for (i = 0; i < entity->num_links; i++) { in __media_entity_remove_links()
483 struct media_link *link = &entity->links[i]; in __media_entity_remove_links()
487 if (link->source->entity == entity) in __media_entity_remove_links()
488 remote = link->sink->entity; in __media_entity_remove_links()
490 remote = link->source->entity; in __media_entity_remove_links()
500 if (link->source->entity == entity) in __media_entity_remove_links()
511 entity->num_links = 0; in __media_entity_remove_links()
512 entity->num_backlinks = 0; in __media_entity_remove_links()
516 void media_entity_remove_links(struct media_entity *entity) in media_entity_remove_links() argument
519 if (entity->parent == NULL) in media_entity_remove_links()
522 mutex_lock(&entity->parent->graph_mutex); in media_entity_remove_links()
523 __media_entity_remove_links(entity); in media_entity_remove_links()
524 mutex_unlock(&entity->parent->graph_mutex); in media_entity_remove_links()
533 ret = media_entity_call(link->source->entity, link_setup, in __media_entity_setup_link_notify()
538 ret = media_entity_call(link->sink->entity, link_setup, in __media_entity_setup_link_notify()
541 media_entity_call(link->source->entity, link_setup, in __media_entity_setup_link_notify()
586 source = link->source->entity; in __media_entity_setup_link()
587 sink = link->sink->entity; in __media_entity_setup_link()
614 mutex_lock(&link->source->entity->parent->graph_mutex); in media_entity_setup_link()
616 mutex_unlock(&link->source->entity->parent->graph_mutex); in media_entity_setup_link()
636 for (i = 0; i < source->entity->num_links; ++i) { in media_entity_find_link()
637 link = &source->entity->links[i]; in media_entity_find_link()
639 if (link->source->entity == source->entity && in media_entity_find_link()
641 link->sink->entity == sink->entity && in media_entity_find_link()
664 for (i = 0; i < pad->entity->num_links; i++) { in media_entity_remote_pad()
665 struct media_link *link = &pad->entity->links[i]; in media_entity_remote_pad()