2019-06-19 00:05:28 +03:00
========================
2013-06-24 14:50:49 +04:00
Kernel driver exynos_tmu
2019-06-19 00:05:28 +03:00
========================
2011-09-07 13:49:08 +04:00
Supported chips:
2019-06-19 00:05:28 +03:00
2013-06-24 14:50:49 +04:00
* ARM SAMSUNG EXYNOS4, EXYNOS5 series of SoC
2019-06-19 00:05:28 +03:00
2011-09-07 13:49:08 +04:00
Datasheet: Not publicly available
Authors: Donggeun Kim <dg77.kim@samsung.com>
2013-06-24 14:50:49 +04:00
Authors: Amit Daniel <amit.daniel@samsung.com>
2011-09-07 13:49:08 +04:00
2013-06-24 14:50:49 +04:00
TMU controller Description:
---------------------------
2011-09-07 13:49:08 +04:00
2013-06-24 14:50:49 +04:00
This driver allows to read temperature inside SAMSUNG EXYNOS4/5 series of SoC.
2011-09-07 13:49:08 +04: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-19 00:05:28 +03:00
1. Two point trimming::
2011-09-07 13:49:08 +04:00
Tc = (T - 25) * (TI2 - TI1) / (85 - 25) + TI1
2019-06-19 00:05:28 +03:00
2. One point trimming::
2011-09-07 13:49:08 +04:00
Tc = T + TI1 - 25
2019-06-19 00:05:28 +03:00
3. No trimming::
2011-09-07 13:49:08 +04:00
Tc = T + 50
2019-06-19 00:05:28 +03:00
Tc:
Temperature code, T: Temperature,
TI1:
Trimming info for 25 degree Celsius (stored at TRIMINFO register)
2011-09-07 13:49:08 +04:00
Temperature code measured at 25 degree Celsius which is unchanged
2019-06-19 00:05:28 +03:00
TI2:
Trimming info for 85 degree Celsius (stored at TRIMINFO register)
2011-09-07 13:49:08 +04:00
Temperature code measured at 85 degree Celsius which is unchanged
2013-06-24 14:50:49 +04:00
TMU(Thermal Management Unit) in EXYNOS4/5 generates interrupt
2011-09-07 13:49:08 +04:00
when temperature exceeds pre-defined levels.
2013-06-24 14:50:49 +04:00
The maximum number of configurable threshold is five.
2019-06-19 00:05:28 +03:00
The threshold levels are defined as follows::
2011-09-07 13:49:08 +04: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-19 00:05:28 +03:00
The threshold and each trigger_level are set
through the corresponding registers.
2011-09-07 13:49:08 +04:00
2012-08-16 15:41:41 +04:00
When an interrupt occurs, this driver notify kernel thermal framework
2013-06-24 14:50:49 +04:00
with the function exynos_report_trigger.
2011-09-07 13:49:08 +04:00
Although an interrupt condition for level_0 can be set,
2012-08-16 15:41:41 +04:00
it can be used to synchronize the cooling action.
2013-06-24 14:50:49 +04:00
TMU driver description:
-----------------------
2019-06-19 00:05:28 +03:00
The exynos thermal driver is structured as::
2013-06-24 14:50:49 +04:00
Kernel Core thermal framework
(thermal_core.c, step_wise.c, cpu_cooling.c)
^
|
|
2019-06-19 00: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 14:50:49 +04:00
2019-06-19 00:05:28 +03:00
a) TMU configuration data:
This consist of TMU register offsets/bitfields
2013-06-24 14:50:49 +04:00
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-19 00:05:28 +03:00
b) TMU driver:
This component initialises the TMU controller and sets different
2013-06-24 14:50:49 +04:00
thresholds. It invokes core thermal implementation with the call
exynos_report_trigger.
2019-06-19 00:05:28 +03:00
c) Exynos Core thermal wrapper:
This provides 3 wrapper function to use the
2013-06-24 14:50:49 +04:00
Kernel core thermal framework. They are exynos_unregister_thermal,
exynos_register_thermal and exynos_report_trigger.