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

Commit faea72dd authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull thermal updates from Zhang Rui:

 - Fix a regression where bogus trip points on some Lenovo laptops start
   to screw up thermal control after commit 81ad4276 ("Thermal:
   initialize thermal zone device correctly").

   On these Lenovo laptops, a bogus passive trip point is reported,
   which is 0 degree Celsius.  Without commit 81ad4276, thermal zone
   fails to set cooling devices to proper cooling state, which is a bug.
   But with commit 81ad4276 applied, the processors are always
   throttled on these Lenovo laptops because the current temperature is
   always higher than the passive trip point.

   Fix things to ignore such bogus trip points.  (Zhang Rui)

 - Introduce Mediatek thermal driver.  (Sascha Hauer)

 - Introduce devm_ versions of OF thermal sensor register API.  (Laxman
   Dewangan)

 - Changes in Kconfigs to allow compile test on UM arch.  (Krzysztof
   Kozlowski)

 - Introduce Skylake support in intel_pch_thermal driver.  (Srinivas
   Pandruvada)

 - Several small fixes on Rockchip, TI-SoC, Tegra, RCar, and Exynos
   thermal drivers.

* 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux: (26 commits)
  Thermal: Ignore invalid trip points
  thermal: trace: migrating thermal traces to use TRACE_DEFINE_ENUM() macros
  thermal: intel_pch_thermal: Enable Skylake PCH thermal
  thermal: doc: Add details of devm_thermal_zone_of_sensor_{register,unregister}
  thermal: of-thermal: Add devm version of thermal_zone_of_sensor_register
  thermal: doc: Add details of thermal_zone_of_sensor_{register,unregister}
  thermal: exynos: Defer probe if vtmu is present but not registered
  thermal: exynos: Use devm_regulator_get_optional() for vtmu
  thermal: exynos: List vtmu-supply as optional property in DT binding
  thermal: exynos: Print a message about exceeded number of supported trip-points
  thermal: exynos: Document number of supported trip-points
  thermal: exynos: Document compatible for Exynos5433 TMU
  thermal: mtk: allow compile testing on UM
  thermal: tegra_soctherm: fix sign bit of temperature
  thermal: Fix build error of missing devm_ioremap_resource on UM
  thermal: ti-soc-thermal: clean up the error handling a bit
  thermal: rcar: Use ARCH_RENESAS
  thermal: rcar_thermal: don't open code of_device_get_match_data()
  thermal: db8500_cpufreq_cooling: Compile with COMPILE_TEST
  thermal: rockchip: fix the tsadc sequence output on rk3228/rk3399
  ...
parents 5b1e167d 81ad4276
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@
	       "samsung,exynos5420-tmu" for TMU channel 0, 1 on Exynos5420
	       "samsung,exynos5420-tmu-ext-triminfo" for TMU channels 2, 3 and 4
			Exynos5420 (Must pass triminfo base and triminfo clock)
               "samsung,exynos5433-tmu"
	       "samsung,exynos5440-tmu"
	       "samsung,exynos7-tmu"
- interrupt-parent : The phandle for the interrupt controller
@@ -40,9 +41,14 @@
		for current TMU channel
	-- "tmu_sclk" clock for functional operation of the current TMU
		channel
- vtmu-supply: This entry is optional and provides the regulator node supplying
		voltage to TMU. If needed this entry can be placed inside
		board/platform specific dts file.

The Exynos TMU supports generating interrupts when reaching given
temperature thresholds. Number of supported thermal trip points depends
on the SoC (only first trip points defined in DT will be configured):
 - most of SoC: 4
 - samsung,exynos5433-tmu: 8
 - samsung,exynos7-tmu: 8

Following properties are mandatory (depending on SoC):
- samsung,tmu_gain: Gain value for internal TMU operation.
- samsung,tmu_reference_voltage: Value of TMU IP block's reference voltage
@@ -56,6 +62,12 @@ Following properties are mandatory (depending on SoC):
- samsung,tmu_default_temp_offset: Default temperature offset
- samsung,tmu_cal_type: Callibration type

** Optional properties:

- vtmu-supply: This entry is optional and provides the regulator node supplying
		voltage to TMU. If needed this entry can be placed inside
		board/platform specific dts file.

Example 1):

	tmu@100C0000 {
+43 −0
Original line number Diff line number Diff line
* Mediatek Thermal

This describes the device tree binding for the Mediatek thermal controller
which measures the on-SoC temperatures. This device does not have its own ADC,
instead it directly controls the AUXADC via AHB bus accesses. For this reason
this device needs phandles to the AUXADC. Also it controls a mux in the
apmixedsys register space via AHB bus accesses, so a phandle to the APMIXEDSYS
is also needed.

Required properties:
- compatible: "mediatek,mt8173-thermal"
- reg: Address range of the thermal controller
- interrupts: IRQ for the thermal controller
- clocks, clock-names: Clocks needed for the thermal controller. required
                       clocks are:
		       "therm":	 Main clock needed for register access
		       "auxadc": The AUXADC clock
- resets: Reference to the reset controller controlling the thermal controller.
- mediatek,auxadc: A phandle to the AUXADC which the thermal controller uses
- mediatek,apmixedsys: A phandle to the APMIXEDSYS controller.
- #thermal-sensor-cells : Should be 0. See ./thermal.txt for a description.

Optional properties:
- nvmem-cells: A phandle to the calibration data provided by a nvmem device. If
               unspecified default values shall be used.
- nvmem-cell-names: Should be "calibration-data"

Example:

	thermal: thermal@1100b000 {
		#thermal-sensor-cells = <1>;
		compatible = "mediatek,mt8173-thermal";
		reg = <0 0x1100b000 0 0x1000>;
		interrupts = <0 70 IRQ_TYPE_LEVEL_LOW>;
		clocks = <&pericfg CLK_PERI_THERM>, <&pericfg CLK_PERI_AUXADC>;
		clock-names = "therm", "auxadc";
		resets = <&pericfg MT8173_PERI_THERM_SW_RST>;
		reset-names = "therm";
		mediatek,auxadc = <&auxadc>;
		mediatek,apmixedsys = <&apmixedsys>;
		nvmem-cells = <&thermal_calibration_data>;
		nvmem-cell-names = "calibration-data";
	};
+68 −0
Original line number Diff line number Diff line
@@ -72,6 +72,74 @@ temperature) and throttle appropriate devices.
    It deletes the corresponding entry form /sys/class/thermal folder and
    unbind all the thermal cooling devices it uses.

