# SPDX-License-Identifier: GPL-2.0-only
# Copyright (C) 2020 Renesas Electronics Corp.
%YAML 1.2
---
$id: http://devicetree.org/schemas/thermal/rcar-thermal.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Renesas R-Car Thermal

maintainers:
  - Niklas Söderlund <niklas.soderlund@ragnatech.se>

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - renesas,thermal-r8a73a4 # R-Mobile APE6
              - renesas,thermal-r8a7779 # R-Car H1
          - const: renesas,rcar-thermal # Generic without thermal-zone
      - items:
          - enum:
              - renesas,thermal-r8a7742 # RZ/G1H
              - renesas,thermal-r8a7743 # RZ/G1M
              - renesas,thermal-r8a7744 # RZ/G1N
          - const: renesas,rcar-gen2-thermal # Generic thermal-zone
      - items:
          - enum:
              - renesas,thermal-r8a7790 # R-Car H2
              - renesas,thermal-r8a7791 # R-Car M2-W
              - renesas,thermal-r8a7792 # R-Car V2H
              - renesas,thermal-r8a7793 # R-Car M2-N
          - const: renesas,rcar-gen2-thermal # Generic thermal-zone
          - const: renesas,rcar-thermal # Generic without thermal-zone
      - items:
          - enum:
              - renesas,thermal-r8a774c0 # RZ/G2E
              - renesas,thermal-r8a77970 # R-Car V3M
              - renesas,thermal-r8a77990 # R-Car E3
              - renesas,thermal-r8a77995 # R-Car D3
  reg:
    description:
      Address ranges of the thermal registers. If more then one range is given
      the first one must be the common registers followed by each sensor
      according to the datasheet.
    minItems: 1
    maxItems: 4

  interrupts:
    minItems: 1
    maxItems: 3

  clocks:
    maxItems: 1

  power-domains:
    maxItems: 1

  resets:
    maxItems: 1

  "#thermal-sensor-cells":
    const: 0

required:
  - compatible
  - reg

allOf:
  - if:
      not:
        properties:
          compatible:
            contains:
              enum:
                - renesas,thermal-r8a73a4 # R-Mobile APE6
                - renesas,thermal-r8a7779 # R-Car H1
    then:
      required:
        - resets
        - '#thermal-sensor-cells'

  - if:
      not:
        properties:
          compatible:
            contains:
              const: renesas,thermal-r8a7779 # R-Car H1
    then:
      required:
        - interrupts
        - clocks
        - power-domains

additionalProperties: false

examples:
  # Example (non interrupt support)
  - |
    thermal@ffc48000 {
        compatible = "renesas,thermal-r8a7779", "renesas,rcar-thermal";
        reg = <0xffc48000 0x38>;
    };

  # Example (interrupt support)
  - |
    #include <dt-bindings/clock/r8a73a4-clock.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    thermal@e61f0000 {
        compatible = "renesas,thermal-r8a73a4", "renesas,rcar-thermal";
        reg = <0xe61f0000 0x14>, <0xe61f0100 0x38>,
              <0xe61f0200 0x38>, <0xe61f0300 0x38>;
        interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&mstp5_clks R8A73A4_CLK_THERMAL>;
        power-domains = <&pd_c5>;
    };

  # Example (with thermal-zone)
  - |
    #include <dt-bindings/clock/r8a7790-cpg-mssr.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/power/r8a7790-sysc.h>

    thermal: thermal@e61f0000 {
        compatible = "renesas,thermal-r8a7790",
                     "renesas,rcar-gen2-thermal",
                     "renesas,rcar-thermal";
        reg = <0xe61f0000 0x10>, <0xe61f0100 0x38>;
        interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&cpg CPG_MOD 522>;
        power-domains = <&sysc R8A7790_PD_ALWAYS_ON>;
        resets = <&cpg 522>;
        #thermal-sensor-cells = <0>;
    };

    thermal-zones {
        cpu_thermal: cpu-thermal {
            polling-delay-passive = <1000>;
            polling-delay = <5000>;

            thermal-sensors = <&thermal>;

            trips {
                cpu-crit {
                    temperature = <115000>;
                    hysteresis = <0>;
                    type = "critical";
                };
            };
            cooling-maps {
            };
        };
    };
