/*
 * Device Tree Source for OMAP4/5 SoC CPU thermal
 *
 * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
 * Contact: Eduardo Valentin <eduardo.valentin@ti.com>
 *
 * 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>

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

			/* sensor       ID */
        thermal-sensors = <&bandgap     0>;

	cpu_trips: trips {
                cpu_alert0: cpu_alert {
                        temperature = <100000>; /* millicelsius */
                        hysteresis = <2000>; /* millicelsius */
                        type = "passive";
                };
                cpu_crit: cpu_crit {
                        temperature = <125000>; /* millicelsius */
                        hysteresis = <2000>; /* millicelsius */
                        type = "critical";
                };
        };

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