Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

General Purpose Analog To Digital Converter (ADC) based thermal sensor.

On some of platforms, thermal sensor like thermistors are connected to
one of ADC channel and sensor resistance is read via voltage across the
sensor resistor. The voltage read across the sensor is mapped to
temperature using voltage-temperature lookup table.

Required properties:
===================
- compatible:		     Must be "generic-adc-thermal".
- temperature-lookup-table:  Two dimensional array of Integer; lookup table
			     to map the relation between ADC value and
			     temperature. When ADC is read, the value is
			     looked up on the table to get the equivalent
			     temperature.
			     The first value of the each row of array is the
			     temperature in milliCelsius and second value of
			     the each row of array is the ADC read value.
- #thermal-sensor-cells:     Should be 1. See ./thermal.txt for a description
			     of this property.

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

i2c@7000c400 {
	ads1015: ads1015@4a {
		reg = <0x4a>;
		compatible = "ads1015";
		sampling-frequency = <3300>;
		#io-channel-cells = <1>;
	};
};

tboard_thermistor: thermal-sensor {
	compatible = "generic-adc-thermal";
	#thermal-sensor-cells = <0>;
	io-channels = <&ads1015 1>;
	io-channel-names = "sensor-channel";
	temperature-lookup-table = <    (-40000) 2578
					(-39000) 2577
					(-38000) 2576
					(-37000) 2575
					(-36000) 2574
					(-35000) 2573
					(-34000) 2572
					(-33000) 2571
					(-32000) 2569
					(-31000) 2568
					(-30000) 2567
					::::::::::
					118000 254
					119000 247
					120000 240
					121000 233
					122000 226
					123000 220
					124000 214
					125000 208>;
};

dummy_cool_dev: dummy-cool-dev {
	compatible = "dummy-cooling-dev";
	#cooling-cells = <2>; /* min followed by max */
};

thermal-zones {
	Tboard {
		polling-delay = <15000>; /* milliseconds */
		polling-delay-passive = <0>; /* milliseconds */
		thermal-sensors = <&tboard_thermistor>;

		trips {
			therm_est_trip: therm_est_trip {
				temperature = <40000>;
				type = "active";
				hysteresis = <1000>;
			};
		};

		cooling-maps {
			map0 {
				trip = <&therm_est_trip>;
				cooling-device = <&dummy_cool_dev THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
				contribution = <100>;
			};

		};
	};
};