From: Lukasz Majewski <l.majewski@samsung.com> To: Eduardo Valentin <edubezval@gmail.com>, Zhang Rui <rui.zhang@intel.com> Cc: "linux-samsung-soc@vger.kernel.org" <linux-samsung-soc@vger.kernel.org>, linux-arm-kernel@lists.infradead.org, Linux PM list <linux-pm@vger.kernel.org>, Kukjin Kim <kgene.kim@samsung.com>, Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>, Lukasz Majewski <l.majewski@majess.pl>, Amit Daniel Kachhap <amit.daniel@samsung.com>, Kyungmin Park <kyungmin.park@samsung.com>, Chanwoo Choi <cw00.choi@samsung.com>, Lukasz Majewski <l.majewski@samsung.com> Subject: [PATCH 17/21] thermal: samsung: core: Exynos TMU rework to use device tree for configuration Date: Thu, 09 Oct 2014 18:38:53 +0200 [thread overview] Message-ID: <1412872737-624-18-git-send-email-l.majewski@samsung.com> (raw) In-Reply-To: <1412872737-624-1-git-send-email-l.majewski@samsung.com> This patch brings support for providing configuration via device tree. Previously, data hardcoded in the exynos_tmu_data.c file was used, which is not scalable and error prone. Signed-off-by: Lukasz Majewski <l.majewski@samsung.com> --- drivers/thermal/samsung/Makefile | 2 - drivers/thermal/samsung/exynos_tmu.c | 266 ++++++++++++++++++++--------------- drivers/thermal/samsung/exynos_tmu.h | 51 ------- 3 files changed, 154 insertions(+), 165 deletions(-) diff --git a/drivers/thermal/samsung/Makefile b/drivers/thermal/samsung/Makefile index c09d830..1e47d0d 100644 --- a/drivers/thermal/samsung/Makefile +++ b/drivers/thermal/samsung/Makefile @@ -3,5 +3,3 @@ # obj-$(CONFIG_EXYNOS_THERMAL) += exynos_thermal.o exynos_thermal-y := exynos_tmu.o -exynos_thermal-y += exynos_tmu_data.o -exynos_thermal-$(CONFIG_EXYNOS_THERMAL_CORE) += exynos_thermal_common.o diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c index 1d6b1cb..e26042a 100644 --- a/drivers/thermal/samsung/exynos_tmu.c +++ b/drivers/thermal/samsung/exynos_tmu.c @@ -1,6 +1,10 @@ /* * exynos_tmu.c - Samsung EXYNOS TMU (Thermal Management Unit) * + * Copyright (C) 2014 Samsung Electronics + * Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> + * Lukasz Majewski <l.majewski@samsung.com> + * * Copyright (C) 2011 Samsung Electronics * Donggeun Kim <dg77.kim@samsung.com> * Amit Daniel Kachhap <amit.kachhap@linaro.org> @@ -31,8 +35,8 @@ #include <linux/platform_device.h> #include <linux/regulator/consumer.h> -#include "exynos_thermal_common.h" #include "exynos_tmu.h" +#include "../thermal_core.h" /* Exynos generic registers */ #define EXYNOS_TMU_REG_TRIMINFO 0x0 @@ -130,6 +134,7 @@ #define EXYNOS5440_TMU_TH_RISE4_SHIFT 24 #define EXYNOS5440_EFUSE_SWAP_OFFSET 8 +#define MCELSIUS 1000 /** * struct exynos_tmu_data : A structure to hold the private data of the TMU driver @@ -165,7 +170,8 @@ struct exynos_tmu_data { struct clk *clk, *clk_sec; u8 temp_error1, temp_error2; struct regulator *regulator; - struct thermal_sensor_conf *reg_conf; + struct thermal_zone_device *tzd; + int (*tmu_initialize)(struct platform_device *pdev); void (*tmu_control)(struct platform_device *pdev, bool on); int (*tmu_read)(struct exynos_tmu_data *data); @@ -174,6 +180,33 @@ struct exynos_tmu_data { void (*tmu_clear_irqs)(struct exynos_tmu_data *data); }; +static void exynos_report_trigger(struct exynos_tmu_data *p) +{ + char data[10], *envp[] = { data, NULL }; + struct thermal_zone_device *tz = p->tzd; + unsigned long temp; + unsigned int i; + + if (!p) { + pr_err("Wrong temperature configuration data\n"); + return; + } + + thermal_zone_device_update(tz); + + mutex_lock(&tz->lock); + /* Find the level for which trip happened */ + for (i = 0; i < of_thermal_get_ntrips(tz); i++) { + tz->ops->get_trip_temp(tz, i, &temp); + if (tz->last_temperature < temp) + break; + } + + snprintf(data, sizeof(data), "%u", i); + kobject_uevent_env(&tz->device.kobj, KOBJ_CHANGE, envp); + mutex_unlock(&tz->lock); +} + /* * TMU treats temperature as a mapped temperature code. * The temperature is converted differently depending on the calibration type. @@ -249,16 +282,22 @@ static void sanitize_temp_error(struct exynos_tmu_data *data, u32 trim_info) static u32 get_th_reg(struct exynos_tmu_data *data, u32 threshold, bool falling) { - struct exynos_tmu_platform_data *pdata = data->pdata; - int i; + struct thermal_zone_device *tz = data->tzd; + unsigned long temp, temp_hist; + int i, ret; - for (i = 0; i < pdata->non_hw_trigger_levels; i++) { - u8 temp = pdata->trigger_levels[i]; + for (i = 0; i < of_thermal_get_non_crit_ntrips(tz); i++) { + ret = tz->ops->get_trip_temp(tz, i, &temp); + if (ret) + return 0; - if (falling) - temp -= pdata->threshold_falling; - else + temp /= MCELSIUS; + if (falling) { + tz->ops->get_trip_hyst(tz, i, &temp_hist); + temp -= (temp_hist / MCELSIUS); + } else { threshold &= ~(0xff << 8 * i); + } threshold |= temp_to_code(data, temp) << 8 * i; } @@ -320,9 +359,10 @@ static void exynos_tmu_control(struct platform_device *pdev, bool on) static int exynos4210_tmu_initialize(struct platform_device *pdev) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); - struct exynos_tmu_platform_data *pdata = data->pdata; - unsigned int status; + struct thermal_zone_device *tz = data->tzd; int ret = 0, threshold_code, i; + unsigned long reference, temp; + unsigned int status; status = readb(data->base + EXYNOS_TMU_REG_STATUS); if (!status) { @@ -333,12 +373,21 @@ static int exynos4210_tmu_initialize(struct platform_device *pdev) sanitize_temp_error(data, readl(data->base + EXYNOS_TMU_REG_TRIMINFO)); /* Write temperature code for threshold */ - threshold_code = temp_to_code(data, pdata->threshold); + tz->ops->get_trip_temp(tz, 0, &reference); + reference /= MCELSIUS; + threshold_code = temp_to_code(data, reference); + if (threshold_code < 0) { + ret = threshold_code; + goto out; + } writeb(threshold_code, data->base + EXYNOS4210_TMU_REG_THRESHOLD_TEMP); - for (i = 0; i < pdata->non_hw_trigger_levels; i++) - writeb(pdata->trigger_levels[i], data->base + + for (i = 0; i < of_thermal_get_non_crit_ntrips(tz); i++) { + tz->ops->get_trip_temp(tz, i, &temp); + temp /= MCELSIUS; + writeb(temp - reference, data->base + EXYNOS4210_TMU_REG_TRIG_LEVEL0 + i * 4); + } writel(EXYNOS4210_TMU_TRIG_LEVEL_MASK, data->base + EXYNOS_TMU_REG_INTCLEAR); @@ -349,9 +398,9 @@ out: static int exynos4412_tmu_initialize(struct platform_device *pdev) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); - struct exynos_tmu_platform_data *pdata = data->pdata; unsigned int status, trim_info, con, ctrl, rising_threshold; int ret = 0, threshold_code, i; + unsigned long crit_temp = 0; status = readb(data->base + EXYNOS_TMU_REG_STATUS); if (!status) { @@ -401,9 +450,9 @@ static int exynos4412_tmu_initialize(struct platform_device *pdev) data->base + EXYNOS_TMU_REG_INTCLEAR); /* if last threshold limit is also present */ - i = pdata->max_trigger_level - 1; - if (pdata->trigger_levels[i] && pdata->trigger_type[i] == HW_TRIP) { - threshold_code = temp_to_code(data, pdata->trigger_levels[i]); + i = of_thermal_get_non_crit_ntrips(data->tzd); + if (!data->tzd->ops->get_crit_temp(data->tzd, &crit_temp)) { + threshold_code = temp_to_code(data, crit_temp / MCELSIUS); /* 1-4 level to be assigned in th0 reg */ rising_threshold &= ~(0xff << 8 * i); rising_threshold |= threshold_code << 8 * i; @@ -419,9 +468,9 @@ out: static int exynos5440_tmu_initialize(struct platform_device *pdev) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); - struct exynos_tmu_platform_data *pdata = data->pdata; unsigned int trim_info = 0, con, rising_threshold; - int ret = 0, threshold_code, i; + int ret = 0, threshold_code; + unsigned long crit_temp = 0; /* * For exynos5440 soc triminfo value is swapped between TMU0 and @@ -452,9 +501,8 @@ static int exynos5440_tmu_initialize(struct platform_device *pdev) data->base + EXYNOS5440_TMU_S0_7_IRQ); /* if last threshold limit is also present */ - i = pdata->max_trigger_level - 1; - if (pdata->trigger_levels[i] && pdata->trigger_type[i] == HW_TRIP) { - threshold_code = temp_to_code(data, pdata->trigger_levels[i]); + if (!data->tzd->ops->get_crit_temp(data->tzd, &crit_temp)) { + threshold_code = temp_to_code(data, crit_temp / MCELSIUS); /* 5th level to be assigned in th2 reg */ rising_threshold = threshold_code << EXYNOS5440_TMU_TH_RISE4_SHIFT; @@ -472,7 +520,7 @@ static int exynos5440_tmu_initialize(struct platform_device *pdev) static void exynos4210_tmu_control(struct platform_device *pdev, bool on) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); - struct exynos_tmu_platform_data *pdata = data->pdata; + struct thermal_zone_device *tz = data->tzd; unsigned int con, interrupt_en; con = get_con_reg(data, readl(data->base + EXYNOS_TMU_REG_CONTROL)); @@ -480,10 +528,11 @@ static void exynos4210_tmu_control(struct platform_device *pdev, bool on) if (on) { con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT); interrupt_en = - pdata->trigger_enable[3] << EXYNOS_TMU_INTEN_RISE3_SHIFT | - pdata->trigger_enable[2] << EXYNOS_TMU_INTEN_RISE2_SHIFT | - pdata->trigger_enable[1] << EXYNOS_TMU_INTEN_RISE1_SHIFT | - pdata->trigger_enable[0] << EXYNOS_TMU_INTEN_RISE0_SHIFT; + of_thermal_is_trip_en(tz, 3) << EXYNOS_TMU_INTEN_RISE3_SHIFT | + of_thermal_is_trip_en(tz, 2) << EXYNOS_TMU_INTEN_RISE2_SHIFT | + of_thermal_is_trip_en(tz, 1) << EXYNOS_TMU_INTEN_RISE1_SHIFT | + of_thermal_is_trip_en(tz, 0) << EXYNOS_TMU_INTEN_RISE0_SHIFT; + if (data->soc != SOC_ARCH_EXYNOS4210) interrupt_en |= interrupt_en << EXYNOS_TMU_INTEN_FALL0_SHIFT; @@ -498,7 +547,7 @@ static void exynos4210_tmu_control(struct platform_device *pdev, bool on) static void exynos5440_tmu_control(struct platform_device *pdev, bool on) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); - struct exynos_tmu_platform_data *pdata = data->pdata; + struct thermal_zone_device *tz = data->tzd; unsigned int con, interrupt_en; con = get_con_reg(data, readl(data->base + EXYNOS5440_TMU_S0_7_CTRL)); @@ -506,10 +555,10 @@ static void exynos5440_tmu_control(struct platform_device *pdev, bool on) if (on) { con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT); interrupt_en = - pdata->trigger_enable[3] << EXYNOS5440_TMU_INTEN_RISE3_SHIFT | - pdata->trigger_enable[2] << EXYNOS5440_TMU_INTEN_RISE2_SHIFT | - pdata->trigger_enable[1] << EXYNOS5440_TMU_INTEN_RISE1_SHIFT | - pdata->trigger_enable[0] << EXYNOS5440_TMU_INTEN_RISE0_SHIFT; + of_thermal_is_trip_en(tz, 3) << EXYNOS5440_TMU_INTEN_RISE3_SHIFT | + of_thermal_is_trip_en(tz, 2) << EXYNOS5440_TMU_INTEN_RISE2_SHIFT | + of_thermal_is_trip_en(tz, 1) << EXYNOS5440_TMU_INTEN_RISE1_SHIFT | + of_thermal_is_trip_en(tz, 0) << EXYNOS5440_TMU_INTEN_RISE0_SHIFT; interrupt_en |= interrupt_en << EXYNOS5440_TMU_INTEN_FALL0_SHIFT; } else { con &= ~(1 << EXYNOS_TMU_CORE_EN_SHIFT); @@ -519,19 +568,21 @@ static void exynos5440_tmu_control(struct platform_device *pdev, bool on) writel(con, data->base + EXYNOS5440_TMU_S0_7_CTRL); } -static int exynos_tmu_read(struct exynos_tmu_data *data) +int exynos_get_temp(void *p, long *temp) { - int ret; + struct exynos_tmu_data *data = p; + if (!data) + return -EINVAL; mutex_lock(&data->lock); clk_enable(data->clk); - ret = data->tmu_read(data); - if (ret >= 0) - ret = code_to_temp(data, ret); + + *temp = code_to_temp(data, data->tmu_read(data)) * MCELSIUS; + clk_disable(data->clk); mutex_unlock(&data->lock); - return ret; + return 0; } #ifdef CONFIG_THERMAL_EMULATION @@ -643,7 +694,7 @@ static void exynos_tmu_work(struct work_struct *work) if (!IS_ERR(data->clk_sec)) clk_disable(data->clk_sec); - exynos_report_trigger(data->reg_conf); + exynos_report_trigger(data); mutex_lock(&data->lock); clk_enable(data->clk); /* TODO: take action based on particular interrupt */ @@ -694,55 +745,63 @@ static irqreturn_t exynos_tmu_irq(int irq, void *id) static const struct of_device_id exynos_tmu_match[] = { { .compatible = "samsung,exynos3250-tmu", - .data = &exynos3250_default_tmu_data, }, { .compatible = "samsung,exynos4210-tmu", - .data = &exynos4210_default_tmu_data, }, { .compatible = "samsung,exynos4412-tmu", - .data = &exynos4412_default_tmu_data, }, { .compatible = "samsung,exynos5250-tmu", - .data = &exynos5250_default_tmu_data, }, { .compatible = "samsung,exynos5260-tmu", - .data = &exynos5260_default_tmu_data, }, { .compatible = "samsung,exynos5420-tmu", - .data = &exynos5420_default_tmu_data, }, { .compatible = "samsung,exynos5420-tmu-ext-triminfo", - .data = &exynos5420_default_tmu_data, }, { .compatible = "samsung,exynos5440-tmu", - .data = &exynos5440_default_tmu_data, }, {}, }; MODULE_DEVICE_TABLE(of, exynos_tmu_match); -static inline struct exynos_tmu_platform_data *exynos_get_driver_data( - struct platform_device *pdev, int id) +static int exynos_of_sensor_conf(struct device_node *np, + struct exynos_tmu_platform_data *pdata) { - struct exynos_tmu_init_data *data_table; - struct exynos_tmu_platform_data *tmu_data; - const struct of_device_id *match; - - match = of_match_node(exynos_tmu_match, pdev->dev.of_node); - if (!match) - return NULL; - data_table = (struct exynos_tmu_init_data *) match->data; - if (!data_table || id >= data_table->tmu_count) - return NULL; - tmu_data = data_table->tmu_data; - return (struct exynos_tmu_platform_data *) (tmu_data + id); + u32 value; + int ret; + + of_node_get(np); + + ret = of_property_read_u32(np, "gain", &value); + pdata->gain = (u8) value; + of_property_read_u32(np, "reference_voltage", &value); + pdata->reference_voltage = (u8) value; + of_property_read_u32(np, "noise_cancel_mode", &value); + pdata->noise_cancel_mode = (u8) value;; + + of_property_read_u32(np, "efuse_value", &pdata->efuse_value); + of_property_read_u32(np, "min_efuse_value", &pdata->min_efuse_value); + of_property_read_u32(np, "max_efuse_value", &pdata->max_efuse_value); + + of_property_read_u32(np, "first_point_trim", &value); + pdata->first_point_trim = (u8) value; + of_property_read_u32(np, "second_point_trim", &value); + pdata->second_point_trim = (u8) value; + of_property_read_u32(np, "default_temp_offset", &value); + pdata->default_temp_offset = (u8) value; + + of_property_read_u32(np, "cal_type", &pdata->cal_type); + of_property_read_u32(np, "type", &pdata->type); + + of_node_put(np); + return 0; } static int exynos_map_dt_data(struct platform_device *pdev) @@ -792,12 +851,13 @@ static int exynos_map_dt_data(struct platform_device *pdev) return -EADDRNOTAVAIL; } - pdata = exynos_get_driver_data(pdev, data->id); - if (!pdata) { - dev_err(&pdev->dev, "No platform init data supplied.\n"); - return -ENODEV; - } + pdata = devm_kzalloc(&pdev->dev, + sizeof(struct exynos_tmu_platform_data), + GFP_KERNEL); + if (!pdata) + return -ENOMEM; + exynos_of_sensor_conf(pdev->dev.of_node, pdata); data->pdata = pdata; data->soc = pdata->type; @@ -857,10 +917,9 @@ static int exynos_map_dt_data(struct platform_device *pdev) static int exynos_tmu_probe(struct platform_device *pdev) { - struct exynos_tmu_data *data; struct exynos_tmu_platform_data *pdata; - struct thermal_sensor_conf *sensor_conf; - int ret, i; + struct exynos_tmu_data *data; + int ret; data = devm_kzalloc(&pdev->dev, sizeof(struct exynos_tmu_data), GFP_KERNEL); @@ -870,9 +929,16 @@ static int exynos_tmu_probe(struct platform_device *pdev) platform_set_drvdata(pdev, data); mutex_init(&data->lock); + data->tzd = thermal_zone_of_sensor_register(&pdev->dev, 0, data, + exynos_get_temp, NULL, + exynos_tmu_set_emulation); + if (IS_ERR(data->tzd)) { + pr_err("thermal: tz: %p ERROR\n", data->tzd); + return PTR_ERR(data->tzd); + } ret = exynos_map_dt_data(pdev); if (ret) - return ret; + goto err_sensor; pdata = data->pdata; @@ -881,20 +947,22 @@ static int exynos_tmu_probe(struct platform_device *pdev) data->clk = devm_clk_get(&pdev->dev, "tmu_apbif"); if (IS_ERR(data->clk)) { dev_err(&pdev->dev, "Failed to get clock\n"); - return PTR_ERR(data->clk); + ret = PTR_ERR(data->clk); + goto err_sensor; } data->clk_sec = devm_clk_get(&pdev->dev, "tmu_triminfo_apbif"); if (IS_ERR(data->clk_sec)) { if (data->soc == SOC_ARCH_EXYNOS5420_TRIMINFO) { dev_err(&pdev->dev, "Failed to get triminfo clock\n"); - return PTR_ERR(data->clk_sec); + ret = PTR_ERR(data->clk_sec); + goto err_sensor; } } else { ret = clk_prepare(data->clk_sec); if (ret) { dev_err(&pdev->dev, "Failed to get clock\n"); - return ret; + goto err_sensor; } } @@ -910,42 +978,6 @@ static int exynos_tmu_probe(struct platform_device *pdev) goto err_clk; } - exynos_tmu_control(pdev, true); - - /* Allocate a structure to register with the exynos core thermal */ - sensor_conf = devm_kzalloc(&pdev->dev, - sizeof(struct thermal_sensor_conf), GFP_KERNEL); - if (!sensor_conf) { - ret = -ENOMEM; - goto err_clk; - } - sprintf(sensor_conf->name, "therm_zone%d", data->id); - sensor_conf->read_temperature = (int (*)(void *))exynos_tmu_read; - sensor_conf->write_emul_temp = - (int (*)(void *, unsigned long))exynos_tmu_set_emulation; - sensor_conf->driver_data = data; - sensor_conf->trip_data.trip_count = pdata->trigger_enable[0] + - pdata->trigger_enable[1] + pdata->trigger_enable[2]+ - pdata->trigger_enable[3]; - - for (i = 0; i < sensor_conf->trip_data.trip_count; i++) { - sensor_conf->trip_data.trip_val[i] = - pdata->threshold + pdata->trigger_levels[i]; - sensor_conf->trip_data.trip_type[i] = - pdata->trigger_type[i]; - } - - sensor_conf->trip_data.trigger_falling = pdata->threshold_falling; - - sensor_conf->dev = &pdev->dev; - /* Register the sensor with thermal management interface */ - ret = exynos_register_thermal(sensor_conf); - if (ret) { - dev_err(&pdev->dev, "Failed to register thermal interface\n"); - goto err_clk; - } - data->reg_conf = sensor_conf; - ret = devm_request_irq(&pdev->dev, data->irq, exynos_tmu_irq, IRQF_TRIGGER_RISING | IRQF_SHARED, dev_name(&pdev->dev), data); if (ret) { @@ -953,21 +985,31 @@ static int exynos_tmu_probe(struct platform_device *pdev) goto err_clk; } + ret = exynos_tmu_initialize(pdev); + if (ret) { + dev_err(&pdev->dev, "Failed to initialize TMU\n"); + goto err_clk; + } + exynos_tmu_control(pdev, true); return 0; + err_clk: clk_unprepare(data->clk); err_clk_sec: if (!IS_ERR(data->clk_sec)) clk_unprepare(data->clk_sec); +err_sensor: + thermal_zone_of_sensor_unregister(&pdev->dev, data->tzd); + return ret; } static int exynos_tmu_remove(struct platform_device *pdev) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); + struct thermal_zone_device *tzd = data->tzd; - exynos_unregister_thermal(data->reg_conf); - + thermal_zone_of_sensor_unregister(&pdev->dev, tzd); exynos_tmu_control(pdev, false); clk_unprepare(data->clk); diff --git a/drivers/thermal/samsung/exynos_tmu.h b/drivers/thermal/samsung/exynos_tmu.h index 1e87f0f..6f176ef 100644 --- a/drivers/thermal/samsung/exynos_tmu.h +++ b/drivers/thermal/samsung/exynos_tmu.h @@ -24,40 +24,10 @@ #define _EXYNOS_TMU_H #include <linux/cpu_cooling.h> -#include "exynos_thermal_common.h" - #include <dt-bindings/thermal/thermal_exynos.h> /** * struct exynos_tmu_platform_data - * @threshold: basic temperature for generating interrupt - * 25 <= threshold <= 125 [unit: degree Celsius] - * @threshold_falling: differntial value for setting threshold - * of temperature falling interrupt. - * @trigger_levels: array for each interrupt levels - * [unit: degree Celsius] - * 0: temperature for trigger_level0 interrupt - * condition for trigger_level0 interrupt: - * current temperature > threshold + trigger_levels[0] - * 1: temperature for trigger_level1 interrupt - * condition for trigger_level1 interrupt: - * current temperature > threshold + trigger_levels[1] - * 2: temperature for trigger_level2 interrupt - * condition for trigger_level2 interrupt: - * current temperature > threshold + trigger_levels[2] - * 3: temperature for trigger_level3 interrupt - * condition for trigger_level3 interrupt: - * current temperature > threshold + trigger_levels[3] - * @trigger_type: defines the type of trigger. Possible values are, - * THROTTLE_ACTIVE trigger type - * THROTTLE_PASSIVE trigger type - * SW_TRIP trigger type - * HW_TRIP - * @trigger_enable[]: array to denote which trigger levels are enabled. - * 1 = enable trigger_level[] interrupt, - * 0 = disable trigger_level[] interrupt - * @max_trigger_level: max trigger level supported by the TMU - * @non_hw_trigger_levels: number of defined non-hardware trigger levels * @gain: gain of amplifier in the positive-TC generator block * 0 < gain <= 15 * @reference_voltage: reference voltage of amplifier @@ -69,21 +39,12 @@ * @efuse_value: platform defined fuse value * @min_efuse_value: minimum valid trimming data * @max_efuse_value: maximum valid trimming data - * @first_point_trim: temp value of the first point trimming - * @second_point_trim: temp value of the second point trimming * @default_temp_offset: default temperature offset in case of no trimming * @cal_type: calibration type for temperature * * This structure is required for configuration of exynos_tmu driver. */ struct exynos_tmu_platform_data { - u8 threshold; - u8 threshold_falling; - u8 trigger_levels[MAX_TRIP_COUNT]; - enum trigger_type trigger_type[MAX_TRIP_COUNT]; - bool trigger_enable[MAX_TRIP_COUNT]; - u8 max_trigger_level; - u8 non_hw_trigger_levels; u8 gain; u8 reference_voltage; u8 noise_cancel_mode; @@ -99,18 +60,6 @@ struct exynos_tmu_platform_data { u32 type; }; -/** - * struct exynos_tmu_init_data - * @tmu_count: number of TMU instances. - * @tmu_data: platform data of all TMU instances. - * This structure is required to store data for multi-instance exynos tmu - * driver. - */ -struct exynos_tmu_init_data { - int tmu_count; - struct exynos_tmu_platform_data tmu_data[]; -}; - extern struct exynos_tmu_init_data const exynos3250_default_tmu_data; extern struct exynos_tmu_init_data const exynos4210_default_tmu_data; extern struct exynos_tmu_init_data const exynos4412_default_tmu_data; -- 2.0.0.rc2
WARNING: multiple messages have this Message-ID (diff)
From: l.majewski@samsung.com (Lukasz Majewski) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 17/21] thermal: samsung: core: Exynos TMU rework to use device tree for configuration Date: Thu, 09 Oct 2014 18:38:53 +0200 [thread overview] Message-ID: <1412872737-624-18-git-send-email-l.majewski@samsung.com> (raw) In-Reply-To: <1412872737-624-1-git-send-email-l.majewski@samsung.com> This patch brings support for providing configuration via device tree. Previously, data hardcoded in the exynos_tmu_data.c file was used, which is not scalable and error prone. Signed-off-by: Lukasz Majewski <l.majewski@samsung.com> --- drivers/thermal/samsung/Makefile | 2 - drivers/thermal/samsung/exynos_tmu.c | 266 ++++++++++++++++++++--------------- drivers/thermal/samsung/exynos_tmu.h | 51 ------- 3 files changed, 154 insertions(+), 165 deletions(-) diff --git a/drivers/thermal/samsung/Makefile b/drivers/thermal/samsung/Makefile index c09d830..1e47d0d 100644 --- a/drivers/thermal/samsung/Makefile +++ b/drivers/thermal/samsung/Makefile @@ -3,5 +3,3 @@ # obj-$(CONFIG_EXYNOS_THERMAL) += exynos_thermal.o exynos_thermal-y := exynos_tmu.o -exynos_thermal-y += exynos_tmu_data.o -exynos_thermal-$(CONFIG_EXYNOS_THERMAL_CORE) += exynos_thermal_common.o diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c index 1d6b1cb..e26042a 100644 --- a/drivers/thermal/samsung/exynos_tmu.c +++ b/drivers/thermal/samsung/exynos_tmu.c @@ -1,6 +1,10 @@ /* * exynos_tmu.c - Samsung EXYNOS TMU (Thermal Management Unit) * + * Copyright (C) 2014 Samsung Electronics + * Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> + * Lukasz Majewski <l.majewski@samsung.com> + * * Copyright (C) 2011 Samsung Electronics * Donggeun Kim <dg77.kim@samsung.com> * Amit Daniel Kachhap <amit.kachhap@linaro.org> @@ -31,8 +35,8 @@ #include <linux/platform_device.h> #include <linux/regulator/consumer.h> -#include "exynos_thermal_common.h" #include "exynos_tmu.h" +#include "../thermal_core.h" /* Exynos generic registers */ #define EXYNOS_TMU_REG_TRIMINFO 0x0 @@ -130,6 +134,7 @@ #define EXYNOS5440_TMU_TH_RISE4_SHIFT 24 #define EXYNOS5440_EFUSE_SWAP_OFFSET 8 +#define MCELSIUS 1000 /** * struct exynos_tmu_data : A structure to hold the private data of the TMU driver @@ -165,7 +170,8 @@ struct exynos_tmu_data { struct clk *clk, *clk_sec; u8 temp_error1, temp_error2; struct regulator *regulator; - struct thermal_sensor_conf *reg_conf; + struct thermal_zone_device *tzd; + int (*tmu_initialize)(struct platform_device *pdev); void (*tmu_control)(struct platform_device *pdev, bool on); int (*tmu_read)(struct exynos_tmu_data *data); @@ -174,6 +180,33 @@ struct exynos_tmu_data { void (*tmu_clear_irqs)(struct exynos_tmu_data *data); }; +static void exynos_report_trigger(struct exynos_tmu_data *p) +{ + char data[10], *envp[] = { data, NULL }; + struct thermal_zone_device *tz = p->tzd; + unsigned long temp; + unsigned int i; + + if (!p) { + pr_err("Wrong temperature configuration data\n"); + return; + } + + thermal_zone_device_update(tz); + + mutex_lock(&tz->lock); + /* Find the level for which trip happened */ + for (i = 0; i < of_thermal_get_ntrips(tz); i++) { + tz->ops->get_trip_temp(tz, i, &temp); + if (tz->last_temperature < temp) + break; + } + + snprintf(data, sizeof(data), "%u", i); + kobject_uevent_env(&tz->device.kobj, KOBJ_CHANGE, envp); + mutex_unlock(&tz->lock); +} + /* * TMU treats temperature as a mapped temperature code. * The temperature is converted differently depending on the calibration type. @@ -249,16 +282,22 @@ static void sanitize_temp_error(struct exynos_tmu_data *data, u32 trim_info) static u32 get_th_reg(struct exynos_tmu_data *data, u32 threshold, bool falling) { - struct exynos_tmu_platform_data *pdata = data->pdata; - int i; + struct thermal_zone_device *tz = data->tzd; + unsigned long temp, temp_hist; + int i, ret; - for (i = 0; i < pdata->non_hw_trigger_levels; i++) { - u8 temp = pdata->trigger_levels[i]; + for (i = 0; i < of_thermal_get_non_crit_ntrips(tz); i++) { + ret = tz->ops->get_trip_temp(tz, i, &temp); + if (ret) + return 0; - if (falling) - temp -= pdata->threshold_falling; - else + temp /= MCELSIUS; + if (falling) { + tz->ops->get_trip_hyst(tz, i, &temp_hist); + temp -= (temp_hist / MCELSIUS); + } else { threshold &= ~(0xff << 8 * i); + } threshold |= temp_to_code(data, temp) << 8 * i; } @@ -320,9 +359,10 @@ static void exynos_tmu_control(struct platform_device *pdev, bool on) static int exynos4210_tmu_initialize(struct platform_device *pdev) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); - struct exynos_tmu_platform_data *pdata = data->pdata; - unsigned int status; + struct thermal_zone_device *tz = data->tzd; int ret = 0, threshold_code, i; + unsigned long reference, temp; + unsigned int status; status = readb(data->base + EXYNOS_TMU_REG_STATUS); if (!status) { @@ -333,12 +373,21 @@ static int exynos4210_tmu_initialize(struct platform_device *pdev) sanitize_temp_error(data, readl(data->base + EXYNOS_TMU_REG_TRIMINFO)); /* Write temperature code for threshold */ - threshold_code = temp_to_code(data, pdata->threshold); + tz->ops->get_trip_temp(tz, 0, &reference); + reference /= MCELSIUS; + threshold_code = temp_to_code(data, reference); + if (threshold_code < 0) { + ret = threshold_code; + goto out; + } writeb(threshold_code, data->base + EXYNOS4210_TMU_REG_THRESHOLD_TEMP); - for (i = 0; i < pdata->non_hw_trigger_levels; i++) - writeb(pdata->trigger_levels[i], data->base + + for (i = 0; i < of_thermal_get_non_crit_ntrips(tz); i++) { + tz->ops->get_trip_temp(tz, i, &temp); + temp /= MCELSIUS; + writeb(temp - reference, data->base + EXYNOS4210_TMU_REG_TRIG_LEVEL0 + i * 4); + } writel(EXYNOS4210_TMU_TRIG_LEVEL_MASK, data->base + EXYNOS_TMU_REG_INTCLEAR); @@ -349,9 +398,9 @@ out: static int exynos4412_tmu_initialize(struct platform_device *pdev) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); - struct exynos_tmu_platform_data *pdata = data->pdata; unsigned int status, trim_info, con, ctrl, rising_threshold; int ret = 0, threshold_code, i; + unsigned long crit_temp = 0; status = readb(data->base + EXYNOS_TMU_REG_STATUS); if (!status) { @@ -401,9 +450,9 @@ static int exynos4412_tmu_initialize(struct platform_device *pdev) data->base + EXYNOS_TMU_REG_INTCLEAR); /* if last threshold limit is also present */ - i = pdata->max_trigger_level - 1; - if (pdata->trigger_levels[i] && pdata->trigger_type[i] == HW_TRIP) { - threshold_code = temp_to_code(data, pdata->trigger_levels[i]); + i = of_thermal_get_non_crit_ntrips(data->tzd); + if (!data->tzd->ops->get_crit_temp(data->tzd, &crit_temp)) { + threshold_code = temp_to_code(data, crit_temp / MCELSIUS); /* 1-4 level to be assigned in th0 reg */ rising_threshold &= ~(0xff << 8 * i); rising_threshold |= threshold_code << 8 * i; @@ -419,9 +468,9 @@ out: static int exynos5440_tmu_initialize(struct platform_device *pdev) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); - struct exynos_tmu_platform_data *pdata = data->pdata; unsigned int trim_info = 0, con, rising_threshold; - int ret = 0, threshold_code, i; + int ret = 0, threshold_code; + unsigned long crit_temp = 0; /* * For exynos5440 soc triminfo value is swapped between TMU0 and @@ -452,9 +501,8 @@ static int exynos5440_tmu_initialize(struct platform_device *pdev) data->base + EXYNOS5440_TMU_S0_7_IRQ); /* if last threshold limit is also present */ - i = pdata->max_trigger_level - 1; - if (pdata->trigger_levels[i] && pdata->trigger_type[i] == HW_TRIP) { - threshold_code = temp_to_code(data, pdata->trigger_levels[i]); + if (!data->tzd->ops->get_crit_temp(data->tzd, &crit_temp)) { + threshold_code = temp_to_code(data, crit_temp / MCELSIUS); /* 5th level to be assigned in th2 reg */ rising_threshold = threshold_code << EXYNOS5440_TMU_TH_RISE4_SHIFT; @@ -472,7 +520,7 @@ static int exynos5440_tmu_initialize(struct platform_device *pdev) static void exynos4210_tmu_control(struct platform_device *pdev, bool on) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); - struct exynos_tmu_platform_data *pdata = data->pdata; + struct thermal_zone_device *tz = data->tzd; unsigned int con, interrupt_en; con = get_con_reg(data, readl(data->base + EXYNOS_TMU_REG_CONTROL)); @@ -480,10 +528,11 @@ static void exynos4210_tmu_control(struct platform_device *pdev, bool on) if (on) { con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT); interrupt_en = - pdata->trigger_enable[3] << EXYNOS_TMU_INTEN_RISE3_SHIFT | - pdata->trigger_enable[2] << EXYNOS_TMU_INTEN_RISE2_SHIFT | - pdata->trigger_enable[1] << EXYNOS_TMU_INTEN_RISE1_SHIFT | - pdata->trigger_enable[0] << EXYNOS_TMU_INTEN_RISE0_SHIFT; + of_thermal_is_trip_en(tz, 3) << EXYNOS_TMU_INTEN_RISE3_SHIFT | + of_thermal_is_trip_en(tz, 2) << EXYNOS_TMU_INTEN_RISE2_SHIFT | + of_thermal_is_trip_en(tz, 1) << EXYNOS_TMU_INTEN_RISE1_SHIFT | + of_thermal_is_trip_en(tz, 0) << EXYNOS_TMU_INTEN_RISE0_SHIFT; + if (data->soc != SOC_ARCH_EXYNOS4210) interrupt_en |= interrupt_en << EXYNOS_TMU_INTEN_FALL0_SHIFT; @@ -498,7 +547,7 @@ static void exynos4210_tmu_control(struct platform_device *pdev, bool on) static void exynos5440_tmu_control(struct platform_device *pdev, bool on) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); - struct exynos_tmu_platform_data *pdata = data->pdata; + struct thermal_zone_device *tz = data->tzd; unsigned int con, interrupt_en; con = get_con_reg(data, readl(data->base + EXYNOS5440_TMU_S0_7_CTRL)); @@ -506,10 +555,10 @@ static void exynos5440_tmu_control(struct platform_device *pdev, bool on) if (on) { con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT); interrupt_en = - pdata->trigger_enable[3] << EXYNOS5440_TMU_INTEN_RISE3_SHIFT | - pdata->trigger_enable[2] << EXYNOS5440_TMU_INTEN_RISE2_SHIFT | - pdata->trigger_enable[1] << EXYNOS5440_TMU_INTEN_RISE1_SHIFT | - pdata->trigger_enable[0] << EXYNOS5440_TMU_INTEN_RISE0_SHIFT; + of_thermal_is_trip_en(tz, 3) << EXYNOS5440_TMU_INTEN_RISE3_SHIFT | + of_thermal_is_trip_en(tz, 2) << EXYNOS5440_TMU_INTEN_RISE2_SHIFT | + of_thermal_is_trip_en(tz, 1) << EXYNOS5440_TMU_INTEN_RISE1_SHIFT | + of_thermal_is_trip_en(tz, 0) << EXYNOS5440_TMU_INTEN_RISE0_SHIFT; interrupt_en |= interrupt_en << EXYNOS5440_TMU_INTEN_FALL0_SHIFT; } else { con &= ~(1 << EXYNOS_TMU_CORE_EN_SHIFT); @@ -519,19 +568,21 @@ static void exynos5440_tmu_control(struct platform_device *pdev, bool on) writel(con, data->base + EXYNOS5440_TMU_S0_7_CTRL); } -static int exynos_tmu_read(struct exynos_tmu_data *data) +int exynos_get_temp(void *p, long *temp) { - int ret; + struct exynos_tmu_data *data = p; + if (!data) + return -EINVAL; mutex_lock(&data->lock); clk_enable(data->clk); - ret = data->tmu_read(data); - if (ret >= 0) - ret = code_to_temp(data, ret); + + *temp = code_to_temp(data, data->tmu_read(data)) * MCELSIUS; + clk_disable(data->clk); mutex_unlock(&data->lock); - return ret; + return 0; } #ifdef CONFIG_THERMAL_EMULATION @@ -643,7 +694,7 @@ static void exynos_tmu_work(struct work_struct *work) if (!IS_ERR(data->clk_sec)) clk_disable(data->clk_sec); - exynos_report_trigger(data->reg_conf); + exynos_report_trigger(data); mutex_lock(&data->lock); clk_enable(data->clk); /* TODO: take action based on particular interrupt */ @@ -694,55 +745,63 @@ static irqreturn_t exynos_tmu_irq(int irq, void *id) static const struct of_device_id exynos_tmu_match[] = { { .compatible = "samsung,exynos3250-tmu", - .data = &exynos3250_default_tmu_data, }, { .compatible = "samsung,exynos4210-tmu", - .data = &exynos4210_default_tmu_data, }, { .compatible = "samsung,exynos4412-tmu", - .data = &exynos4412_default_tmu_data, }, { .compatible = "samsung,exynos5250-tmu", - .data = &exynos5250_default_tmu_data, }, { .compatible = "samsung,exynos5260-tmu", - .data = &exynos5260_default_tmu_data, }, { .compatible = "samsung,exynos5420-tmu", - .data = &exynos5420_default_tmu_data, }, { .compatible = "samsung,exynos5420-tmu-ext-triminfo", - .data = &exynos5420_default_tmu_data, }, { .compatible = "samsung,exynos5440-tmu", - .data = &exynos5440_default_tmu_data, }, {}, }; MODULE_DEVICE_TABLE(of, exynos_tmu_match); -static inline struct exynos_tmu_platform_data *exynos_get_driver_data( - struct platform_device *pdev, int id) +static int exynos_of_sensor_conf(struct device_node *np, + struct exynos_tmu_platform_data *pdata) { - struct exynos_tmu_init_data *data_table; - struct exynos_tmu_platform_data *tmu_data; - const struct of_device_id *match; - - match = of_match_node(exynos_tmu_match, pdev->dev.of_node); - if (!match) - return NULL; - data_table = (struct exynos_tmu_init_data *) match->data; - if (!data_table || id >= data_table->tmu_count) - return NULL; - tmu_data = data_table->tmu_data; - return (struct exynos_tmu_platform_data *) (tmu_data + id); + u32 value; + int ret; + + of_node_get(np); + + ret = of_property_read_u32(np, "gain", &value); + pdata->gain = (u8) value; + of_property_read_u32(np, "reference_voltage", &value); + pdata->reference_voltage = (u8) value; + of_property_read_u32(np, "noise_cancel_mode", &value); + pdata->noise_cancel_mode = (u8) value;; + + of_property_read_u32(np, "efuse_value", &pdata->efuse_value); + of_property_read_u32(np, "min_efuse_value", &pdata->min_efuse_value); + of_property_read_u32(np, "max_efuse_value", &pdata->max_efuse_value); + + of_property_read_u32(np, "first_point_trim", &value); + pdata->first_point_trim = (u8) value; + of_property_read_u32(np, "second_point_trim", &value); + pdata->second_point_trim = (u8) value; + of_property_read_u32(np, "default_temp_offset", &value); + pdata->default_temp_offset = (u8) value; + + of_property_read_u32(np, "cal_type", &pdata->cal_type); + of_property_read_u32(np, "type", &pdata->type); + + of_node_put(np); + return 0; } static int exynos_map_dt_data(struct platform_device *pdev) @@ -792,12 +851,13 @@ static int exynos_map_dt_data(struct platform_device *pdev) return -EADDRNOTAVAIL; } - pdata = exynos_get_driver_data(pdev, data->id); - if (!pdata) { - dev_err(&pdev->dev, "No platform init data supplied.\n"); - return -ENODEV; - } + pdata = devm_kzalloc(&pdev->dev, + sizeof(struct exynos_tmu_platform_data), + GFP_KERNEL); + if (!pdata) + return -ENOMEM; + exynos_of_sensor_conf(pdev->dev.of_node, pdata); data->pdata = pdata; data->soc = pdata->type; @@ -857,10 +917,9 @@ static int exynos_map_dt_data(struct platform_device *pdev) static int exynos_tmu_probe(struct platform_device *pdev) { - struct exynos_tmu_data *data; struct exynos_tmu_platform_data *pdata; - struct thermal_sensor_conf *sensor_conf; - int ret, i; + struct exynos_tmu_data *data; + int ret; data = devm_kzalloc(&pdev->dev, sizeof(struct exynos_tmu_data), GFP_KERNEL); @@ -870,9 +929,16 @@ static int exynos_tmu_probe(struct platform_device *pdev) platform_set_drvdata(pdev, data); mutex_init(&data->lock); + data->tzd = thermal_zone_of_sensor_register(&pdev->dev, 0, data, + exynos_get_temp, NULL, + exynos_tmu_set_emulation); + if (IS_ERR(data->tzd)) { + pr_err("thermal: tz: %p ERROR\n", data->tzd); + return PTR_ERR(data->tzd); + } ret = exynos_map_dt_data(pdev); if (ret) - return ret; + goto err_sensor; pdata = data->pdata; @@ -881,20 +947,22 @@ static int exynos_tmu_probe(struct platform_device *pdev) data->clk = devm_clk_get(&pdev->dev, "tmu_apbif"); if (IS_ERR(data->clk)) { dev_err(&pdev->dev, "Failed to get clock\n"); - return PTR_ERR(data->clk); + ret = PTR_ERR(data->clk); + goto err_sensor; } data->clk_sec = devm_clk_get(&pdev->dev, "tmu_triminfo_apbif"); if (IS_ERR(data->clk_sec)) { if (data->soc == SOC_ARCH_EXYNOS5420_TRIMINFO) { dev_err(&pdev->dev, "Failed to get triminfo clock\n"); - return PTR_ERR(data->clk_sec); + ret = PTR_ERR(data->clk_sec); + goto err_sensor; } } else { ret = clk_prepare(data->clk_sec); if (ret) { dev_err(&pdev->dev, "Failed to get clock\n"); - return ret; + goto err_sensor; } } @@ -910,42 +978,6 @@ static int exynos_tmu_probe(struct platform_device *pdev) goto err_clk; } - exynos_tmu_control(pdev, true); - - /* Allocate a structure to register with the exynos core thermal */ - sensor_conf = devm_kzalloc(&pdev->dev, - sizeof(struct thermal_sensor_conf), GFP_KERNEL); - if (!sensor_conf) { - ret = -ENOMEM; - goto err_clk; - } - sprintf(sensor_conf->name, "therm_zone%d", data->id); - sensor_conf->read_temperature = (int (*)(void *))exynos_tmu_read; - sensor_conf->write_emul_temp = - (int (*)(void *, unsigned long))exynos_tmu_set_emulation; - sensor_conf->driver_data = data; - sensor_conf->trip_data.trip_count = pdata->trigger_enable[0] + - pdata->trigger_enable[1] + pdata->trigger_enable[2]+ - pdata->trigger_enable[3]; - - for (i = 0; i < sensor_conf->trip_data.trip_count; i++) { - sensor_conf->trip_data.trip_val[i] = - pdata->threshold + pdata->trigger_levels[i]; - sensor_conf->trip_data.trip_type[i] = - pdata->trigger_type[i]; - } - - sensor_conf->trip_data.trigger_falling = pdata->threshold_falling; - - sensor_conf->dev = &pdev->dev; - /* Register the sensor with thermal management interface */ - ret = exynos_register_thermal(sensor_conf); - if (ret) { - dev_err(&pdev->dev, "Failed to register thermal interface\n"); - goto err_clk; - } - data->reg_conf = sensor_conf; - ret = devm_request_irq(&pdev->dev, data->irq, exynos_tmu_irq, IRQF_TRIGGER_RISING | IRQF_SHARED, dev_name(&pdev->dev), data); if (ret) { @@ -953,21 +985,31 @@ static int exynos_tmu_probe(struct platform_device *pdev) goto err_clk; } + ret = exynos_tmu_initialize(pdev); + if (ret) { + dev_err(&pdev->dev, "Failed to initialize TMU\n"); + goto err_clk; + } + exynos_tmu_control(pdev, true); return 0; + err_clk: clk_unprepare(data->clk); err_clk_sec: if (!IS_ERR(data->clk_sec)) clk_unprepare(data->clk_sec); +err_sensor: + thermal_zone_of_sensor_unregister(&pdev->dev, data->tzd); + return ret; } static int exynos_tmu_remove(struct platform_device *pdev) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); + struct thermal_zone_device *tzd = data->tzd; - exynos_unregister_thermal(data->reg_conf); - + thermal_zone_of_sensor_unregister(&pdev->dev, tzd); exynos_tmu_control(pdev, false); clk_unprepare(data->clk); diff --git a/drivers/thermal/samsung/exynos_tmu.h b/drivers/thermal/samsung/exynos_tmu.h index 1e87f0f..6f176ef 100644 --- a/drivers/thermal/samsung/exynos_tmu.h +++ b/drivers/thermal/samsung/exynos_tmu.h @@ -24,40 +24,10 @@ #define _EXYNOS_TMU_H #include <linux/cpu_cooling.h> -#include "exynos_thermal_common.h" - #include <dt-bindings/thermal/thermal_exynos.h> /** * struct exynos_tmu_platform_data - * @threshold: basic temperature for generating interrupt - * 25 <= threshold <= 125 [unit: degree Celsius] - * @threshold_falling: differntial value for setting threshold - * of temperature falling interrupt. - * @trigger_levels: array for each interrupt levels - * [unit: degree Celsius] - * 0: temperature for trigger_level0 interrupt - * condition for trigger_level0 interrupt: - * current temperature > threshold + trigger_levels[0] - * 1: temperature for trigger_level1 interrupt - * condition for trigger_level1 interrupt: - * current temperature > threshold + trigger_levels[1] - * 2: temperature for trigger_level2 interrupt - * condition for trigger_level2 interrupt: - * current temperature > threshold + trigger_levels[2] - * 3: temperature for trigger_level3 interrupt - * condition for trigger_level3 interrupt: - * current temperature > threshold + trigger_levels[3] - * @trigger_type: defines the type of trigger. Possible values are, - * THROTTLE_ACTIVE trigger type - * THROTTLE_PASSIVE trigger type - * SW_TRIP trigger type - * HW_TRIP - * @trigger_enable[]: array to denote which trigger levels are enabled. - * 1 = enable trigger_level[] interrupt, - * 0 = disable trigger_level[] interrupt - * @max_trigger_level: max trigger level supported by the TMU - * @non_hw_trigger_levels: number of defined non-hardware trigger levels * @gain: gain of amplifier in the positive-TC generator block * 0 < gain <= 15 * @reference_voltage: reference voltage of amplifier @@ -69,21 +39,12 @@ * @efuse_value: platform defined fuse value * @min_efuse_value: minimum valid trimming data * @max_efuse_value: maximum valid trimming data - * @first_point_trim: temp value of the first point trimming - * @second_point_trim: temp value of the second point trimming * @default_temp_offset: default temperature offset in case of no trimming * @cal_type: calibration type for temperature * * This structure is required for configuration of exynos_tmu driver. */ struct exynos_tmu_platform_data { - u8 threshold; - u8 threshold_falling; - u8 trigger_levels[MAX_TRIP_COUNT]; - enum trigger_type trigger_type[MAX_TRIP_COUNT]; - bool trigger_enable[MAX_TRIP_COUNT]; - u8 max_trigger_level; - u8 non_hw_trigger_levels; u8 gain; u8 reference_voltage; u8 noise_cancel_mode; @@ -99,18 +60,6 @@ struct exynos_tmu_platform_data { u32 type; }; -/** - * struct exynos_tmu_init_data - * @tmu_count: number of TMU instances. - * @tmu_data: platform data of all TMU instances. - * This structure is required to store data for multi-instance exynos tmu - * driver. - */ -struct exynos_tmu_init_data { - int tmu_count; - struct exynos_tmu_platform_data tmu_data[]; -}; - extern struct exynos_tmu_init_data const exynos3250_default_tmu_data; extern struct exynos_tmu_init_data const exynos4210_default_tmu_data; extern struct exynos_tmu_init_data const exynos4412_default_tmu_data; -- 2.0.0.rc2
next prev parent reply other threads:[~2014-10-09 16:38 UTC|newest] Thread overview: 288+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-10-09 16:38 [PATCH 00/21] thermal: exynos: Thermal code rework to use device tree Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 01/21] thermal: of: Extend of-thermal.c to provide number of trip points Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-11-07 1:34 ` Eduardo Valentin 2014-11-07 1:34 ` Eduardo Valentin 2014-11-07 9:14 ` Lukasz Majewski 2014-11-07 9:14 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 02/21] thermal: of: Extend of-thermal.c to provide check if trip point is enabled Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-11-07 1:37 ` Eduardo Valentin 2014-11-07 1:37 ` Eduardo Valentin 2014-11-07 9:15 ` Lukasz Majewski 2014-11-07 9:15 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 03/21] thermal: of: Extend of-thermal.c to provide number of non critical trip points Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-11-07 1:41 ` Eduardo Valentin 2014-11-07 1:41 ` Eduardo Valentin 2014-11-07 10:05 ` Lukasz Majewski 2014-11-07 10:05 ` Lukasz Majewski 2014-11-07 16:06 ` Eduardo Valentin 2014-11-07 16:06 ` Eduardo Valentin 2014-11-07 16:43 ` Lukasz Majewski 2014-11-07 16:43 ` Lukasz Majewski 2014-11-12 9:42 ` Lukasz Majewski 2014-11-12 9:42 ` Lukasz Majewski 2014-11-18 15:20 ` Eduardo Valentin 2014-11-18 15:20 ` Eduardo Valentin 2014-11-18 20:25 ` Lukasz Majewski 2014-11-18 20:25 ` Lukasz Majewski 2014-11-07 23:04 ` Dmitry Torokhov 2014-11-07 23:04 ` Dmitry Torokhov 2014-10-09 16:38 ` [PATCH 04/21] thermal: of: Extend current of-thermal.c code to allow setting emulated temp Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-11-07 1:44 ` Eduardo Valentin 2014-11-07 1:44 ` Eduardo Valentin 2014-11-07 11:20 ` Lukasz Majewski 2014-11-07 11:20 ` Lukasz Majewski 2014-11-18 15:23 ` Eduardo Valentin 2014-11-18 15:23 ` Eduardo Valentin 2014-11-18 20:28 ` Lukasz Majewski 2014-11-18 20:28 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 05/21] thermal: exynos: cosmetic: Correct comment format Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 06/21] thermal: exynos: Provide thermal_exynos.h file to be included in device tree files Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 07/21] thermal: dts: trats: Enable TMU on the Exynos4210 trats device Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 08/21] thermal: dts: exynos: Adding LD010 regulator node necessary for TMU on Odroid U3 board Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 09/21] thermal: dts: Provide bindings and enable TMU at Exynos4x12 devices Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 10/21] thermal: cpu_cooling: dts: Define device tree bindings for Exynos cpu cooling functionality Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 11/21] thermal: cpu_cooling: Modify exynos thermal code to use device tree for cpu cooling configuration Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 12/21] thermal: exynos: dts: Add default definition for the TMU sensor Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 13/21] thermal: dts: Default trip points definition for Exynos5420 SoCs Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 14/21] thermal: exynos: dts: Define default thermal-zones for Exynos4 Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 15/21] thermal: dts: exynos: Trip points and sensor configuration data for Exynos5440 Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 16/21] thermal: exynos: dts: Provide device tree bindings identical to one in exynos_tmu_data.c Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski [this message] 2014-10-09 16:38 ` [PATCH 17/21] thermal: samsung: core: Exynos TMU rework to use device tree for configuration Lukasz Majewski 2014-10-09 16:38 ` [PATCH 18/21] thermal: exynos: Remove exynos_thermal_common.[c|h] files Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 19/21] thermal: exynos: Remove exynos_tmu_data.c file Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 20/21] thermal: exynos: Make Exynos5250 TMU compatible with Exynos4412 Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 16:38 ` [PATCH 21/21] thermal: exynos: Make Exynos3250 " Lukasz Majewski 2014-10-09 16:38 ` Lukasz Majewski 2014-10-09 23:34 ` Chanwoo Choi 2014-10-09 23:34 ` Chanwoo Choi 2014-10-10 8:51 ` Lukasz Majewski 2014-10-10 8:51 ` Lukasz Majewski 2014-10-23 8:50 ` [PATCH 00/21] thermal: exynos: Thermal code rework to use device tree Lukasz Majewski 2014-10-23 8:50 ` Lukasz Majewski 2014-11-20 16:21 ` [PATCH v2 0/4] thermal: of: of-thermal.c API extensions Lukasz Majewski 2014-11-20 16:21 ` [PATCH v2 1/4] thermal: of: Extend of-thermal.c to provide number of trip points Lukasz Majewski 2014-11-25 6:04 ` Eduardo Valentin 2014-11-26 8:28 ` Lukasz Majewski 2014-11-20 16:21 ` [PATCH v2 2/4] thermal: of: Extend of-thermal.c to provide check if trip point is enabled Lukasz Majewski 2014-11-25 8:25 ` Eduardo Valentin 2014-11-26 8:31 ` Lukasz Majewski 2014-11-20 16:21 ` [PATCH v2 3/4] thermal: of: Extend of-thermal to export table of trip points Lukasz Majewski 2014-11-25 20:36 ` Eduardo Valentin 2014-11-26 8:35 ` Lukasz Majewski 2014-11-26 15:18 ` Eduardo Valentin 2014-11-26 20:43 ` navneet kumar 2014-11-26 20:43 ` navneet kumar 2014-11-26 21:12 ` Guenter Roeck 2014-11-26 23:12 ` navneet kumar 2014-11-26 23:12 ` navneet kumar 2014-11-26 23:09 ` Eduardo Valentin 2014-11-27 9:42 ` Lukasz Majewski 2014-11-27 9:42 ` Lukasz Majewski 2014-11-25 20:38 ` Eduardo Valentin 2014-11-26 8:39 ` Lukasz Majewski 2014-11-20 16:21 ` [PATCH v2 4/4] thermal: of: Extend current of-thermal.c code to allow setting emulated temp Lukasz Majewski 2014-11-25 20:44 ` Eduardo Valentin 2014-11-26 8:47 ` Lukasz Majewski 2014-12-08 17:04 ` [PATCH v3 0/5] thermal: of: of-thermal.c API extensions Lukasz Majewski 2014-12-08 17:04 ` [PATCH v3 1/5] thermal: of: Extend of-thermal.c to provide number of trip points Lukasz Majewski 2014-12-08 19:52 ` Eduardo Valentin 2014-12-08 23:02 ` Lukasz Majewski 2014-12-08 17:04 ` [PATCH v3 2/5] thermal: of: Extend of-thermal.c to provide check if trip point is valid Lukasz Majewski 2014-12-08 17:04 ` [PATCH v3 3/5] thermal: of: Rename struct __thermal_trip to struct thermal_trip Lukasz Majewski 2014-12-08 17:04 ` [PATCH v3 4/5] thermal: of: Extend of-thermal to export table of trip points Lukasz Majewski 2014-12-08 17:04 ` [PATCH v3 5/5] thermal: of: Extend current of-thermal.c code to allow setting emulated temp Lukasz Majewski 2014-12-09 1:21 ` [PATCH v3 0/5] thermal: of: of-thermal.c API extensions Eduardo Valentin 2014-12-10 12:09 ` [PATCH v2 00/17] thermal: exynos: Thermal code rework to use device tree Lukasz Majewski 2014-12-10 10:27 ` Eduardo Valentin 2014-12-10 14:19 ` Lukasz Majewski 2014-12-22 15:50 ` Abhilash Kesavan 2014-12-22 16:21 ` Lukasz Majewski 2014-12-23 15:27 ` Abhilash Kesavan 2014-12-10 12:09 ` [PATCH v2 01/17] thermal: exynos: cosmetic: Correct comment format Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 02/17] thermal: exynos: Provide thermal_exynos.h file to be included in device tree files Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 03/17] thermal: dts: trats: Enable TMU on the Exynos4210 trats device Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 04/17] thermal: dts: exynos: Add LD010 regulator node necessary for TMU on Odroid Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 05/17] thermal: dts: Enable TMU at Exynos4412 based Odroid U3 device Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 06/17] thermal: cpu_cooling: dts: Define device tree bindings for Exynos cpu cooling functionality Lukasz Majewski 2015-01-02 18:15 ` Eduardo Valentin 2015-01-12 14:09 ` Lukasz Majewski 2015-01-12 14:24 ` Eduardo Valentin 2015-01-13 8:22 ` Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 07/17] thermal: cpu_cooling: Modify exynos thermal code to use device tree for cpu cooling configuration Lukasz Majewski 2015-01-02 18:18 ` Eduardo Valentin 2015-01-12 17:08 ` Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 08/17] thermal: exynos: dts: Add default definition of the TMU sensor parameter Lukasz Majewski 2015-01-02 18:11 ` Eduardo Valentin 2015-01-02 18:26 ` Eduardo Valentin 2015-01-12 14:42 ` Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 09/17] thermal: dts: Default trip points definition for Exynos5420 SoCs Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 10/17] thermal: exynos: dts: Define default thermal-zones for Exynos4 Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 11/17] thermal: dts: exynos: Trip points and sensor configuration data for Exynos5440 Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 12/17] thermal: exynos: dts: Provide device tree bindings identical to one in exynos_tmu_data.c Lukasz Majewski 2015-01-02 18:13 ` Eduardo Valentin 2015-01-12 15:36 ` Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 13/17] thermal: samsung: core: Exynos TMU rework to use device tree for configuration Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 14/17] thermal: exynos: Remove exynos_thermal_common.[c|h] files Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 15/17] thermal: exynos: Remove exynos_tmu_data.c file Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 16/17] thermal: exynos: Make Exynos5250 TMU compatible with Exynos4412 Lukasz Majewski 2014-12-10 12:09 ` [PATCH v2 17/17] thermal: exynos: Make Exynos3250 " Lukasz Majewski 2015-01-02 18:25 ` [PATCH v2 00/17] thermal: exynos: Thermal code rework to use device tree Eduardo Valentin 2015-01-03 19:53 ` Lukasz Majewski 2015-01-05 21:11 ` Eduardo Valentin 2015-01-14 13:40 ` [PATCH v3 00/16] " Lukasz Majewski 2015-01-14 13:40 ` [PATCH v3 01/16] thermal: exynos: cosmetic: Correct comment format Lukasz Majewski 2015-01-14 13:41 ` [PATCH v3 02/16] thermal: exynos: Provide thermal_exynos.h file to be included in device tree files Lukasz Majewski 2015-01-14 13:41 ` [PATCH v3 03/16] arm: dts: trats: Enable TMU on the Exynos4210 trats device Lukasz Majewski 2015-01-14 13:41 ` [PATCH v3 04/16] arm: dts: odroid: Add LD010 regulator node necessary for TMU on Odroid Lukasz Majewski 2015-01-14 13:41 ` [PATCH v3 05/16] thermal: dts: Enable TMU at Exynos4412 based Odroid U3 device Lukasz Majewski 2015-01-14 18:48 ` Eduardo Valentin 2015-01-14 13:41 ` [PATCH v3 06/16] arm: dts: Adding CPU cooling binding for Exynos SoCs Lukasz Majewski 2015-01-14 18:57 ` Eduardo Valentin 2015-01-14 13:41 ` [PATCH v3 07/16] thermal: exynos: Modify exynos thermal code to use device tree for cpu cooling configuration Lukasz Majewski 2015-01-14 13:41 ` [PATCH v3 08/16] thermal: exynos: dts: Add default definition of the TMU sensor parameter Lukasz Majewski 2015-01-14 13:41 ` [PATCH v3 09/16] dts: Documentation: Extending documentation entry for exynos-thermal Lukasz Majewski 2015-01-14 18:52 ` Eduardo Valentin 2015-01-14 19:01 ` Eduardo Valentin 2015-01-14 13:41 ` [PATCH v3 10/16] thermal: dts: Default trip points definition for Exynos5420 SoCs Lukasz Majewski 2015-01-14 13:41 ` [PATCH v3 11/16] thermal: exynos: dts: Define default thermal-zones for Exynos4 Lukasz Majewski 2015-01-14 13:41 ` [PATCH v3 12/16] thermal: dts: exynos: Trip points and sensor configuration data for Exynos5440 Lukasz Majewski 2015-01-14 13:41 ` [PATCH v3 13/16] thermal: exynos: dts: Provide device tree bindings identical to the one in exynos_tmu_data.c Lukasz Majewski 2015-01-14 19:05 ` Eduardo Valentin 2015-01-15 16:03 ` Lukasz Majewski 2015-01-14 13:41 ` [PATCH v3 14/16] thermal: samsung: core: Exynos TMU rework to use device tree for configuration Lukasz Majewski 2015-01-14 18:46 ` Eduardo Valentin 2015-01-15 15:17 ` Lukasz Majewski 2015-01-21 1:23 ` Eduardo Valentin 2015-01-21 8:10 ` Lukasz Majewski 2015-01-21 9:20 ` Eduardo Valentin 2015-01-22 14:17 ` Lukasz Majewski 2015-01-14 13:41 ` [PATCH v3 15/16] thermal: exynos: Remove exynos_thermal_common.[c|h] files Lukasz Majewski 2015-01-14 13:41 ` [PATCH v3 16/16] thermal: exynos: Remove exynos_tmu_data.c file Lukasz Majewski 2015-01-16 0:00 ` [PATCH v3 00/16] thermal: exynos: Thermal code rework to use device tree Tobias Jakobi 2015-01-16 8:29 ` Lukasz Majewski 2015-01-19 23:29 ` Tobias Jakobi 2015-01-20 8:17 ` Lukasz Majewski 2015-01-22 1:06 ` Tobias Jakobi 2015-01-21 9:08 ` Eduardo Valentin 2015-01-24 1:00 ` Tobias Jakobi 2015-01-16 11:30 ` [PATCH v4 00/17] " Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 01/17] thermal: exynos: cosmetic: Correct comment format Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 02/17] thermal: exynos: Provide thermal_exynos.h file to be included in device tree files Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 03/17] arm: dts: trats: Enable TMU on the Exynos4210 trats device Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 04/17] arm: dts: odroid: Add LD010 regulator node necessary for TMU on Odroid Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 05/17] arm: dts: odroid: Enable TMU at Exynos4412 based Odroid U3 device Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 06/17] arm: dts: Adding CPU cooling binding for Exynos SoCs Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 07/17] thermal: exynos: Modify exynos thermal code to use device tree for cpu cooling configuration Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 08/17] thermal: exynos: dts: Add default definition of the TMU sensor parameter Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 09/17] dts: Documentation: Extending documentation entry for exynos-thermal Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 10/17] thermal: dts: Default trip points definition for Exynos5420 SoCs Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 11/17] thermal: exynos: dts: Define default thermal-zones for Exynos4 Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 12/17] thermal: dts: exynos: Trip points and sensor configuration data for Exynos5440 Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 13/17] dts: Documentation: Update exynos-thermal.txt example " Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 14/17] thermal: exynos: dts: Provide device tree bindings identical to the one in exynos_tmu_data.c Lukasz Majewski 2015-01-16 11:30 ` [PATCH v4 15/17] thermal: samsung: core: Exynos TMU rework to use device tree for configuration Lukasz Majewski 2015-01-16 11:31 ` [PATCH v4 16/17] thermal: exynos: Remove exynos_thermal_common.[c|h] files Lukasz Majewski 2015-01-16 11:31 ` [PATCH v4 17/17] thermal: exynos: Remove exynos_tmu_data.c file Lukasz Majewski 2015-01-17 7:17 ` [PATCH v4 00/17] thermal: exynos: Thermal code rework to use device tree Abhilash Kesavan 2015-01-19 7:57 ` Lukasz Majewski 2015-01-23 7:42 ` Kukjin Kim 2015-01-23 9:59 ` Lukasz Majewski 2015-01-23 11:00 ` Kukjin Kim 2015-01-23 14:45 ` Eduardo Valentin 2015-01-24 4:04 ` Kukjin Kim 2015-01-19 11:20 ` [PATCH v5 00/18] " Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 01/18] thermal: exynos: cosmetic: Correct comment format Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 02/18] thermal: exynos: Provide thermal_exynos.h file to be included in device tree files Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 03/18] arm: dts: trats: Enable TMU on the Exynos4210 trats device Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 04/18] arm: dts: odroid: Add LDO10 regulator node necessary for TMU on Odroid Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 05/18] arm: dts: odroid: Enable TMU at Exynos4412 based Odroid U3 device Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 06/18] arm: dts: Adding CPU cooling binding for Exynos SoCs Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 07/18] thermal: exynos: Modify exynos thermal code to use device tree for cpu cooling configuration Lukasz Majewski 2015-01-21 2:18 ` Eduardo Valentin 2015-01-21 8:21 ` Lukasz Majewski 2015-01-21 8:33 ` Lukasz Majewski 2015-01-21 9:08 ` Viresh Kumar 2015-01-21 9:47 ` Lukasz Majewski 2015-01-21 9:55 ` Viresh Kumar 2015-01-21 10:09 ` Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 08/18] thermal: exynos: dts: Add default definition of the TMU sensor parameter Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 09/18] dts: Documentation: Extending documentation entry for exynos-thermal Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 10/18] thermal: dts: Default trip points definition for Exynos5420 SoCs Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 11/18] thermal: exynos: dts: Define default thermal-zones for Exynos4 Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 12/18] thermal: dts: exynos: Trip points and sensor configuration data for Exynos5440 Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 13/18] dts: Documentation: Update exynos-thermal.txt example " Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 14/18] thermal: exynos: dts: Provide device tree bindings identical to the one in exynos_tmu_data.c Lukasz Majewski 2015-01-19 11:20 ` [PATCH v5 15/18] thermal: samsung: core: Exynos TMU rework to use device tree for configuration Lukasz Majewski 2015-01-21 3:18 ` Eduardo Valentin 2015-01-21 8:40 ` Lukasz Majewski 2015-01-21 9:14 ` Eduardo Valentin 2015-01-21 3:25 ` Eduardo Valentin 2015-01-21 8:48 ` Lukasz Majewski 2015-01-19 11:21 ` [PATCH v5 16/18] thermal: exynos: Remove exynos_thermal_common.[c|h] files Lukasz Majewski 2015-01-19 11:21 ` [PATCH v5 17/18] thermal: exynos: Remove exynos_tmu_data.c file Lukasz Majewski 2015-01-19 11:21 ` [PATCH v5 18/18] thermal: exynos: Remove not needed exynos_tmu_init_data declarations from exynos_tmu.h Lukasz Majewski 2015-01-21 3:30 ` Eduardo Valentin 2015-01-21 9:00 ` Lukasz Majewski 2015-01-21 1:55 ` [PATCH v5 00/18] thermal: exynos: Thermal code rework to use device tree Eduardo Valentin 2015-01-23 12:09 ` [PATCH v6 " Lukasz Majewski 2015-01-23 12:09 ` [PATCH v6 01/18] thermal: exynos: cosmetic: Correct comment format Lukasz Majewski 2015-01-23 12:09 ` [PATCH v6 02/18] thermal: exynos: Provide thermal_exynos.h file to be included in device tree files Lukasz Majewski 2015-01-23 12:09 ` [PATCH v6 03/18] arm: dts: trats: Enable TMU on the Exynos4210 trats device Lukasz Majewski 2015-01-23 12:09 ` [PATCH v6 04/18] arm: dts: odroid: Add LDO10 regulator node necessary for TMU on Odroid Lukasz Majewski 2015-01-23 12:09 ` [PATCH v6 05/18] arm: dts: odroid: Enable TMU at Exynos4412 based Odroid U3 device Lukasz Majewski 2015-01-23 12:23 ` Aw: " Tobias Jakobi 2015-01-23 12:09 ` [PATCH v6 06/18] arm: dts: Adding CPU cooling binding for Exynos SoCs Lukasz Majewski 2015-01-23 12:10 ` [PATCH v6 07/18] thermal: exynos: Modify exynos thermal code to use device tree for cpu cooling configuration Lukasz Majewski 2015-01-23 12:10 ` [PATCH v6 09/18] thermal: exynos: dts: Add default definition of the TMU sensor parameter Lukasz Majewski 2015-01-23 12:10 ` [PATCH v6 10/18] dts: Documentation: Extending documentation entry for exynos-thermal Lukasz Majewski 2015-01-23 12:10 ` [PATCH v6 11/18] thermal: dts: Default trip points definition for Exynos5420 SoCs Lukasz Majewski 2015-01-23 12:10 ` [PATCH v6 12/18] thermal: exynos: dts: Define default thermal-zones for Exynos4 Lukasz Majewski 2015-01-23 12:10 ` [PATCH v6 13/18] thermal: dts: exynos: Trip points and sensor configuration data for Exynos5440 Lukasz Majewski 2015-01-23 12:10 ` [PATCH v6 14/18] dts: Documentation: Update exynos-thermal.txt example " Lukasz Majewski 2015-01-23 12:10 ` [PATCH v6 15/18] thermal: exynos: dts: Provide device tree bindings identical to the one in exynos_tmu_data.c Lukasz Majewski 2015-01-23 12:10 ` [PATCH v6 16/18] thermal: samsung: core: Exynos TMU rework to use device tree for configuration Lukasz Majewski 2015-01-23 12:10 ` [PATCH v6 17/18] thermal: exynos: Remove exynos_thermal_common.[c|h] files Lukasz Majewski 2015-01-23 12:10 ` [PATCH v6 18/18] thermal: exynos: Remove exynos_tmu_data.c file Lukasz Majewski 2015-01-24 21:49 ` [PATCH v6 00/18] thermal: exynos: Thermal code rework to use device tree Eduardo Valentin 2015-01-26 8:49 ` Lukasz Majewski 2015-01-29 23:34 ` Kukjin Kim 2015-02-23 10:13 ` Lukasz Majewski 2015-02-23 11:18 ` Kukjin Kim 2015-02-23 12:28 ` Lukasz Majewski 2015-02-26 15:56 ` Lukasz Majewski 2015-02-26 21:21 ` Kukjin Kim 2015-01-23 12:14 ` [PATCH v6 08/18] cpufreq: exynos: Use device tree to determine if cpufreq cooling should be registered Lukasz Majewski 2015-01-23 12:59 ` Viresh Kumar 2015-01-23 13:57 ` Lukasz Majewski 2015-01-25 14:01 ` Viresh Kumar 2015-01-25 16:27 ` Lukasz Majewski 2015-01-25 16:46 ` Eduardo Valentin 2015-01-25 21:55 ` Lukasz Majewski 2015-01-26 9:25 ` [PATCH] cpufreq: exynos: Use simple approach to asses if cpu cooling can be used Lukasz Majewski 2015-01-27 3:44 ` Viresh Kumar 2015-02-04 9:00 ` Lukasz Majewski 2015-02-05 15:54 ` [PATCH v2] " Lukasz Majewski 2015-02-26 10:36 ` Lukasz Majewski 2015-02-26 18:25 ` Eduardo Valentin 2015-02-26 21:23 ` Lukasz Majewski
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1412872737-624-18-git-send-email-l.majewski@samsung.com \ --to=l.majewski@samsung.com \ --cc=amit.daniel@samsung.com \ --cc=b.zolnierkie@samsung.com \ --cc=cw00.choi@samsung.com \ --cc=edubezval@gmail.com \ --cc=kgene.kim@samsung.com \ --cc=kyungmin.park@samsung.com \ --cc=l.majewski@majess.pl \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-pm@vger.kernel.org \ --cc=linux-samsung-soc@vger.kernel.org \ --cc=rui.zhang@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.