xref: /freebsd/sys/contrib/device-tree/Bindings/mux/reg-mux.yaml (revision 5956d97f4b3204318ceb6aa9c77bd0bc6ea87a41)
1*5956d97fSEmmanuel Vadot# SPDX-License-Identifier: GPL-2.0
2*5956d97fSEmmanuel Vadot%YAML 1.2
3*5956d97fSEmmanuel Vadot---
4*5956d97fSEmmanuel Vadot$id: http://devicetree.org/schemas/mux/reg-mux.yaml#
5*5956d97fSEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
6*5956d97fSEmmanuel Vadot
7*5956d97fSEmmanuel Vadottitle: Generic register bitfield-based multiplexer controller bindings
8*5956d97fSEmmanuel Vadot
9*5956d97fSEmmanuel Vadotmaintainers:
10*5956d97fSEmmanuel Vadot  - Peter Rosin <peda@axentia.se>
11*5956d97fSEmmanuel Vadot
12*5956d97fSEmmanuel Vadotdescription: |+
13*5956d97fSEmmanuel Vadot  Define register bitfields to be used to control multiplexers. The parent
14*5956d97fSEmmanuel Vadot  device tree node must be a device node to provide register r/w access.
15*5956d97fSEmmanuel Vadot
16*5956d97fSEmmanuel Vadotproperties:
17*5956d97fSEmmanuel Vadot  compatible:
18*5956d97fSEmmanuel Vadot    enum:
19*5956d97fSEmmanuel Vadot      - reg-mux   # parent device of mux controller is not syscon device
20*5956d97fSEmmanuel Vadot      - mmio-mux  # parent device of mux controller is syscon device
21*5956d97fSEmmanuel Vadot
22*5956d97fSEmmanuel Vadot  reg: true
23*5956d97fSEmmanuel Vadot
24*5956d97fSEmmanuel Vadot  '#mux-control-cells':
25*5956d97fSEmmanuel Vadot    const: 1
26*5956d97fSEmmanuel Vadot
27*5956d97fSEmmanuel Vadot  mux-reg-masks:
28*5956d97fSEmmanuel Vadot    description: an array of register offset and pre-shifted bitfield mask
29*5956d97fSEmmanuel Vadot      pairs, each describing a single mux control.
30*5956d97fSEmmanuel Vadot
31*5956d97fSEmmanuel Vadot  idle-states: true
32*5956d97fSEmmanuel Vadot
33*5956d97fSEmmanuel Vadotrequired:
34*5956d97fSEmmanuel Vadot  - compatible
35*5956d97fSEmmanuel Vadot  - mux-reg-masks
36*5956d97fSEmmanuel Vadot  - '#mux-control-cells'
37*5956d97fSEmmanuel Vadot
38*5956d97fSEmmanuel VadotadditionalProperties: false
39*5956d97fSEmmanuel Vadot
40*5956d97fSEmmanuel Vadotexamples:
41*5956d97fSEmmanuel Vadot  - |
42*5956d97fSEmmanuel Vadot    /* The parent device of mux controller is not a syscon device. */
43*5956d97fSEmmanuel Vadot
44*5956d97fSEmmanuel Vadot    #include <dt-bindings/mux/mux.h>
45*5956d97fSEmmanuel Vadot
46*5956d97fSEmmanuel Vadot    mux-controller {
47*5956d97fSEmmanuel Vadot        compatible = "reg-mux";
48*5956d97fSEmmanuel Vadot        #mux-control-cells = <1>;
49*5956d97fSEmmanuel Vadot        mux-reg-masks =
50*5956d97fSEmmanuel Vadot            <0x54 0xf8>, /* 0: reg 0x54, bits 7:3 */
51*5956d97fSEmmanuel Vadot            <0x54 0x07>; /* 1: reg 0x54, bits 2:0 */
52*5956d97fSEmmanuel Vadot    };
53*5956d97fSEmmanuel Vadot
54*5956d97fSEmmanuel Vadot    mdio-mux-1 {
55*5956d97fSEmmanuel Vadot        compatible = "mdio-mux-multiplexer";
56*5956d97fSEmmanuel Vadot        mux-controls = <&mux1 0>;
57*5956d97fSEmmanuel Vadot        mdio-parent-bus = <&emdio1>;
58*5956d97fSEmmanuel Vadot        #address-cells = <1>;
59*5956d97fSEmmanuel Vadot        #size-cells = <0>;
60*5956d97fSEmmanuel Vadot
61*5956d97fSEmmanuel Vadot        mdio@0 {
62*5956d97fSEmmanuel Vadot            reg = <0x0>;
63*5956d97fSEmmanuel Vadot            #address-cells = <1>;
64*5956d97fSEmmanuel Vadot            #size-cells = <0>;
65*5956d97fSEmmanuel Vadot        };
66*5956d97fSEmmanuel Vadot
67*5956d97fSEmmanuel Vadot        mdio@8 {
68*5956d97fSEmmanuel Vadot            reg = <0x8>;
69*5956d97fSEmmanuel Vadot            #address-cells = <1>;
70*5956d97fSEmmanuel Vadot            #size-cells = <0>;
71*5956d97fSEmmanuel Vadot        };
72*5956d97fSEmmanuel Vadot    };
73*5956d97fSEmmanuel Vadot
74*5956d97fSEmmanuel Vadot    mdio-mux-2 {
75*5956d97fSEmmanuel Vadot        compatible = "mdio-mux-multiplexer";
76*5956d97fSEmmanuel Vadot        mux-controls = <&mux1 1>;
77*5956d97fSEmmanuel Vadot        mdio-parent-bus = <&emdio2>;
78*5956d97fSEmmanuel Vadot        #address-cells = <1>;
79*5956d97fSEmmanuel Vadot        #size-cells = <0>;
80*5956d97fSEmmanuel Vadot
81*5956d97fSEmmanuel Vadot        mdio@0 {
82*5956d97fSEmmanuel Vadot            reg = <0x0>;
83*5956d97fSEmmanuel Vadot            #address-cells = <1>;
84*5956d97fSEmmanuel Vadot            #size-cells = <0>;
85*5956d97fSEmmanuel Vadot        };
86*5956d97fSEmmanuel Vadot
87*5956d97fSEmmanuel Vadot        mdio@1 {
88*5956d97fSEmmanuel Vadot            reg = <0x1>;
89*5956d97fSEmmanuel Vadot            #address-cells = <1>;
90*5956d97fSEmmanuel Vadot            #size-cells = <0>;
91*5956d97fSEmmanuel Vadot        };
92*5956d97fSEmmanuel Vadot    };
93*5956d97fSEmmanuel Vadot
94*5956d97fSEmmanuel Vadot  - |
95*5956d97fSEmmanuel Vadot    /* The parent device of mux controller is syscon device. */
96*5956d97fSEmmanuel Vadot
97*5956d97fSEmmanuel Vadot    #include <dt-bindings/mux/mux.h>
98*5956d97fSEmmanuel Vadot    syscon@1000 {
99*5956d97fSEmmanuel Vadot        compatible = "fsl,imx7d-iomuxc-gpr", "fsl,imx6q-iomuxc-gpr", "syscon", "simple-mfd";
100*5956d97fSEmmanuel Vadot        reg = <0x1000 0x100>;
101*5956d97fSEmmanuel Vadot
102*5956d97fSEmmanuel Vadot        mux2: mux-controller {
103*5956d97fSEmmanuel Vadot            compatible = "mmio-mux";
104*5956d97fSEmmanuel Vadot            #mux-control-cells = <1>;
105*5956d97fSEmmanuel Vadot
106*5956d97fSEmmanuel Vadot            mux-reg-masks =
107*5956d97fSEmmanuel Vadot                <0x3 0x30>, /* 0: reg 0x3, bits 5:4 */
108*5956d97fSEmmanuel Vadot                <0x3 0x40>; /* 1: reg 0x3, bit 6 */
109*5956d97fSEmmanuel Vadot            idle-states = <MUX_IDLE_AS_IS>, <0>;
110*5956d97fSEmmanuel Vadot        };
111*5956d97fSEmmanuel Vadot    };
112*5956d97fSEmmanuel Vadot
113*5956d97fSEmmanuel Vadot    video-mux {
114*5956d97fSEmmanuel Vadot        compatible = "video-mux";
115*5956d97fSEmmanuel Vadot        mux-controls = <&mux2 0>;
116*5956d97fSEmmanuel Vadot        #address-cells = <1>;
117*5956d97fSEmmanuel Vadot        #size-cells = <0>;
118*5956d97fSEmmanuel Vadot
119*5956d97fSEmmanuel Vadot        ports {
120*5956d97fSEmmanuel Vadot            #address-cells = <1>;
121*5956d97fSEmmanuel Vadot            #size-cells = <0>;
122*5956d97fSEmmanuel Vadot
123*5956d97fSEmmanuel Vadot            /* inputs 0..3 */
124*5956d97fSEmmanuel Vadot            port@0 {
125*5956d97fSEmmanuel Vadot                reg = <0>;
126*5956d97fSEmmanuel Vadot            };
127*5956d97fSEmmanuel Vadot            port@1 {
128*5956d97fSEmmanuel Vadot                reg = <1>;
129*5956d97fSEmmanuel Vadot            };
130*5956d97fSEmmanuel Vadot            port@2 {
131*5956d97fSEmmanuel Vadot                reg = <2>;
132*5956d97fSEmmanuel Vadot            };
133*5956d97fSEmmanuel Vadot            port@3 {
134*5956d97fSEmmanuel Vadot                reg = <3>;
135*5956d97fSEmmanuel Vadot            };
136*5956d97fSEmmanuel Vadot
137*5956d97fSEmmanuel Vadot            /* output */
138*5956d97fSEmmanuel Vadot            port@4 {
139*5956d97fSEmmanuel Vadot                reg = <4>;
140*5956d97fSEmmanuel Vadot            };
141*5956d97fSEmmanuel Vadot        };
142*5956d97fSEmmanuel Vadot    };
143*5956d97fSEmmanuel Vadot...
144