/*
 * Device Tree Source for RK3288 SoC thermal
 *
 * Copyright (c) 2014, Fuzhou Rockchip Electronics Co., Ltd
 *
 * This file is licensed under the terms of the GNU General Public License
 * version 2.  This program is licensed "as is" without any warranty of any
 * kind, whether express or implied.
 */

#include <dt-bindings/thermal/thermal.h>

reserve_thermal: reserve_thermal {
	polling-delay-passive = <1000>; /* milliseconds */
	polling-delay = <5000>; /* milliseconds */

	thermal-sensors = <&tsadc 0>;
};

cpu_thermal: cpu_thermal {
	polling-delay-passive = <1000>; /* milliseconds */
	polling-delay = <5000>; /* milliseconds */

	thermal-sensors = <&tsadc 1>;

	trips {
		cpu_alert0: cpu_alert0 {
			temperature = <70000>; /* millicelsius */
			hysteresis = <2000>; /* millicelsius */
			type = "passive";
		};
		cpu_crit: cpu_crit {
			temperature = <90000>; /* millicelsius */
			hysteresis = <2000>; /* millicelsius */
			type = "critical";
		};
	};

	cooling-maps {
		map0 {
			trip = <&cpu_alert0>;
			cooling-device =
				<&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
		};
	};
};

gpu_thermal: gpu_thermal {
	polling-delay-passive = <1000>; /* milliseconds */
	polling-delay = <5000>; /* milliseconds */

	thermal-sensors = <&tsadc 2>;

	trips {
		gpu_alert0: gpu_alert0 {
			temperature = <70000>; /* millicelsius */
			hysteresis = <2000>; /* millicelsius */
			type = "passive";
		};
		gpu_crit: gpu_crit {
			temperature = <90000>; /* millicelsius */
			hysteresis = <2000>; /* millicelsius */
			type = "critical";
		};
	};

	cooling-maps {
		map0 {
			trip = <&gpu_alert0>;
			cooling-device =
				<&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
		};
	};
};
