/*
 * 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>;

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

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