All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
To: linux-arm-kernel@lists.infradead.org
Cc: Zhang Rui <rui.zhang@intel.com>,
	linux-pm@vger.kernel.org,
	Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
	Gregory Clement <gregory.clement@free-electrons.com>,
	Nobuhiro Iwamatsu <iwamatsu@nigauri.org>,
	Andrew Lunn <andrew@lunn.ch>, Jason Cooper <jason@lakedaemon.net>,
	Florian Fainelli <florian@openwrt.org>,
	Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>,
	Lior Amsalem <alior@marvell.com>,
	Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
Subject: [PATCH 12/16] thermal: mvebu: Add support for Armada 370 thermal sensor
Date: Wed, 20 Mar 2013 19:36:33 -0300	[thread overview]
Message-ID: <1363818997-23137-13-git-send-email-ezequiel.garcia@free-electrons.com> (raw)
In-Reply-To: <1363818997-23137-1-git-send-email-ezequiel.garcia@free-electrons.com>

The Armada 370 has a register to check a valid temperature,
and its own formula to obtain the temperature from the thermal
sensor output register.

Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
 .../devicetree/bindings/thermal/mvebu-thermal.txt  |    1 +
 drivers/thermal/mvebu_thermal.c                    |   39 ++++++++++++++++++++
 2 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt b/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt
index 7cc3fd4..49d55a9 100644
--- a/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt
+++ b/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt
@@ -5,6 +5,7 @@ Required properties:
 - compatible:	Should be set to one of the following:
 		marvell,kirkwood-thermal
 		marvell,armadaxp-thermal
+		marvell,armada370-thermal
 
 - reg:		Device's register space.
 		One or two entries are expected, see the examples below.
diff --git a/drivers/thermal/mvebu_thermal.c b/drivers/thermal/mvebu_thermal.c
index 50f13e7..0b1e7a8 100644
--- a/drivers/thermal/mvebu_thermal.c
+++ b/drivers/thermal/mvebu_thermal.c
@@ -20,12 +20,14 @@
 #include <linux/kernel.h>
 #include <linux/of.h>
 #include <linux/module.h>
+#include <linux/delay.h>
 #include <linux/platform_device.h>
 #include <linux/of_device.h>
 #include <linux/thermal.h>
 
 #define MVEBU_THERMAL_SOC_VARIANT_KIRKWOOD    0x1
 #define MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP   0x2
+#define MVEBU_THERMAL_SOC_VARIANT_ARMADA_370  0x3
 
 #define MVEBU_THERMAL_VALID_OFFSET	9
 #define MVEBU_THERMAL_VALID_MASK	0x1
@@ -39,6 +41,7 @@
 #define PMU_TDC0_REF_CAL_CNT_OFFS	11
 #define PMU_TDC0_REF_CAL_CNT_MASK	(0x1ff << PMU_TDC0_REF_CAL_CNT_OFFS)
 #define PMU_TDC0_OTF_CAL_MASK		(0x1 << 30)
+#define PMU_TDC0_START_CAL_MASK		(0x1 << 25)
 
 /* Marvell EBU Thermal Sensor Dev Structure */
 struct mvebu_thermal_priv {
@@ -82,6 +85,31 @@ static void armadaxp_init_sensor(struct mvebu_thermal_priv *priv)
 	writel(reg, priv->sensor);
 }
 
