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

title: Renesas R-Car Gen3 Thermal Sensor

description:
  On most R-Car Gen3 and later SoCs, the thermal sensor controllers (TSC)
  control the thermal sensors (THS) which are the analog circuits for
  measuring temperature (Tj) inside the LSI.

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

properties:
  compatible:
    enum:
      - renesas,r8a774a1-thermal # RZ/G2M
      - renesas,r8a774b1-thermal # RZ/G2N
      - renesas,r8a774e1-thermal # RZ/G2H
      - renesas,r8a7795-thermal  # R-Car H3
      - renesas,r8a7796-thermal  # R-Car M3-W
      - renesas,r8a77961-thermal # R-Car M3-W+
      - renesas,r8a77965-thermal # R-Car M3-N
      - renesas,r8a77980-thermal # R-Car V3H
      - renesas,r8a779a0-thermal # R-Car V3U
      - renesas,r8a779f0-thermal # R-Car S4-8

  reg: true

  interrupts:
    items:
      - description: TEMP1 interrupt
      - description: TEMP2 interrupt
      - description: TEMP3 interrupt

  clocks:
    maxItems: 1

  power-domains:
    maxItems: 1

  resets:
    maxItems: 1

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

required:
  - compatible
  - reg
  - clocks
  - power-domains
  - resets
  - "#thermal-sensor-cells"

if:
  properties:
    compatible:
      contains:
        enum:
          - renesas,r8a779a0-thermal
then:
  properties:
    reg:
      items:
        - description: TSC0 registers
        - description: TSC1 registers
        - description: TSC2 registers
        - description: TSC3 registers
        - description: TSC4 registers
else:
  properties:
    reg:
      minItems: 2
      items:
        - description: TSC1 registers
        - description: TSC2 registers
        - description: TSC3 registers
  if:
    not:
      properties:
        compatible:
          contains:
            enum:
              - renesas,r8a779f0-thermal
  then:
    required:
      - interrupts

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/r8a7795-cpg-mssr.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/power/r8a7795-sysc.h>

    tsc: thermal@e6198000 {
            compatible = "renesas,r8a7795-thermal";
            reg = <0xe6198000 0x100>,
                  <0xe61a0000 0x100>,
                  <0xe61a8000 0x100>;
            interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>,
                         <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
                         <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&cpg CPG_MOD 522>;
            power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
            resets = <&cpg 522>;
            #thermal-sensor-cells = <1>;
    };

    thermal-zones {
            sensor_thermal: sensor-thermal {
                    polling-delay-passive = <250>;
                    polling-delay = <1000>;
                    thermal-sensors = <&tsc 0>;

                    trips {
                            sensor1_crit: sensor1-crit {
                                    temperature = <90000>;
                                    hysteresis = <2000>;
                                    type = "critical";
                            };
                    };
            };
    };
  - |
    #include <dt-bindings/clock/r8a779a0-cpg-mssr.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/power/r8a779a0-sysc.h>

    tsc_r8a779a0: thermal@e6190000 {
            compatible = "renesas,r8a779a0-thermal";
            reg = <0xe6190000 0x200>,
                  <0xe6198000 0x200>,
                  <0xe61a0000 0x200>,
                  <0xe61a8000 0x200>,
                  <0xe61b0000 0x200>;
            clocks = <&cpg CPG_MOD 919>;
            power-domains = <&sysc R8A779A0_PD_ALWAYS_ON>;
            resets = <&cpg 919>;
            #thermal-sensor-cells = <1>;
    };
