1# SPDX-License-Identifier: GPL-2.0
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/mfd/allwinner,sun6i-a31-prcm.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Allwinner A31 PRCM
8
9maintainers:
10  - Chen-Yu Tsai <wens@csie.org>
11  - Maxime Ripard <mripard@kernel.org>
12
13deprecated: true
14
15properties:
16  compatible:
17    const: allwinner,sun6i-a31-prcm
18
19  reg:
20    maxItems: 1
21
22patternProperties:
23  "^.*_(clk|rst)$":
24    type: object
25    unevaluatedProperties: false
26
27    properties:
28      compatible:
29        enum:
30          - allwinner,sun4i-a10-mod0-clk
31          - allwinner,sun6i-a31-apb0-clk
32          - allwinner,sun6i-a31-apb0-gates-clk
33          - allwinner,sun6i-a31-ar100-clk
34          - allwinner,sun6i-a31-clock-reset
35          - fixed-factor-clock
36
37    required:
38      - compatible
39
40    allOf:
41      - if:
42          properties:
43            compatible:
44              contains:
45                const: fixed-factor-clock
46
47        then:
48          $ref: /schemas/clock/fixed-factor-clock.yaml#
49
50      - if:
51          properties:
52            compatible:
53              contains:
54                const: allwinner,sun4i-a10-mod0-clk
55
56        then:
57          properties:
58            "#clock-cells":
59              const: 0
60
61            clocks:
62              maxItems: 2
63
64            clock-output-names:
65              maxItems: 1
66
67          required:
68            - "#clock-cells"
69            - clocks
70            - clock-output-names
71
72      - if:
73          properties:
74            compatible:
75              contains:
76                const: allwinner,sun6i-a31-apb0-clk
77
78        then:
79          properties:
80            "#clock-cells":
81              const: 0
82
83            clocks:
84              maxItems: 1
85
86            clock-output-names:
87              maxItems: 1
88
89          required:
90            - "#clock-cells"
91            - clocks
92            - clock-output-names
93
94      - if:
95          properties:
96            compatible:
97              contains:
98                const: allwinner,sun6i-a31-apb0-gates-clk
99
100        then:
101          properties:
102            "#clock-cells":
103              const: 1
104              description: >
105                This additional argument passed to that clock is the
106                offset of the bit controlling this particular gate in
107                the register.
108
109            clocks:
110              maxItems: 1
111
112            clock-output-names:
113              minItems: 1
114              maxItems: 32
115
116          required:
117            - "#clock-cells"
118            - clocks
119            - clock-output-names
120
121      - if:
122          properties:
123            compatible:
124              contains:
125                const: allwinner,sun6i-a31-ar100-clk
126
127        then:
128          properties:
129            "#clock-cells":
130              const: 0
131
132            clocks:
133              maxItems: 4
134              description: >
135                The parent order must match the hardware programming
136                order.
137
138            clock-output-names:
139              maxItems: 1
140
141          required:
142            - "#clock-cells"
143            - clocks
144            - clock-output-names
145
146      - if:
147          properties:
148            compatible:
149              contains:
150                const: allwinner,sun6i-a31-clock-reset
151
152        then:
153          properties:
154            "#reset-cells":
155              const: 1
156
157          required:
158            - "#reset-cells"
159
160required:
161  - compatible
162  - reg
163
164additionalProperties: false
165
166examples:
167  - |
168    #include <dt-bindings/clock/sun6i-a31-ccu.h>
169
170    prcm@1f01400 {
171        compatible = "allwinner,sun6i-a31-prcm";
172        reg = <0x01f01400 0x200>;
173
174        ar100: ar100_clk {
175            compatible = "allwinner,sun6i-a31-ar100-clk";
176            #clock-cells = <0>;
177            clocks = <&rtc 0>, <&osc24M>,
178                     <&ccu CLK_PLL_PERIPH>,
179                     <&ccu CLK_PLL_PERIPH>;
180            clock-output-names = "ar100";
181        };
182
183        ahb0: ahb0_clk {
184            compatible = "fixed-factor-clock";
185            #clock-cells = <0>;
186            clock-div = <1>;
187            clock-mult = <1>;
188            clocks = <&ar100>;
189            clock-output-names = "ahb0";
190        };
191
192        apb0: apb0_clk {
193            compatible = "allwinner,sun6i-a31-apb0-clk";
194            #clock-cells = <0>;
195            clocks = <&ahb0>;
196            clock-output-names = "apb0";
197        };
198
199        apb0_gates: apb0_gates_clk {
200            compatible = "allwinner,sun6i-a31-apb0-gates-clk";
201            #clock-cells = <1>;
202            clocks = <&apb0>;
203            clock-output-names = "apb0_pio", "apb0_ir",
204                                 "apb0_timer", "apb0_p2wi",
205                                 "apb0_uart", "apb0_1wire",
206                                 "apb0_i2c";
207        };
208
209        ir_clk: ir_clk {
210            #clock-cells = <0>;
211            compatible = "allwinner,sun4i-a10-mod0-clk";
212            clocks = <&rtc 0>, <&osc24M>;
213            clock-output-names = "ir";
214        };
215
216        apb0_rst: apb0_rst {
217            compatible = "allwinner,sun6i-a31-clock-reset";
218            #reset-cells = <1>;
219        };
220    };
221
222...
223