1.1.3 struct thermal_zone_device *thermal_zone_of_sensor_register(
		struct device *dev, int sensor_id, void *data,
		const struct thermal_zone_of_device_ops *ops)

	This interface adds a new sensor to a DT thermal zone.
	This function will search the list of thermal zones described in
	device tree and look for the zone that refer to the sensor device
	pointed by dev->of_node as temperature providers. For the zone
	pointing to the sensor node, the sensor will be added to the DT
	thermal zone device.

	The parameters for this interface are:
	dev:		Device node of sensor containing valid node pointer in
			dev->of_node.
	sensor_id:	a sensor identifier, in case the sensor IP has more
			than one sensors
	data:		a private pointer (owned by the caller) that will be
			passed back, when a temperature reading is needed.
	ops:		struct thermal_zone_of_device_ops *.

			get_temp:	a pointer to a function that reads the
					sensor temperature. This is mandatory
					callback provided by sensor driver.
			get_trend: 	a pointer to a function that reads the
					sensor temperature trend.
			set_emul_temp:	a pointer to a function that sets
					sensor emulated temperature.
	The thermal zone temperature is provided by the get_temp() function
	pointer of thermal_zone_of_device_ops. When called, it will
	have the private pointer @data back.

	It returns error pointer if fails otherwise valid thermal zone device
	handle. Caller should check the return handle with IS_ERR() for finding
	whether success or not.

1.1.4 void thermal_zone_of_sensor_unregister(struct device *dev,
		struct thermal_zone_device *tzd)

	This interface unregisters a sensor from a DT thermal zone which was
	successfully added by interface thermal_zone_of_sensor_register().
	This function removes the sensor callbacks and private data from the
	thermal zone device registered with thermal_zone_of_sensor_register()
	interface. It will also silent the zone by remove the .get_temp() and
	get_trend() thermal zone device callbacks.

1.1.5 struct thermal_zone_device *devm_thermal_zone_of_sensor_register(
		struct device *dev, int sensor_id,
		void *data, const struct thermal_zone_of_device_ops *ops)

	This interface is resource managed version of
	thermal_zone_of_sensor_register().
	All details of thermal_zone_of_sensor_register() described in
	section 1.1.3 is applicable here.
	The benefit of using this interface to register sensor is that it
	is not require to explicitly call thermal_zone_of_sensor_unregister()
	in error path or during driver unbinding as this is done by driver
	resource manager.

