[PATCH 13/13] Thermal: Platform layer changes to provide thermal data
From: Durgadoss R <hidden>
Date: 2012-08-09 12:46:50
Subsystem:
the rest, x86 architecture (32-bit and 64-bit) · Maintainers:
Linus Torvalds, Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen
This patch shows how can we add platform specific thermal data required by the thermal framework. This is just an example patch, and _not_ for merge. Signed-off-by: Durgadoss R <redacted> --- arch/x86/platform/mrst/mrst.c | 42 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)
diff --git a/arch/x86/platform/mrst/mrst.c b/arch/x86/platform/mrst/mrst.c
index fd41a92..0440db5 100644
--- a/arch/x86/platform/mrst/mrst.c
+++ b/arch/x86/platform/mrst/mrst.c@@ -30,6 +30,7 @@ #include <linux/mfd/intel_msic.h> #include <linux/gpio.h> #include <linux/i2c/tc35876x.h> +#include <linux/thermal.h> #include <asm/setup.h> #include <asm/mpspec_def.h>
@@ -78,6 +79,30 @@ struct sfi_rtc_table_entry sfi_mrtc_array[SFI_MRTC_MAX]; EXPORT_SYMBOL_GPL(sfi_mrtc_array); int sfi_mrtc_num; +#define MRST_THERMAL_ZONES 3 +struct thermal_zone_params tzp[MRST_THERMAL_ZONES] = { + { .thermal_zone_name = "CPU", + .throttle_policy = THERMAL_FAIR_SHARE, + .num_cdevs = 2, + .cdevs_name = {"CPU", "Battery"}, + .trip_mask = {0x0F, 0x08}, + .weights = {80, 20}, }, + + { .thermal_zone_name = "Battery", + .throttle_policy = THERMAL_FAIR_SHARE, + .num_cdevs = 1, + .cdevs_name = {"Battery"}, + .trip_mask = {0x0F}, + .weights = {100}, }, + + { .thermal_zone_name = "Skin", + .throttle_policy = THERMAL_FAIR_SHARE, + .num_cdevs = 2, + .cdevs_name = {"Display", "Battery"}, + .trip_mask = {0x0F, 0x0F}, + .weights = {50, 50}, } +}; + static void mrst_power_off(void) { }
@@ -983,10 +1008,27 @@ static int __init sfi_parse_devs(struct sfi_table_header *table) return 0; } +static int mrst_get_thermal_params(struct thermal_zone_device *tz) +{ + int i; + + for (i = 0; i < MRST_THERMAL_ZONES; i++) { + if (!strcmp(tzp[i].thermal_zone_name, tz->type)) { + tz->tzp = &tzp[i]; + return 0; + } + } + return -ENODEV; +} + static int __init mrst_platform_init(void) { sfi_table_parse(SFI_SIG_GPIO, NULL, NULL, sfi_parse_gpio); sfi_table_parse(SFI_SIG_DEVS, NULL, NULL, sfi_parse_devs); + + /* Set platform thermal data pointer */ + get_platform_thermal_params = mrst_get_thermal_params; + return 0; } arch_initcall(mrst_platform_init);
--
1.7.9.5