# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/st,stm32-timers.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: STMicroelectronics STM32 Timers

description: |
  This hardware block provides 3 types of timer along with PWM functionality:
    - advanced-control timers consist of a 16-bit auto-reload counter driven
      by a programmable prescaler, break input feature, PWM outputs and
      complementary PWM outputs channels.
    - general-purpose timers consist of a 16-bit or 32-bit auto-reload counter
      driven by a programmable prescaler and PWM outputs.
    - basic timers consist of a 16-bit auto-reload counter driven by a
      programmable prescaler.

maintainers:
  - Fabrice Gasnier <fabrice.gasnier@foss.st.com>

properties:
  compatible:
    const: st,stm32-timers

  reg:
    maxItems: 1

  clocks:
    maxItems: 1

  clock-names:
    items:
      - const: int

  resets:
    maxItems: 1

  dmas:
    minItems: 1
    maxItems: 7

  dma-names:
    items:
      enum: [ ch1, ch2, ch3, ch4, up, trig, com ]
    minItems: 1
    maxItems: 7

  interrupts:
    oneOf:
      - maxItems: 1
      - maxItems: 4

  interrupt-names:
    oneOf:
      - items:
          - const: global
      - items:
          - const: brk
          - const: up
          - const: trg-com
          - const: cc

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  pwm:
    type: object
    additionalProperties: false

    properties:
      compatible:
        const: st,stm32-pwm

      "#pwm-cells":
        const: 3

      st,breakinput:
        description:
          One or two <index level filter> to describe break input
          configurations.
        $ref: /schemas/types.yaml#/definitions/uint32-matrix
        items:
          items:
            - description: |
                "index" indicates on which break input (0 or 1) the
                configuration should be applied.
              enum: [0, 1]
            - description: |
                "level" gives the active level (0=low or 1=high) of the
                input signal for this configuration
              enum: [0, 1]
            - description: |
                "filter" gives the filtering value (up to 15) to be applied.
              maximum: 15
        minItems: 1
        maxItems: 2

    required:
      - "#pwm-cells"
      - compatible

  counter:
    type: object
    additionalProperties: false

    properties:
      compatible:
        const: st,stm32-timer-counter

    required:
      - compatible

patternProperties:
  "^timer@[0-9]+$":
    type: object
    additionalProperties: false

    properties:
      compatible:
        enum:
          - st,stm32-timer-trigger
          - st,stm32h7-timer-trigger

      reg:
        description: Identify trigger hardware block.
        items:
          minimum: 0
          maximum: 16

    required:
      - compatible
      - reg

required:
  - compatible
  - reg
  - clocks
  - clock-names

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/stm32mp1-clks.h>
    timers2: timer@40000000 {
      #address-cells = <1>;
      #size-cells = <0>;
      compatible = "st,stm32-timers";
      reg = <0x40000000 0x400>;
      clocks = <&rcc TIM2_K>;
      clock-names = "int";
      dmas = <&dmamux1 18 0x400 0x1>,
             <&dmamux1 19 0x400 0x1>,
             <&dmamux1 20 0x400 0x1>,
             <&dmamux1 21 0x400 0x1>,
             <&dmamux1 22 0x400 0x1>;
      dma-names = "ch1", "ch2", "ch3", "ch4", "up";
      pwm {
        compatible = "st,stm32-pwm";
        #pwm-cells = <3>;
        st,breakinput = <0 1 5>;
      };
      timer@1 {
        compatible = "st,stm32-timer-trigger";
        reg = <1>;
      };
      counter {
        compatible = "st,stm32-timer-counter";
      };
    };

...