1.1.6 void devm_thermal_zone_of_sensor_unregister(struct device *dev,
		struct thermal_zone_device *tzd)

	This interface is resource managed version of
	thermal_zone_of_sensor_unregister().
	All details of thermal_zone_of_sensor_unregister() described in
	section 1.1.4 is applicable here.
	Normally this function will not need to be called and the resource
	management code will ensure that the resource is freed.

1.2 thermal cooling device interface
1.2.1 struct thermal_cooling_device *thermal_cooling_device_register(char *name,
		void *devdata, struct thermal_cooling_device_ops *)
+19 −2
Original line number Diff line number Diff line
@@ -178,6 +178,7 @@ config THERMAL_EMULATION
config HISI_THERMAL
	tristate "Hisilicon thermal driver"
	depends on (ARCH_HISI && CPU_THERMAL && OF) || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  Enable this to plug hisilicon's thermal sensor driver into the Linux
	  thermal framework. cpufreq is used as the cooling device to throttle
@@ -197,6 +198,7 @@ config IMX_THERMAL
config SPEAR_THERMAL
	tristate "SPEAr thermal sensor driver"
	depends on PLAT_SPEAR || COMPILE_TEST
	depends on HAS_IOMEM
	depends on OF
	help
	  Enable this to plug the SPEAr thermal sensor driver into the Linux
@@ -206,6 +208,7 @@ config ROCKCHIP_THERMAL
	tristate "Rockchip thermal driver"
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	depends on RESET_CONTROLLER
	depends on HAS_IOMEM
	help
	  Rockchip thermal driver provides support for Temperature sensor
	  ADC (TS-ADC) found on Rockchip SoCs. It supports one critical
@@ -214,7 +217,7 @@ config ROCKCHIP_THERMAL

config RCAR_THERMAL
	tristate "Renesas R-Car thermal driver"
	depends on ARCH_SHMOBILE || COMPILE_TEST
	depends on ARCH_RENESAS || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  Enable this to plug the R-Car thermal sensor driver into the Linux
@@ -223,6 +226,7 @@ config RCAR_THERMAL
config KIRKWOOD_THERMAL
	tristate "Temperature sensor on Marvell Kirkwood SoCs"
	depends on MACH_KIRKWOOD || COMPILE_TEST
	depends on HAS_IOMEM
	depends on OF
	help
	  Support for the Kirkwood thermal sensor driver into the Linux thermal
@@ -231,6 +235,7 @@ config KIRKWOOD_THERMAL
config DOVE_THERMAL
	tristate "Temperature sensor on Marvell Dove SoCs"
	depends on ARCH_DOVE || MACH_DOVE || COMPILE_TEST
	depends on HAS_IOMEM
	depends on OF
	help
	  Support for the Dove thermal sensor driver in the Linux thermal
@@ -249,6 +254,7 @@ config DB8500_THERMAL
config ARMADA_THERMAL
	tristate "Armada 370/XP thermal management"
	depends on ARCH_MVEBU || COMPILE_TEST
	depends on HAS_IOMEM
	depends on OF
	help
	  Enable this option if you want to have support for thermal management
@@ -266,7 +272,8 @@ config TEGRA_SOCTHERM

config DB8500_CPUFREQ_COOLING
	tristate "DB8500 cpufreq cooling"
	depends on ARCH_U8500
	depends on ARCH_U8500 || COMPILE_TEST
	depends on HAS_IOMEM
	depends on CPU_THERMAL
	default y
	help
@@ -365,8 +372,18 @@ config INTEL_PCH_THERMAL
	  Thermal reporting device will provide temperature reading,
	  programmable trip points and other information.

config MTK_THERMAL
	tristate "Temperature sensor driver for mediatek SoCs"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on HAS_IOMEM
	default y
	help
	  Enable this option if you want to have support for thermal management
	  controller present in Mediatek SoCs

menu "Texas Instruments thermal drivers"
depends on ARCH_HAS_BANDGAP || COMPILE_TEST
depends on HAS_IOMEM
source "drivers/thermal/ti-soc-thermal/Kconfig"
endmenu

+1 −0
Original line number Diff line number Diff line
@@ -48,3 +48,4 @@ obj-$(CONFIG_INTEL_PCH_THERMAL) += intel_pch_thermal.o
obj-$(CONFIG_ST_THERMAL)	+= st/
obj-$(CONFIG_TEGRA_SOCTHERM)	+= tegra_soctherm.o
obj-$(CONFIG_HISI_THERMAL)     += hisi_thermal.o
obj-$(CONFIG_MTK_THERMAL)	+= mtk_thermal.o
Loading