Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9e389e38 authored by Laxman Dewangan's avatar Laxman Dewangan Committed by Eduardo Valentin
Browse files

thermal: generic-adc: Add DT binding for ADC based thermal sensor



Sometimes, thermal sensors like NCT thermistors are connected to
the ADC channel. The temperature is read by reading the voltage
across the sensor resistance via ADC and referring the lookup
table for ADC value to temperature.

Add DT binding doc for the ADC based thermal sensor driver to
detail the DT property and provide the example for how to use it.

Signed-off-by: default avatarLaxman Dewangan <ldewangan@nvidia.com>
Acked-by: default avatarRob Herring <rob@kernel.org>
Signed-off-by: default avatarEduardo Valentin <edubezval@gmail.com>
parent f3500980
Loading
Loading
Loading
Loading
+89 −0
Original line number Diff line number Diff line
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>;
			};

		};
	};
};