2019-06-18 18:05:28 -03:00
========================
2013-06-24 16:20:49 +05:30
Kernel driver exynos_tmu
2019-06-18 18:05:28 -03:00
========================
2011-09-07 18:49:08 +09:00
Supported chips:
2019-06-18 18:05:28 -03:00
2020-01-04 16:20:53 +01:00
* ARM Samsung Exynos4, Exynos5 series of SoC
2019-06-18 18:05:28 -03:00
2011-09-07 18:49:08 +09:00
Datasheet: Not publicly available
Authors: Donggeun Kim <dg77.kim@samsung.com>
2013-06-24 16:20:49 +05:30
Authors: Amit Daniel <amit.daniel@samsung.com>
2011-09-07 18:49:08 +09:00
2013-06-24 16:20:49 +05:30
TMU controller Description:
---------------------------
2011-09-07 18:49:08 +09:00
2020-01-04 16:20:53 +01:00
This driver allows to read temperature inside Samsung Exynos4/5 series of SoC.
2011-09-07 18:49:08 +09:00
The chip only exposes the measured 8-bit temperature code value
through a register.
Temperature can be taken from the temperature code.
There are three equations converting from temperature to temperature code.
The three equations are:
2019-06-18 18:05:28 -03:00
1. Two point trimming::
2011-09-07 18:49:08 +09:00
Tc = (T - 25) * (TI2 - TI1) / (85 - 25) + TI1
2019-06-18 18:05:28 -03:00
2. One point trimming::
2011-09-07 18:49:08 +09:00
Tc = T + TI1 - 25
2019-06-18 18:05:28 -03:00
3. No trimming::
2011-09-07 18:49:08 +09:00
Tc = T + 50
2019-06-18 18:05:28 -03:00
Tc:
Temperature code, T: Temperature,
TI1:
Trimming info for 25 degree Celsius (stored at TRIMINFO register)
2011-09-07 18:49:08 +09:00
Temperature code measured at 25 degree Celsius which is unchanged
2019-06-18 18:05:28 -03:00
TI2:
Trimming info for 85 degree Celsius (stored at TRIMINFO register)
2011-09-07 18:49:08 +09:00
Temperature code measured at 85 degree Celsius which is unchanged
2020-01-04 16:20:53 +01:00
TMU(Thermal Management Unit) in Exynos4/5 generates interrupt
2011-09-07 18:49:08 +09:00
when temperature exceeds pre-defined levels.
2013-06-24 16:20:49 +05:30
The maximum number of configurable threshold is five.
2019-06-18 18:05:28 -03:00
The threshold levels are defined as follows::
2011-09-07 18:49:08 +09:00
Level_0: current temperature > trigger_level_0 + threshold
Level_1: current temperature > trigger_level_1 + threshold
Level_2: current temperature > trigger_level_2 + threshold
Level_3: current temperature > trigger_level_3 + threshold
2019-06-18 18:05:28 -03:00
The threshold and each trigger_level are set
through the corresponding registers.
2011-09-07 18:49:08 +09:00
2012-08-16 17:11:41 +05:30
When an interrupt occurs, this driver notify kernel thermal framework
2013-06-24 16:20:49 +05:30
with the function exynos_report_trigger.
2011-09-07 18:49:08 +09:00
Although an interrupt condition for level_0 can be set,
2012-08-16 17:11:41 +05:30
it can be used to synchronize the cooling action.
2013-06-24 16:20:49 +05:30
TMU driver description:
-----------------------
2019-06-18 18:05:28 -03:00
The exynos thermal driver is structured as::
2013-06-24 16:20:49 +05:30
Kernel Core thermal framework
2019-12-19 23:53:17 +01:00
(thermal_core.c, step_wise.c, cpufreq_cooling.c)
2013-06-24 16:20:49 +05:30
^
|
|
2019-06-18 18:05:28 -03:00
TMU configuration data -----> TMU Driver <----> Exynos Core thermal wrapper
(exynos_tmu_data.c) (exynos_tmu.c) (exynos_thermal_common.c)
(exynos_tmu_data.h) (exynos_tmu.h) (exynos_thermal_common.h)
2013-06-24 16:20:49 +05:30
2019-06-18 18:05:28 -03:00
a) TMU configuration data:
This consist of TMU register offsets/bitfields
2013-06-24 16:20:49 +05:30
described through structure exynos_tmu_registers. Also several
other platform data (struct exynos_tmu_platform_data) members
are used to configure the TMU.
2019-06-18 18:05:28 -03:00
b) TMU driver:
This component initialises the TMU controller and sets different
2013-06-24 16:20:49 +05:30
thresholds. It invokes core thermal implementation with the call
exynos_report_trigger.
2019-06-18 18:05:28 -03:00
c) Exynos Core thermal wrapper:
This provides 3 wrapper function to use the
2013-06-24 16:20:49 +05:30
Kernel core thermal framework. They are exynos_unregister_thermal,
exynos_register_thermal and exynos_report_trigger.