Lines Matching defs:vmux
56 struct video_mux *vmux = v4l2_subdev_to_video_mux(sd);
71 mutex_lock(&vmux->lock);
74 if (vmux->active == local->index)
77 if (vmux->active >= 0) {
83 ret = mux_control_try_select(vmux->mux, local->index);
86 vmux->active = local->index;
89 vmux->format_mbus[source_pad] = vmux->format_mbus[vmux->active];
91 if (vmux->active != local->index)
95 mux_control_deselect(vmux->mux);
96 vmux->active = -1;
100 mutex_unlock(&vmux->lock);
112 struct video_mux *vmux = v4l2_subdev_to_video_mux(sd);
116 if (vmux->active == -1) {
121 pad = media_entity_remote_pad(&sd->entity.pads[vmux->active]);
146 struct video_mux *vmux = v4l2_subdev_to_video_mux(sd);
152 return &vmux->format_mbus[pad];
162 struct video_mux *vmux = v4l2_subdev_to_video_mux(sd);
164 mutex_lock(&vmux->lock);
169 mutex_unlock(&vmux->lock);
178 struct video_mux *vmux = v4l2_subdev_to_video_mux(sd);
180 struct media_pad *pad = &vmux->pads[sdformat->pad];
295 mutex_lock(&vmux->lock);
298 if ((pad->flags & MEDIA_PAD_FL_SOURCE) && vmux->active >= 0)
299 sdformat->format = vmux->format_mbus[vmux->active];
304 if ((pad->flags & MEDIA_PAD_FL_SINK) && (pad->index == vmux->active))
307 mutex_unlock(&vmux->lock);
315 struct video_mux *vmux = v4l2_subdev_to_video_mux(sd);
319 mutex_lock(&vmux->lock);
326 mutex_unlock(&vmux->lock);
346 struct video_mux *vmux = notifier_to_video_mux(notifier);
348 return v4l2_create_fwnode_links(sd, &vmux->subdev);
355 static int video_mux_async_register(struct video_mux *vmux,
361 v4l2_async_notifier_init(&vmux->notifier);
368 dev_fwnode(vmux->subdev.dev), i, 0,
382 &vmux->notifier, ep, sizeof(*asd));
394 vmux->notifier.ops = &video_mux_notify_ops;
396 ret = v4l2_async_subdev_notifier_register(&vmux->subdev,
397 &vmux->notifier);
401 return v4l2_async_register_subdev(&vmux->subdev);
409 struct video_mux *vmux;
414 vmux = devm_kzalloc(dev, sizeof(*vmux), GFP_KERNEL);
415 if (!vmux)
418 platform_set_drvdata(pdev, vmux);
420 v4l2_subdev_init(&vmux->subdev, &video_mux_subdev_ops);
421 snprintf(vmux->subdev.name, sizeof(vmux->subdev.name), "%pOFn", np);
422 vmux->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
423 vmux->subdev.dev = dev;
441 vmux->mux = devm_mux_control_get(dev, NULL);
442 if (IS_ERR(vmux->mux)) {
443 ret = PTR_ERR(vmux->mux);
449 mutex_init(&vmux->lock);
450 vmux->active = -1;
451 vmux->pads = devm_kcalloc(dev, num_pads, sizeof(*vmux->pads),
453 if (!vmux->pads)
456 vmux->format_mbus = devm_kcalloc(dev, num_pads,
457 sizeof(*vmux->format_mbus),
459 if (!vmux->format_mbus)
463 vmux->pads[i].flags = (i < num_pads - 1) ? MEDIA_PAD_FL_SINK
465 vmux->format_mbus[i] = video_mux_format_mbus_default;
468 vmux->subdev.entity.function = MEDIA_ENT_F_VID_MUX;
469 ret = media_entity_pads_init(&vmux->subdev.entity, num_pads,
470 vmux->pads);
474 vmux->subdev.entity.ops = &video_mux_ops;
476 ret = video_mux_async_register(vmux, num_pads - 1);
478 v4l2_async_notifier_unregister(&vmux->notifier);
479 v4l2_async_notifier_cleanup(&vmux->notifier);
487 struct video_mux *vmux = platform_get_drvdata(pdev);
488 struct v4l2_subdev *sd = &vmux->subdev;
490 v4l2_async_notifier_unregister(&vmux->notifier);
491 v4l2_async_notifier_cleanup(&vmux->notifier);