mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Amit Daniel Kachhap <amit.daniel@samsung.com>
To: linux-pm@vger.kernel.org, Zhang Rui <rui.zhang@intel.com>,
	Eduardo Valentin <eduardo.valentin@ti.com>
Cc: linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org,
	amit.kachhap@gmail.com, Kukjin Kim <kgene.kim@samsung.com>,
	jonghwa3.lee@samsung.com
Subject: [PATCH V5 11/30] thermal: exynos: Support thermal tripping
Date: Tue, 11 Jun 2013 18:23:21 +0530	[thread overview]
Message-ID: <1370955220-2949-12-git-send-email-amit.daniel@samsung.com> (raw)
In-Reply-To: <1370955220-2949-1-git-send-email-amit.daniel@samsung.com>

TMU urgently sends active-high signal (thermal trip) to PMU, and thermal
tripping by hardware logic. Thermal tripping means that PMU cuts off the
whole power of SoC by controlling external voltage regulator.

Acked-by: Kukjin Kim <kgene.kim@samsung.com>
Signed-off-by: Jonghwan Choi <jhbird.choi@samsung.com>
Signed-off-by: Amit Daniel Kachhap <amit.daniel@samsung.com>
---
 drivers/thermal/samsung/exynos_tmu.c      |   45 +++++++++++++++++++++++++---
 drivers/thermal/samsung/exynos_tmu_data.c |    2 +
 drivers/thermal/samsung/exynos_tmu_data.h |    2 +
 3 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c
index 6fd776f..33f494e 100644
--- a/drivers/thermal/samsung/exynos_tmu.c
+++ b/drivers/thermal/samsung/exynos_tmu.c
@@ -117,7 +117,7 @@ static int exynos_tmu_initialize(struct platform_device *pdev)
 	struct exynos_tmu_data *data = platform_get_drvdata(pdev);
 	struct exynos_tmu_platform_data *pdata = data->pdata;
 	const struct exynos_tmu_registers *reg = pdata->registers;
-	unsigned int status, trim_info;
+	unsigned int status, trim_info = 0, con;
 	unsigned int rising_threshold = 0, falling_threshold = 0;
 	int ret = 0, threshold_code, i, trigger_levs = 0;
 
@@ -144,10 +144,26 @@ static int exynos_tmu_initialize(struct platform_device *pdev)
 			(data->temp_error2 != 0))
 		data->temp_error1 = pdata->efuse_value;
 