+static void armada370_init_sensor(struct mvebu_thermal_priv *priv)
+{
+	unsigned long reg;
+
+	if (!priv->control)
+		return;
+
+	/* ??? */
+	reg = readl_relaxed(priv->control);
+	reg |= PMU_TDC0_OTF_CAL_MASK;
+	writel(reg, priv->control);
+
+	/* Reference calibration value */
+	reg &= ~PMU_TDC0_REF_CAL_CNT_MASK;
+	reg |= (0xf1 << PMU_TDC0_REF_CAL_CNT_OFFS);
+	writel(reg, priv->control);
+
+	/* ??? */
+	reg &= ~PMU_TDC0_START_CAL_MASK;
+	writel(reg, priv->control);
+
+	/* FIXME: Why do we need this delay? */
+	mdelay(10);
+}
+
 static bool mvebu_is_valid(struct mvebu_thermal_priv *priv)
 {
 	unsigned long reg = readl_relaxed(priv->sensor);
@@ -113,6 +141,9 @@ static int mvebu_get_temp(struct thermal_zone_device *thermal,
 	case MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP:
 		*temp = (3153000000UL - (10000000UL*reg)) / 13825;
 		break;
+	case MVEBU_THERMAL_SOC_VARIANT_ARMADA_370:
+		*temp = (228000UL - 723*reg);
+		break;
 	default:
 		*temp = 0;
 		break;
@@ -134,6 +165,10 @@ static const struct of_device_id mvebu_thermal_id_table[] = {
 		.data       = (void *) MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP,
 	},
 	{
+		.compatible = "marvell,armada370-thermal",
+		.data       = (void *) MVEBU_THERMAL_SOC_VARIANT_ARMADA_370,
+	},
+	{
 		/* sentinel */
 	},
 };
@@ -179,6 +214,10 @@ static int mvebu_thermal_probe(struct platform_device *pdev)
 	case MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP:
 		priv->init_sensor = armadaxp_init_sensor;
 		break;
+	case MVEBU_THERMAL_SOC_VARIANT_ARMADA_370:
+		priv->is_valid = mvebu_is_valid;
+		priv->init_sensor = armada370_init_sensor;
+		break;
 	default:
 		break;
 	}
-- 
1.7.8.6


WARNING: multiple messages have this Message-ID (diff)
From: ezequiel.garcia@free-electrons.com (Ezequiel Garcia)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 12/16] thermal: mvebu: Add support for Armada 370 thermal sensor
Date: Wed, 20 Mar 2013 19:36:33 -0300	[thread overview]
Message-ID: <1363818997-23137-13-git-send-email-ezequiel.garcia@free-electrons.com> (raw)
In-Reply-To: <1363818997-23137-1-git-send-email-ezequiel.garcia@free-electrons.com>

The Armada 370 has a register to check a valid temperature,
and its own formula to obtain the temperature from the thermal
sensor output register.

Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
 .../devicetree/bindings/thermal/mvebu-thermal.txt  |    1 +
 drivers/thermal/mvebu_thermal.c                    |   39 ++++++++++++++++++++
 2 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt b/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt
index 7cc3fd4..49d55a9 100644
--- a/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt
+++ b/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt
@@ -5,6 +5,7 @@ Required properties:
 - compatible:	Should be set to one of the following:
 		marvell,kirkwood-thermal
 		marvell,armadaxp-thermal
+		marvell,armada370-thermal
 
 - reg:		Device's register space.
 		One or two entries are expected, see the examples below.
diff --git a/drivers/thermal/mvebu_thermal.c b/drivers/thermal/mvebu_thermal.c
index 50f13e7..0b1e7a8 100644
--- a/drivers/thermal/mvebu_thermal.c
+++ b/drivers/thermal/mvebu_thermal.c
@@ -20,12 +20,14 @@
 #include <linux/kernel.h>
 #include <linux/of.h>
 #include <linux/module.h>
+#include <linux/delay.h>
 #include <linux/platform_device.h>
 #include <linux/of_device.h>
 #include <linux/thermal.h>
 
 #define MVEBU_THERMAL_SOC_VARIANT_KIRKWOOD    0x1
 #define MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP   0x2
+#define MVEBU_THERMAL_SOC_VARIANT_ARMADA_370  0x3
 
 #define MVEBU_THERMAL_VALID_OFFSET	9
 #define MVEBU_THERMAL_VALID_MASK	0x1
