Lines Matching full:pad

116 		struct media_pad *pad = gobj_to_pad(gobj);  in dev_dbg_obj()  local
121 pad->flags & MEDIA_PAD_FL_SINK ? "sink " : "", in dev_dbg_obj()
122 pad->flags & MEDIA_PAD_FL_SOURCE ? "source " : "", in dev_dbg_obj()
123 pad->entity->name, pad->index); in dev_dbg_obj()
233 * @pad0: The first pad index
234 * @pad1: The second pad index
238 * and enabling one of the pads means that the other pad will become "locked"
246 * One of @pad0 and @pad1 must be a sink pad and the other one a source pad.
420 * When a new pad is reached, an entry is pushed on the top of the stack and
421 * points to the incoming pad and the first link of the entity.
424 * internal pad dependencies in the entity, and then links in the graph. It
426 * links that originate from a pad that is internally connected to the incoming
427 * pad, as reported by the media_entity_has_pad_interdep() function.
433 * @pad: The media pad being visited
437 struct media_pad *pad; member
500 struct media_pad *pad) in media_pipeline_walk_push() argument
513 entry->pad = pad; in media_pipeline_walk_push()
514 entry->links = pad->entity->links.next; in media_pipeline_walk_push()
518 walk->stack.top, pad->entity->name, pad->index); in media_pipeline_walk_push()
537 if (entry->links->next == &entry->pad->entity->links) { in media_pipeline_walk_pop()
561 /* Add a pad to the pipeline and push it to the stack. */
564 struct media_pad *pad) in media_pipeline_add_pad() argument
569 if (ppad->pad == pad) { in media_pipeline_add_pad()
570 dev_dbg(pad->graph_obj.mdev->dev, in media_pipeline_add_pad()
571 "media pipeline: already contains pad '%s':%u\n", in media_pipeline_add_pad()
572 pad->entity->name, pad->index); in media_pipeline_add_pad()
582 ppad->pad = pad; in media_pipeline_add_pad()
586 dev_dbg(pad->graph_obj.mdev->dev, in media_pipeline_add_pad()
587 "media pipeline: added pad '%s':%u\n", in media_pipeline_add_pad()
588 pad->entity->name, pad->index); in media_pipeline_add_pad()
590 return media_pipeline_walk_push(walk, pad); in media_pipeline_add_pad()
605 origin = entry->pad; in media_pipeline_explore_next_link()
620 /* Get the local pad and remote pad. */ in media_pipeline_explore_next_link()
630 * Skip links that originate from a different pad than the incoming pad in media_pipeline_explore_next_link()
631 * that is not connected internally in the entity to the incoming pad. in media_pipeline_explore_next_link()
642 * Add the local pad of the link to the pipeline and push it to the in media_pipeline_explore_next_link()
649 /* Similarly, add the remote pad, but only if the link is enabled. */ in media_pipeline_explore_next_link()
677 * Skip the origin pad (already handled), pad that have links in media_pipeline_explore_next_link()
706 struct media_pad *pad) in media_pipeline_populate() argument
714 * from @pad. in media_pipeline_populate()
717 pipe->mdev = pad->graph_obj.mdev; in media_pipeline_populate()
721 ret = media_pipeline_add_pad(pipe, &walk, pad); in media_pipeline_populate()
738 dev_dbg(pad->graph_obj.mdev->dev, in media_pipeline_populate()
742 dev_dbg(pad->graph_obj.mdev->dev, "- '%s':%u\n", in media_pipeline_populate()
743 ppad->pad->entity->name, ppad->pad->index); in media_pipeline_populate()
758 __must_check int __media_pipeline_start(struct media_pad *pad, in __media_pipeline_start() argument
761 struct media_device *mdev = pad->graph_obj.mdev; in __media_pipeline_start()
769 * If the pad is already part of a pipeline, that pipeline must be the in __media_pipeline_start()
772 if (WARN_ON(pad->pipe && pad->pipe != pipe)) in __media_pipeline_start()
786 * with media_pipeline_pad instances for each pad found during graph in __media_pipeline_start()
789 ret = media_pipeline_populate(pipe, pad); in __media_pipeline_start()
799 struct media_pad *pad = ppad->pad; in __media_pipeline_start() local
800 struct media_entity *entity = pad->entity; in __media_pipeline_start()
804 dev_dbg(mdev->dev, "Validating pad '%s':%u\n", pad->entity->name, in __media_pipeline_start()
805 pad->index); in __media_pipeline_start()
808 * 1. Ensure that the pad doesn't already belong to a different in __media_pipeline_start()
811 if (pad->pipe) { in __media_pipeline_start()
812 dev_dbg(mdev->dev, "Failed to start pipeline: pad '%s':%u busy\n", in __media_pipeline_start()
813 pad->entity->name, pad->index); in __media_pipeline_start()
819 * 2. Validate all active links whose sink is the current pad. in __media_pipeline_start()
821 * the connected sink pad to avoid duplicating checks. in __media_pipeline_start()
824 /* Skip links unrelated to the current pad. */ in __media_pipeline_start()
825 if (link->sink != pad && link->source != pad) in __media_pipeline_start()
828 /* Record if the pad has links and enabled links. */ in __media_pipeline_start()
834 * current pad as its sink. in __media_pipeline_start()
839 if (link->sink != pad) in __media_pipeline_start()
865 * 3. If the pad has the MEDIA_PAD_FL_MUST_CONNECT flag set, in __media_pipeline_start()
868 if ((pad->flags & MEDIA_PAD_FL_MUST_CONNECT) && in __media_pipeline_start()
871 "Pad '%s':%u must be connected by an enabled link\n", in __media_pipeline_start()
872 pad->entity->name, pad->index); in __media_pipeline_start()
877 /* Validation passed, store the pipe pointer in the pad. */ in __media_pipeline_start()
878 pad->pipe = pipe; in __media_pipeline_start()
895 err_ppad->pad->pipe = NULL; in __media_pipeline_start()
904 __must_check int media_pipeline_start(struct media_pad *pad, in media_pipeline_start() argument
907 struct media_device *mdev = pad->graph_obj.mdev; in media_pipeline_start()
911 ret = __media_pipeline_start(pad, pipe); in media_pipeline_start()
917 void __media_pipeline_stop(struct media_pad *pad) in __media_pipeline_stop() argument
919 struct media_pipeline *pipe = pad->pipe; in __media_pipeline_stop()
933 ppad->pad->pipe = NULL; in __media_pipeline_stop()
942 void media_pipeline_stop(struct media_pad *pad) in media_pipeline_stop() argument
944 struct media_device *mdev = pad->graph_obj.mdev; in media_pipeline_stop()
947 __media_pipeline_stop(pad); in media_pipeline_stop()
952 __must_check int media_pipeline_alloc_start(struct media_pad *pad) in media_pipeline_alloc_start() argument
954 struct media_device *mdev = pad->graph_obj.mdev; in media_pipeline_alloc_start()
962 * Is the pad already part of a pipeline? If not, we need to allocate in media_pipeline_alloc_start()
965 pipe = media_pad_pipeline(pad); in media_pipeline_alloc_start()
977 ret = __media_pipeline_start(pad, pipe); in media_pipeline_alloc_start()
991 struct media_pad *pad) in __media_pipeline_pad_iter_next() argument
993 if (!pad) in __media_pipeline_pad_iter_next()
999 pad = list_entry(iter->cursor, struct media_pipeline_pad, list)->pad; in __media_pipeline_pad_iter_next()
1002 return pad; in __media_pipeline_pad_iter_next()
1032 entity = ppad->pad->entity; in __media_pipeline_entity_iter_next()
1373 struct media_pad *media_pad_remote_pad_first(const struct media_pad *pad) in media_pad_remote_pad_first() argument
1377 for_each_media_entity_data_link(pad->entity, link) { in media_pad_remote_pad_first()
1381 if (link->source == pad) in media_pad_remote_pad_first()
1384 if (link->sink == pad) in media_pad_remote_pad_first()
1397 struct media_pad *pad = NULL; in media_entity_remote_pad_unique() local
1418 if (pad) in media_entity_remote_pad_unique()
1421 pad = remote_pad; in media_entity_remote_pad_unique()
1425 if (!pad) in media_entity_remote_pad_unique()
1428 return pad; in media_entity_remote_pad_unique()
1432 struct media_pad *media_pad_remote_pad_unique(const struct media_pad *pad) in media_pad_remote_pad_unique() argument
1437 list_for_each_entry(link, &pad->entity->links, list) { in media_pad_remote_pad_unique()
1443 if (link->sink == pad) in media_pad_remote_pad_unique()
1445 else if (link->source == pad) in media_pad_remote_pad_unique()
1500 struct media_pad *pad; in media_entity_pipeline() local
1502 media_entity_for_each_pad(entity, pad) { in media_entity_pipeline()
1503 if (pad->pipe) in media_entity_pipeline()
1504 return pad->pipe; in media_entity_pipeline()
1511 struct media_pipeline *media_pad_pipeline(struct media_pad *pad) in media_pad_pipeline() argument
1513 return pad->pipe; in media_pad_pipeline()