# 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

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";
                            cache-unified;
                            cache-level = <2>;
                            next-level-cache = <&L3_0>;
                            L3_0: l3-cache {
                                    compatible = "cache";
                                    cache-unified;
                                    cache-level = <3>;
                            };
                    };
          };

          /* ... */

    };

    /* ... */

    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>;
                            };
                    };
            };

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