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