GNU Linux-libre 5.19-rc6-gnu
[releases.git] / Documentation / devicetree / bindings / timer / ingenic,tcu.yaml
1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/timer/ingenic,tcu.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Ingenic SoCs Timer/Counter Unit (TCU) devicetree bindings
8
9 description: |
10   For a description of the TCU hardware and drivers, have a look at
11   Documentation/mips/ingenic-tcu.rst.
12
13 maintainers:
14   - Paul Cercueil <paul@crapouillou.net>
15
16 select:
17   properties:
18     compatible:
19       contains:
20         enum:
21           - ingenic,jz4740-tcu
22           - ingenic,jz4725b-tcu
23           - ingenic,jz4760-tcu
24           - ingenic,jz4760b-tcu
25           - ingenic,jz4770-tcu
26           - ingenic,jz4780-tcu
27           - ingenic,x1000-tcu
28   required:
29     - compatible
30
31 properties:
32   $nodename:
33     pattern: "^timer@[0-9a-f]+$"
34
35   "#address-cells":
36     const: 1
37
38   "#size-cells":
39     const: 1
40
41   "#clock-cells":
42     const: 1
43
44   "#interrupt-cells":
45     const: 1
46
47   interrupt-controller: true
48
49   ranges: true
50
51   compatible:
52     oneOf:
53       - items:
54           - enum:
55               - ingenic,jz4740-tcu
56               - ingenic,jz4725b-tcu
57               - ingenic,jz4760-tcu
58               - ingenic,x1000-tcu
59           - const: simple-mfd
60       - items:
61           - enum:
62               - ingenic,jz4780-tcu
63               - ingenic,jz4770-tcu
64               - ingenic,jz4760b-tcu
65           - const: ingenic,jz4760-tcu
66           - const: simple-mfd
67
68   reg:
69     maxItems: 1
70
71   clocks:
72     items:
73       - description: RTC clock
74       - description: EXT clock
75       - description: PCLK clock
76       - description: TCU clock
77     minItems: 3
78
79   clock-names:
80     items:
81       - const: rtc
82       - const: ext
83       - const: pclk
84       - const: tcu
85     minItems: 3
86
87   interrupts:
88     items:
89       - description: TCU0 interrupt
90       - description: TCU1 interrupt
91       - description: TCU2 interrupt
92     minItems: 1
93
94   assigned-clocks:
95     minItems: 1
96     maxItems: 8
97
98   assigned-clock-parents:
99     minItems: 1
100     maxItems: 8
101
102   assigned-clock-rates:
103     minItems: 1
104     maxItems: 8
105
106   ingenic,pwm-channels-mask:
107     description: Bitmask of TCU channels reserved for PWM use.
108     $ref: /schemas/types.yaml#/definitions/uint32
109     minimum: 0x00
110     maximum: 0xff
111     default: 0xfc
112
113 patternProperties:
114   "^watchdog@[a-f0-9]+$":
115     type: object
116     $ref: ../watchdog/watchdog.yaml#
117     properties:
118       compatible:
119         oneOf:
120           - enum:
121               - ingenic,jz4740-watchdog
122               - ingenic,jz4780-watchdog
123           - items:
124               - enum:
125                   - ingenic,jz4770-watchdog
126                   - ingenic,jz4760b-watchdog
127                   - ingenic,jz4760-watchdog
128                   - ingenic,jz4725b-watchdog
129               - const: ingenic,jz4740-watchdog
130
131       reg:
132         maxItems: 1
133
134       clocks:
135         maxItems: 1
136
137       clock-names:
138         const: wdt
139
140     required:
141       - compatible
142       - reg
143       - clocks
144       - clock-names
145
146   "^pwm@[a-f0-9]+$":
147     type: object
148     $ref: ../pwm/pwm.yaml#
149     properties:
150       compatible:
151         oneOf:
152           - enum:
153               - ingenic,jz4740-pwm
154               - ingenic,jz4725b-pwm
155               - ingenic,x1000-pwm
156           - items:
157               - enum:
158                   - ingenic,jz4760-pwm
159                   - ingenic,jz4760b-pwm
160                   - ingenic,jz4770-pwm
161                   - ingenic,jz4780-pwm
162               - const: ingenic,jz4740-pwm
163
164       reg:
165         maxItems: 1
166
167       clocks:
168         minItems: 6
169         maxItems: 8
170
171       clock-names:
172         items:
173           - const: timer0
174           - const: timer1
175           - const: timer2
176           - const: timer3
177           - const: timer4
178           - const: timer5
179           - const: timer6
180           - const: timer7
181         minItems: 6
182
183     required:
184       - compatible
185       - reg
186       - clocks
187       - clock-names
188
189   "^timer@[a-f0-9]+$":
190     type: object
191     properties:
192       compatible:
193         oneOf:
194           - enum:
195               - ingenic,jz4725b-ost
196               - ingenic,jz4760b-ost
197           - items:
198               - const: ingenic,jz4760-ost
199               - const: ingenic,jz4725b-ost
200           - items:
201               - enum:
202                   - ingenic,jz4780-ost
203                   - ingenic,jz4770-ost
204               - const: ingenic,jz4760b-ost
205
206       reg:
207         maxItems: 1
208
209       clocks:
210         maxItems: 1
211
212       clock-names:
213         const: ost
214
215       interrupts:
216         maxItems: 1
217
218     required:
219       - compatible
220       - reg
221       - clocks
222       - clock-names
223       - interrupts
224
225     additionalProperties: false
226
227 required:
228   - "#clock-cells"
229   - "#interrupt-cells"
230   - interrupt-controller
231   - compatible
232   - reg
233   - clocks
234   - clock-names
235   - interrupts
236
237 additionalProperties: false
238
239 examples:
240   - |
241     #include <dt-bindings/clock/ingenic,jz4770-cgu.h>
242     #include <dt-bindings/clock/ingenic,tcu.h>
243     tcu: timer@10002000 {
244       compatible = "ingenic,jz4770-tcu", "ingenic,jz4760-tcu", "simple-mfd";
245       reg = <0x10002000 0x1000>;
246       #address-cells = <1>;
247       #size-cells = <1>;
248       ranges = <0x0 0x10002000 0x1000>;
249
250       #clock-cells = <1>;
251
252       clocks = <&cgu JZ4770_CLK_RTC>,
253                <&cgu JZ4770_CLK_EXT>,
254                <&cgu JZ4770_CLK_PCLK>;
255       clock-names = "rtc", "ext", "pclk";
256
257       interrupt-controller;
258       #interrupt-cells = <1>;
259
260       interrupt-parent = <&intc>;
261       interrupts = <27 26 25>;
262
263       watchdog: watchdog@0 {
264         compatible = "ingenic,jz4770-watchdog", "ingenic,jz4740-watchdog";
265         reg = <0x0 0xc>;
266
267         clocks = <&tcu TCU_CLK_WDT>;
268         clock-names = "wdt";
269       };
270
271       pwm: pwm@40 {
272         compatible = "ingenic,jz4770-pwm", "ingenic,jz4740-pwm";
273         reg = <0x40 0x80>;
274
275         #pwm-cells = <3>;
276
277         clocks = <&tcu TCU_CLK_TIMER0>,
278                  <&tcu TCU_CLK_TIMER1>,
279                  <&tcu TCU_CLK_TIMER2>,
280                  <&tcu TCU_CLK_TIMER3>,
281                  <&tcu TCU_CLK_TIMER4>,
282                  <&tcu TCU_CLK_TIMER5>,
283                  <&tcu TCU_CLK_TIMER6>,
284                  <&tcu TCU_CLK_TIMER7>;
285         clock-names = "timer0", "timer1", "timer2", "timer3",
286                 "timer4", "timer5", "timer6", "timer7";
287       };
288
289       ost: timer@e0 {
290         compatible = "ingenic,jz4770-ost", "ingenic,jz4760b-ost";
291         reg = <0xe0 0x20>;
292
293         clocks = <&tcu TCU_CLK_OST>;
294         clock-names = "ost";
295
296         interrupts = <15>;
297       };
298     };