Commit | Line | Data |
---|---|---|
beb70b2d | 1 | Kernel driver exynos_tmu |
9d97e5c8 DK |
2 | ================= |
3 | ||
4 | Supported chips: | |
beb70b2d | 5 | * ARM SAMSUNG EXYNOS4, EXYNOS5 series of SoC |
9d97e5c8 DK |
6 | Datasheet: Not publicly available |
7 | ||
8 | Authors: Donggeun Kim <dg77.kim@samsung.com> | |
beb70b2d | 9 | Authors: Amit Daniel <amit.daniel@samsung.com> |
9d97e5c8 | 10 | |
beb70b2d ADK |
11 | TMU controller Description: |
12 | --------------------------- | |
9d97e5c8 | 13 | |
beb70b2d | 14 | This driver allows to read temperature inside SAMSUNG EXYNOS4/5 series of SoC. |
9d97e5c8 DK |
15 | |
16 | The chip only exposes the measured 8-bit temperature code value | |
17 | through a register. | |
18 | Temperature can be taken from the temperature code. | |
19 | There are three equations converting from temperature to temperature code. | |
20 | ||
21 | The three equations are: | |
22 | 1. Two point trimming | |
23 | Tc = (T - 25) * (TI2 - TI1) / (85 - 25) + TI1 | |
24 | ||
25 | 2. One point trimming | |
26 | Tc = T + TI1 - 25 | |
27 | ||
28 | 3. No trimming | |
29 | Tc = T + 50 | |
30 | ||
31 | Tc: Temperature code, T: Temperature, | |
32 | TI1: Trimming info for 25 degree Celsius (stored at TRIMINFO register) | |
33 | Temperature code measured at 25 degree Celsius which is unchanged | |
34 | TI2: Trimming info for 85 degree Celsius (stored at TRIMINFO register) | |
35 | Temperature code measured at 85 degree Celsius which is unchanged | |
36 | ||
beb70b2d | 37 | TMU(Thermal Management Unit) in EXYNOS4/5 generates interrupt |
9d97e5c8 | 38 | when temperature exceeds pre-defined levels. |
beb70b2d | 39 | The maximum number of configurable threshold is five. |
9d97e5c8 DK |
40 | The threshold levels are defined as follows: |
41 | Level_0: current temperature > trigger_level_0 + threshold | |
42 | Level_1: current temperature > trigger_level_1 + threshold | |
43 | Level_2: current temperature > trigger_level_2 + threshold | |
44 | Level_3: current temperature > trigger_level_3 + threshold | |
45 | ||
46 | The threshold and each trigger_level are set | |
47 | through the corresponding registers. | |
48 | ||
c48cbba6 | 49 | When an interrupt occurs, this driver notify kernel thermal framework |
beb70b2d | 50 | with the function exynos_report_trigger. |
9d97e5c8 | 51 | Although an interrupt condition for level_0 can be set, |
c48cbba6 | 52 | it can be used to synchronize the cooling action. |
beb70b2d ADK |
53 | |
54 | TMU driver description: | |
55 | ----------------------- | |
56 | ||
57 | The exynos thermal driver is structured as, | |
58 | ||
59 | Kernel Core thermal framework | |
60 | (thermal_core.c, step_wise.c, cpu_cooling.c) | |
61 | ^ | |
62 | | | |
63 | | | |
64 | TMU configuration data -------> TMU Driver <------> Exynos Core thermal wrapper | |
65 | (exynos_tmu_data.c) (exynos_tmu.c) (exynos_thermal_common.c) | |
66 | (exynos_tmu_data.h) (exynos_tmu.h) (exynos_thermal_common.h) | |
67 | ||
68 | a) TMU configuration data: This consist of TMU register offsets/bitfields | |
69 | described through structure exynos_tmu_registers. Also several | |
70 | other platform data (struct exynos_tmu_platform_data) members | |
71 | are used to configure the TMU. | |
72 | b) TMU driver: This component initialises the TMU controller and sets different | |
73 | thresholds. It invokes core thermal implementation with the call | |
74 | exynos_report_trigger. | |
75 | c) Exynos Core thermal wrapper: This provides 3 wrapper function to use the | |
76 | Kernel core thermal framework. They are exynos_unregister_thermal, | |
77 | exynos_register_thermal and exynos_report_trigger. |