# 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-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 the the datasheet.
    minItems: 1
    maxItems: 4

  interrupts:
    minItems: 1
    maxItems: 3

  clocks:
    maxItems: 1

  power-domains:
    maxItems: 1

  resets:
    maxItems: 1

if:
  properties:
    compatible:
      contains:
        enum:
          - renesas,thermal-r8a73a4 # R-Mobile APE6
          - renesas,thermal-r8a7779 # R-Car H1
then:
  required:
    - compatible
    - reg
else:
  required:
    - compatible
    - reg
    - interrupts
    - clocks
    - power-domains
    - resets

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 = <0 0xe61f0000 0 0x14>, <0 0xe61f0100 0 0x38>,
                  <0 0xe61f0200 0 0x38>, <0 0xe61f0300 0 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 = <0 0xe61f0000 0 0x10>, <0 0xe61f0100 0 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 {
                    };
            };
    };
