summaryrefslogtreecommitdiffstats
path: root/dts/Bindings/mux/reg-mux.yaml
blob: dc4be092fc2fcf44f60fdd46134c9d3c67c620e2 (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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/mux/reg-mux.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Generic register bitfield-based multiplexer controller

maintainers:
  - Peter Rosin <peda@axentia.se>

description: |+
  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.

properties:
  compatible:
    enum:
      - reg-mux   # parent device of mux controller is not syscon device
      - mmio-mux  # parent device of mux controller is syscon device

  reg: true

  '#mux-control-cells':
    const: 1

  mux-reg-masks:
    $ref: /schemas/types.yaml#/definitions/uint32-matrix
    items:
      items:
        - description: register offset
        - description: pre-shifted bitfield mask
    description: Each entry pair describes a single mux control.

  idle-states: true

required:
  - compatible
  - mux-reg-masks
  - '#mux-control-cells'

additionalProperties: false

examples:
  - |
    /* The parent device of mux controller is not a syscon device. */

    #include <dt-bindings/mux/mux.h>

    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 = <&mux1 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 = <&mux1 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>;
        };
    };

  - |
    /* The parent device of mux controller is syscon device. */

    #include <dt-bindings/mux/mux.h>
    syscon@1000 {
        reg = <0x1000 0x100>;

        mux2: 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 = <&mux2 0>;
        #address-cells = <1>;
        #size-cells = <0>;

        ports {
            #address-cells = <1>;
            #size-cells = <0>;

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

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