1*3b2e0062SRob Herring# SPDX-License-Identifier: GPL-2.0
2*3b2e0062SRob Herring%YAML 1.2
3*3b2e0062SRob Herring---
4*3b2e0062SRob Herring$id: http://devicetree.org/schemas/media/video-mux.yaml#
5*3b2e0062SRob Herring$schema: http://devicetree.org/meta-schemas/core.yaml#
6*3b2e0062SRob Herring
7*3b2e0062SRob Herringtitle: Video Multiplexer
8*3b2e0062SRob Herring
9*3b2e0062SRob Herringmaintainers:
10*3b2e0062SRob Herring  - Sakari Ailus <sakari.ailus@linux.intel.com>
11*3b2e0062SRob Herring  - Laurent Pinchart <laurent.pinchart@ideasonboard.com>
12*3b2e0062SRob Herring
13*3b2e0062SRob Herringdescription:
14*3b2e0062SRob Herring  Video multiplexers allow to select between multiple input ports. Video
15*3b2e0062SRob Herring  received on the active input port is passed through to the output port. Muxes
16*3b2e0062SRob Herring  described by this binding are controlled by a multiplexer controller.
17*3b2e0062SRob Herring
18*3b2e0062SRob Herringproperties:
19*3b2e0062SRob Herring  compatible:
20*3b2e0062SRob Herring    const: video-mux
21*3b2e0062SRob Herring
22*3b2e0062SRob Herring  mux-controls:
23*3b2e0062SRob Herring    maxItems: 1
24*3b2e0062SRob Herring
25*3b2e0062SRob Herring  '#address-cells':
26*3b2e0062SRob Herring    const: 1
27*3b2e0062SRob Herring
28*3b2e0062SRob Herring  '#size-cells':
29*3b2e0062SRob Herring    const: 0
30*3b2e0062SRob Herring
31*3b2e0062SRob Herring  ports:
32*3b2e0062SRob Herring    $ref: /schemas/graph.yaml#/properties/ports
33*3b2e0062SRob Herring
34*3b2e0062SRob Herring    patternProperties:
35*3b2e0062SRob Herring      '^port@':
36*3b2e0062SRob Herring        $ref: /schemas/graph.yaml#/properties/port
37*3b2e0062SRob Herring
38*3b2e0062SRob Herring    required:
39*3b2e0062SRob Herring      - port@0
40*3b2e0062SRob Herring      - port@1
41*3b2e0062SRob Herring      - port@2
42*3b2e0062SRob Herring
43*3b2e0062SRob HerringpatternProperties:
44*3b2e0062SRob Herring  '^port@':
45*3b2e0062SRob Herring    $ref: /schemas/graph.yaml#/properties/port
46*3b2e0062SRob Herring    description:
47*3b2e0062SRob Herring      At least three port nodes containing endpoints connecting to the source
48*3b2e0062SRob Herring      and sink devices according to of_graph bindings. The last port is the
49*3b2e0062SRob Herring      output port, all others are inputs.
50*3b2e0062SRob Herring
51*3b2e0062SRob Herringrequired:
52*3b2e0062SRob Herring  - compatible
53*3b2e0062SRob Herring  - mux-controls
54*3b2e0062SRob Herring
55*3b2e0062SRob HerringoneOf:
56*3b2e0062SRob Herring  - required:
57*3b2e0062SRob Herring      - ports
58*3b2e0062SRob Herring  - required:
59*3b2e0062SRob Herring      - port@0
60*3b2e0062SRob Herring      - port@1
61*3b2e0062SRob Herring      - port@2
62*3b2e0062SRob Herring
63*3b2e0062SRob HerringadditionalProperties: false
64*3b2e0062SRob Herring
65*3b2e0062SRob Herringexamples:
66*3b2e0062SRob Herring  - |
67*3b2e0062SRob Herring    #include <dt-bindings/gpio/gpio.h>
68*3b2e0062SRob Herring
69*3b2e0062SRob Herring    mux: mux-controller {
70*3b2e0062SRob Herring        compatible = "gpio-mux";
71*3b2e0062SRob Herring        #mux-control-cells = <0>;
72*3b2e0062SRob Herring
73*3b2e0062SRob Herring        mux-gpios = <&gpio1 15 GPIO_ACTIVE_HIGH>;
74*3b2e0062SRob Herring    };
75*3b2e0062SRob Herring
76*3b2e0062SRob Herring    video-mux {
77*3b2e0062SRob Herring        compatible = "video-mux";
78*3b2e0062SRob Herring        mux-controls = <&mux>;
79*3b2e0062SRob Herring        #address-cells = <1>;
80*3b2e0062SRob Herring        #size-cells = <0>;
81*3b2e0062SRob Herring
82*3b2e0062SRob Herring        port@0 {
83*3b2e0062SRob Herring            reg = <0>;
84*3b2e0062SRob Herring
85*3b2e0062SRob Herring            mux_in0: endpoint {
86*3b2e0062SRob Herring                remote-endpoint = <&video_source0_out>;
87*3b2e0062SRob Herring            };
88*3b2e0062SRob Herring        };
89*3b2e0062SRob Herring
90*3b2e0062SRob Herring        port@1 {
91*3b2e0062SRob Herring            reg = <1>;
92*3b2e0062SRob Herring
93*3b2e0062SRob Herring            mux_in1: endpoint {
94*3b2e0062SRob Herring                remote-endpoint = <&video_source1_out>;
95*3b2e0062SRob Herring            };
96*3b2e0062SRob Herring        };
97*3b2e0062SRob Herring
98*3b2e0062SRob Herring        port@2 {
99*3b2e0062SRob Herring            reg = <2>;
100*3b2e0062SRob Herring
101*3b2e0062SRob Herring            mux_out: endpoint {
102*3b2e0062SRob Herring                remote-endpoint = <&capture_interface_in>;
103*3b2e0062SRob Herring            };
104*3b2e0062SRob Herring        };
105*3b2e0062SRob Herring    };
106*3b2e0062SRob Herring...
107