@@ -39,6 +41,7 @@
 #define PMU_TDC0_REF_CAL_CNT_OFFS	11
 #define PMU_TDC0_REF_CAL_CNT_MASK	(0x1ff << PMU_TDC0_REF_CAL_CNT_OFFS)
 #define PMU_TDC0_OTF_CAL_MASK		(0x1 << 30)
+#define PMU_TDC0_START_CAL_MASK		(0x1 << 25)
 
 /* Marvell EBU Thermal Sensor Dev Structure */
 struct mvebu_thermal_priv {
@@ -82,6 +85,31 @@ static void armadaxp_init_sensor(struct mvebu_thermal_priv *priv)
 	writel(reg, priv->sensor);
 }
 
+static void armada370_init_sensor(struct mvebu_thermal_priv *priv)
+{
+	unsigned long reg;
+
+	if (!priv->control)
+		return;
+
+	/* ??? */
+	reg = readl_relaxed(priv->control);
+	reg |= PMU_TDC0_OTF_CAL_MASK;
+	writel(reg, priv->control);
+
+	/* Reference calibration value */
+	reg &= ~PMU_TDC0_REF_CAL_CNT_MASK;
+	reg |= (0xf1 << PMU_TDC0_REF_CAL_CNT_OFFS);
+	writel(reg, priv->control);
+
+	/* ??? */
+	reg &= ~PMU_TDC0_START_CAL_MASK;
+	writel(reg, priv->control);
+
+	/* FIXME: Why do we need this delay? */
+	mdelay(10);
+}
+
 static bool mvebu_is_valid(struct mvebu_thermal_priv *priv)
 {
 	unsigned long reg = readl_relaxed(priv->sensor);
@@ -113,6 +141,9 @@ static int mvebu_get_temp(struct thermal_zone_device *thermal,
 	case MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP:
 		*temp = (3153000000UL - (10000000UL*reg)) / 13825;
 		break;
+	case MVEBU_THERMAL_SOC_VARIANT_ARMADA_370:
+		*temp = (228000UL - 723*reg);
+		break;
 	default:
 		*temp = 0;
 		break;
@@ -134,6 +165,10 @@ static const struct of_device_id mvebu_thermal_id_table[] = {
 		.data       = (void *) MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP,
 	},
 	{
+		.compatible = "marvell,armada370-thermal",
+		.data       = (void *) MVEBU_THERMAL_SOC_VARIANT_ARMADA_370,
+	},
+	{
 		/* sentinel */
 	},
 };
@@ -179,6 +214,10 @@ static int mvebu_thermal_probe(struct platform_device *pdev)
 	case MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP:
 		priv->init_sensor = armadaxp_init_sensor;
 		break;
+	case MVEBU_THERMAL_SOC_VARIANT_ARMADA_370:
+		priv->is_valid = mvebu_is_valid;
+		priv->init_sensor = armada370_init_sensor;
+		break;
 	default:
 		break;
 	}
