summaryrefslogtreecommitdiffstats
path: root/Documentation/devicetree/bindings/mux/reg-mux.txt
blob: 4afd7ba73d60e0d05372ecab0e930d4ffb2e2d69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
Generic register bitfield-based multiplexer controller bindings

Define register bitfields to be used to control multiplexers. The parent
device tree node must be a device node to provide register r/w access.

Required properties:
- compatible : should be one of
	"reg-mux" : if parent device of mux controller is not syscon device
	"mmio-mux" : if parent device of mux controller is syscon device
- #mux-control-cells : <1>
- mux-reg-masks : an array of register offset and pre-shifted bitfield mask
                  pairs, each describing a single mux control.
* Standard mux-controller bindings as decribed in mux-controller.txt

Optional properties:
- idle-states : if present, the state the muxes will have when idle. The
		special state MUX_IDLE_AS_IS is the default.

The multiplexer state of each multiplexer is defined as the value of the
bitfield described by the corresponding register offset and bitfield mask
pair in the mux-reg-masks array.

Example 1:
The parent device of mux controller is not a syscon device.

&i2c0 {
	fpga@66 { // fpga connected to i2c
		compatible = "fsl,lx2160aqds-fpga", "fsl,fpga-qixis-i2c",
			     "simple-mfd";
		reg = <0x66>;

		mux: mux-controller {
			compatible = "reg-mux";
			#mux-control-cells = <1>;
			mux-reg-masks = <0x54 0xf8>, /* 0: reg 0x54, bits 7:3 */
					<0x54 0x07>; /* 1: reg 0x54, bits 2:0 */
		};
	};
};

mdio-mux-1 {
	compatible = "mdio-mux-multiplexer";
	mux-controls = <&mux 0>;
	mdio-parent-bus = <&emdio1>;
	#address-cells = <1>;
	#size-cells = <0>;

	mdio@0 {
		reg = <0x0>;
		#address-cells = <1>;
		#size-cells = <0>;
	};

	mdio@8 {
		reg = <0x8>;
		#address-cells = <1>;
		#size-cells = <0>;
	};

	..
	..
};

mdio-mux-2 {
	compatible = "mdio-mux-multiplexer";
	mux-controls = <&mux 1>;
	mdio-parent-bus = <&emdio2>;
	#address-cells = <1>;
	#size-cells = <0>;

	mdio@0 {
		reg = <0x0>;
		#address-cells = <1>;
		#size-cells = <0>;
	};

	mdio@1 {
		reg = <0x1>;
		#address-cells = <1>;
		#size-cells = <0>;
	};

	..
	..
};

Example 2:
The parent device of mux controller is syscon device.

syscon {
	compatible = "syscon";

	mux: mux-controller {
		compatible = "mmio-mux";
		#mux-control-cells = <1>;

		mux-reg-masks = <0x3 0x30>, /* 0: reg 0x3, bits 5:4 */
				<0x3 0x40>, /* 1: reg 0x3, bit 6 */
		idle-states = <MUX_IDLE_AS_IS>, <0>;
	};
};

video-mux {
	compatible = "video-mux";
	mux-controls = <&mux 0>;
	#address-cells = <1>;
	#size-cells = <0>;

	ports {
		/* inputs 0..3 */
		port@0 {
			reg = <0>;
		};
		port@1 {
			reg = <1>;
		};
		port@2 {
			reg = <2>;
		};
		port@3 {
			reg = <3>;
		};

		/* output */
		port@4 {
			reg = <4>;
		};
	};
};