# SPDX-License-Identifier: (GPL-2.0)
# Copyright 2020 Linaro Ltd.
%YAML 1.2
---
$id: http://devicetree.org/schemas/thermal/thermal-cooling-devices.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Thermal cooling device binding

maintainers:
  - Amit Kucheria <amitk@kernel.org>

description: |
  Thermal management is achieved in devicetree by describing the sensor hardware
  and the software abstraction of cooling devices and thermal zones required to
  take appropriate action to mitigate thermal overload.

  The following node types are used to completely describe a thermal management
  system in devicetree:
   - thermal-sensor: device that measures temperature, has SoC-specific bindings
   - cooling-device: device used to dissipate heat either passively or actively
   - thermal-zones: a container of the following node types used to describe all
     thermal data for the platform

  This binding describes the cooling devices.

  There are essentially two ways to provide control on power dissipation:
    - Passive cooling: by means of regulating device performance. A typical
      passive cooling mechanism is a CPU that has dynamic voltage and frequency
      scaling (DVFS), and uses lower frequencies as cooling states.
    - Active cooling: by means of activating devices in order to remove the
      dissipated heat, e.g. regulating fan speeds.

  Any cooling device has a range of cooling states (i.e. different levels of
  heat dissipation). They also have a way to determine the state of cooling in
  which the device is. For example, a fan's cooling states correspond to the
  different fan speeds possible. Cooling states are referred to by single
  unsigned integers, where larger numbers mean greater heat dissipation. The
  precise set of cooling states associated with a device should be defined in
  a particular device's binding.

select: true

properties:
  "#cooling-cells":
    description:
      Must be 2, in order to specify minimum and maximum cooling state used in
      the cooling-maps reference. The first cell is the minimum cooling state
      and the second cell is the maximum cooling state requested.
    const: 2

additionalProperties: true

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/thermal/thermal.h>

    // Example 1: Cpufreq cooling device on CPU0
    cpus {
            #address-cells = <2>;
            #size-cells = <0>;

            CPU0: cpu@0 {
                    device_type = "cpu";
                    compatible = "qcom,kryo385";
                    reg = <0x0 0x0>;
                    enable-method = "psci";
                    cpu-idle-states = <&LITTLE_CPU_SLEEP_0
                                       &LITTLE_CPU_SLEEP_1
                                       &CLUSTER_SLEEP_0>;
                    capacity-dmips-mhz = <607>;
                    dynamic-power-coefficient = <100>;
                    qcom,freq-domain = <&cpufreq_hw 0>;
                    #cooling-cells = <2>;
                    next-level-cache = <&L2_0>;
                    L2_0: l2-cache {
                            compatible = "cache";
                            next-level-cache = <&L3_0>;
                            L3_0: l3-cache {
                                    compatible = "cache";
                            };
                    };
          };

          /* ... */

    };

    /* ... */

    thermal-zones {
            cpu0-thermal {
                    polling-delay-passive = <250>;
                    polling-delay = <1000>;

                    thermal-sensors = <&tsens0 1>;

                    trips {
                            cpu0_alert0: trip-point0 {
                                    temperature = <90000>;
                                    hysteresis = <2000>;
                                    type = "passive";
                            };
                    };

                    cooling-maps {
                            map0 {
                                    trip = <&cpu0_alert0>;
                                    /* Corresponds to 1000MHz in OPP table */
                                    cooling-device = <&CPU0 5 5>;
                            };
                    };
            };

            /* ... */
    };
...
