xref: /openbmc/linux/Documentation/devicetree/bindings/mux/reg-mux.yaml (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
19b358af7SRob Herring# SPDX-License-Identifier: GPL-2.0
29b358af7SRob Herring%YAML 1.2
39b358af7SRob Herring---
49b358af7SRob Herring$id: http://devicetree.org/schemas/mux/reg-mux.yaml#
59b358af7SRob Herring$schema: http://devicetree.org/meta-schemas/core.yaml#
69b358af7SRob Herring
7*84e85359SKrzysztof Kozlowskititle: Generic register bitfield-based multiplexer controller
89b358af7SRob Herring
99b358af7SRob Herringmaintainers:
109b358af7SRob Herring  - Peter Rosin <peda@axentia.se>
119b358af7SRob Herring
129b358af7SRob Herringdescription: |+
139b358af7SRob Herring  Define register bitfields to be used to control multiplexers. The parent
149b358af7SRob Herring  device tree node must be a device node to provide register r/w access.
159b358af7SRob Herring
169b358af7SRob Herringproperties:
179b358af7SRob Herring  compatible:
189b358af7SRob Herring    enum:
199b358af7SRob Herring      - reg-mux   # parent device of mux controller is not syscon device
209b358af7SRob Herring      - mmio-mux  # parent device of mux controller is syscon device
219b358af7SRob Herring
229b358af7SRob Herring  reg: true
239b358af7SRob Herring
249b358af7SRob Herring  '#mux-control-cells':
259b358af7SRob Herring    const: 1
269b358af7SRob Herring
279b358af7SRob Herring  mux-reg-masks:
284e71ed98SRob Herring    $ref: /schemas/types.yaml#/definitions/uint32-matrix
294e71ed98SRob Herring    items:
304e71ed98SRob Herring      items:
314e71ed98SRob Herring        - description: register offset
324e71ed98SRob Herring        - description: pre-shifted bitfield mask
334e71ed98SRob Herring    description: Each entry pair describes a single mux control.
349b358af7SRob Herring
359b358af7SRob Herring  idle-states: true
369b358af7SRob Herring
379b358af7SRob Herringrequired:
389b358af7SRob Herring  - compatible
399b358af7SRob Herring  - mux-reg-masks
409b358af7SRob Herring  - '#mux-control-cells'
419b358af7SRob Herring
429b358af7SRob HerringadditionalProperties: false
439b358af7SRob Herring
449b358af7SRob Herringexamples:
459b358af7SRob Herring  - |
469b358af7SRob Herring    /* The parent device of mux controller is not a syscon device. */
479b358af7SRob Herring
489b358af7SRob Herring    #include <dt-bindings/mux/mux.h>
499b358af7SRob Herring
509b358af7SRob Herring    mux-controller {
519b358af7SRob Herring        compatible = "reg-mux";
529b358af7SRob Herring        #mux-control-cells = <1>;
539b358af7SRob Herring        mux-reg-masks =
549b358af7SRob Herring            <0x54 0xf8>, /* 0: reg 0x54, bits 7:3 */
559b358af7SRob Herring            <0x54 0x07>; /* 1: reg 0x54, bits 2:0 */
569b358af7SRob Herring    };
579b358af7SRob Herring
589b358af7SRob Herring    mdio-mux-1 {
599b358af7SRob Herring        compatible = "mdio-mux-multiplexer";
609b358af7SRob Herring        mux-controls = <&mux1 0>;
619b358af7SRob Herring        mdio-parent-bus = <&emdio1>;
629b358af7SRob Herring        #address-cells = <1>;
639b358af7SRob Herring        #size-cells = <0>;
649b358af7SRob Herring
659b358af7SRob Herring        mdio@0 {
669b358af7SRob Herring            reg = <0x0>;
679b358af7SRob Herring            #address-cells = <1>;
689b358af7SRob Herring            #size-cells = <0>;
699b358af7SRob Herring        };
709b358af7SRob Herring
719b358af7SRob Herring        mdio@8 {
729b358af7SRob Herring            reg = <0x8>;
739b358af7SRob Herring            #address-cells = <1>;
749b358af7SRob Herring            #size-cells = <0>;
759b358af7SRob Herring        };
769b358af7SRob Herring    };
779b358af7SRob Herring
789b358af7SRob Herring    mdio-mux-2 {
799b358af7SRob Herring        compatible = "mdio-mux-multiplexer";
809b358af7SRob Herring        mux-controls = <&mux1 1>;
819b358af7SRob Herring        mdio-parent-bus = <&emdio2>;
829b358af7SRob Herring        #address-cells = <1>;
839b358af7SRob Herring        #size-cells = <0>;
849b358af7SRob Herring
859b358af7SRob Herring        mdio@0 {
869b358af7SRob Herring            reg = <0x0>;
879b358af7SRob Herring            #address-cells = <1>;
889b358af7SRob Herring            #size-cells = <0>;
899b358af7SRob Herring        };
909b358af7SRob Herring
919b358af7SRob Herring        mdio@1 {
929b358af7SRob Herring            reg = <0x1>;
939b358af7SRob Herring            #address-cells = <1>;
949b358af7SRob Herring            #size-cells = <0>;
959b358af7SRob Herring        };
969b358af7SRob Herring    };
979b358af7SRob Herring
989b358af7SRob Herring  - |
999b358af7SRob Herring    /* The parent device of mux controller is syscon device. */
1009b358af7SRob Herring
1019b358af7SRob Herring    #include <dt-bindings/mux/mux.h>
1029b358af7SRob Herring    syscon@1000 {
1039b358af7SRob Herring        reg = <0x1000 0x100>;
1049b358af7SRob Herring
1059b358af7SRob Herring        mux2: mux-controller {
1069b358af7SRob Herring            compatible = "mmio-mux";
1079b358af7SRob Herring            #mux-control-cells = <1>;
1089b358af7SRob Herring
1099b358af7SRob Herring            mux-reg-masks =
1109b358af7SRob Herring                <0x3 0x30>, /* 0: reg 0x3, bits 5:4 */
1119b358af7SRob Herring                <0x3 0x40>; /* 1: reg 0x3, bit 6 */
1129b358af7SRob Herring            idle-states = <MUX_IDLE_AS_IS>, <0>;
1139b358af7SRob Herring        };
1149b358af7SRob Herring    };
1159b358af7SRob Herring
1169b358af7SRob Herring    video-mux {
1179b358af7SRob Herring        compatible = "video-mux";
1189b358af7SRob Herring        mux-controls = <&mux2 0>;
1199b358af7SRob Herring        #address-cells = <1>;
1209b358af7SRob Herring        #size-cells = <0>;
1219b358af7SRob Herring
1229b358af7SRob Herring        ports {
1239b358af7SRob Herring            #address-cells = <1>;
1249b358af7SRob Herring            #size-cells = <0>;
1259b358af7SRob Herring
1269b358af7SRob Herring            /* inputs 0..3 */
1279b358af7SRob Herring            port@0 {
1289b358af7SRob Herring                reg = <0>;
1299b358af7SRob Herring            };
1309b358af7SRob Herring            port@1 {
1319b358af7SRob Herring                reg = <1>;
1329b358af7SRob Herring            };
1339b358af7SRob Herring            port@2 {
1349b358af7SRob Herring                reg = <2>;
1359b358af7SRob Herring            };
1369b358af7SRob Herring            port@3 {
1379b358af7SRob Herring                reg = <3>;
1389b358af7SRob Herring            };
1399b358af7SRob Herring
1409b358af7SRob Herring            /* output */
1419b358af7SRob Herring            port@4 {
1429b358af7SRob Herring                reg = <4>;
1439b358af7SRob Herring            };
1449b358af7SRob Herring        };
1459b358af7SRob Herring    };
1469b358af7SRob Herring...
147