162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/timer/ingenic,tcu.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Ingenic SoCs Timer/Counter Unit (TCU)
862306a36Sopenharmony_ci
962306a36Sopenharmony_cidescription: |
1062306a36Sopenharmony_ci  For a description of the TCU hardware and drivers, have a look at
1162306a36Sopenharmony_ci  Documentation/arch/mips/ingenic-tcu.rst.
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cimaintainers:
1462306a36Sopenharmony_ci  - Paul Cercueil <paul@crapouillou.net>
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ciselect:
1762306a36Sopenharmony_ci  properties:
1862306a36Sopenharmony_ci    compatible:
1962306a36Sopenharmony_ci      contains:
2062306a36Sopenharmony_ci        enum:
2162306a36Sopenharmony_ci          - ingenic,jz4740-tcu
2262306a36Sopenharmony_ci          - ingenic,jz4725b-tcu
2362306a36Sopenharmony_ci          - ingenic,jz4760-tcu
2462306a36Sopenharmony_ci          - ingenic,jz4760b-tcu
2562306a36Sopenharmony_ci          - ingenic,jz4770-tcu
2662306a36Sopenharmony_ci          - ingenic,jz4780-tcu
2762306a36Sopenharmony_ci          - ingenic,x1000-tcu
2862306a36Sopenharmony_ci  required:
2962306a36Sopenharmony_ci    - compatible
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ciproperties:
3262306a36Sopenharmony_ci  $nodename:
3362306a36Sopenharmony_ci    pattern: "^timer@[0-9a-f]+$"
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci  "#address-cells":
3662306a36Sopenharmony_ci    const: 1
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci  "#size-cells":
3962306a36Sopenharmony_ci    const: 1
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci  "#clock-cells":
4262306a36Sopenharmony_ci    const: 1
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci  "#interrupt-cells":
4562306a36Sopenharmony_ci    const: 1
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci  interrupt-controller: true
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci  ranges: true
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci  compatible:
5262306a36Sopenharmony_ci    oneOf:
5362306a36Sopenharmony_ci      - items:
5462306a36Sopenharmony_ci          - enum:
5562306a36Sopenharmony_ci              - ingenic,jz4740-tcu
5662306a36Sopenharmony_ci              - ingenic,jz4725b-tcu
5762306a36Sopenharmony_ci              - ingenic,jz4760-tcu
5862306a36Sopenharmony_ci              - ingenic,x1000-tcu
5962306a36Sopenharmony_ci          - const: simple-mfd
6062306a36Sopenharmony_ci      - items:
6162306a36Sopenharmony_ci          - enum:
6262306a36Sopenharmony_ci              - ingenic,jz4780-tcu
6362306a36Sopenharmony_ci              - ingenic,jz4770-tcu
6462306a36Sopenharmony_ci              - ingenic,jz4760b-tcu
6562306a36Sopenharmony_ci          - const: ingenic,jz4760-tcu
6662306a36Sopenharmony_ci          - const: simple-mfd
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci  reg:
6962306a36Sopenharmony_ci    maxItems: 1
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci  clocks:
7262306a36Sopenharmony_ci    items:
7362306a36Sopenharmony_ci      - description: RTC clock
7462306a36Sopenharmony_ci      - description: EXT clock
7562306a36Sopenharmony_ci      - description: PCLK clock
7662306a36Sopenharmony_ci      - description: TCU clock
7762306a36Sopenharmony_ci    minItems: 3
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci  clock-names:
8062306a36Sopenharmony_ci    items:
8162306a36Sopenharmony_ci      - const: rtc
8262306a36Sopenharmony_ci      - const: ext
8362306a36Sopenharmony_ci      - const: pclk
8462306a36Sopenharmony_ci      - const: tcu
8562306a36Sopenharmony_ci    minItems: 3
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci  interrupts:
8862306a36Sopenharmony_ci    items:
8962306a36Sopenharmony_ci      - description: TCU0 interrupt
9062306a36Sopenharmony_ci      - description: TCU1 interrupt
9162306a36Sopenharmony_ci      - description: TCU2 interrupt
9262306a36Sopenharmony_ci    minItems: 1
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci  assigned-clocks:
9562306a36Sopenharmony_ci    minItems: 1
9662306a36Sopenharmony_ci    maxItems: 8
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci  assigned-clock-parents:
9962306a36Sopenharmony_ci    minItems: 1
10062306a36Sopenharmony_ci    maxItems: 8
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci  assigned-clock-rates:
10362306a36Sopenharmony_ci    minItems: 1
10462306a36Sopenharmony_ci    maxItems: 8
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci  ingenic,pwm-channels-mask:
10762306a36Sopenharmony_ci    description: Bitmask of TCU channels reserved for PWM use.
10862306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
10962306a36Sopenharmony_ci    minimum: 0x00
11062306a36Sopenharmony_ci    maximum: 0xff
11162306a36Sopenharmony_ci    default: 0xfc
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_cipatternProperties:
11462306a36Sopenharmony_ci  "^watchdog@[a-f0-9]+$":
11562306a36Sopenharmony_ci    type: object
11662306a36Sopenharmony_ci    $ref: /schemas/watchdog/watchdog.yaml#
11762306a36Sopenharmony_ci    unevaluatedProperties: false
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ci    properties:
12062306a36Sopenharmony_ci      compatible:
12162306a36Sopenharmony_ci        oneOf:
12262306a36Sopenharmony_ci          - enum:
12362306a36Sopenharmony_ci              - ingenic,jz4740-watchdog
12462306a36Sopenharmony_ci              - ingenic,jz4780-watchdog
12562306a36Sopenharmony_ci          - items:
12662306a36Sopenharmony_ci              - enum:
12762306a36Sopenharmony_ci                  - ingenic,jz4770-watchdog
12862306a36Sopenharmony_ci                  - ingenic,jz4760b-watchdog
12962306a36Sopenharmony_ci                  - ingenic,jz4760-watchdog
13062306a36Sopenharmony_ci                  - ingenic,jz4725b-watchdog
13162306a36Sopenharmony_ci              - const: ingenic,jz4740-watchdog
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ci      reg:
13462306a36Sopenharmony_ci        maxItems: 1
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ci      clocks:
13762306a36Sopenharmony_ci        maxItems: 1
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci      clock-names:
14062306a36Sopenharmony_ci        const: wdt
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci    required:
14362306a36Sopenharmony_ci      - compatible
14462306a36Sopenharmony_ci      - reg
14562306a36Sopenharmony_ci      - clocks
14662306a36Sopenharmony_ci      - clock-names
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci  "^pwm@[a-f0-9]+$":
14962306a36Sopenharmony_ci    type: object
15062306a36Sopenharmony_ci    $ref: /schemas/pwm/pwm.yaml#
15162306a36Sopenharmony_ci    unevaluatedProperties: false
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_ci    properties:
15462306a36Sopenharmony_ci      compatible:
15562306a36Sopenharmony_ci        oneOf:
15662306a36Sopenharmony_ci          - enum:
15762306a36Sopenharmony_ci              - ingenic,jz4740-pwm
15862306a36Sopenharmony_ci              - ingenic,jz4725b-pwm
15962306a36Sopenharmony_ci              - ingenic,x1000-pwm
16062306a36Sopenharmony_ci          - items:
16162306a36Sopenharmony_ci              - enum:
16262306a36Sopenharmony_ci                  - ingenic,jz4760-pwm
16362306a36Sopenharmony_ci                  - ingenic,jz4760b-pwm
16462306a36Sopenharmony_ci                  - ingenic,jz4770-pwm
16562306a36Sopenharmony_ci                  - ingenic,jz4780-pwm
16662306a36Sopenharmony_ci              - const: ingenic,jz4740-pwm
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_ci      reg:
16962306a36Sopenharmony_ci        maxItems: 1
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci      clocks:
17262306a36Sopenharmony_ci        minItems: 6
17362306a36Sopenharmony_ci        maxItems: 8
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci      clock-names:
17662306a36Sopenharmony_ci        items:
17762306a36Sopenharmony_ci          - const: timer0
17862306a36Sopenharmony_ci          - const: timer1
17962306a36Sopenharmony_ci          - const: timer2
18062306a36Sopenharmony_ci          - const: timer3
18162306a36Sopenharmony_ci          - const: timer4
18262306a36Sopenharmony_ci          - const: timer5
18362306a36Sopenharmony_ci          - const: timer6
18462306a36Sopenharmony_ci          - const: timer7
18562306a36Sopenharmony_ci        minItems: 6
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci    required:
18862306a36Sopenharmony_ci      - compatible
18962306a36Sopenharmony_ci      - reg
19062306a36Sopenharmony_ci      - clocks
19162306a36Sopenharmony_ci      - clock-names
19262306a36Sopenharmony_ci
19362306a36Sopenharmony_ci  "^timer@[a-f0-9]+$":
19462306a36Sopenharmony_ci    type: object
19562306a36Sopenharmony_ci    properties:
19662306a36Sopenharmony_ci      compatible:
19762306a36Sopenharmony_ci        oneOf:
19862306a36Sopenharmony_ci          - enum:
19962306a36Sopenharmony_ci              - ingenic,jz4725b-ost
20062306a36Sopenharmony_ci              - ingenic,jz4760b-ost
20162306a36Sopenharmony_ci          - items:
20262306a36Sopenharmony_ci              - const: ingenic,jz4760-ost
20362306a36Sopenharmony_ci              - const: ingenic,jz4725b-ost
20462306a36Sopenharmony_ci          - items:
20562306a36Sopenharmony_ci              - enum:
20662306a36Sopenharmony_ci                  - ingenic,jz4780-ost
20762306a36Sopenharmony_ci                  - ingenic,jz4770-ost
20862306a36Sopenharmony_ci              - const: ingenic,jz4760b-ost
20962306a36Sopenharmony_ci
21062306a36Sopenharmony_ci      reg:
21162306a36Sopenharmony_ci        maxItems: 1
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ci      clocks:
21462306a36Sopenharmony_ci        maxItems: 1
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ci      clock-names:
21762306a36Sopenharmony_ci        const: ost
21862306a36Sopenharmony_ci
21962306a36Sopenharmony_ci      interrupts:
22062306a36Sopenharmony_ci        maxItems: 1
22162306a36Sopenharmony_ci
22262306a36Sopenharmony_ci    required:
22362306a36Sopenharmony_ci      - compatible
22462306a36Sopenharmony_ci      - reg
22562306a36Sopenharmony_ci      - clocks
22662306a36Sopenharmony_ci      - clock-names
22762306a36Sopenharmony_ci      - interrupts
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_ci    additionalProperties: false
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_cirequired:
23262306a36Sopenharmony_ci  - "#clock-cells"
23362306a36Sopenharmony_ci  - "#interrupt-cells"
23462306a36Sopenharmony_ci  - interrupt-controller
23562306a36Sopenharmony_ci  - compatible
23662306a36Sopenharmony_ci  - reg
23762306a36Sopenharmony_ci  - clocks
23862306a36Sopenharmony_ci  - clock-names
23962306a36Sopenharmony_ci  - interrupts
24062306a36Sopenharmony_ci
24162306a36Sopenharmony_ciadditionalProperties: false
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ciexamples:
24462306a36Sopenharmony_ci  - |
24562306a36Sopenharmony_ci    #include <dt-bindings/clock/ingenic,jz4770-cgu.h>
24662306a36Sopenharmony_ci    #include <dt-bindings/clock/ingenic,tcu.h>
24762306a36Sopenharmony_ci    tcu: timer@10002000 {
24862306a36Sopenharmony_ci      compatible = "ingenic,jz4770-tcu", "ingenic,jz4760-tcu", "simple-mfd";
24962306a36Sopenharmony_ci      reg = <0x10002000 0x1000>;
25062306a36Sopenharmony_ci      #address-cells = <1>;
25162306a36Sopenharmony_ci      #size-cells = <1>;
25262306a36Sopenharmony_ci      ranges = <0x0 0x10002000 0x1000>;
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ci      #clock-cells = <1>;
25562306a36Sopenharmony_ci
25662306a36Sopenharmony_ci      clocks = <&cgu JZ4770_CLK_RTC>,
25762306a36Sopenharmony_ci               <&cgu JZ4770_CLK_EXT>,
25862306a36Sopenharmony_ci               <&cgu JZ4770_CLK_PCLK>;
25962306a36Sopenharmony_ci      clock-names = "rtc", "ext", "pclk";
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci      interrupt-controller;
26262306a36Sopenharmony_ci      #interrupt-cells = <1>;
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ci      interrupt-parent = <&intc>;
26562306a36Sopenharmony_ci      interrupts = <27 26 25>;
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_ci      watchdog: watchdog@0 {
26862306a36Sopenharmony_ci        compatible = "ingenic,jz4770-watchdog", "ingenic,jz4740-watchdog";
26962306a36Sopenharmony_ci        reg = <0x0 0xc>;
27062306a36Sopenharmony_ci
27162306a36Sopenharmony_ci        clocks = <&tcu TCU_CLK_WDT>;
27262306a36Sopenharmony_ci        clock-names = "wdt";
27362306a36Sopenharmony_ci      };
27462306a36Sopenharmony_ci
27562306a36Sopenharmony_ci      pwm: pwm@40 {
27662306a36Sopenharmony_ci        compatible = "ingenic,jz4770-pwm", "ingenic,jz4740-pwm";
27762306a36Sopenharmony_ci        reg = <0x40 0x80>;
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_ci        #pwm-cells = <3>;
28062306a36Sopenharmony_ci
28162306a36Sopenharmony_ci        clocks = <&tcu TCU_CLK_TIMER0>,
28262306a36Sopenharmony_ci                 <&tcu TCU_CLK_TIMER1>,
28362306a36Sopenharmony_ci                 <&tcu TCU_CLK_TIMER2>,
28462306a36Sopenharmony_ci                 <&tcu TCU_CLK_TIMER3>,
28562306a36Sopenharmony_ci                 <&tcu TCU_CLK_TIMER4>,
28662306a36Sopenharmony_ci                 <&tcu TCU_CLK_TIMER5>,
28762306a36Sopenharmony_ci                 <&tcu TCU_CLK_TIMER6>,
28862306a36Sopenharmony_ci                 <&tcu TCU_CLK_TIMER7>;
28962306a36Sopenharmony_ci        clock-names = "timer0", "timer1", "timer2", "timer3",
29062306a36Sopenharmony_ci                "timer4", "timer5", "timer6", "timer7";
29162306a36Sopenharmony_ci      };
29262306a36Sopenharmony_ci
29362306a36Sopenharmony_ci      ost: timer@e0 {
29462306a36Sopenharmony_ci        compatible = "ingenic,jz4770-ost", "ingenic,jz4760b-ost";
29562306a36Sopenharmony_ci        reg = <0xe0 0x20>;
29662306a36Sopenharmony_ci
29762306a36Sopenharmony_ci        clocks = <&tcu TCU_CLK_OST>;
29862306a36Sopenharmony_ci        clock-names = "ost";
29962306a36Sopenharmony_ci
30062306a36Sopenharmony_ci        interrupts = <15>;
30162306a36Sopenharmony_ci      };
30262306a36Sopenharmony_ci    };
303