-- 
1.7.8.6

  parent reply	other threads:[~2013-03-20 22:37 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-20 22:36 [PATCH 00/16] Marvell EBU thermal sensor consolidation Ezequiel Garcia
2013-03-20 22:36 ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 01/16] thermal: Rename driver 'kirkwood' -> 'mvebu' Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 02/16] thermal: mvebu: Rename symbols " Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 03/16] thermal: mvebu: Move MODULE_DEVICE_TABLE upwards Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 04/16] thermal: mvebu: Remove unneeded variable initialization Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 05/16] thermal: mvebu: Fix valid check for thermal register Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-21 14:35   ` Jason Cooper
2013-03-21 14:35     ` Jason Cooper
2013-03-21 15:16     ` Ezequiel Garcia
2013-03-21 15:16       ` Ezequiel Garcia
2013-03-21 15:24       ` Jason Cooper
2013-03-21 15:24         ` Jason Cooper
2013-03-21 19:57         ` Ezequiel Garcia
2013-03-21 19:57           ` Ezequiel Garcia
2013-03-21 20:06           ` Jason Cooper
2013-03-21 20:06             ` Jason Cooper
2013-03-20 22:36 ` [PATCH 06/16] thermal: mvebu: Convert to devm_ioremap_resource() Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-21  6:10   ` Andrew Lunn
2013-03-21  6:10     ` Andrew Lunn
2013-03-21  9:43     ` Ezequiel Garcia
2013-03-21  9:43       ` Ezequiel Garcia
2013-03-21 10:08       ` Andrew Lunn
2013-03-21 10:08         ` Andrew Lunn
2013-03-21 14:04   ` Sergei Shtylyov
2013-03-21 14:04     ` Sergei Shtylyov
2013-03-21 15:17     ` Ezequiel Garcia
2013-03-21 15:17       ` Ezequiel Garcia
2013-03-21 19:17   ` Russell King - ARM Linux
2013-03-21 19:17     ` Russell King - ARM Linux
2013-03-21 20:21     ` Ezequiel Garcia
2013-03-21 20:21       ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 07/16] thermal: mvebu: Fix license declaration Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 08/16] thermal: mvebu: Fix temperature output formula for kirkwood Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-21 14:41   ` Jason Cooper
2013-03-21 14:41     ` Jason Cooper
2013-03-21 19:20   ` Russell King - ARM Linux
2013-03-21 19:20     ` Russell King - ARM Linux
2013-03-21 20:38     ` Ezequiel Garcia
2013-03-21 20:38       ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 09/16] thermal: mvebu: Rename kirkwood definitions to mvebu Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 10/16] thermal: mvebu: Add infrastructure to support more multiple SoC variants Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 11/16] thermal: mvebu: Add support for Armada XP thermal sensor Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` Ezequiel Garcia [this message]
2013-03-20 22:36   ` [PATCH 12/16] thermal: mvebu: Add support for Armada 370 " Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 13/16] thermal: mvebu: Add support for Marvell Dove SoC family Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-21  6:23   ` Andrew Lunn
2013-03-21  6:23     ` Andrew Lunn
2013-03-21  6:26     ` Andrew Lunn
2013-03-21  6:26       ` Andrew Lunn
2013-03-20 22:36 ` [PATCH 14/16] ARM: mvebu: Add thermal support to Armada XP device tree Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 15/16] ARM: mvebu: Add thermal support to Armada 370 " Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-21 14:03   ` Sergei Shtylyov
2013-03-21 14:03     ` Sergei Shtylyov
2013-03-21 15:18     ` Ezequiel Garcia
2013-03-21 15:18       ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 16/16] ARM: configs: Update mvebu, dove and kirkwood defconfigs for thermal Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-21  6:45 ` [PATCH 00/16] Marvell EBU thermal sensor consolidation Andrew Lunn
2013-03-21  6:45   ` Andrew Lunn
2013-03-21  9:42   ` Ezequiel Garcia
2013-03-21  9:42     ` Ezequiel Garcia
2013-03-21 12:35   ` Ezequiel Garcia
2013-03-21 12:35     ` Ezequiel Garcia
2013-03-21 13:36     ` Andrew Lunn
2013-03-21 13:36       ` Andrew Lunn
2013-03-21 17:32   ` Jason Gunthorpe
2013-03-21 17:32     ` Jason Gunthorpe
2013-03-22 14:23     ` Ezequiel Garcia
2013-03-22 14:23       ` Ezequiel Garcia
2013-03-21 12:26 ` Ezequiel Garcia
2013-03-21 12:26   ` Ezequiel Garcia

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=1363818997-23137-13-git-send-email-ezequiel.garcia@free-electrons.com \
    --to=ezequiel.garcia@free-electrons.com \
    --cc=alior@marvell.com \
    --cc=andrew@lunn.ch \
    --cc=florian@openwrt.org \
    --cc=gregory.clement@free-electrons.com \
    --cc=iwamatsu@nigauri.org \
    --cc=jason@lakedaemon.net \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rui.zhang@intel.com \
    --cc=sebastian.hesselbarth@gmail.com \
    --cc=thomas.petazzoni@free-electrons.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 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.