Merge branch 'for-5.13' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie...
[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) 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           - items:
156               - enum:
157                   - ingenic,jz4760-pwm
158                   - ingenic,jz4760b-pwm
159                   - ingenic,jz4770-pwm
160                   - ingenic,jz4780-pwm
161               - const: ingenic,jz4740-pwm
162
163       reg:
164         maxItems: 1
165
166       clocks:
167         minItems: 6
168         maxItems: 8
169
170       clock-names:
171         items:
172           - const: timer0
173           - const: timer1
174           - const: timer2
175           - const: timer3
176           - const: timer4
177           - const: timer5
178           - const: timer6
179           - const: timer7
180         minItems: 6
181
182     required:
183       - compatible
184       - reg
185       - clocks
186       - clock-names
187
188   "^timer@[a-f0-9]+$":
189     type: object
190     properties:
191       compatible:
192         oneOf:
193           - enum:
194               - ingenic,jz4725b-ost
195               - ingenic,jz4760b-ost
196           - items:
197               - const: ingenic,jz4760-ost
198               - const: ingenic,jz4725b-ost
199           - items:
200               - enum:
201                   - ingenic,jz4780-ost
202                   - ingenic,jz4770-ost
203               - const: ingenic,jz4760b-ost
204
205       reg:
206         maxItems: 1
207
208       clocks:
209         maxItems: 1
210
211       clock-names:
212         const: ost
213
214       interrupts:
215         maxItems: 1
216
217     required:
218       - compatible
219       - reg
220       - clocks
221       - clock-names
222       - interrupts
223
224     additionalProperties: false
225
226 required:
227   - "#clock-cells"
228   - "#interrupt-cells"
229   - interrupt-controller
230   - compatible
231   - reg
232   - clocks
233   - clock-names
234   - interrupts
235
236 additionalProperties: false
237
238 examples:
239   - |
240     #include <dt-bindings/clock/jz4770-cgu.h>
241     #include <dt-bindings/clock/ingenic,tcu.h>
242     tcu: timer@10002000 {
243       compatible = "ingenic,jz4770-tcu", "ingenic,jz4760-tcu", "simple-mfd";
244       reg = <0x10002000 0x1000>;
245       #address-cells = <1>;
246       #size-cells = <1>;
247       ranges = <0x0 0x10002000 0x1000>;
248
249       #clock-cells = <1>;
250
251       clocks = <&cgu JZ4770_CLK_RTC>,
252                <&cgu JZ4770_CLK_EXT>,
253                <&cgu JZ4770_CLK_PCLK>;
254       clock-names = "rtc", "ext", "pclk";
255
256       interrupt-controller;
257       #interrupt-cells = <1>;
258
259       interrupt-parent = <&intc>;
260       interrupts = <27 26 25>;
261
262       watchdog: watchdog@0 {
263         compatible = "ingenic,jz4770-watchdog", "ingenic,jz4740-watchdog";
264         reg = <0x0 0xc>;
265
266         clocks = <&tcu TCU_CLK_WDT>;
267         clock-names = "wdt";
268       };
269
270       pwm: pwm@40 {
271         compatible = "ingenic,jz4770-pwm", "ingenic,jz4740-pwm";
272         reg = <0x40 0x80>;
273
274         #pwm-cells = <3>;
275
276         clocks = <&tcu TCU_CLK_TIMER0>,
277                  <&tcu TCU_CLK_TIMER1>,
278                  <&tcu TCU_CLK_TIMER2>,
279                  <&tcu TCU_CLK_TIMER3>,
280                  <&tcu TCU_CLK_TIMER4>,
281                  <&tcu TCU_CLK_TIMER5>,
282                  <&tcu TCU_CLK_TIMER6>,
283                  <&tcu TCU_CLK_TIMER7>;
284         clock-names = "timer0", "timer1", "timer2", "timer3",
285                 "timer4", "timer5", "timer6", "timer7";
286       };
287
288       ost: timer@e0 {
289         compatible = "ingenic,jz4770-ost", "ingenic,jz4760b-ost";
290         reg = <0xe0 0x20>;
291
292         clocks = <&tcu TCU_CLK_OST>;
293         clock-names = "ost";
294
295         interrupts = <15>;
296       };
297     };