162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/soc/microchip/atmel,at91rm9200-tcb.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Atmel Timer Counter Block
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Alexandre Belloni <alexandre.belloni@bootlin.com>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription: |
1362306a36Sopenharmony_ci  The Atmel (now Microchip) SoCs have timers named Timer Counter Block. Each
1462306a36Sopenharmony_ci  timer has three channels with two counters each.
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ciproperties:
1762306a36Sopenharmony_ci  compatible:
1862306a36Sopenharmony_ci    items:
1962306a36Sopenharmony_ci      - enum:
2062306a36Sopenharmony_ci          - atmel,at91rm9200-tcb
2162306a36Sopenharmony_ci          - atmel,at91sam9x5-tcb
2262306a36Sopenharmony_ci          - atmel,sama5d2-tcb
2362306a36Sopenharmony_ci      - const: simple-mfd
2462306a36Sopenharmony_ci      - const: syscon
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci  reg:
2762306a36Sopenharmony_ci    maxItems: 1
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci  interrupts:
3062306a36Sopenharmony_ci    description:
3162306a36Sopenharmony_ci      List of interrupts. One interrupt per TCB channel if available or one
3262306a36Sopenharmony_ci      interrupt for the TC block
3362306a36Sopenharmony_ci    minItems: 1
3462306a36Sopenharmony_ci    maxItems: 3
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci  clock-names:
3762306a36Sopenharmony_ci    description:
3862306a36Sopenharmony_ci      List of clock names. Always includes t0_clk and slow clk. Also includes
3962306a36Sopenharmony_ci      t1_clk and t2_clk if a clock per channel is available.
4062306a36Sopenharmony_ci    minItems: 2
4162306a36Sopenharmony_ci    maxItems: 4
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci  clocks:
4462306a36Sopenharmony_ci    minItems: 2
4562306a36Sopenharmony_ci    maxItems: 4
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci  '#address-cells':
4862306a36Sopenharmony_ci    const: 1
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci  '#size-cells':
5162306a36Sopenharmony_ci    const: 0
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_cipatternProperties:
5462306a36Sopenharmony_ci  "^timer@[0-2]$":
5562306a36Sopenharmony_ci    description: The timer block channels that are used as timers or counters.
5662306a36Sopenharmony_ci    type: object
5762306a36Sopenharmony_ci    additionalProperties: false
5862306a36Sopenharmony_ci    properties:
5962306a36Sopenharmony_ci      compatible:
6062306a36Sopenharmony_ci        items:
6162306a36Sopenharmony_ci          - enum:
6262306a36Sopenharmony_ci              - atmel,tcb-timer
6362306a36Sopenharmony_ci              - atmel,tcb-pwm
6462306a36Sopenharmony_ci              - microchip,tcb-capture
6562306a36Sopenharmony_ci      reg:
6662306a36Sopenharmony_ci        description:
6762306a36Sopenharmony_ci          List of channels to use for this particular timer. In Microchip TCB capture
6862306a36Sopenharmony_ci          mode channels are registered as a counter devices, for the qdec mode TCB0's
6962306a36Sopenharmony_ci          channel <0> and <1> are required.
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci        minItems: 1
7262306a36Sopenharmony_ci        maxItems: 3
7362306a36Sopenharmony_ci    required:
7462306a36Sopenharmony_ci      - compatible
7562306a36Sopenharmony_ci      - reg
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci  "^pwm@[0-2]$":
7862306a36Sopenharmony_ci    description: The timer block channels that are used as PWMs.
7962306a36Sopenharmony_ci    $ref: /schemas/pwm/pwm.yaml#
8062306a36Sopenharmony_ci    type: object
8162306a36Sopenharmony_ci    properties:
8262306a36Sopenharmony_ci      compatible:
8362306a36Sopenharmony_ci        const: atmel,tcb-pwm
8462306a36Sopenharmony_ci      reg:
8562306a36Sopenharmony_ci        description:
8662306a36Sopenharmony_ci          TCB channel to use for this PWM.
8762306a36Sopenharmony_ci        enum: [ 0, 1, 2 ]
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci      "#pwm-cells":
9062306a36Sopenharmony_ci        description:
9162306a36Sopenharmony_ci          The only third cell flag supported by this binding is
9262306a36Sopenharmony_ci          PWM_POLARITY_INVERTED.
9362306a36Sopenharmony_ci        const: 3
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci    required:
9662306a36Sopenharmony_ci      - compatible
9762306a36Sopenharmony_ci      - reg
9862306a36Sopenharmony_ci      - "#pwm-cells"
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci    additionalProperties: false
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ciallOf:
10462306a36Sopenharmony_ci  - if:
10562306a36Sopenharmony_ci      properties:
10662306a36Sopenharmony_ci        compatible:
10762306a36Sopenharmony_ci          contains:
10862306a36Sopenharmony_ci            const: atmel,sama5d2-tcb
10962306a36Sopenharmony_ci    then:
11062306a36Sopenharmony_ci      properties:
11162306a36Sopenharmony_ci        clocks:
11262306a36Sopenharmony_ci          minItems: 3
11362306a36Sopenharmony_ci          maxItems: 3
11462306a36Sopenharmony_ci        clock-names:
11562306a36Sopenharmony_ci          items:
11662306a36Sopenharmony_ci            - const: t0_clk
11762306a36Sopenharmony_ci            - const: gclk
11862306a36Sopenharmony_ci            - const: slow_clk
11962306a36Sopenharmony_ci    else:
12062306a36Sopenharmony_ci      properties:
12162306a36Sopenharmony_ci        clocks:
12262306a36Sopenharmony_ci          minItems: 2
12362306a36Sopenharmony_ci          maxItems: 4
12462306a36Sopenharmony_ci        clock-names:
12562306a36Sopenharmony_ci          oneOf:
12662306a36Sopenharmony_ci            - items:
12762306a36Sopenharmony_ci                - const: t0_clk
12862306a36Sopenharmony_ci                - const: slow_clk
12962306a36Sopenharmony_ci            - items:
13062306a36Sopenharmony_ci                - const: t0_clk
13162306a36Sopenharmony_ci                - const: t1_clk
13262306a36Sopenharmony_ci                - const: t2_clk
13362306a36Sopenharmony_ci                - const: slow_clk
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_cirequired:
13662306a36Sopenharmony_ci  - compatible
13762306a36Sopenharmony_ci  - reg
13862306a36Sopenharmony_ci  - interrupts
13962306a36Sopenharmony_ci  - clocks
14062306a36Sopenharmony_ci  - clock-names
14162306a36Sopenharmony_ci  - '#address-cells'
14262306a36Sopenharmony_ci  - '#size-cells'
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ciadditionalProperties: false
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ciexamples:
14762306a36Sopenharmony_ci  - |
14862306a36Sopenharmony_ci    /* One interrupt per TC block: */
14962306a36Sopenharmony_ci        tcb0: timer@fff7c000 {
15062306a36Sopenharmony_ci                compatible = "atmel,at91rm9200-tcb", "simple-mfd", "syscon";
15162306a36Sopenharmony_ci                #address-cells = <1>;
15262306a36Sopenharmony_ci                #size-cells = <0>;
15362306a36Sopenharmony_ci                reg = <0xfff7c000 0x100>;
15462306a36Sopenharmony_ci                interrupts = <18 4>;
15562306a36Sopenharmony_ci                clocks = <&tcb0_clk>, <&clk32k>;
15662306a36Sopenharmony_ci                clock-names = "t0_clk", "slow_clk";
15762306a36Sopenharmony_ci
15862306a36Sopenharmony_ci                timer@0 {
15962306a36Sopenharmony_ci                        compatible = "atmel,tcb-timer";
16062306a36Sopenharmony_ci                        reg = <0>, <1>;
16162306a36Sopenharmony_ci                };
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci                timer@2 {
16462306a36Sopenharmony_ci                        compatible = "atmel,tcb-timer";
16562306a36Sopenharmony_ci                        reg = <2>;
16662306a36Sopenharmony_ci                };
16762306a36Sopenharmony_ci        };
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ci    /* One interrupt per TC channel in a TC block: */
17062306a36Sopenharmony_ci        tcb1: timer@fffdc000 {
17162306a36Sopenharmony_ci                compatible = "atmel,at91rm9200-tcb", "simple-mfd", "syscon";
17262306a36Sopenharmony_ci                #address-cells = <1>;
17362306a36Sopenharmony_ci                #size-cells = <0>;
17462306a36Sopenharmony_ci                reg = <0xfffdc000 0x100>;
17562306a36Sopenharmony_ci                interrupts = <26 4>, <27 4>, <28 4>;
17662306a36Sopenharmony_ci                clocks = <&tcb1_clk>, <&clk32k>;
17762306a36Sopenharmony_ci                clock-names = "t0_clk", "slow_clk";
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci                timer@0 {
18062306a36Sopenharmony_ci                        compatible = "atmel,tcb-timer";
18162306a36Sopenharmony_ci                        reg = <0>;
18262306a36Sopenharmony_ci                };
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ci                timer@1 {
18562306a36Sopenharmony_ci                        compatible = "atmel,tcb-timer";
18662306a36Sopenharmony_ci                        reg = <1>;
18762306a36Sopenharmony_ci                };
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ci                pwm@2 {
19062306a36Sopenharmony_ci                        compatible = "atmel,tcb-pwm";
19162306a36Sopenharmony_ci                        reg = <2>;
19262306a36Sopenharmony_ci                        #pwm-cells = <3>;
19362306a36Sopenharmony_ci                };
19462306a36Sopenharmony_ci         };
19562306a36Sopenharmony_ci    /* TCB0 Capture with QDEC: */
19662306a36Sopenharmony_ci        timer@f800c000 {
19762306a36Sopenharmony_ci                compatible = "atmel,at91rm9200-tcb", "simple-mfd", "syscon";
19862306a36Sopenharmony_ci                #address-cells = <1>;
19962306a36Sopenharmony_ci                #size-cells = <0>;
20062306a36Sopenharmony_ci                reg = <0xfff7c000 0x100>;
20162306a36Sopenharmony_ci                interrupts = <18 4>;
20262306a36Sopenharmony_ci                clocks = <&tcb0_clk>, <&clk32k>;
20362306a36Sopenharmony_ci                clock-names = "t0_clk", "slow_clk";
20462306a36Sopenharmony_ci
20562306a36Sopenharmony_ci                timer@0 {
20662306a36Sopenharmony_ci                        compatible = "microchip,tcb-capture";
20762306a36Sopenharmony_ci                        reg = <0>, <1>;
20862306a36Sopenharmony_ci                };
20962306a36Sopenharmony_ci
21062306a36Sopenharmony_ci                timer@2 {
21162306a36Sopenharmony_ci                        compatible = "atmel,tcb-timer";
21262306a36Sopenharmony_ci                        reg = <2>;
21362306a36Sopenharmony_ci                };
21462306a36Sopenharmony_ci        };
215