-	/* Count trigger levels to be enabled */
-	for (i = 0; i < MAX_THRESHOLD_LEVS; i++)
-		if (pdata->trigger_levels[i])
+	if (pdata->max_trigger_level > MAX_THRESHOLD_LEVS) {
+		dev_err(&pdev->dev, "Invalid max trigger level\n");
+		goto out;
+	}
+
+	for (i = 0; i < pdata->max_trigger_level; i++) {
+		if (!pdata->trigger_levels[i])
+			continue;
+
+		if ((pdata->trigger_type[i] == HW_TRIP) &&
+		(!pdata->trigger_levels[pdata->max_trigger_level - 1])) {
+			dev_err(&pdev->dev, "Invalid hw trigger level\n");
+			ret = -EINVAL;
+			goto out;
+		}
+
+		/* Count trigger levels except the HW trip*/
+		if (!(pdata->trigger_type[i] == HW_TRIP))
 			trigger_levs++;
+	}
 
 	if (data->soc == SOC_ARCH_EXYNOS4210) {
 		/* Write temperature code for threshold */
@@ -165,7 +181,8 @@ static int exynos_tmu_initialize(struct platform_device *pdev)
 		writel(reg->inten_rise_mask, data->base + reg->tmu_intclear);
 	} else if (data->soc == SOC_ARCH_EXYNOS) {
 		/* Write temperature code for rising and falling threshold */
-		for (i = 0; i < trigger_levs; i++) {
+		for (i = 0;
+		i < trigger_levs && i < EXYNOS_MAX_TRIGGER_PER_REG; i++) {
 			threshold_code = temp_to_code(data,
 						pdata->trigger_levels[i]);
 			if (threshold_code < 0) {
@@ -191,6 +208,24 @@ static int exynos_tmu_initialize(struct platform_device *pdev)
 		writel((reg->inten_rise_mask << reg->inten_rise_shift) |
 			(reg->inten_fall_mask << reg->inten_fall_shift),
 				data->base + reg->tmu_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]);
+			if (threshold_code < 0) {
+				ret = threshold_code;
+				goto out;
+			}
+			rising_threshold |= threshold_code << 8 * i;
+			writel(rising_threshold,
+				data->base + reg->threshold_th0);
+			con = readl(data->base + reg->tmu_ctrl);
+			con |= (1 << reg->therm_trip_en_shift);
+			writel(con, data->base + reg->tmu_ctrl);
+		}
 	}
 out:
 	clk_disable(data->clk);
diff --git a/drivers/thermal/samsung/exynos_tmu_data.c b/drivers/thermal/samsung/exynos_tmu_data.c
index 589a519..e7cb1cc 100644
--- a/drivers/thermal/samsung/exynos_tmu_data.c
+++ b/drivers/thermal/samsung/exynos_tmu_data.c
@@ -123,6 +123,7 @@ struct exynos_tmu_platform_data const exynos5250_default_tmu_data = {
 	.trigger_levels[0] = 85,
 	.trigger_levels[1] = 103,
 	.trigger_levels[2] = 110,
+	.trigger_levels[3] = 120,
 	.trigger_enable[0] = 1,
 	.trigger_enable[1] = 1,
 	.trigger_enable[2] = 1,
@@ -130,6 +131,7 @@ struct exynos_tmu_platform_data const exynos5250_default_tmu_data = {
 	.trigger_type[0] = THROTTLE_ACTIVE,
 	.trigger_type[1] = THROTTLE_ACTIVE,
 	.trigger_type[2] = SW_TRIP,
+	.trigger_type[3] = HW_TRIP,
 	.max_trigger_level = 4,
 	.gain = 8,
 	.reference_voltage = 16,
diff --git a/drivers/thermal/samsung/exynos_tmu_data.h b/drivers/thermal/samsung/exynos_tmu_data.h
index 0e2244f..4acf070 100644
--- a/drivers/thermal/samsung/exynos_tmu_data.h
+++ b/drivers/thermal/samsung/exynos_tmu_data.h
@@ -91,6 +91,8 @@
 #define EXYNOS_EMUL_DATA_MASK	0xFF
 #define EXYNOS_EMUL_ENABLE	0x1
 
+#define EXYNOS_MAX_TRIGGER_PER_REG	4
+
 #if defined(CONFIG_CPU_EXYNOS4210)
 extern struct exynos_tmu_platform_data const exynos4210_default_tmu_data;
 #define EXYNOS4210_TMU_DRV_DATA (&exynos4210_default_tmu_data)
-- 
1.7.1


  parent reply	other threads:[~2013-06-11 12:54 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-11 12:53 [PATCH V5 00/30] thermal: exynos: Add thermal driver for exynos5440 Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 01/30] thermal: exynos: Moving exynos thermal files into samsung directory Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 02/30] thermal: exynos: Add ARCH_HAS_TMU config to know the supported soc's Amit Daniel Kachhap
2013-06-17  3:05   ` Eduardo Valentin
2013-06-17  3:46     ` amit daniel kachhap
2013-06-11 12:53 ` [PATCH V5 03/30] thermal: exynos: Remove CPU_THERMAL dependency for using TMU driver Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 04/30] thermal: exynos: Bifurcate exynos thermal common and tmu controller code Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 05/30] thermal: exynos: Rename exynos_thermal.c to exynos_tmu.c Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 06/30] thermal: exynos: Move exynos_thermal.h from include/* to driver/* folder Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 07/30] thermal: exynos: Bifurcate exynos tmu driver and configuration data Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 08/30] thermal: exynos: Add missing definations and code cleanup Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 09/30] thermal: exynos: Add extra entries in the tmu platform data Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 10/30] thermal: exynos: Move register definitions from driver to data file Amit Daniel Kachhap
2013-06-11 12:53 ` Amit Daniel Kachhap [this message]
2013-06-11 12:53 ` [PATCH V5 12/30] thermal: exynos: Fix to clear only the generated interrupts Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 13/30] thermal: exynos: Add support for instance based register/unregister Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 14/30] thermal: exynos: Modify private_data to appropriate name driver_data Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 15/30] thermal: exynos: Return success even if no cooling data supplied Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 16/30] thermal: exynos: Make the zone handling use trip information Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 17/30] thermal: exynos: Remove non DT based support Amit Daniel Kachhap
2013-08-07  9:23   ` Naveen Krishna Ch
2013-06-11 12:53 ` [PATCH V5 18/30] thermal: exynos: Add support to handle many instances of TMU Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 19/30] thermal: exynos: Add TMU features to check instead of using SOC type Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 20/30] thermal: exynos: use device resource management infrastructure Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 21/30] ARM: dts: thermal: exynos4: Add documentation for Exynos SoC thermal bindings Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 22/30] thermal: exynos: Add support to access common register for multistance Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 23/30] thermal: exynos: Add driver support for exynos5440 TMU sensor Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 24/30] thermal: exynos: Add thermal configuration data " Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 25/30] thermal: exynos: Fix to set the second point correction value Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 26/30] thermal: exynos: Add hardware mode thermal calibration support Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 27/30] Documentation: thermal: Explain the exynos thermal driver model Amit Daniel Kachhap
2013-06-11 17:22   ` Rob Landley
2013-06-14  4:04     ` amit daniel kachhap
2013-06-11 12:53 ` [PATCH V5 28/30] thermal: exynos: Support for TMU regulator defined at device tree Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 29/30] ARM: dts: Add device tree node for exynos5440 TMU controller Amit Daniel Kachhap
2013-06-11 12:53 ` [PATCH V5 30/30] arm: exynos: enable ARCH_HAS_TMU Amit Daniel Kachhap
2013-06-12  4:09 ` [PATCH V5 00/30] thermal: exynos: Add thermal driver for exynos5440 jonghwa3.lee

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=1370955220-2949-12-git-send-email-amit.daniel@samsung.com \
    --to=amit.daniel@samsung.com \
    --cc=amit.kachhap@gmail.com \
    --cc=eduardo.valentin@ti.com \
    --cc=jonghwa3.lee@samsung.com \
    --cc=kgene.kim@samsung.com \
    --cc=linux-kernel@vger.kernel.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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome