18c2ecf20Sopenharmony_ciGeneric register bitfield-based multiplexer controller bindings
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ciDefine register bitfields to be used to control multiplexers. The parent
48c2ecf20Sopenharmony_cidevice tree node must be a device node to provide register r/w access.
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ciRequired properties:
78c2ecf20Sopenharmony_ci- compatible : should be one of
88c2ecf20Sopenharmony_ci	"reg-mux" : if parent device of mux controller is not syscon device
98c2ecf20Sopenharmony_ci	"mmio-mux" : if parent device of mux controller is syscon device
108c2ecf20Sopenharmony_ci- #mux-control-cells : <1>
118c2ecf20Sopenharmony_ci- mux-reg-masks : an array of register offset and pre-shifted bitfield mask
128c2ecf20Sopenharmony_ci                  pairs, each describing a single mux control.
138c2ecf20Sopenharmony_ci* Standard mux-controller bindings as decribed in mux-controller.txt
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ciOptional properties:
168c2ecf20Sopenharmony_ci- idle-states : if present, the state the muxes will have when idle. The
178c2ecf20Sopenharmony_ci		special state MUX_IDLE_AS_IS is the default.
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ciThe multiplexer state of each multiplexer is defined as the value of the
208c2ecf20Sopenharmony_cibitfield described by the corresponding register offset and bitfield mask
218c2ecf20Sopenharmony_cipair in the mux-reg-masks array.
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ciExample 1:
248c2ecf20Sopenharmony_ciThe parent device of mux controller is not a syscon device.
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci&i2c0 {
278c2ecf20Sopenharmony_ci	fpga@66 { // fpga connected to i2c
288c2ecf20Sopenharmony_ci		compatible = "fsl,lx2160aqds-fpga", "fsl,fpga-qixis-i2c",
298c2ecf20Sopenharmony_ci			     "simple-mfd";
308c2ecf20Sopenharmony_ci		reg = <0x66>;
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci		mux: mux-controller {
338c2ecf20Sopenharmony_ci			compatible = "reg-mux";
348c2ecf20Sopenharmony_ci			#mux-control-cells = <1>;
358c2ecf20Sopenharmony_ci			mux-reg-masks = <0x54 0xf8>, /* 0: reg 0x54, bits 7:3 */
368c2ecf20Sopenharmony_ci					<0x54 0x07>; /* 1: reg 0x54, bits 2:0 */
378c2ecf20Sopenharmony_ci		};
388c2ecf20Sopenharmony_ci	};
398c2ecf20Sopenharmony_ci};
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_cimdio-mux-1 {
428c2ecf20Sopenharmony_ci	compatible = "mdio-mux-multiplexer";
438c2ecf20Sopenharmony_ci	mux-controls = <&mux 0>;
448c2ecf20Sopenharmony_ci	mdio-parent-bus = <&emdio1>;
458c2ecf20Sopenharmony_ci	#address-cells = <1>;
468c2ecf20Sopenharmony_ci	#size-cells = <0>;
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci	mdio@0 {
498c2ecf20Sopenharmony_ci		reg = <0x0>;
508c2ecf20Sopenharmony_ci		#address-cells = <1>;
518c2ecf20Sopenharmony_ci		#size-cells = <0>;
528c2ecf20Sopenharmony_ci	};
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci	mdio@8 {
558c2ecf20Sopenharmony_ci		reg = <0x8>;
568c2ecf20Sopenharmony_ci		#address-cells = <1>;
578c2ecf20Sopenharmony_ci		#size-cells = <0>;
588c2ecf20Sopenharmony_ci	};
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci	..
618c2ecf20Sopenharmony_ci	..
628c2ecf20Sopenharmony_ci};
638c2ecf20Sopenharmony_ci
648c2ecf20Sopenharmony_cimdio-mux-2 {
658c2ecf20Sopenharmony_ci	compatible = "mdio-mux-multiplexer";
668c2ecf20Sopenharmony_ci	mux-controls = <&mux 1>;
678c2ecf20Sopenharmony_ci	mdio-parent-bus = <&emdio2>;
688c2ecf20Sopenharmony_ci	#address-cells = <1>;
698c2ecf20Sopenharmony_ci	#size-cells = <0>;
708c2ecf20Sopenharmony_ci
718c2ecf20Sopenharmony_ci	mdio@0 {
728c2ecf20Sopenharmony_ci		reg = <0x0>;
738c2ecf20Sopenharmony_ci		#address-cells = <1>;
748c2ecf20Sopenharmony_ci		#size-cells = <0>;
758c2ecf20Sopenharmony_ci	};
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ci	mdio@1 {
788c2ecf20Sopenharmony_ci		reg = <0x1>;
798c2ecf20Sopenharmony_ci		#address-cells = <1>;
808c2ecf20Sopenharmony_ci		#size-cells = <0>;
818c2ecf20Sopenharmony_ci	};
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ci	..
848c2ecf20Sopenharmony_ci	..
858c2ecf20Sopenharmony_ci};
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ciExample 2:
888c2ecf20Sopenharmony_ciThe parent device of mux controller is syscon device.
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_cisyscon {
918c2ecf20Sopenharmony_ci	compatible = "syscon";
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ci	mux: mux-controller {
948c2ecf20Sopenharmony_ci		compatible = "mmio-mux";
958c2ecf20Sopenharmony_ci		#mux-control-cells = <1>;
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_ci		mux-reg-masks = <0x3 0x30>, /* 0: reg 0x3, bits 5:4 */
988c2ecf20Sopenharmony_ci				<0x3 0x40>, /* 1: reg 0x3, bit 6 */
998c2ecf20Sopenharmony_ci		idle-states = <MUX_IDLE_AS_IS>, <0>;
1008c2ecf20Sopenharmony_ci	};
1018c2ecf20Sopenharmony_ci};
1028c2ecf20Sopenharmony_ci
1038c2ecf20Sopenharmony_civideo-mux {
1048c2ecf20Sopenharmony_ci	compatible = "video-mux";
1058c2ecf20Sopenharmony_ci	mux-controls = <&mux 0>;
1068c2ecf20Sopenharmony_ci	#address-cells = <1>;
1078c2ecf20Sopenharmony_ci	#size-cells = <0>;
1088c2ecf20Sopenharmony_ci
1098c2ecf20Sopenharmony_ci	ports {
1108c2ecf20Sopenharmony_ci		/* inputs 0..3 */
1118c2ecf20Sopenharmony_ci		port@0 {
1128c2ecf20Sopenharmony_ci			reg = <0>;
1138c2ecf20Sopenharmony_ci		};
1148c2ecf20Sopenharmony_ci		port@1 {
1158c2ecf20Sopenharmony_ci			reg = <1>;
1168c2ecf20Sopenharmony_ci		};
1178c2ecf20Sopenharmony_ci		port@2 {
1188c2ecf20Sopenharmony_ci			reg = <2>;
1198c2ecf20Sopenharmony_ci		};
1208c2ecf20Sopenharmony_ci		port@3 {
1218c2ecf20Sopenharmony_ci			reg = <3>;
1228c2ecf20Sopenharmony_ci		};
1238c2ecf20Sopenharmony_ci
1248c2ecf20Sopenharmony_ci		/* output */
1258c2ecf20Sopenharmony_ci		port@4 {
1268c2ecf20Sopenharmony_ci			reg = <4>;
1278c2ecf20Sopenharmony_ci		};
1288c2ecf20Sopenharmony_ci	};
1298c2ecf20Sopenharmony_ci};
130