0001 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
0002 %YAML 1.2
0003 ---
0004 $id: http://devicetree.org/schemas/timer/ingenic,tcu.yaml#
0005 $schema: http://devicetree.org/meta-schemas/core.yaml#
0006
0007 title: Ingenic SoCs Timer/Counter Unit (TCU) devicetree bindings
0008
0009 description: |
0010 For a description of the TCU hardware and drivers, have a look at
0011 Documentation/mips/ingenic-tcu.rst.
0012
0013 maintainers:
0014 - Paul Cercueil <paul@crapouillou.net>
0015
0016 select:
0017 properties:
0018 compatible:
0019 contains:
0020 enum:
0021 - ingenic,jz4740-tcu
0022 - ingenic,jz4725b-tcu
0023 - ingenic,jz4760-tcu
0024 - ingenic,jz4760b-tcu
0025 - ingenic,jz4770-tcu
0026 - ingenic,jz4780-tcu
0027 - ingenic,x1000-tcu
0028 required:
0029 - compatible
0030
0031 properties:
0032 $nodename:
0033 pattern: "^timer@[0-9a-f]+$"
0034
0035 "#address-cells":
0036 const: 1
0037
0038 "#size-cells":
0039 const: 1
0040
0041 "#clock-cells":
0042 const: 1
0043
0044 "#interrupt-cells":
0045 const: 1
0046
0047 interrupt-controller: true
0048
0049 ranges: true
0050
0051 compatible:
0052 oneOf:
0053 - items:
0054 - enum:
0055 - ingenic,jz4740-tcu
0056 - ingenic,jz4725b-tcu
0057 - ingenic,jz4760-tcu
0058 - ingenic,x1000-tcu
0059 - const: simple-mfd
0060 - items:
0061 - enum:
0062 - ingenic,jz4780-tcu
0063 - ingenic,jz4770-tcu
0064 - ingenic,jz4760b-tcu
0065 - const: ingenic,jz4760-tcu
0066 - const: simple-mfd
0067
0068 reg:
0069 maxItems: 1
0070
0071 clocks:
0072 items:
0073 - description: RTC clock
0074 - description: EXT clock
0075 - description: PCLK clock
0076 - description: TCU clock
0077 minItems: 3
0078
0079 clock-names:
0080 items:
0081 - const: rtc
0082 - const: ext
0083 - const: pclk
0084 - const: tcu
0085 minItems: 3
0086
0087 interrupts:
0088 items:
0089 - description: TCU0 interrupt
0090 - description: TCU1 interrupt
0091 - description: TCU2 interrupt
0092 minItems: 1
0093
0094 assigned-clocks:
0095 minItems: 1
0096 maxItems: 8
0097
0098 assigned-clock-parents:
0099 minItems: 1
0100 maxItems: 8
0101
0102 assigned-clock-rates:
0103 minItems: 1
0104 maxItems: 8
0105
0106 ingenic,pwm-channels-mask:
0107 description: Bitmask of TCU channels reserved for PWM use.
0108 $ref: /schemas/types.yaml#/definitions/uint32
0109 minimum: 0x00
0110 maximum: 0xff
0111 default: 0xfc
0112
0113 patternProperties:
0114 "^watchdog@[a-f0-9]+$":
0115 type: object
0116 $ref: /schemas/watchdog/watchdog.yaml#
0117 properties:
0118 compatible:
0119 oneOf:
0120 - enum:
0121 - ingenic,jz4740-watchdog
0122 - ingenic,jz4780-watchdog
0123 - items:
0124 - enum:
0125 - ingenic,jz4770-watchdog
0126 - ingenic,jz4760b-watchdog
0127 - ingenic,jz4760-watchdog
0128 - ingenic,jz4725b-watchdog
0129 - const: ingenic,jz4740-watchdog
0130
0131 reg:
0132 maxItems: 1
0133
0134 clocks:
0135 maxItems: 1
0136
0137 clock-names:
0138 const: wdt
0139
0140 required:
0141 - compatible
0142 - reg
0143 - clocks
0144 - clock-names
0145
0146 "^pwm@[a-f0-9]+$":
0147 type: object
0148 $ref: /schemas/pwm/pwm.yaml#
0149 properties:
0150 compatible:
0151 oneOf:
0152 - enum:
0153 - ingenic,jz4740-pwm
0154 - ingenic,jz4725b-pwm
0155 - ingenic,x1000-pwm
0156 - items:
0157 - enum:
0158 - ingenic,jz4760-pwm
0159 - ingenic,jz4760b-pwm
0160 - ingenic,jz4770-pwm
0161 - ingenic,jz4780-pwm
0162 - const: ingenic,jz4740-pwm
0163
0164 reg:
0165 maxItems: 1
0166
0167 clocks:
0168 minItems: 6
0169 maxItems: 8
0170
0171 clock-names:
0172 items:
0173 - const: timer0
0174 - const: timer1
0175 - const: timer2
0176 - const: timer3
0177 - const: timer4
0178 - const: timer5
0179 - const: timer6
0180 - const: timer7
0181 minItems: 6
0182
0183 required:
0184 - compatible
0185 - reg
0186 - clocks
0187 - clock-names
0188
0189 "^timer@[a-f0-9]+$":
0190 type: object
0191 properties:
0192 compatible:
0193 oneOf:
0194 - enum:
0195 - ingenic,jz4725b-ost
0196 - ingenic,jz4760b-ost
0197 - items:
0198 - const: ingenic,jz4760-ost
0199 - const: ingenic,jz4725b-ost
0200 - items:
0201 - enum:
0202 - ingenic,jz4780-ost
0203 - ingenic,jz4770-ost
0204 - const: ingenic,jz4760b-ost
0205
0206 reg:
0207 maxItems: 1
0208
0209 clocks:
0210 maxItems: 1
0211
0212 clock-names:
0213 const: ost
0214
0215 interrupts:
0216 maxItems: 1
0217
0218 required:
0219 - compatible
0220 - reg
0221 - clocks
0222 - clock-names
0223 - interrupts
0224
0225 additionalProperties: false
0226
0227 required:
0228 - "#clock-cells"
0229 - "#interrupt-cells"
0230 - interrupt-controller
0231 - compatible
0232 - reg
0233 - clocks
0234 - clock-names
0235 - interrupts
0236
0237 additionalProperties: false
0238
0239 examples:
0240 - |
0241 #include <dt-bindings/clock/ingenic,jz4770-cgu.h>
0242 #include <dt-bindings/clock/ingenic,tcu.h>
0243 tcu: timer@10002000 {
0244 compatible = "ingenic,jz4770-tcu", "ingenic,jz4760-tcu", "simple-mfd";
0245 reg = <0x10002000 0x1000>;
0246 #address-cells = <1>;
0247 #size-cells = <1>;
0248 ranges = <0x0 0x10002000 0x1000>;
0249
0250 #clock-cells = <1>;
0251
0252 clocks = <&cgu JZ4770_CLK_RTC>,
0253 <&cgu JZ4770_CLK_EXT>,
0254 <&cgu JZ4770_CLK_PCLK>;
0255 clock-names = "rtc", "ext", "pclk";
0256
0257 interrupt-controller;
0258 #interrupt-cells = <1>;
0259
0260 interrupt-parent = <&intc>;
0261 interrupts = <27 26 25>;
0262
0263 watchdog: watchdog@0 {
0264 compatible = "ingenic,jz4770-watchdog", "ingenic,jz4740-watchdog";
0265 reg = <0x0 0xc>;
0266
0267 clocks = <&tcu TCU_CLK_WDT>;
0268 clock-names = "wdt";
0269 };
0270
0271 pwm: pwm@40 {
0272 compatible = "ingenic,jz4770-pwm", "ingenic,jz4740-pwm";
0273 reg = <0x40 0x80>;
0274
0275 #pwm-cells = <3>;
0276
0277 clocks = <&tcu TCU_CLK_TIMER0>,
0278 <&tcu TCU_CLK_TIMER1>,
0279 <&tcu TCU_CLK_TIMER2>,
0280 <&tcu TCU_CLK_TIMER3>,
0281 <&tcu TCU_CLK_TIMER4>,
0282 <&tcu TCU_CLK_TIMER5>,
0283 <&tcu TCU_CLK_TIMER6>,
0284 <&tcu TCU_CLK_TIMER7>;
0285 clock-names = "timer0", "timer1", "timer2", "timer3",
0286 "timer4", "timer5", "timer6", "timer7";
0287 };
0288
0289 ost: timer@e0 {
0290 compatible = "ingenic,jz4770-ost", "ingenic,jz4760b-ost";
0291 reg = <0xe0 0x20>;
0292
0293 clocks = <&tcu TCU_CLK_OST>;
0294 clock-names = "ost";
0295
0296 interrupts = <15>;
0297 };
0298 };