Amit Daniel Kachhap | beb70b2 | 2013-06-24 16:20:49 +0530 | [diff] [blame] | 1 | Kernel driver exynos_tmu |
Donggeun Kim | 9d97e5c | 2011-09-07 18:49:08 +0900 | [diff] [blame] | 2 | ================= |
| 3 | |
| 4 | Supported chips: |
Amit Daniel Kachhap | beb70b2 | 2013-06-24 16:20:49 +0530 | [diff] [blame] | 5 | * ARM SAMSUNG EXYNOS4, EXYNOS5 series of SoC |
Donggeun Kim | 9d97e5c | 2011-09-07 18:49:08 +0900 | [diff] [blame] | 6 | Datasheet: Not publicly available |
| 7 | |
| 8 | Authors: Donggeun Kim <dg77.kim@samsung.com> |
Amit Daniel Kachhap | beb70b2 | 2013-06-24 16:20:49 +0530 | [diff] [blame] | 9 | Authors: Amit Daniel <amit.daniel@samsung.com> |
Donggeun Kim | 9d97e5c | 2011-09-07 18:49:08 +0900 | [diff] [blame] | 10 | |
Amit Daniel Kachhap | beb70b2 | 2013-06-24 16:20:49 +0530 | [diff] [blame] | 11 | TMU controller Description: |
| 12 | --------------------------- |
Donggeun Kim | 9d97e5c | 2011-09-07 18:49:08 +0900 | [diff] [blame] | 13 | |
Amit Daniel Kachhap | beb70b2 | 2013-06-24 16:20:49 +0530 | [diff] [blame] | 14 | This driver allows to read temperature inside SAMSUNG EXYNOS4/5 series of SoC. |
Donggeun Kim | 9d97e5c | 2011-09-07 18:49:08 +0900 | [diff] [blame] | 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 | |
Amit Daniel Kachhap | beb70b2 | 2013-06-24 16:20:49 +0530 | [diff] [blame] | 37 | TMU(Thermal Management Unit) in EXYNOS4/5 generates interrupt |
Donggeun Kim | 9d97e5c | 2011-09-07 18:49:08 +0900 | [diff] [blame] | 38 | when temperature exceeds pre-defined levels. |
Amit Daniel Kachhap | beb70b2 | 2013-06-24 16:20:49 +0530 | [diff] [blame] | 39 | The maximum number of configurable threshold is five. |
Donggeun Kim | 9d97e5c | 2011-09-07 18:49:08 +0900 | [diff] [blame] | 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 | |
Amit Daniel Kachhap | c48cbba | 2012-08-16 17:11:41 +0530 | [diff] [blame] | 49 | When an interrupt occurs, this driver notify kernel thermal framework |
Amit Daniel Kachhap | beb70b2 | 2013-06-24 16:20:49 +0530 | [diff] [blame] | 50 | with the function exynos_report_trigger. |
Donggeun Kim | 9d97e5c | 2011-09-07 18:49:08 +0900 | [diff] [blame] | 51 | Although an interrupt condition for level_0 can be set, |
Amit Daniel Kachhap | c48cbba | 2012-08-16 17:11:41 +0530 | [diff] [blame] | 52 | it can be used to synchronize the cooling action. |
Amit Daniel Kachhap | beb70b2 | 2013-06-24 16:20:49 +0530 | [diff] [blame] | 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. |