Lines Matching defs:vmux

55 	struct video_mux *vmux = v4l2_subdev_to_video_mux(sd);
70 mutex_lock(&vmux->lock);
76 if (vmux->active == local->index)
79 if (vmux->active >= 0) {
85 ret = mux_control_try_select(vmux->mux, local->index);
88 vmux->active = local->index;
95 vmux->active);
98 if (vmux->active != local->index)
102 mux_control_deselect(vmux->mux);
103 vmux->active = -1;
107 mutex_unlock(&vmux->lock);
119 struct video_mux *vmux = v4l2_subdev_to_video_mux(sd);
123 if (vmux->active == -1) {
128 pad = media_pad_remote_pad_first(&sd->entity.pads[vmux->active]);
152 struct video_mux *vmux = v4l2_subdev_to_video_mux(sd);
154 struct media_pad *pad = &vmux->pads[sdformat->pad];
267 mutex_lock(&vmux->lock);
270 if ((pad->flags & MEDIA_PAD_FL_SOURCE) && vmux->active >= 0)
272 vmux->active);
277 if ((pad->flags & MEDIA_PAD_FL_SINK) && (pad->index == vmux->active))
280 mutex_unlock(&vmux->lock);
288 struct video_mux *vmux = v4l2_subdev_to_video_mux(sd);
292 mutex_lock(&vmux->lock);
299 mutex_unlock(&vmux->lock);
319 struct video_mux *vmux = notifier_to_video_mux(notifier);
321 return v4l2_create_fwnode_links(sd, &vmux->subdev);
328 static int video_mux_async_register(struct video_mux *vmux,
334 v4l2_async_subdev_nf_init(&vmux->notifier, &vmux->subdev);
341 dev_fwnode(vmux->subdev.dev), i, 0,
354 asd = v4l2_async_nf_add_fwnode_remote(&vmux->notifier, ep,
367 vmux->notifier.ops = &video_mux_notify_ops;
369 ret = v4l2_async_nf_register(&vmux->notifier);
373 ret = v4l2_async_register_subdev(&vmux->subdev);
380 v4l2_async_nf_unregister(&vmux->notifier);
382 v4l2_async_nf_cleanup(&vmux->notifier);
391 struct video_mux *vmux;
396 vmux = devm_kzalloc(dev, sizeof(*vmux), GFP_KERNEL);
397 if (!vmux)
400 platform_set_drvdata(pdev, vmux);
402 v4l2_subdev_init(&vmux->subdev, &video_mux_subdev_ops);
403 snprintf(vmux->subdev.name, sizeof(vmux->subdev.name), "%pOFn", np);
404 vmux->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
405 vmux->subdev.dev = dev;
423 vmux->mux = devm_mux_control_get(dev, NULL);
424 if (IS_ERR(vmux->mux)) {
425 ret = PTR_ERR(vmux->mux);
429 mutex_init(&vmux->lock);
430 vmux->active = -1;
431 vmux->pads = devm_kcalloc(dev, num_pads, sizeof(*vmux->pads),
433 if (!vmux->pads)
437 vmux->pads[i].flags = (i < num_pads - 1) ? MEDIA_PAD_FL_SINK
440 vmux->subdev.entity.function = MEDIA_ENT_F_VID_MUX;
441 ret = media_entity_pads_init(&vmux->subdev.entity, num_pads,
442 vmux->pads);
446 vmux->subdev.entity.ops = &video_mux_ops;
448 ret = v4l2_subdev_init_finalize(&vmux->subdev);
452 ret = video_mux_async_register(vmux, num_pads - 1);
459 v4l2_subdev_cleanup(&vmux->subdev);
461 media_entity_cleanup(&vmux->subdev.entity);
467 struct video_mux *vmux = platform_get_drvdata(pdev);
468 struct v4l2_subdev *sd = &vmux->subdev;
470 v4l2_async_nf_unregister(&vmux->notifier);
471 v4l2_async_nf_cleanup(&vmux->notifier);