Linux 6.9-rc1
[linux-2.6-microblaze.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)
8
9 description: |
10   For a description of the TCU hardware and drivers, have a look at
11   Documentation/arch/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: /schemas/watchdog/watchdog.yaml#
117     unevaluatedProperties: false
118
119     properties:
120       compatible:
121         oneOf:
122           - enum:
123               - ingenic,jz4740-watchdog
124               - ingenic,jz4780-watchdog
125           - items:
126               - enum:
127                   - ingenic,jz4770-watchdog
128                   - ingenic,jz4760b-watchdog
129                   - ingenic,jz4760-watchdog
130                   - ingenic,jz4725b-watchdog
131               - const: ingenic,jz4740-watchdog
132
133       reg:
134         maxItems: 1
135
136       clocks:
137         maxItems: 1
138
139       clock-names:
140         const: wdt
141
142     required:
143       - compatible
144       - reg
145       - clocks
146       - clock-names
147
148   "^pwm@[a-f0-9]+$":
149     type: object
150     $ref: /schemas/pwm/pwm.yaml#
151     unevaluatedProperties: false
152
153     properties:
154       compatible:
155         oneOf:
156           - enum:
157               - ingenic,jz4740-pwm
158               - ingenic,jz4725b-pwm
159               - ingenic,x1000-pwm
160           - items:
161               - enum:
162                   - ingenic,jz4760-pwm
163                   - ingenic,jz4760b-pwm
164                   - ingenic,jz4770-pwm
165                   - ingenic,jz4780-pwm
166               - const: ingenic,jz4740-pwm
167
168       reg:
169         maxItems: 1
170
171       clocks:
172         minItems: 6
173         maxItems: 8
174
175       clock-names:
176         items:
177           - const: timer0
178           - const: timer1
179           - const: timer2
180           - const: timer3
181           - const: timer4
182           - const: timer5
183           - const: timer6
184           - const: timer7
185         minItems: 6
186
187     required:
188       - compatible
189       - reg
190       - clocks
191       - clock-names
192
193   "^timer@[a-f0-9]+$":
194     type: object
195     properties:
196       compatible:
197         oneOf:
198           - enum:
199               - ingenic,jz4725b-ost
200               - ingenic,jz4760b-ost
201           - items:
202               - const: ingenic,jz4760-ost
203               - const: ingenic,jz4725b-ost
204           - items:
205               - enum:
206                   - ingenic,jz4780-ost
207                   - ingenic,jz4770-ost
208               - const: ingenic,jz4760b-ost
209
210       reg:
211         maxItems: 1
212
213       clocks:
214         maxItems: 1
215
216       clock-names:
217         const: ost
218
219       interrupts:
220         maxItems: 1
221
222     required:
223       - compatible
224       - reg
225       - clocks
226       - clock-names
227       - interrupts
228
229     additionalProperties: false
230
231 required:
232   - "#clock-cells"
233   - "#interrupt-cells"
234   - interrupt-controller
235   - compatible
236   - reg
237   - clocks
238   - clock-names
239   - interrupts
240
241 additionalProperties: false
242
243 examples:
244   - |
245     #include <dt-bindings/clock/ingenic,jz4770-cgu.h>
246     #include <dt-bindings/clock/ingenic,tcu.h>
247     tcu: timer@10002000 {
248       compatible = "ingenic,jz4770-tcu", "ingenic,jz4760-tcu", "simple-mfd";
249       reg = <0x10002000 0x1000>;
250       #address-cells = <1>;
251       #size-cells = <1>;
252       ranges = <0x0 0x10002000 0x1000>;
253
254       #clock-cells = <1>;
255
256       clocks = <&cgu JZ4770_CLK_RTC>,
257                <&cgu JZ4770_CLK_EXT>,
258                <&cgu JZ4770_CLK_PCLK>;
259       clock-names = "rtc", "ext", "pclk";
260
261       interrupt-controller;
262       #interrupt-cells = <1>;
263
264       interrupt-parent = <&intc>;
265       interrupts = <27 26 25>;
266
267       watchdog: watchdog@0 {
268         compatible = "ingenic,jz4770-watchdog", "ingenic,jz4740-watchdog";
269         reg = <0x0 0xc>;
270
271         clocks = <&tcu TCU_CLK_WDT>;
272         clock-names = "wdt";
273       };
274
275       pwm: pwm@40 {
276         compatible = "ingenic,jz4770-pwm", "ingenic,jz4740-pwm";
277         reg = <0x40 0x80>;
278
279         #pwm-cells = <3>;
280
281         clocks = <&tcu TCU_CLK_TIMER0>,
282                  <&tcu TCU_CLK_TIMER1>,
283                  <&tcu TCU_CLK_TIMER2>,
284                  <&tcu TCU_CLK_TIMER3>,
285                  <&tcu TCU_CLK_TIMER4>,
286                  <&tcu TCU_CLK_TIMER5>,
287                  <&tcu TCU_CLK_TIMER6>,
288                  <&tcu TCU_CLK_TIMER7>;
289         clock-names = "timer0", "timer1", "timer2", "timer3",
290                 "timer4", "timer5", "timer6", "timer7";
291       };
292
293       ost: timer@e0 {
294         compatible = "ingenic,jz4770-ost", "ingenic,jz4760b-ost";
295         reg = <0xe0 0x20>;
296
297         clocks = <&tcu TCU_CLK_OST>;
298         clock-names = "ost";
299
300         interrupts = <15>;
301       };
302     };