All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/7] thermal: ti-soc-thermal: fixes and DRA752 support
@ 2013-05-29 15:07 ` Eduardo Valentin
  0 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang; +Cc: linux-pm, linux-kernel, Eduardo Valentin

Hello Rui,

Here is a patch set for your consideration on ti-soc-thermal driver.

This patch set is mix of:

(a) patches that were added to the staging tree post 3.10-rc1 but
were not included after the move from staging to thermal. This is
because your thermal tree is based of 3.10-rc1 and not staging/next
or linux-next/master. Thus the first two patches make sure the driver
under drivers/thermal/ti-soc-thermal has also the needed fixes.

(b) patches containing fixes found during the addition of DRA752
chip support.

(c) patches adding the support to DRA752 chips.

Please consider these too for 3.11.

For those people interested in testing this patch set, it is based
on thermal/next and can also be found here:
https://git.gitorious.org/thermal-framework/thermal-framework.git thermal_work/ti-soc-thermal/fixes+dra752

All best,

Eduardo Valentin (7):
  thermal: ti-soc-thermal: update DT reference for OMAP5430
  thermal: ti-soc-thermal: remove external heat while extrapolating
    hotspot
  thermal: ti-soc-thermal: freeze FSM while computing trend
  thermal: ti-soc-thermal: remove usage of IS_ERR_OR_NULL
  thermal: ti-soc-thermal: add thermal data for DRA752 chips
  thermal: ti-soc-thermal: add dra752 chip to device table
  thermal: ti-soc-thermal: add DT example for DRA752 chip

 .../devicetree/bindings/thermal/ti_soc_thermal.txt |  13 +
 drivers/staging/ti-soc-thermal/dra752-bandgap.h    | 280 ++++++++++++
 .../staging/ti-soc-thermal/dra752-thermal-data.c   | 476 +++++++++++++++++++++
 drivers/thermal/ti-soc-thermal/Kconfig             |  12 +
 drivers/thermal/ti-soc-thermal/Makefile            |   1 +
 drivers/thermal/ti-soc-thermal/ti-bandgap.c        |  29 +-
 drivers/thermal/ti-soc-thermal/ti-bandgap.h        |   5 +
 drivers/thermal/ti-soc-thermal/ti-thermal-common.c |  43 +-
 drivers/thermal/ti-soc-thermal/ti-thermal.h        |   6 +
 9 files changed, 842 insertions(+), 23 deletions(-)
 create mode 100644 drivers/staging/ti-soc-thermal/dra752-bandgap.h
 create mode 100644 drivers/staging/ti-soc-thermal/dra752-thermal-data.c

-- 
1.8.2.1.342.gfa7285d


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [PATCH 0/7] thermal: ti-soc-thermal: fixes and DRA752 support
@ 2013-05-29 15:07 ` Eduardo Valentin
  0 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang; +Cc: linux-pm, linux-kernel, Eduardo Valentin

Hello Rui,

Here is a patch set for your consideration on ti-soc-thermal driver.

This patch set is mix of:

(a) patches that were added to the staging tree post 3.10-rc1 but
were not included after the move from staging to thermal. This is
because your thermal tree is based of 3.10-rc1 and not staging/next
or linux-next/master. Thus the first two patches make sure the driver
under drivers/thermal/ti-soc-thermal has also the needed fixes.

(b) patches containing fixes found during the addition of DRA752
chip support.

(c) patches adding the support to DRA752 chips.

Please consider these too for 3.11.

For those people interested in testing this patch set, it is based
on thermal/next and can also be found here:
https://git.gitorious.org/thermal-framework/thermal-framework.git thermal_work/ti-soc-thermal/fixes+dra752

All best,

Eduardo Valentin (7):
  thermal: ti-soc-thermal: update DT reference for OMAP5430
  thermal: ti-soc-thermal: remove external heat while extrapolating
    hotspot
  thermal: ti-soc-thermal: freeze FSM while computing trend
  thermal: ti-soc-thermal: remove usage of IS_ERR_OR_NULL
  thermal: ti-soc-thermal: add thermal data for DRA752 chips
  thermal: ti-soc-thermal: add dra752 chip to device table
  thermal: ti-soc-thermal: add DT example for DRA752 chip

 .../devicetree/bindings/thermal/ti_soc_thermal.txt |  13 +
 drivers/staging/ti-soc-thermal/dra752-bandgap.h    | 280 ++++++++++++
 .../staging/ti-soc-thermal/dra752-thermal-data.c   | 476 +++++++++++++++++++++
 drivers/thermal/ti-soc-thermal/Kconfig             |  12 +
 drivers/thermal/ti-soc-thermal/Makefile            |   1 +
 drivers/thermal/ti-soc-thermal/ti-bandgap.c        |  29 +-
 drivers/thermal/ti-soc-thermal/ti-bandgap.h        |   5 +
 drivers/thermal/ti-soc-thermal/ti-thermal-common.c |  43 +-
 drivers/thermal/ti-soc-thermal/ti-thermal.h        |   6 +
 9 files changed, 842 insertions(+), 23 deletions(-)
 create mode 100644 drivers/staging/ti-soc-thermal/dra752-bandgap.h
 create mode 100644 drivers/staging/ti-soc-thermal/dra752-thermal-data.c

-- 
1.8.2.1.342.gfa7285d


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [PATCH 1/7] thermal: ti-soc-thermal: update DT reference for OMAP5430
  2013-05-29 15:07 ` Eduardo Valentin
@ 2013-05-29 15:07   ` Eduardo Valentin
  -1 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang
  Cc: linux-pm, linux-kernel, Eduardo Valentin, Grant Likely,
	Rob Herring, Rob Landley, Greg Kroah-Hartman, J Keerthy,
	devicetree-discuss, linux-doc

Add missing irq line for TALERT on DT entry for OMAP5430.

Cc: linux-pm@vger.kernel.org
Cc: Grant Likely <grant.likely@linaro.org>
Cc: Rob Herring <rob.herring@calxeda.com>
Cc: Rob Landley <rob@landley.net>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: J Keerthy <j-keerthy@ti.com>
Cc: devicetree-discuss@lists.ozlabs.org
Cc: linux-doc@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt | 1 +
 1 file changed, 1 insertion(+)
---
This patch was added to the staging tree post 3.10-rc1 but
is not included after the move from staging to thermal. This is
because the thermal tree is based of 3.10-rc1 and not staging/next
or linux-next/master.

For your reference:
https://git.kernel.org/cgit/linux/kernel/git/gregkh/staging.git/commit/drivers/staging/ti-soc-thermal?h=staging-next&id=faa4b9de12fa433f06be917feb3f13792b12fefa

diff --git a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
index a4a33d1..1629652 100644
--- a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
+++ b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
@@ -57,4 +57,5 @@ bandgap {
 		0x4a002380 0x2c
 		0x4a0023C0 0x3c>;
 	compatible = "ti,omap5430-bandgap";
+	interrupts = <0 126 4>; /* talert */
 };
-- 
1.8.2.1.342.gfa7285d


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 1/7] thermal: ti-soc-thermal: update DT reference for OMAP5430
@ 2013-05-29 15:07   ` Eduardo Valentin
  0 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang
  Cc: linux-pm, linux-kernel, Eduardo Valentin, Grant Likely,
	Rob Herring, Rob Landley, Greg Kroah-Hartman, J Keerthy,
	devicetree-discuss, linux-doc

Add missing irq line for TALERT on DT entry for OMAP5430.

Cc: linux-pm@vger.kernel.org
Cc: Grant Likely <grant.likely@linaro.org>
Cc: Rob Herring <rob.herring@calxeda.com>
Cc: Rob Landley <rob@landley.net>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: J Keerthy <j-keerthy@ti.com>
Cc: devicetree-discuss@lists.ozlabs.org
Cc: linux-doc@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt | 1 +
 1 file changed, 1 insertion(+)
---
This patch was added to the staging tree post 3.10-rc1 but
is not included after the move from staging to thermal. This is
because the thermal tree is based of 3.10-rc1 and not staging/next
or linux-next/master.

For your reference:
https://git.kernel.org/cgit/linux/kernel/git/gregkh/staging.git/commit/drivers/staging/ti-soc-thermal?h=staging-next&id=faa4b9de12fa433f06be917feb3f13792b12fefa

diff --git a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
index a4a33d1..1629652 100644
--- a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
+++ b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
@@ -57,4 +57,5 @@ bandgap {
 		0x4a002380 0x2c
 		0x4a0023C0 0x3c>;
 	compatible = "ti,omap5430-bandgap";
+	interrupts = <0 126 4>; /* talert */
 };
-- 
1.8.2.1.342.gfa7285d

^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 2/7] thermal: ti-soc-thermal: remove external heat while extrapolating hotspot
  2013-05-29 15:07 ` Eduardo Valentin
@ 2013-05-29 15:07   ` Eduardo Valentin
  -1 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang; +Cc: linux-pm, linux-kernel, Eduardo Valentin

For boards that provide a PCB sensor close to SoC junction
temperature, it is possible to remove the cumulative heat
reported by the SoC temperature sensor.

This patch changes the extrapolation computation to consider
an external sensor in the extrapolation equations.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 drivers/thermal/ti-soc-thermal/ti-thermal-common.c | 30 ++++++++++++++--------
 1 file changed, 20 insertions(+), 10 deletions(-)
---
This patch was added to the staging tree post 3.10-rc1 but
is not included after the move from staging to thermal. This is
because the thermal tree is based of 3.10-rc1 and not staging/next
or linux-next/master.

For your reference:
https://git.kernel.org/cgit/linux/kernel/git/gregkh/staging.git/commit/drivers/staging/ti-soc-thermal?h=staging-next&id=a85fd2c8fdefa0d504882f0e110d68e564903fcb

diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
index e3c5e67..8e67ebf 100644
--- a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
+++ b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
@@ -38,6 +38,7 @@
 /* common data structures */
 struct ti_thermal_data {
 	struct thermal_zone_device *ti_thermal;
+	struct thermal_zone_device *pcb_tz;
 	struct thermal_cooling_device *cool_dev;
 	struct ti_bandgap *bgp;
 	enum thermal_device_mode mode;
@@ -77,10 +78,12 @@ static inline int ti_thermal_hotspot_temperature(int t, int s, int c)
 static inline int ti_thermal_get_temp(struct thermal_zone_device *thermal,
 				      unsigned long *temp)
 {
+	struct thermal_zone_device *pcb_tz = NULL;
 	struct ti_thermal_data *data = thermal->devdata;
 	struct ti_bandgap *bgp;
 	const struct ti_temp_sensor *s;
-	int ret, tmp, pcb_temp, slope, constant;
+	int ret, tmp, slope, constant;
+	unsigned long pcb_temp;
 
 	if (!data)
 		return 0;
@@ -92,16 +95,22 @@ static inline int ti_thermal_get_temp(struct thermal_zone_device *thermal,
 	if (ret)
 		return ret;
 
-	pcb_temp = 0;
-	/* TODO: Introduce pcb temperature lookup */
+	/* Default constants */
+	slope = s->slope;
+	constant = s->constant;
+
+	pcb_tz = data->pcb_tz;
 	/* In case pcb zone is available, use the extrapolation rule with it */
-	if (pcb_temp) {
-		tmp -= pcb_temp;
-		slope = s->slope_pcb;
-		constant = s->constant_pcb;
-	} else {
-		slope = s->slope;
-		constant = s->constant;
+	if (!IS_ERR_OR_NULL(pcb_tz)) {
+		ret = thermal_zone_get_temp(pcb_tz, &pcb_temp);
+		if (!ret) {
+			tmp -= pcb_temp; /* got a valid PCB temp */
+			slope = s->slope_pcb;
+			constant = s->constant_pcb;
+		} else {
+			dev_err(bgp->dev,
+				"Failed to read PCB state. Using defaults\n");
+		}
 	}
 	*temp = ti_thermal_hotspot_temperature(tmp, slope, constant);
 
@@ -273,6 +282,7 @@ static struct ti_thermal_data
 	data->sensor_id = id;
 	data->bgp = bgp;
 	data->mode = THERMAL_DEVICE_ENABLED;
+	data->pcb_tz = thermal_zone_get_zone_by_name("pcb");
 	INIT_WORK(&data->thermal_wq, ti_thermal_work);
 
 	return data;
-- 
1.8.2.1.342.gfa7285d


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 2/7] thermal: ti-soc-thermal: remove external heat while extrapolating hotspot
@ 2013-05-29 15:07   ` Eduardo Valentin
  0 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang; +Cc: linux-pm, linux-kernel, Eduardo Valentin

For boards that provide a PCB sensor close to SoC junction
temperature, it is possible to remove the cumulative heat
reported by the SoC temperature sensor.

This patch changes the extrapolation computation to consider
an external sensor in the extrapolation equations.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 drivers/thermal/ti-soc-thermal/ti-thermal-common.c | 30 ++++++++++++++--------
 1 file changed, 20 insertions(+), 10 deletions(-)
---
This patch was added to the staging tree post 3.10-rc1 but
is not included after the move from staging to thermal. This is
because the thermal tree is based of 3.10-rc1 and not staging/next
or linux-next/master.

For your reference:
https://git.kernel.org/cgit/linux/kernel/git/gregkh/staging.git/commit/drivers/staging/ti-soc-thermal?h=staging-next&id=a85fd2c8fdefa0d504882f0e110d68e564903fcb

diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
index e3c5e67..8e67ebf 100644
--- a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
+++ b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
@@ -38,6 +38,7 @@
 /* common data structures */
 struct ti_thermal_data {
 	struct thermal_zone_device *ti_thermal;
+	struct thermal_zone_device *pcb_tz;
 	struct thermal_cooling_device *cool_dev;
 	struct ti_bandgap *bgp;
 	enum thermal_device_mode mode;
@@ -77,10 +78,12 @@ static inline int ti_thermal_hotspot_temperature(int t, int s, int c)
 static inline int ti_thermal_get_temp(struct thermal_zone_device *thermal,
 				      unsigned long *temp)
 {
+	struct thermal_zone_device *pcb_tz = NULL;
 	struct ti_thermal_data *data = thermal->devdata;
 	struct ti_bandgap *bgp;
 	const struct ti_temp_sensor *s;
-	int ret, tmp, pcb_temp, slope, constant;
+	int ret, tmp, slope, constant;
+	unsigned long pcb_temp;
 
 	if (!data)
 		return 0;
@@ -92,16 +95,22 @@ static inline int ti_thermal_get_temp(struct thermal_zone_device *thermal,
 	if (ret)
 		return ret;
 
-	pcb_temp = 0;
-	/* TODO: Introduce pcb temperature lookup */
+	/* Default constants */
+	slope = s->slope;
+	constant = s->constant;
+
+	pcb_tz = data->pcb_tz;
 	/* In case pcb zone is available, use the extrapolation rule with it */
-	if (pcb_temp) {
-		tmp -= pcb_temp;
-		slope = s->slope_pcb;
-		constant = s->constant_pcb;
-	} else {
-		slope = s->slope;
-		constant = s->constant;
+	if (!IS_ERR_OR_NULL(pcb_tz)) {
+		ret = thermal_zone_get_temp(pcb_tz, &pcb_temp);
+		if (!ret) {
+			tmp -= pcb_temp; /* got a valid PCB temp */
+			slope = s->slope_pcb;
+			constant = s->constant_pcb;
+		} else {
+			dev_err(bgp->dev,
+				"Failed to read PCB state. Using defaults\n");
+		}
 	}
 	*temp = ti_thermal_hotspot_temperature(tmp, slope, constant);
 
@@ -273,6 +282,7 @@ static struct ti_thermal_data
 	data->sensor_id = id;
 	data->bgp = bgp;
 	data->mode = THERMAL_DEVICE_ENABLED;
+	data->pcb_tz = thermal_zone_get_zone_by_name("pcb");
 	INIT_WORK(&data->thermal_wq, ti_thermal_work);
 
 	return data;
-- 
1.8.2.1.342.gfa7285d

^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 3/7] thermal: ti-soc-thermal: freeze FSM while computing trend
  2013-05-29 15:07 ` Eduardo Valentin
@ 2013-05-29 15:07   ` Eduardo Valentin
  -1 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang; +Cc: linux-pm, linux-kernel, Eduardo Valentin

In order to read the history buffer, it is required to
freeze BG FSM. This patch adds the missing piece of code
to freeze the FSM and also a contention area to avoid
other parts of the code to access the DTEMPs.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 drivers/thermal/ti-soc-thermal/ti-bandgap.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.c b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
index f20c1cf..be9dba5 100644
--- a/drivers/thermal/ti-soc-thermal/ti-bandgap.c
+++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
@@ -992,9 +992,12 @@ int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend)
 		goto exit;
 	}
 
+	spin_lock(&bgp->lock);
+
 	tsr = bgp->conf->sensors[id].registers;
 
 	/* Freeze and read the last 2 valid readings */
+	RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 1);
 	reg1 = tsr->ctrl_dtemp_1;
 	reg2 = tsr->ctrl_dtemp_2;
 
@@ -1008,22 +1011,26 @@ int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend)
 	/* Convert from adc values to mCelsius temperature */
 	ret = ti_bandgap_adc_to_mcelsius(bgp, temp1, &t1);
 	if (ret)
-		goto exit;
+		goto unfreeze;
 
 	ret = ti_bandgap_adc_to_mcelsius(bgp, temp2, &t2);
 	if (ret)
-		goto exit;
+		goto unfreeze;
 
 	/* Fetch the update interval */
 	ret = ti_bandgap_read_update_interval(bgp, id, &interval);
 	if (ret || !interval)
-		goto exit;
+		goto unfreeze;
 
 	*trend = (t1 - t2) / interval;
 
 	dev_dbg(bgp->dev, "The temperatures are t1 = %d and t2 = %d and trend =%d\n",
 		t1, t2, *trend);
 
+unfreeze:
+	RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 0);
+unlock:
+	spin_unlock(&bgp->lock);
 exit:
 	return ret;
 }
-- 
1.8.2.1.342.gfa7285d


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 3/7] thermal: ti-soc-thermal: freeze FSM while computing trend
@ 2013-05-29 15:07   ` Eduardo Valentin
  0 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang; +Cc: linux-pm, linux-kernel, Eduardo Valentin

In order to read the history buffer, it is required to
freeze BG FSM. This patch adds the missing piece of code
to freeze the FSM and also a contention area to avoid
other parts of the code to access the DTEMPs.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 drivers/thermal/ti-soc-thermal/ti-bandgap.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.c b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
index f20c1cf..be9dba5 100644
--- a/drivers/thermal/ti-soc-thermal/ti-bandgap.c
+++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
@@ -992,9 +992,12 @@ int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend)
 		goto exit;
 	}
 
+	spin_lock(&bgp->lock);
+
 	tsr = bgp->conf->sensors[id].registers;
 
 	/* Freeze and read the last 2 valid readings */
+	RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 1);
 	reg1 = tsr->ctrl_dtemp_1;
 	reg2 = tsr->ctrl_dtemp_2;
 
@@ -1008,22 +1011,26 @@ int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend)
 	/* Convert from adc values to mCelsius temperature */
 	ret = ti_bandgap_adc_to_mcelsius(bgp, temp1, &t1);
 	if (ret)
-		goto exit;
+		goto unfreeze;
 
 	ret = ti_bandgap_adc_to_mcelsius(bgp, temp2, &t2);
 	if (ret)
-		goto exit;
+		goto unfreeze;
 
 	/* Fetch the update interval */
 	ret = ti_bandgap_read_update_interval(bgp, id, &interval);
 	if (ret || !interval)
-		goto exit;
+		goto unfreeze;
 
 	*trend = (t1 - t2) / interval;
 
 	dev_dbg(bgp->dev, "The temperatures are t1 = %d and t2 = %d and trend =%d\n",
 		t1, t2, *trend);
 
+unfreeze:
+	RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 0);
+unlock:
+	spin_unlock(&bgp->lock);
 exit:
 	return ret;
 }
-- 
1.8.2.1.342.gfa7285d

^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 4/7] thermal: ti-soc-thermal: remove usage of IS_ERR_OR_NULL
  2013-05-29 15:07 ` Eduardo Valentin
@ 2013-05-29 15:07   ` Eduardo Valentin
  -1 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang; +Cc: linux-pm, linux-kernel, Eduardo Valentin

This patch changes the driver to avoid the usage of IS_ERR_OR_NULL()
macro. This macro can lead to dangerous results, like returning
success (0) during a failure scenario (NULL pointer handling).

For this reason this patch is changing the driver after
revisiting the code. These are the cases:
i. For cases in which IS_ERR_OR_NULL() is used for checking
return values of functions that returns either PTR_ERR()
or a valid pointer, it has been translated to IS_ERR() check only.
ii. For cases that a NULL check is still needed, it has been
translated to if (!ptr || IS_ERR(ptr)).

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 drivers/thermal/ti-soc-thermal/ti-bandgap.c        | 10 ++++++----
 drivers/thermal/ti-soc-thermal/ti-thermal-common.c | 15 ++++++++-------
 2 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.c b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
index be9dba5..f72695f 100644
--- a/drivers/thermal/ti-soc-thermal/ti-bandgap.c
+++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
@@ -469,7 +469,7 @@ static inline int ti_bandgap_validate(struct ti_bandgap *bgp, int id)
 {
 	int ret = 0;
 
-	if (IS_ERR_OR_NULL(bgp)) {
+	if (!bgp || IS_ERR(bgp)) {
 		pr_err("%s: invalid bandgap pointer\n", __func__);
 		ret = -EINVAL;
 		goto exit;
@@ -1198,7 +1198,7 @@ int ti_bandgap_probe(struct platform_device *pdev)
 	int clk_rate, ret = 0, i;
 
 	bgp = ti_bandgap_build(pdev);
-	if (IS_ERR_OR_NULL(bgp)) {
+	if (IS_ERR(bgp)) {
 		dev_err(&pdev->dev, "failed to fetch platform data\n");
 		return PTR_ERR(bgp);
 	}
@@ -1214,17 +1214,19 @@ int ti_bandgap_probe(struct platform_device *pdev)
 	}
 
 	bgp->fclock = clk_get(NULL, bgp->conf->fclock_name);
-	ret = IS_ERR_OR_NULL(bgp->fclock);
+	ret = IS_ERR(bgp->fclock);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to request fclock reference\n");
+		ret = PTR_ERR(bgp->fclock);
 		goto free_irqs;
 	}
 
 	bgp->div_clk = clk_get(NULL,  bgp->conf->div_ck_name);
-	ret = IS_ERR_OR_NULL(bgp->div_clk);
+	ret = IS_ERR(bgp->div_clk);
 	if (ret) {
 		dev_err(&pdev->dev,
 			"failed to request div_ts_ck clock ref\n");
+		ret = PTR_ERR(bgp->div_clk);
 		goto free_irqs;
 	}
 
diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
index 8e67ebf..4c5f55c37 100644
--- a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
+++ b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
@@ -101,7 +101,7 @@ static inline int ti_thermal_get_temp(struct thermal_zone_device *thermal,
 
 	pcb_tz = data->pcb_tz;
 	/* In case pcb zone is available, use the extrapolation rule with it */
-	if (!IS_ERR_OR_NULL(pcb_tz)) {
+	if (!IS_ERR(pcb_tz)) {
 		ret = thermal_zone_get_temp(pcb_tz, &pcb_temp);
 		if (!ret) {
 			tmp -= pcb_temp; /* got a valid PCB temp */
@@ -124,7 +124,7 @@ static int ti_thermal_bind(struct thermal_zone_device *thermal,
 	struct ti_thermal_data *data = thermal->devdata;
 	int id;
 
-	if (IS_ERR_OR_NULL(data))
+	if (!data || IS_ERR(data))
 		return -ENODEV;
 
 	/* check if this is the cooling device we registered */
@@ -146,7 +146,7 @@ static int ti_thermal_unbind(struct thermal_zone_device *thermal,
 {
 	struct ti_thermal_data *data = thermal->devdata;
 
-	if (IS_ERR_OR_NULL(data))
+	if (!data || IS_ERR(data))
 		return -ENODEV;
 
 	/* check if this is the cooling device we registered */
@@ -282,6 +282,7 @@ static struct ti_thermal_data
 	data->sensor_id = id;
 	data->bgp = bgp;
 	data->mode = THERMAL_DEVICE_ENABLED;
+	/* pcb_tz will be either valid or PTR_ERR() */
 	data->pcb_tz = thermal_zone_get_zone_by_name("pcb");
 	INIT_WORK(&data->thermal_wq, ti_thermal_work);
 
@@ -295,7 +296,7 @@ int ti_thermal_expose_sensor(struct ti_bandgap *bgp, int id,
 
 	data = ti_bandgap_get_sensor_data(bgp, id);
 
-	if (IS_ERR_OR_NULL(data))
+	if (!data || IS_ERR(data))
 		data = ti_thermal_build_data(bgp, id);
 
 	if (!data)
@@ -306,7 +307,7 @@ int ti_thermal_expose_sensor(struct ti_bandgap *bgp, int id,
 				OMAP_TRIP_NUMBER, 0, data, &ti_thermal_ops,
 				NULL, FAST_TEMP_MONITORING_RATE,
 				FAST_TEMP_MONITORING_RATE);
-	if (IS_ERR_OR_NULL(data->ti_thermal)) {
+	if (IS_ERR(data->ti_thermal)) {
 		dev_err(bgp->dev, "thermal zone device is NULL\n");
 		return PTR_ERR(data->ti_thermal);
 	}
@@ -343,7 +344,7 @@ int ti_thermal_register_cpu_cooling(struct ti_bandgap *bgp, int id)
 	struct ti_thermal_data *data;
 
 	data = ti_bandgap_get_sensor_data(bgp, id);
-	if (IS_ERR_OR_NULL(data))
+	if (!data || IS_ERR(data))
 		data = ti_thermal_build_data(bgp, id);
 
 	if (!data)
@@ -356,7 +357,7 @@ int ti_thermal_register_cpu_cooling(struct ti_bandgap *bgp, int id)
 
 	/* Register cooling device */
 	data->cool_dev = cpufreq_cooling_register(cpu_present_mask);
-	if (IS_ERR_OR_NULL(data->cool_dev)) {
+	if (IS_ERR(data->cool_dev)) {
 		dev_err(bgp->dev,
 			"Failed to register cpufreq cooling device\n");
 		return PTR_ERR(data->cool_dev);
-- 
1.8.2.1.342.gfa7285d


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 4/7] thermal: ti-soc-thermal: remove usage of IS_ERR_OR_NULL
@ 2013-05-29 15:07   ` Eduardo Valentin
  0 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang; +Cc: linux-pm, linux-kernel, Eduardo Valentin

This patch changes the driver to avoid the usage of IS_ERR_OR_NULL()
macro. This macro can lead to dangerous results, like returning
success (0) during a failure scenario (NULL pointer handling).

For this reason this patch is changing the driver after
revisiting the code. These are the cases:
i. For cases in which IS_ERR_OR_NULL() is used for checking
return values of functions that returns either PTR_ERR()
or a valid pointer, it has been translated to IS_ERR() check only.
ii. For cases that a NULL check is still needed, it has been
translated to if (!ptr || IS_ERR(ptr)).

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 drivers/thermal/ti-soc-thermal/ti-bandgap.c        | 10 ++++++----
 drivers/thermal/ti-soc-thermal/ti-thermal-common.c | 15 ++++++++-------
 2 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.c b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
index be9dba5..f72695f 100644
--- a/drivers/thermal/ti-soc-thermal/ti-bandgap.c
+++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
@@ -469,7 +469,7 @@ static inline int ti_bandgap_validate(struct ti_bandgap *bgp, int id)
 {
 	int ret = 0;
 
-	if (IS_ERR_OR_NULL(bgp)) {
+	if (!bgp || IS_ERR(bgp)) {
 		pr_err("%s: invalid bandgap pointer\n", __func__);
 		ret = -EINVAL;
 		goto exit;
@@ -1198,7 +1198,7 @@ int ti_bandgap_probe(struct platform_device *pdev)
 	int clk_rate, ret = 0, i;
 
 	bgp = ti_bandgap_build(pdev);
-	if (IS_ERR_OR_NULL(bgp)) {
+	if (IS_ERR(bgp)) {
 		dev_err(&pdev->dev, "failed to fetch platform data\n");
 		return PTR_ERR(bgp);
 	}
@@ -1214,17 +1214,19 @@ int ti_bandgap_probe(struct platform_device *pdev)
 	}
 
 	bgp->fclock = clk_get(NULL, bgp->conf->fclock_name);
-	ret = IS_ERR_OR_NULL(bgp->fclock);
+	ret = IS_ERR(bgp->fclock);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to request fclock reference\n");
+		ret = PTR_ERR(bgp->fclock);
 		goto free_irqs;
 	}
 
 	bgp->div_clk = clk_get(NULL,  bgp->conf->div_ck_name);
-	ret = IS_ERR_OR_NULL(bgp->div_clk);
+	ret = IS_ERR(bgp->div_clk);
 	if (ret) {
 		dev_err(&pdev->dev,
 			"failed to request div_ts_ck clock ref\n");
+		ret = PTR_ERR(bgp->div_clk);
 		goto free_irqs;
 	}
 
diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
index 8e67ebf..4c5f55c37 100644
--- a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
+++ b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
@@ -101,7 +101,7 @@ static inline int ti_thermal_get_temp(struct thermal_zone_device *thermal,
 
 	pcb_tz = data->pcb_tz;
 	/* In case pcb zone is available, use the extrapolation rule with it */
-	if (!IS_ERR_OR_NULL(pcb_tz)) {
+	if (!IS_ERR(pcb_tz)) {
 		ret = thermal_zone_get_temp(pcb_tz, &pcb_temp);
 		if (!ret) {
 			tmp -= pcb_temp; /* got a valid PCB temp */
@@ -124,7 +124,7 @@ static int ti_thermal_bind(struct thermal_zone_device *thermal,
 	struct ti_thermal_data *data = thermal->devdata;
 	int id;
 
-	if (IS_ERR_OR_NULL(data))
+	if (!data || IS_ERR(data))
 		return -ENODEV;
 
 	/* check if this is the cooling device we registered */
@@ -146,7 +146,7 @@ static int ti_thermal_unbind(struct thermal_zone_device *thermal,
 {
 	struct ti_thermal_data *data = thermal->devdata;
 
-	if (IS_ERR_OR_NULL(data))
+	if (!data || IS_ERR(data))
 		return -ENODEV;
 
 	/* check if this is the cooling device we registered */
@@ -282,6 +282,7 @@ static struct ti_thermal_data
 	data->sensor_id = id;
 	data->bgp = bgp;
 	data->mode = THERMAL_DEVICE_ENABLED;
+	/* pcb_tz will be either valid or PTR_ERR() */
 	data->pcb_tz = thermal_zone_get_zone_by_name("pcb");
 	INIT_WORK(&data->thermal_wq, ti_thermal_work);
 
@@ -295,7 +296,7 @@ int ti_thermal_expose_sensor(struct ti_bandgap *bgp, int id,
 
 	data = ti_bandgap_get_sensor_data(bgp, id);
 
-	if (IS_ERR_OR_NULL(data))
+	if (!data || IS_ERR(data))
 		data = ti_thermal_build_data(bgp, id);
 
 	if (!data)
@@ -306,7 +307,7 @@ int ti_thermal_expose_sensor(struct ti_bandgap *bgp, int id,
 				OMAP_TRIP_NUMBER, 0, data, &ti_thermal_ops,
 				NULL, FAST_TEMP_MONITORING_RATE,
 				FAST_TEMP_MONITORING_RATE);
-	if (IS_ERR_OR_NULL(data->ti_thermal)) {
+	if (IS_ERR(data->ti_thermal)) {
 		dev_err(bgp->dev, "thermal zone device is NULL\n");
 		return PTR_ERR(data->ti_thermal);
 	}
@@ -343,7 +344,7 @@ int ti_thermal_register_cpu_cooling(struct ti_bandgap *bgp, int id)
 	struct ti_thermal_data *data;
 
 	data = ti_bandgap_get_sensor_data(bgp, id);
-	if (IS_ERR_OR_NULL(data))
+	if (!data || IS_ERR(data))
 		data = ti_thermal_build_data(bgp, id);
 
 	if (!data)
@@ -356,7 +357,7 @@ int ti_thermal_register_cpu_cooling(struct ti_bandgap *bgp, int id)
 
 	/* Register cooling device */
 	data->cool_dev = cpufreq_cooling_register(cpu_present_mask);
-	if (IS_ERR_OR_NULL(data->cool_dev)) {
+	if (IS_ERR(data->cool_dev)) {
 		dev_err(bgp->dev,
 			"Failed to register cpufreq cooling device\n");
 		return PTR_ERR(data->cool_dev);
-- 
1.8.2.1.342.gfa7285d

^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 5/7] thermal: ti-soc-thermal: add thermal data for DRA752 chips
  2013-05-29 15:07 ` Eduardo Valentin
@ 2013-05-29 15:07   ` Eduardo Valentin
  -1 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang; +Cc: linux-pm, linux-kernel, Eduardo Valentin

This patch adds the thermal data for TI DRA752 chips.
In this change it includes (autogen):
. Register offset definitions
. Bitfields and masks for all registers
. Conversion table

Also, the thermal limits, thresholds and extrapolation
rules are included. The extrapolation rule is simply
add +2C as margin.

All 5 sensors, MPU, GPU, CORE, DSPEVE and IVA, are defined
and exposed. Only MPU has cooling device.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 drivers/staging/ti-soc-thermal/dra752-bandgap.h    | 280 ++++++++++++
 .../staging/ti-soc-thermal/dra752-thermal-data.c   | 476 +++++++++++++++++++++
 drivers/thermal/ti-soc-thermal/Kconfig             |  12 +
 drivers/thermal/ti-soc-thermal/Makefile            |   1 +
 drivers/thermal/ti-soc-thermal/ti-thermal.h        |   6 +
 5 files changed, 775 insertions(+)
 create mode 100644 drivers/staging/ti-soc-thermal/dra752-bandgap.h
 create mode 100644 drivers/staging/ti-soc-thermal/dra752-thermal-data.c

diff --git a/drivers/staging/ti-soc-thermal/dra752-bandgap.h b/drivers/staging/ti-soc-thermal/dra752-bandgap.h
new file mode 100644
index 0000000..6b0f2b1
--- /dev/null
+++ b/drivers/staging/ti-soc-thermal/dra752-bandgap.h
@@ -0,0 +1,280 @@
+/*
+ * DRA752 bandgap registers, bitfields and temperature definitions
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Contact:
+ *   Eduardo Valentin <eduardo.valentin@ti.com>
+ *   Tero Kristo <t-kristo@ti.com>
+ *
+ * This is an auto generated file.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+#ifndef __DRA752_BANDGAP_H
+#define __DRA752_BANDGAP_H
+
+/**
+ * *** DRA752 ***
+ *
+ * Below, in sequence, are the Register definitions,
+ * the bitfields and the temperature definitions for DRA752.
+ */
+
+/**
+ * DRA752 register definitions
+ *
+ * Registers are defined as offsets. The offsets are
+ * relative to FUSE_OPP_BGAP_GPU on DRA752.
+ * DRA752_BANDGAP_BASE		0x4a0021e0
+ *
+ * Register below are grouped by domain (not necessarily in offset order)
+ */
+
+
+/* DRA752.common register offsets */
+#define DRA752_BANDGAP_CTRL_1_OFFSET		0x1a0
+#define DRA752_BANDGAP_STATUS_1_OFFSET		0x1c8
+#define DRA752_BANDGAP_CTRL_2_OFFSET		0x39c
+#define DRA752_BANDGAP_STATUS_2_OFFSET		0x3b8
+
+/* DRA752.core register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_CORE_OFFSET		0x8
+#define DRA752_TEMP_SENSOR_CORE_OFFSET			0x154
+#define DRA752_BANDGAP_THRESHOLD_CORE_OFFSET		0x1ac
+#define DRA752_BANDGAP_TSHUT_CORE_OFFSET		0x1b8
+#define DRA752_BANDGAP_CUMUL_DTEMP_CORE_OFFSET		0x1c4
+#define DRA752_DTEMP_CORE_0_OFFSET			0x208
+#define DRA752_DTEMP_CORE_1_OFFSET			0x20c
+#define DRA752_DTEMP_CORE_2_OFFSET			0x210
+#define DRA752_DTEMP_CORE_3_OFFSET			0x214
+#define DRA752_DTEMP_CORE_4_OFFSET			0x218
+
+/* DRA752.iva register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_IVA_OFFSET		0x388
+#define DRA752_TEMP_SENSOR_IVA_OFFSET			0x398
+#define DRA752_BANDGAP_THRESHOLD_IVA_OFFSET		0x3a4
+#define DRA752_BANDGAP_TSHUT_IVA_OFFSET			0x3ac
+#define DRA752_BANDGAP_CUMUL_DTEMP_IVA_OFFSET		0x3b4
+#define DRA752_DTEMP_IVA_0_OFFSET			0x3d0
+#define DRA752_DTEMP_IVA_1_OFFSET			0x3d4
+#define DRA752_DTEMP_IVA_2_OFFSET			0x3d8
+#define DRA752_DTEMP_IVA_3_OFFSET			0x3dc
+#define DRA752_DTEMP_IVA_4_OFFSET			0x3e0
+
+/* DRA752.mpu register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_MPU_OFFSET		0x4
+#define DRA752_TEMP_SENSOR_MPU_OFFSET			0x14c
+#define DRA752_BANDGAP_THRESHOLD_MPU_OFFSET		0x1a4
+#define DRA752_BANDGAP_TSHUT_MPU_OFFSET			0x1b0
+#define DRA752_BANDGAP_CUMUL_DTEMP_MPU_OFFSET		0x1bc
+#define DRA752_DTEMP_MPU_0_OFFSET			0x1e0
+#define DRA752_DTEMP_MPU_1_OFFSET			0x1e4
+#define DRA752_DTEMP_MPU_2_OFFSET			0x1e8
+#define DRA752_DTEMP_MPU_3_OFFSET			0x1ec
+#define DRA752_DTEMP_MPU_4_OFFSET			0x1f0
+
+/* DRA752.dspeve register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_DSPEVE_OFFSET			0x384
+#define DRA752_TEMP_SENSOR_DSPEVE_OFFSET			0x394
+#define DRA752_BANDGAP_THRESHOLD_DSPEVE_OFFSET			0x3a0
+#define DRA752_BANDGAP_TSHUT_DSPEVE_OFFSET			0x3a8
+#define DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_OFFSET		0x3b0
+#define DRA752_DTEMP_DSPEVE_0_OFFSET				0x3bc
+#define DRA752_DTEMP_DSPEVE_1_OFFSET				0x3c0
+#define DRA752_DTEMP_DSPEVE_2_OFFSET				0x3c4
+#define DRA752_DTEMP_DSPEVE_3_OFFSET				0x3c8
+#define DRA752_DTEMP_DSPEVE_4_OFFSET				0x3cc
+
+/* DRA752.gpu register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_GPU_OFFSET		0x0
+#define DRA752_TEMP_SENSOR_GPU_OFFSET			0x150
+#define DRA752_BANDGAP_THRESHOLD_GPU_OFFSET		0x1a8
+#define DRA752_BANDGAP_TSHUT_GPU_OFFSET			0x1b4
+#define DRA752_BANDGAP_CUMUL_DTEMP_GPU_OFFSET		0x1c0
+#define DRA752_DTEMP_GPU_0_OFFSET			0x1f4
+#define DRA752_DTEMP_GPU_1_OFFSET			0x1f8
+#define DRA752_DTEMP_GPU_2_OFFSET			0x1fc
+#define DRA752_DTEMP_GPU_3_OFFSET			0x200
+#define DRA752_DTEMP_GPU_4_OFFSET			0x204
+
+/**
+ * Register bitfields for DRA752
+ *
+ * All the macros bellow define the required bits for
+ * controlling temperature on DRA752. Bit defines are
+ * grouped by register.
+ */
+
+/* DRA752.BANDGAP_STATUS_1 */
+#define DRA752_BANDGAP_STATUS_1_ALERT_MASK		BIT(31)
+#define DRA752_BANDGAP_STATUS_1_HOT_CORE_MASK		BIT(5)
+#define DRA752_BANDGAP_STATUS_1_COLD_CORE_MASK		BIT(4)
+#define DRA752_BANDGAP_STATUS_1_HOT_GPU_MASK		BIT(3)
+#define DRA752_BANDGAP_STATUS_1_COLD_GPU_MASK		BIT(2)
+#define DRA752_BANDGAP_STATUS_1_HOT_MPU_MASK		BIT(1)
+#define DRA752_BANDGAP_STATUS_1_COLD_MPU_MASK		BIT(0)
+
+/* DRA752.BANDGAP_CTRL_2 */
+#define DRA752_BANDGAP_CTRL_2_FREEZE_IVA_MASK			BIT(22)
+#define DRA752_BANDGAP_CTRL_2_FREEZE_DSPEVE_MASK		BIT(21)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_IVA_MASK			BIT(19)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_DSPEVE_MASK			BIT(18)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_IVA_MASK		BIT(16)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_DSPEVE_MASK		BIT(15)
+#define DRA752_BANDGAP_CTRL_2_MASK_HOT_IVA_MASK			BIT(3)
+#define DRA752_BANDGAP_CTRL_2_MASK_COLD_IVA_MASK		BIT(2)
+#define DRA752_BANDGAP_CTRL_2_MASK_HOT_DSPEVE_MASK		BIT(1)
+#define DRA752_BANDGAP_CTRL_2_MASK_COLD_DSPEVE_MASK		BIT(0)
+
+/* DRA752.BANDGAP_STATUS_2 */
+#define DRA752_BANDGAP_STATUS_2_HOT_IVA_MASK			BIT(3)
+#define DRA752_BANDGAP_STATUS_2_COLD_IVA_MASK			BIT(2)
+#define DRA752_BANDGAP_STATUS_2_HOT_DSPEVE_MASK			BIT(1)
+#define DRA752_BANDGAP_STATUS_2_COLD_DSPEVE_MASK		BIT(0)
+
+/* DRA752.BANDGAP_CTRL_1 */
+#define DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK			(0x3 << 30)
+#define DRA752_BANDGAP_CTRL_1_COUNTER_DELAY_MASK		(0x7 << 27)
+#define DRA752_BANDGAP_CTRL_1_FREEZE_CORE_MASK			BIT(23)
+#define DRA752_BANDGAP_CTRL_1_FREEZE_GPU_MASK			BIT(22)
+#define DRA752_BANDGAP_CTRL_1_FREEZE_MPU_MASK			BIT(21)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_CORE_MASK			BIT(20)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_GPU_MASK			BIT(19)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_MPU_MASK			BIT(18)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_CORE_MASK		BIT(17)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_GPU_MASK		BIT(16)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_MPU_MASK		BIT(15)
+#define DRA752_BANDGAP_CTRL_1_MASK_HOT_CORE_MASK		BIT(5)
+#define DRA752_BANDGAP_CTRL_1_MASK_COLD_CORE_MASK		BIT(4)
+#define DRA752_BANDGAP_CTRL_1_MASK_HOT_GPU_MASK			BIT(3)
+#define DRA752_BANDGAP_CTRL_1_MASK_COLD_GPU_MASK		BIT(2)
+#define DRA752_BANDGAP_CTRL_1_MASK_HOT_MPU_MASK			BIT(1)
+#define DRA752_BANDGAP_CTRL_1_MASK_COLD_MPU_MASK		BIT(0)
+
+/* DRA752.TEMP_SENSOR */
+#define DRA752_TEMP_SENSOR_TMPSOFF_MASK		BIT(11)
+#define DRA752_TEMP_SENSOR_EOCZ_MASK		BIT(10)
+#define DRA752_TEMP_SENSOR_DTEMP_MASK		(0x3ff << 0)
+
+/* DRA752.BANDGAP_THRESHOLD */
+#define DRA752_BANDGAP_THRESHOLD_HOT_MASK		(0x3ff << 16)
+#define DRA752_BANDGAP_THRESHOLD_COLD_MASK		(0x3ff << 0)
+
+/* DRA752.TSHUT_THRESHOLD */
+#define DRA752_TSHUT_THRESHOLD_MUXCTRL_MASK		BIT(31)
+#define DRA752_TSHUT_THRESHOLD_HOT_MASK			(0x3ff << 16)
+#define DRA752_TSHUT_THRESHOLD_COLD_MASK		(0x3ff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_CORE */
+#define DRA752_BANDGAP_CUMUL_DTEMP_CORE_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_IVA */
+#define DRA752_BANDGAP_CUMUL_DTEMP_IVA_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_MPU */
+#define DRA752_BANDGAP_CUMUL_DTEMP_MPU_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_DSPEVE */
+#define DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_GPU */
+#define DRA752_BANDGAP_CUMUL_DTEMP_GPU_MASK		(0xffffffff << 0)
+
+/**
+ * Temperature limits and thresholds for DRA752
+ *
+ * All the macros bellow are definitions for handling the
+ * ADC conversions and representation of temperature limits
+ * and thresholds for DRA752. Definitions are grouped
+ * by temperature domain.
+ */
+
+/* DRA752.common temperature definitions */
+/* ADC conversion table limits */
+#define DRA752_ADC_START_VALUE		540
+#define DRA752_ADC_END_VALUE		945
+
+/* DRA752.GPU temperature definitions */
+/* bandgap clock limits */
+#define DRA752_GPU_MAX_FREQ				1500000
+#define DRA752_GPU_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_GPU_MIN_TEMP				-40000
+#define DRA752_GPU_MAX_TEMP				125000
+#define DRA752_GPU_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_GPU_TSHUT_HOT				915
+#define DRA752_GPU_TSHUT_COLD				900
+#define DRA752_GPU_T_HOT				800
+#define DRA752_GPU_T_COLD				795
+
+/* DRA752.MPU temperature definitions */
+/* bandgap clock limits */
+#define DRA752_MPU_MAX_FREQ				1500000
+#define DRA752_MPU_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_MPU_MIN_TEMP				-40000
+#define DRA752_MPU_MAX_TEMP				125000
+#define DRA752_MPU_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_MPU_TSHUT_HOT				915
+#define DRA752_MPU_TSHUT_COLD				900
+#define DRA752_MPU_T_HOT				800
+#define DRA752_MPU_T_COLD				795
+
+/* DRA752.CORE temperature definitions */
+/* bandgap clock limits */
+#define DRA752_CORE_MAX_FREQ				1500000
+#define DRA752_CORE_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_CORE_MIN_TEMP				-40000
+#define DRA752_CORE_MAX_TEMP				125000
+#define DRA752_CORE_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_CORE_TSHUT_HOT				915
+#define DRA752_CORE_TSHUT_COLD				900
+#define DRA752_CORE_T_HOT				800
+#define DRA752_CORE_T_COLD				795
+
+/* DRA752.DSPEVE temperature definitions */
+/* bandgap clock limits */
+#define DRA752_DSPEVE_MAX_FREQ				1500000
+#define DRA752_DSPEVE_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_DSPEVE_MIN_TEMP				-40000
+#define DRA752_DSPEVE_MAX_TEMP				125000
+#define DRA752_DSPEVE_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_DSPEVE_TSHUT_HOT				915
+#define DRA752_DSPEVE_TSHUT_COLD			900
+#define DRA752_DSPEVE_T_HOT				800
+#define DRA752_DSPEVE_T_COLD				795
+
+/* DRA752.IVA temperature definitions */
+/* bandgap clock limits */
+#define DRA752_IVA_MAX_FREQ				1500000
+#define DRA752_IVA_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_IVA_MIN_TEMP				-40000
+#define DRA752_IVA_MAX_TEMP				125000
+#define DRA752_IVA_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_IVA_TSHUT_HOT				915
+#define DRA752_IVA_TSHUT_COLD				900
+#define DRA752_IVA_T_HOT				800
+#define DRA752_IVA_T_COLD				795
+
+#endif /* __DRA752_BANDGAP_H */
diff --git a/drivers/staging/ti-soc-thermal/dra752-thermal-data.c b/drivers/staging/ti-soc-thermal/dra752-thermal-data.c
new file mode 100644
index 0000000..e5d8326
--- /dev/null
+++ b/drivers/staging/ti-soc-thermal/dra752-thermal-data.c
@@ -0,0 +1,476 @@
+/*
+ * DRA752 thermal data.
+ *
+ * Copyright (C) 2013 Texas Instruments Inc.
+ * Contact:
+ *	Eduardo Valentin <eduardo.valentin@ti.com>
+ *	Tero Kristo <t-kristo@ti.com>
+ *
+ * This file is partially autogenerated.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include "ti-thermal.h"
+#include "ti-bandgap.h"
+#include "dra752-bandgap.h"
+
+/*
+ * DRA752 has five instances of thermal sensor: MPU, GPU, CORE,
+ * IVA and DSPEVE need to describe the individual registers and
+ * bit fields.
+ */
+
+/*
+ * DRA752 CORE thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_core_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_CORE_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_CORE_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_CORE_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_CORE_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_CORE_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_CORE_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_CORE_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_CORE_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_CORE_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_CORE_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_CORE_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_CORE_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_CORE_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_CORE_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_CORE_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_CORE_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_CORE_OFFSET,
+};
+
+/*
+ * DRA752 IVA thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_iva_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_IVA_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_2_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_2_MASK_HOT_IVA_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_2_MASK_COLD_IVA_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_2_FREEZE_IVA_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_2_CLEAR_IVA_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_IVA_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_IVA_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_IVA_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_2_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_2_HOT_IVA_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_2_COLD_IVA_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_IVA_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_IVA_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_IVA_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_IVA_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_IVA_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_IVA_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_IVA_OFFSET,
+};
+
+/*
+ * DRA752 MPU thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_mpu_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_MPU_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_MPU_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_MPU_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_MPU_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_MPU_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_MPU_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_MPU_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_MPU_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_MPU_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_MPU_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_MPU_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_MPU_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_MPU_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_MPU_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_MPU_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_MPU_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_MPU_OFFSET,
+};
+
+/*
+ * DRA752 DSPEVE thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_dspeve_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_DSPEVE_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_2_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_2_MASK_HOT_DSPEVE_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_2_MASK_COLD_DSPEVE_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_2_FREEZE_DSPEVE_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_2_CLEAR_DSPEVE_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_DSPEVE_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_DSPEVE_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_DSPEVE_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_2_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_2_HOT_DSPEVE_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_2_COLD_DSPEVE_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_DSPEVE_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_DSPEVE_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_DSPEVE_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_DSPEVE_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_DSPEVE_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_DSPEVE_OFFSET,
+};
+
+/*
+ * DRA752 GPU thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_gpu_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_GPU_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_GPU_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_GPU_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_GPU_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_GPU_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_GPU_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_GPU_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_GPU_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_GPU_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_GPU_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_GPU_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_GPU_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_GPU_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_GPU_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_GPU_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_GPU_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_GPU_OFFSET,
+};
+
+/* Thresholds and limits for DRA752 MPU temperature sensor */
+static struct temp_sensor_data dra752_mpu_temp_sensor_data = {
+	.tshut_hot = DRA752_MPU_TSHUT_HOT,
+	.tshut_cold = DRA752_MPU_TSHUT_COLD,
+	.t_hot = DRA752_MPU_T_HOT,
+	.t_cold = DRA752_MPU_T_COLD,
+	.min_freq = DRA752_MPU_MIN_FREQ,
+	.max_freq = DRA752_MPU_MAX_FREQ,
+	.max_temp = DRA752_MPU_MAX_TEMP,
+	.min_temp = DRA752_MPU_MIN_TEMP,
+	.hyst_val = DRA752_MPU_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 GPU temperature sensor */
+static struct temp_sensor_data dra752_gpu_temp_sensor_data = {
+	.tshut_hot = DRA752_GPU_TSHUT_HOT,
+	.tshut_cold = DRA752_GPU_TSHUT_COLD,
+	.t_hot = DRA752_GPU_T_HOT,
+	.t_cold = DRA752_GPU_T_COLD,
+	.min_freq = DRA752_GPU_MIN_FREQ,
+	.max_freq = DRA752_GPU_MAX_FREQ,
+	.max_temp = DRA752_GPU_MAX_TEMP,
+	.min_temp = DRA752_GPU_MIN_TEMP,
+	.hyst_val = DRA752_GPU_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 CORE temperature sensor */
+static struct temp_sensor_data dra752_core_temp_sensor_data = {
+	.tshut_hot = DRA752_CORE_TSHUT_HOT,
+	.tshut_cold = DRA752_CORE_TSHUT_COLD,
+	.t_hot = DRA752_CORE_T_HOT,
+	.t_cold = DRA752_CORE_T_COLD,
+	.min_freq = DRA752_CORE_MIN_FREQ,
+	.max_freq = DRA752_CORE_MAX_FREQ,
+	.max_temp = DRA752_CORE_MAX_TEMP,
+	.min_temp = DRA752_CORE_MIN_TEMP,
+	.hyst_val = DRA752_CORE_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 DSPEVE temperature sensor */
+static struct temp_sensor_data dra752_dspeve_temp_sensor_data = {
+	.tshut_hot = DRA752_DSPEVE_TSHUT_HOT,
+	.tshut_cold = DRA752_DSPEVE_TSHUT_COLD,
+	.t_hot = DRA752_DSPEVE_T_HOT,
+	.t_cold = DRA752_DSPEVE_T_COLD,
+	.min_freq = DRA752_DSPEVE_MIN_FREQ,
+	.max_freq = DRA752_DSPEVE_MAX_FREQ,
+	.max_temp = DRA752_DSPEVE_MAX_TEMP,
+	.min_temp = DRA752_DSPEVE_MIN_TEMP,
+	.hyst_val = DRA752_DSPEVE_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 IVA temperature sensor */
+static struct temp_sensor_data dra752_iva_temp_sensor_data = {
+	.tshut_hot = DRA752_IVA_TSHUT_HOT,
+	.tshut_cold = DRA752_IVA_TSHUT_COLD,
+	.t_hot = DRA752_IVA_T_HOT,
+	.t_cold = DRA752_IVA_T_COLD,
+	.min_freq = DRA752_IVA_MIN_FREQ,
+	.max_freq = DRA752_IVA_MAX_FREQ,
+	.max_temp = DRA752_IVA_MAX_TEMP,
+	.min_temp = DRA752_IVA_MIN_TEMP,
+	.hyst_val = DRA752_IVA_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/*
+ * DRA752 : Temperature values in milli degree celsius
+ * ADC code values from 540 to 945
+ */
+static
+int dra752_adc_to_temp[DRA752_ADC_END_VALUE - DRA752_ADC_START_VALUE + 1] = {
+	/* Index 540 - 549 */
+	-40000, -40000, -40000, -40000, -39800, -39400, -39000, -38600, -38200,
+	-37800,
+	/* Index 550 - 559 */
+	-37400, -37000, -36600, -36200, -35800, -35300, -34700, -34200, -33800,
+	-33400,
+	/* Index 560 - 569 */
+	-33000, -32600, -32200, -31800, -31400, -31000, -30600, -30200, -29800,
+	-29400,
+	/* Index 570 - 579 */
+	-29000, -28600, -28200, -27700, -27100, -26600, -26200, -25800, -25400,
+	-25000,
+	/* Index 580 - 589 */
+	-24600, -24200, -23800, -23400, -23000, -22600, -22200, -21800, -21400,
+	-21000,
+	/* Index 590 - 599 */
+	-20500, -19900, -19400, -19000, -18600, -18200, -17800, -17400, -17000,
+	-16600,
+	/* Index 600 - 609 */
+	-16200, -15800, -15400, -15000, -14600, -14200, -13800, -13400, -13000,
+	-12500,
+	/* Index 610 - 619 */
+	-11900, -11400, -11000, -10600, -10200, -9800, -9400, -9000, -8600,
+	-8200,
+	/* Index 620 - 629 */
+	-7800, -7400, -7000, -6600, -6200, -5800, -5400, -5000, -4500,
+	-3900,
+	/* Index 630 - 639 */
+	-3400, -3000, -2600, -2200, -1800, -1400, -1000, -600, -200,
+	200,
+	/* Index 640 - 649 */
+	600, 1000, 1400, 1800, 2200, 2600, 3000, 3400, 3900,
+	4500,
+	/* Index 650 - 659 */
+	5000, 5400, 5800, 6200, 6600, 7000, 7400, 7800, 8200,
+	8600,
+	/* Index 660 - 669 */
+	9000, 9400, 9800, 10200, 10600, 11000, 11400, 11800, 12200,
+	12700,
+	/* Index 670 - 679 */
+	13300, 13800, 14200, 14600, 15000, 15400, 15800, 16200, 16600,
+	17000,
+	/* Index 680 - 689 */
+	17400, 17800, 18200, 18600, 19000, 19400, 19800, 20200, 20600,
+	21000,
+	/* Index 690 - 699 */
+	21400, 21900, 22500, 23000, 23400, 23800, 24200, 24600, 25000,
+	25400,
+	/* Index 700 - 709 */
+	25800, 26200, 26600, 27000, 27400, 27800, 28200, 28600, 29000,
+	29400,
+	/* Index 710 - 719 */
+	29800, 30200, 30600, 31000, 31400, 31900, 32500, 33000, 33400,
+	33800,
+	/* Index 720 - 729 */
+	34200, 34600, 35000, 35400, 35800, 36200, 36600, 37000, 37400,
+	37800,
+	/* Index 730 - 739 */
+	38200, 38600, 39000, 39400, 39800, 40200, 40600, 41000, 41400,
+	41800,
+	/* Index 740 - 749 */
+	42200, 42600, 43100, 43700, 44200, 44600, 45000, 45400, 45800,
+	46200,
+	/* Index 750 - 759 */
+	46600, 47000, 47400, 47800, 48200, 48600, 49000, 49400, 49800,
+	50200,
+	/* Index 760 - 769 */
+	50600, 51000, 51400, 51800, 52200, 52600, 53000, 53400, 53800,
+	54200,
+	/* Index 770 - 779 */
+	54600, 55000, 55400, 55900, 56500, 57000, 57400, 57800, 58200,
+	58600,
+	/* Index 780 - 789 */
+	59000, 59400, 59800, 60200, 60600, 61000, 61400, 61800, 62200,
+	62600,
+	/* Index 790 - 799 */
+	63000, 63400, 63800, 64200, 64600, 65000, 65400, 65800, 66200,
+	66600,
+	/* Index 800 - 809 */
+	67000, 67400, 67800, 68200, 68600, 69000, 69400, 69800, 70200,
+	70600,
+	/* Index 810 - 819 */
+	71000, 71500, 72100, 72600, 73000, 73400, 73800, 74200, 74600,
+	75000,
+	/* Index 820 - 829 */
+	75400, 75800, 76200, 76600, 77000, 77400, 77800, 78200, 78600,
+	79000,
+	/* Index 830 - 839 */
+	79400, 79800, 80200, 80600, 81000, 81400, 81800, 82200, 82600,
+	83000,
+	/* Index 840 - 849 */
+	83400, 83800, 84200, 84600, 85000, 85400, 85800, 86200, 86600,
+	87000,
+	/* Index 850 - 859 */
+	87400, 87800, 88200, 88600, 89000, 89400, 89800, 90200, 90600,
+	91000,
+	/* Index 860 - 869 */
+	91400, 91800, 92200, 92600, 93000, 93400, 93800, 94200, 94600,
+	95000,
+	/* Index 870 - 879 */
+	95400, 95800, 96200, 96600, 97000, 97500, 98100, 98600, 99000,
+	99400,
+	/* Index 880 - 889 */
+	99800, 100200, 100600, 101000, 101400, 101800, 102200, 102600, 103000,
+	103400,
+	/* Index 890 - 899 */
+	103800, 104200, 104600, 105000, 105400, 105800, 106200, 106600, 107000,
+	107400,
+	/* Index 900 - 909 */
+	107800, 108200, 108600, 109000, 109400, 109800, 110200, 110600, 111000,
+	111400,
+	/* Index 910 - 919 */
+	111800, 112200, 112600, 113000, 113400, 113800, 114200, 114600, 115000,
+	115400,
+	/* Index 920 - 929 */
+	115800, 116200, 116600, 117000, 117400, 117800, 118200, 118600, 119000,
+	119400,
+	/* Index 930 - 939 */
+	119800, 120200, 120600, 121000, 121400, 121800, 122200, 122600, 123000,
+	123400,
+	/* Index 940 - 945 */
+	123800, 124200, 124600, 124900, 125000, 125000,
+};
+
+/* DRA752 data */
+const struct ti_bandgap_data dra752_data = {
+	.features = TI_BANDGAP_FEATURE_TSHUT_CONFIG |
+			TI_BANDGAP_FEATURE_FREEZE_BIT |
+			TI_BANDGAP_FEATURE_TALERT |
+			TI_BANDGAP_FEATURE_COUNTER_DELAY |
+			TI_BANDGAP_FEATURE_HISTORY_BUFFER,
+	.fclock_name = "l3instr_ts_gclk_div",
+	.div_ck_name = "l3instr_ts_gclk_div",
+	.conv_table = dra752_adc_to_temp,
+	.adc_start_val = DRA752_ADC_START_VALUE,
+	.adc_end_val = DRA752_ADC_END_VALUE,
+	.expose_sensor = ti_thermal_expose_sensor,
+	.remove_sensor = ti_thermal_remove_sensor,
+	.sensors = {
+		{
+		.registers = &dra752_mpu_temp_sensor_registers,
+		.ts_data = &dra752_mpu_temp_sensor_data,
+		.domain = "cpu",
+		.register_cooling = ti_thermal_register_cpu_cooling,
+		.unregister_cooling = ti_thermal_unregister_cpu_cooling,
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_gpu_temp_sensor_registers,
+		.ts_data = &dra752_gpu_temp_sensor_data,
+		.domain = "gpu",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_core_temp_sensor_registers,
+		.ts_data = &dra752_core_temp_sensor_data,
+		.domain = "core",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_dspeve_temp_sensor_registers,
+		.ts_data = &dra752_dspeve_temp_sensor_data,
+		.domain = "dspeve",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_iva_temp_sensor_registers,
+		.ts_data = &dra752_iva_temp_sensor_data,
+		.domain = "iva",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+	},
+	.sensor_count = 5,
+};
diff --git a/drivers/thermal/ti-soc-thermal/Kconfig b/drivers/thermal/ti-soc-thermal/Kconfig
index e81375f..bd4c7be 100644
--- a/drivers/thermal/ti-soc-thermal/Kconfig
+++ b/drivers/thermal/ti-soc-thermal/Kconfig
@@ -46,3 +46,15 @@ config OMAP5_THERMAL
 
 	  This includes alert interrupts generation and also the TSHUT
 	  support.
+
+config DRA752_THERMAL
+	bool "Texas Instruments DRA752 thermal support"
+	depends on TI_SOC_THERMAL
+	depends on SOC_DRA7XX
+	help
+	  If you say yes here you get thermal support for the Texas Instruments
+	  DRA752 SoC family. The current chip supported are:
+	   - DRA752
+
+	  This includes alert interrupts generation and also the TSHUT
+	  support.
diff --git a/drivers/thermal/ti-soc-thermal/Makefile b/drivers/thermal/ti-soc-thermal/Makefile
index 0ca034f..1226b24 100644
--- a/drivers/thermal/ti-soc-thermal/Makefile
+++ b/drivers/thermal/ti-soc-thermal/Makefile
@@ -1,5 +1,6 @@
 obj-$(CONFIG_TI_SOC_THERMAL)		+= ti-soc-thermal.o
 ti-soc-thermal-y			:= ti-bandgap.o
 ti-soc-thermal-$(CONFIG_TI_THERMAL)	+= ti-thermal-common.o
+ti-soc-thermal-$(CONFIG_DRA752_THERMAL)	+= dra752-thermal-data.o
 ti-soc-thermal-$(CONFIG_OMAP4_THERMAL)	+= omap4-thermal-data.o
 ti-soc-thermal-$(CONFIG_OMAP5_THERMAL)	+= omap5-thermal-data.o
diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal.h b/drivers/thermal/ti-soc-thermal/ti-thermal.h
index 5055777..f8b7ffe 100644
--- a/drivers/thermal/ti-soc-thermal/ti-thermal.h
+++ b/drivers/thermal/ti-soc-thermal/ti-thermal.h
@@ -38,6 +38,9 @@
 #define OMAP_GRADIENT_SLOPE_5430_GPU				117
 #define OMAP_GRADIENT_CONST_5430_GPU				-2992
 
+#define DRA752_GRADIENT_SLOPE					0
+#define DRA752_GRADIENT_CONST					2000
+
 /* PCB sensor calculation constants */
 #define OMAP_GRADIENT_SLOPE_W_PCB_4430				0
 #define OMAP_GRADIENT_CONST_W_PCB_4430				20000
@@ -51,6 +54,9 @@
 #define OMAP_GRADIENT_SLOPE_W_PCB_5430_GPU			464
 #define OMAP_GRADIENT_CONST_W_PCB_5430_GPU			-5102
 
+#define DRA752_GRADIENT_SLOPE_W_PCB				0
+#define DRA752_GRADIENT_CONST_W_PCB				2000
+
 /* trip points of interest in milicelsius (at hotspot level) */
 #define OMAP_TRIP_COLD						100000
 #define OMAP_TRIP_HOT						110000
-- 
1.8.2.1.342.gfa7285d


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 5/7] thermal: ti-soc-thermal: add thermal data for DRA752 chips
@ 2013-05-29 15:07   ` Eduardo Valentin
  0 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang; +Cc: linux-pm, linux-kernel, Eduardo Valentin

This patch adds the thermal data for TI DRA752 chips.
In this change it includes (autogen):
. Register offset definitions
. Bitfields and masks for all registers
. Conversion table

Also, the thermal limits, thresholds and extrapolation
rules are included. The extrapolation rule is simply
add +2C as margin.

All 5 sensors, MPU, GPU, CORE, DSPEVE and IVA, are defined
and exposed. Only MPU has cooling device.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 drivers/staging/ti-soc-thermal/dra752-bandgap.h    | 280 ++++++++++++
 .../staging/ti-soc-thermal/dra752-thermal-data.c   | 476 +++++++++++++++++++++
 drivers/thermal/ti-soc-thermal/Kconfig             |  12 +
 drivers/thermal/ti-soc-thermal/Makefile            |   1 +
 drivers/thermal/ti-soc-thermal/ti-thermal.h        |   6 +
 5 files changed, 775 insertions(+)
 create mode 100644 drivers/staging/ti-soc-thermal/dra752-bandgap.h
 create mode 100644 drivers/staging/ti-soc-thermal/dra752-thermal-data.c

diff --git a/drivers/staging/ti-soc-thermal/dra752-bandgap.h b/drivers/staging/ti-soc-thermal/dra752-bandgap.h
new file mode 100644
index 0000000..6b0f2b1
--- /dev/null
+++ b/drivers/staging/ti-soc-thermal/dra752-bandgap.h
@@ -0,0 +1,280 @@
+/*
+ * DRA752 bandgap registers, bitfields and temperature definitions
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Contact:
+ *   Eduardo Valentin <eduardo.valentin@ti.com>
+ *   Tero Kristo <t-kristo@ti.com>
+ *
+ * This is an auto generated file.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+#ifndef __DRA752_BANDGAP_H
+#define __DRA752_BANDGAP_H
+
+/**
+ * *** DRA752 ***
+ *
+ * Below, in sequence, are the Register definitions,
+ * the bitfields and the temperature definitions for DRA752.
+ */
+
+/**
+ * DRA752 register definitions
+ *
+ * Registers are defined as offsets. The offsets are
+ * relative to FUSE_OPP_BGAP_GPU on DRA752.
+ * DRA752_BANDGAP_BASE		0x4a0021e0
+ *
+ * Register below are grouped by domain (not necessarily in offset order)
+ */
+
+
+/* DRA752.common register offsets */
+#define DRA752_BANDGAP_CTRL_1_OFFSET		0x1a0
+#define DRA752_BANDGAP_STATUS_1_OFFSET		0x1c8
+#define DRA752_BANDGAP_CTRL_2_OFFSET		0x39c
+#define DRA752_BANDGAP_STATUS_2_OFFSET		0x3b8
+
+/* DRA752.core register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_CORE_OFFSET		0x8
+#define DRA752_TEMP_SENSOR_CORE_OFFSET			0x154
+#define DRA752_BANDGAP_THRESHOLD_CORE_OFFSET		0x1ac
+#define DRA752_BANDGAP_TSHUT_CORE_OFFSET		0x1b8
+#define DRA752_BANDGAP_CUMUL_DTEMP_CORE_OFFSET		0x1c4
+#define DRA752_DTEMP_CORE_0_OFFSET			0x208
+#define DRA752_DTEMP_CORE_1_OFFSET			0x20c
+#define DRA752_DTEMP_CORE_2_OFFSET			0x210
+#define DRA752_DTEMP_CORE_3_OFFSET			0x214
+#define DRA752_DTEMP_CORE_4_OFFSET			0x218
+
+/* DRA752.iva register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_IVA_OFFSET		0x388
+#define DRA752_TEMP_SENSOR_IVA_OFFSET			0x398
+#define DRA752_BANDGAP_THRESHOLD_IVA_OFFSET		0x3a4
+#define DRA752_BANDGAP_TSHUT_IVA_OFFSET			0x3ac
+#define DRA752_BANDGAP_CUMUL_DTEMP_IVA_OFFSET		0x3b4
+#define DRA752_DTEMP_IVA_0_OFFSET			0x3d0
+#define DRA752_DTEMP_IVA_1_OFFSET			0x3d4
+#define DRA752_DTEMP_IVA_2_OFFSET			0x3d8
+#define DRA752_DTEMP_IVA_3_OFFSET			0x3dc
+#define DRA752_DTEMP_IVA_4_OFFSET			0x3e0
+
+/* DRA752.mpu register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_MPU_OFFSET		0x4
+#define DRA752_TEMP_SENSOR_MPU_OFFSET			0x14c
+#define DRA752_BANDGAP_THRESHOLD_MPU_OFFSET		0x1a4
+#define DRA752_BANDGAP_TSHUT_MPU_OFFSET			0x1b0
+#define DRA752_BANDGAP_CUMUL_DTEMP_MPU_OFFSET		0x1bc
+#define DRA752_DTEMP_MPU_0_OFFSET			0x1e0
+#define DRA752_DTEMP_MPU_1_OFFSET			0x1e4
+#define DRA752_DTEMP_MPU_2_OFFSET			0x1e8
+#define DRA752_DTEMP_MPU_3_OFFSET			0x1ec
+#define DRA752_DTEMP_MPU_4_OFFSET			0x1f0
+
+/* DRA752.dspeve register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_DSPEVE_OFFSET			0x384
+#define DRA752_TEMP_SENSOR_DSPEVE_OFFSET			0x394
+#define DRA752_BANDGAP_THRESHOLD_DSPEVE_OFFSET			0x3a0
+#define DRA752_BANDGAP_TSHUT_DSPEVE_OFFSET			0x3a8
+#define DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_OFFSET		0x3b0
+#define DRA752_DTEMP_DSPEVE_0_OFFSET				0x3bc
+#define DRA752_DTEMP_DSPEVE_1_OFFSET				0x3c0
+#define DRA752_DTEMP_DSPEVE_2_OFFSET				0x3c4
+#define DRA752_DTEMP_DSPEVE_3_OFFSET				0x3c8
+#define DRA752_DTEMP_DSPEVE_4_OFFSET				0x3cc
+
+/* DRA752.gpu register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_GPU_OFFSET		0x0
+#define DRA752_TEMP_SENSOR_GPU_OFFSET			0x150
+#define DRA752_BANDGAP_THRESHOLD_GPU_OFFSET		0x1a8
+#define DRA752_BANDGAP_TSHUT_GPU_OFFSET			0x1b4
+#define DRA752_BANDGAP_CUMUL_DTEMP_GPU_OFFSET		0x1c0
+#define DRA752_DTEMP_GPU_0_OFFSET			0x1f4
+#define DRA752_DTEMP_GPU_1_OFFSET			0x1f8
+#define DRA752_DTEMP_GPU_2_OFFSET			0x1fc
+#define DRA752_DTEMP_GPU_3_OFFSET			0x200
+#define DRA752_DTEMP_GPU_4_OFFSET			0x204
+
+/**
+ * Register bitfields for DRA752
+ *
+ * All the macros bellow define the required bits for
+ * controlling temperature on DRA752. Bit defines are
+ * grouped by register.
+ */
+
+/* DRA752.BANDGAP_STATUS_1 */
+#define DRA752_BANDGAP_STATUS_1_ALERT_MASK		BIT(31)
+#define DRA752_BANDGAP_STATUS_1_HOT_CORE_MASK		BIT(5)
+#define DRA752_BANDGAP_STATUS_1_COLD_CORE_MASK		BIT(4)
+#define DRA752_BANDGAP_STATUS_1_HOT_GPU_MASK		BIT(3)
+#define DRA752_BANDGAP_STATUS_1_COLD_GPU_MASK		BIT(2)
+#define DRA752_BANDGAP_STATUS_1_HOT_MPU_MASK		BIT(1)
+#define DRA752_BANDGAP_STATUS_1_COLD_MPU_MASK		BIT(0)
+
+/* DRA752.BANDGAP_CTRL_2 */
+#define DRA752_BANDGAP_CTRL_2_FREEZE_IVA_MASK			BIT(22)
+#define DRA752_BANDGAP_CTRL_2_FREEZE_DSPEVE_MASK		BIT(21)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_IVA_MASK			BIT(19)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_DSPEVE_MASK			BIT(18)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_IVA_MASK		BIT(16)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_DSPEVE_MASK		BIT(15)
+#define DRA752_BANDGAP_CTRL_2_MASK_HOT_IVA_MASK			BIT(3)
+#define DRA752_BANDGAP_CTRL_2_MASK_COLD_IVA_MASK		BIT(2)
+#define DRA752_BANDGAP_CTRL_2_MASK_HOT_DSPEVE_MASK		BIT(1)
+#define DRA752_BANDGAP_CTRL_2_MASK_COLD_DSPEVE_MASK		BIT(0)
+
+/* DRA752.BANDGAP_STATUS_2 */
+#define DRA752_BANDGAP_STATUS_2_HOT_IVA_MASK			BIT(3)
+#define DRA752_BANDGAP_STATUS_2_COLD_IVA_MASK			BIT(2)
+#define DRA752_BANDGAP_STATUS_2_HOT_DSPEVE_MASK			BIT(1)
+#define DRA752_BANDGAP_STATUS_2_COLD_DSPEVE_MASK		BIT(0)
+
+/* DRA752.BANDGAP_CTRL_1 */
+#define DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK			(0x3 << 30)
+#define DRA752_BANDGAP_CTRL_1_COUNTER_DELAY_MASK		(0x7 << 27)
+#define DRA752_BANDGAP_CTRL_1_FREEZE_CORE_MASK			BIT(23)
+#define DRA752_BANDGAP_CTRL_1_FREEZE_GPU_MASK			BIT(22)
+#define DRA752_BANDGAP_CTRL_1_FREEZE_MPU_MASK			BIT(21)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_CORE_MASK			BIT(20)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_GPU_MASK			BIT(19)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_MPU_MASK			BIT(18)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_CORE_MASK		BIT(17)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_GPU_MASK		BIT(16)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_MPU_MASK		BIT(15)
+#define DRA752_BANDGAP_CTRL_1_MASK_HOT_CORE_MASK		BIT(5)
+#define DRA752_BANDGAP_CTRL_1_MASK_COLD_CORE_MASK		BIT(4)
+#define DRA752_BANDGAP_CTRL_1_MASK_HOT_GPU_MASK			BIT(3)
+#define DRA752_BANDGAP_CTRL_1_MASK_COLD_GPU_MASK		BIT(2)
+#define DRA752_BANDGAP_CTRL_1_MASK_HOT_MPU_MASK			BIT(1)
+#define DRA752_BANDGAP_CTRL_1_MASK_COLD_MPU_MASK		BIT(0)
+
+/* DRA752.TEMP_SENSOR */
+#define DRA752_TEMP_SENSOR_TMPSOFF_MASK		BIT(11)
+#define DRA752_TEMP_SENSOR_EOCZ_MASK		BIT(10)
+#define DRA752_TEMP_SENSOR_DTEMP_MASK		(0x3ff << 0)
+
+/* DRA752.BANDGAP_THRESHOLD */
+#define DRA752_BANDGAP_THRESHOLD_HOT_MASK		(0x3ff << 16)
+#define DRA752_BANDGAP_THRESHOLD_COLD_MASK		(0x3ff << 0)
+
+/* DRA752.TSHUT_THRESHOLD */
+#define DRA752_TSHUT_THRESHOLD_MUXCTRL_MASK		BIT(31)
+#define DRA752_TSHUT_THRESHOLD_HOT_MASK			(0x3ff << 16)
+#define DRA752_TSHUT_THRESHOLD_COLD_MASK		(0x3ff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_CORE */
+#define DRA752_BANDGAP_CUMUL_DTEMP_CORE_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_IVA */
+#define DRA752_BANDGAP_CUMUL_DTEMP_IVA_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_MPU */
+#define DRA752_BANDGAP_CUMUL_DTEMP_MPU_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_DSPEVE */
+#define DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_GPU */
+#define DRA752_BANDGAP_CUMUL_DTEMP_GPU_MASK		(0xffffffff << 0)
+
+/**
+ * Temperature limits and thresholds for DRA752
+ *
+ * All the macros bellow are definitions for handling the
+ * ADC conversions and representation of temperature limits
+ * and thresholds for DRA752. Definitions are grouped
+ * by temperature domain.
+ */
+
+/* DRA752.common temperature definitions */
+/* ADC conversion table limits */
+#define DRA752_ADC_START_VALUE		540
+#define DRA752_ADC_END_VALUE		945
+
+/* DRA752.GPU temperature definitions */
+/* bandgap clock limits */
+#define DRA752_GPU_MAX_FREQ				1500000
+#define DRA752_GPU_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_GPU_MIN_TEMP				-40000
+#define DRA752_GPU_MAX_TEMP				125000
+#define DRA752_GPU_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_GPU_TSHUT_HOT				915
+#define DRA752_GPU_TSHUT_COLD				900
+#define DRA752_GPU_T_HOT				800
+#define DRA752_GPU_T_COLD				795
+
+/* DRA752.MPU temperature definitions */
+/* bandgap clock limits */
+#define DRA752_MPU_MAX_FREQ				1500000
+#define DRA752_MPU_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_MPU_MIN_TEMP				-40000
+#define DRA752_MPU_MAX_TEMP				125000
+#define DRA752_MPU_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_MPU_TSHUT_HOT				915
+#define DRA752_MPU_TSHUT_COLD				900
+#define DRA752_MPU_T_HOT				800
+#define DRA752_MPU_T_COLD				795
+
+/* DRA752.CORE temperature definitions */
+/* bandgap clock limits */
+#define DRA752_CORE_MAX_FREQ				1500000
+#define DRA752_CORE_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_CORE_MIN_TEMP				-40000
+#define DRA752_CORE_MAX_TEMP				125000
+#define DRA752_CORE_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_CORE_TSHUT_HOT				915
+#define DRA752_CORE_TSHUT_COLD				900
+#define DRA752_CORE_T_HOT				800
+#define DRA752_CORE_T_COLD				795
+
+/* DRA752.DSPEVE temperature definitions */
+/* bandgap clock limits */
+#define DRA752_DSPEVE_MAX_FREQ				1500000
+#define DRA752_DSPEVE_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_DSPEVE_MIN_TEMP				-40000
+#define DRA752_DSPEVE_MAX_TEMP				125000
+#define DRA752_DSPEVE_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_DSPEVE_TSHUT_HOT				915
+#define DRA752_DSPEVE_TSHUT_COLD			900
+#define DRA752_DSPEVE_T_HOT				800
+#define DRA752_DSPEVE_T_COLD				795
+
+/* DRA752.IVA temperature definitions */
+/* bandgap clock limits */
+#define DRA752_IVA_MAX_FREQ				1500000
+#define DRA752_IVA_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_IVA_MIN_TEMP				-40000
+#define DRA752_IVA_MAX_TEMP				125000
+#define DRA752_IVA_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_IVA_TSHUT_HOT				915
+#define DRA752_IVA_TSHUT_COLD				900
+#define DRA752_IVA_T_HOT				800
+#define DRA752_IVA_T_COLD				795
+
+#endif /* __DRA752_BANDGAP_H */
diff --git a/drivers/staging/ti-soc-thermal/dra752-thermal-data.c b/drivers/staging/ti-soc-thermal/dra752-thermal-data.c
new file mode 100644
index 0000000..e5d8326
--- /dev/null
+++ b/drivers/staging/ti-soc-thermal/dra752-thermal-data.c
@@ -0,0 +1,476 @@
+/*
+ * DRA752 thermal data.
+ *
+ * Copyright (C) 2013 Texas Instruments Inc.
+ * Contact:
+ *	Eduardo Valentin <eduardo.valentin@ti.com>
+ *	Tero Kristo <t-kristo@ti.com>
+ *
+ * This file is partially autogenerated.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include "ti-thermal.h"
+#include "ti-bandgap.h"
+#include "dra752-bandgap.h"
+
+/*
+ * DRA752 has five instances of thermal sensor: MPU, GPU, CORE,
+ * IVA and DSPEVE need to describe the individual registers and
+ * bit fields.
+ */
+
+/*
+ * DRA752 CORE thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_core_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_CORE_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_CORE_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_CORE_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_CORE_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_CORE_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_CORE_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_CORE_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_CORE_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_CORE_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_CORE_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_CORE_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_CORE_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_CORE_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_CORE_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_CORE_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_CORE_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_CORE_OFFSET,
+};
+
+/*
+ * DRA752 IVA thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_iva_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_IVA_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_2_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_2_MASK_HOT_IVA_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_2_MASK_COLD_IVA_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_2_FREEZE_IVA_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_2_CLEAR_IVA_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_IVA_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_IVA_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_IVA_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_2_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_2_HOT_IVA_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_2_COLD_IVA_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_IVA_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_IVA_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_IVA_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_IVA_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_IVA_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_IVA_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_IVA_OFFSET,
+};
+
+/*
+ * DRA752 MPU thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_mpu_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_MPU_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_MPU_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_MPU_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_MPU_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_MPU_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_MPU_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_MPU_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_MPU_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_MPU_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_MPU_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_MPU_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_MPU_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_MPU_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_MPU_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_MPU_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_MPU_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_MPU_OFFSET,
+};
+
+/*
+ * DRA752 DSPEVE thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_dspeve_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_DSPEVE_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_2_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_2_MASK_HOT_DSPEVE_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_2_MASK_COLD_DSPEVE_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_2_FREEZE_DSPEVE_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_2_CLEAR_DSPEVE_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_DSPEVE_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_DSPEVE_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_DSPEVE_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_2_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_2_HOT_DSPEVE_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_2_COLD_DSPEVE_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_DSPEVE_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_DSPEVE_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_DSPEVE_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_DSPEVE_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_DSPEVE_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_DSPEVE_OFFSET,
+};
+
+/*
+ * DRA752 GPU thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_gpu_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_GPU_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_GPU_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_GPU_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_GPU_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_GPU_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_GPU_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_GPU_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_GPU_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_GPU_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_GPU_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_GPU_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_GPU_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_GPU_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_GPU_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_GPU_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_GPU_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_GPU_OFFSET,
+};
+
+/* Thresholds and limits for DRA752 MPU temperature sensor */
+static struct temp_sensor_data dra752_mpu_temp_sensor_data = {
+	.tshut_hot = DRA752_MPU_TSHUT_HOT,
+	.tshut_cold = DRA752_MPU_TSHUT_COLD,
+	.t_hot = DRA752_MPU_T_HOT,
+	.t_cold = DRA752_MPU_T_COLD,
+	.min_freq = DRA752_MPU_MIN_FREQ,
+	.max_freq = DRA752_MPU_MAX_FREQ,
+	.max_temp = DRA752_MPU_MAX_TEMP,
+	.min_temp = DRA752_MPU_MIN_TEMP,
+	.hyst_val = DRA752_MPU_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 GPU temperature sensor */
+static struct temp_sensor_data dra752_gpu_temp_sensor_data = {
+	.tshut_hot = DRA752_GPU_TSHUT_HOT,
+	.tshut_cold = DRA752_GPU_TSHUT_COLD,
+	.t_hot = DRA752_GPU_T_HOT,
+	.t_cold = DRA752_GPU_T_COLD,
+	.min_freq = DRA752_GPU_MIN_FREQ,
+	.max_freq = DRA752_GPU_MAX_FREQ,
+	.max_temp = DRA752_GPU_MAX_TEMP,
+	.min_temp = DRA752_GPU_MIN_TEMP,
+	.hyst_val = DRA752_GPU_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 CORE temperature sensor */
+static struct temp_sensor_data dra752_core_temp_sensor_data = {
+	.tshut_hot = DRA752_CORE_TSHUT_HOT,
+	.tshut_cold = DRA752_CORE_TSHUT_COLD,
+	.t_hot = DRA752_CORE_T_HOT,
+	.t_cold = DRA752_CORE_T_COLD,
+	.min_freq = DRA752_CORE_MIN_FREQ,
+	.max_freq = DRA752_CORE_MAX_FREQ,
+	.max_temp = DRA752_CORE_MAX_TEMP,
+	.min_temp = DRA752_CORE_MIN_TEMP,
+	.hyst_val = DRA752_CORE_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 DSPEVE temperature sensor */
+static struct temp_sensor_data dra752_dspeve_temp_sensor_data = {
+	.tshut_hot = DRA752_DSPEVE_TSHUT_HOT,
+	.tshut_cold = DRA752_DSPEVE_TSHUT_COLD,
+	.t_hot = DRA752_DSPEVE_T_HOT,
+	.t_cold = DRA752_DSPEVE_T_COLD,
+	.min_freq = DRA752_DSPEVE_MIN_FREQ,
+	.max_freq = DRA752_DSPEVE_MAX_FREQ,
+	.max_temp = DRA752_DSPEVE_MAX_TEMP,
+	.min_temp = DRA752_DSPEVE_MIN_TEMP,
+	.hyst_val = DRA752_DSPEVE_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 IVA temperature sensor */
+static struct temp_sensor_data dra752_iva_temp_sensor_data = {
+	.tshut_hot = DRA752_IVA_TSHUT_HOT,
+	.tshut_cold = DRA752_IVA_TSHUT_COLD,
+	.t_hot = DRA752_IVA_T_HOT,
+	.t_cold = DRA752_IVA_T_COLD,
+	.min_freq = DRA752_IVA_MIN_FREQ,
+	.max_freq = DRA752_IVA_MAX_FREQ,
+	.max_temp = DRA752_IVA_MAX_TEMP,
+	.min_temp = DRA752_IVA_MIN_TEMP,
+	.hyst_val = DRA752_IVA_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/*
+ * DRA752 : Temperature values in milli degree celsius
+ * ADC code values from 540 to 945
+ */
+static
+int dra752_adc_to_temp[DRA752_ADC_END_VALUE - DRA752_ADC_START_VALUE + 1] = {
+	/* Index 540 - 549 */
+	-40000, -40000, -40000, -40000, -39800, -39400, -39000, -38600, -38200,
+	-37800,
+	/* Index 550 - 559 */
+	-37400, -37000, -36600, -36200, -35800, -35300, -34700, -34200, -33800,
+	-33400,
+	/* Index 560 - 569 */
+	-33000, -32600, -32200, -31800, -31400, -31000, -30600, -30200, -29800,
+	-29400,
+	/* Index 570 - 579 */
+	-29000, -28600, -28200, -27700, -27100, -26600, -26200, -25800, -25400,
+	-25000,
+	/* Index 580 - 589 */
+	-24600, -24200, -23800, -23400, -23000, -22600, -22200, -21800, -21400,
+	-21000,
+	/* Index 590 - 599 */
+	-20500, -19900, -19400, -19000, -18600, -18200, -17800, -17400, -17000,
+	-16600,
+	/* Index 600 - 609 */
+	-16200, -15800, -15400, -15000, -14600, -14200, -13800, -13400, -13000,
+	-12500,
+	/* Index 610 - 619 */
+	-11900, -11400, -11000, -10600, -10200, -9800, -9400, -9000, -8600,
+	-8200,
+	/* Index 620 - 629 */
+	-7800, -7400, -7000, -6600, -6200, -5800, -5400, -5000, -4500,
+	-3900,
+	/* Index 630 - 639 */
+	-3400, -3000, -2600, -2200, -1800, -1400, -1000, -600, -200,
+	200,
+	/* Index 640 - 649 */
+	600, 1000, 1400, 1800, 2200, 2600, 3000, 3400, 3900,
+	4500,
+	/* Index 650 - 659 */
+	5000, 5400, 5800, 6200, 6600, 7000, 7400, 7800, 8200,
+	8600,
+	/* Index 660 - 669 */
+	9000, 9400, 9800, 10200, 10600, 11000, 11400, 11800, 12200,
+	12700,
+	/* Index 670 - 679 */
+	13300, 13800, 14200, 14600, 15000, 15400, 15800, 16200, 16600,
+	17000,
+	/* Index 680 - 689 */
+	17400, 17800, 18200, 18600, 19000, 19400, 19800, 20200, 20600,
+	21000,
+	/* Index 690 - 699 */
+	21400, 21900, 22500, 23000, 23400, 23800, 24200, 24600, 25000,
+	25400,
+	/* Index 700 - 709 */
+	25800, 26200, 26600, 27000, 27400, 27800, 28200, 28600, 29000,
+	29400,
+	/* Index 710 - 719 */
+	29800, 30200, 30600, 31000, 31400, 31900, 32500, 33000, 33400,
+	33800,
+	/* Index 720 - 729 */
+	34200, 34600, 35000, 35400, 35800, 36200, 36600, 37000, 37400,
+	37800,
+	/* Index 730 - 739 */
+	38200, 38600, 39000, 39400, 39800, 40200, 40600, 41000, 41400,
+	41800,
+	/* Index 740 - 749 */
+	42200, 42600, 43100, 43700, 44200, 44600, 45000, 45400, 45800,
+	46200,
+	/* Index 750 - 759 */
+	46600, 47000, 47400, 47800, 48200, 48600, 49000, 49400, 49800,
+	50200,
+	/* Index 760 - 769 */
+	50600, 51000, 51400, 51800, 52200, 52600, 53000, 53400, 53800,
+	54200,
+	/* Index 770 - 779 */
+	54600, 55000, 55400, 55900, 56500, 57000, 57400, 57800, 58200,
+	58600,
+	/* Index 780 - 789 */
+	59000, 59400, 59800, 60200, 60600, 61000, 61400, 61800, 62200,
+	62600,
+	/* Index 790 - 799 */
+	63000, 63400, 63800, 64200, 64600, 65000, 65400, 65800, 66200,
+	66600,
+	/* Index 800 - 809 */
+	67000, 67400, 67800, 68200, 68600, 69000, 69400, 69800, 70200,
+	70600,
+	/* Index 810 - 819 */
+	71000, 71500, 72100, 72600, 73000, 73400, 73800, 74200, 74600,
+	75000,
+	/* Index 820 - 829 */
+	75400, 75800, 76200, 76600, 77000, 77400, 77800, 78200, 78600,
+	79000,
+	/* Index 830 - 839 */
+	79400, 79800, 80200, 80600, 81000, 81400, 81800, 82200, 82600,
+	83000,
+	/* Index 840 - 849 */
+	83400, 83800, 84200, 84600, 85000, 85400, 85800, 86200, 86600,
+	87000,
+	/* Index 850 - 859 */
+	87400, 87800, 88200, 88600, 89000, 89400, 89800, 90200, 90600,
+	91000,
+	/* Index 860 - 869 */
+	91400, 91800, 92200, 92600, 93000, 93400, 93800, 94200, 94600,
+	95000,
+	/* Index 870 - 879 */
+	95400, 95800, 96200, 96600, 97000, 97500, 98100, 98600, 99000,
+	99400,
+	/* Index 880 - 889 */
+	99800, 100200, 100600, 101000, 101400, 101800, 102200, 102600, 103000,
+	103400,
+	/* Index 890 - 899 */
+	103800, 104200, 104600, 105000, 105400, 105800, 106200, 106600, 107000,
+	107400,
+	/* Index 900 - 909 */
+	107800, 108200, 108600, 109000, 109400, 109800, 110200, 110600, 111000,
+	111400,
+	/* Index 910 - 919 */
+	111800, 112200, 112600, 113000, 113400, 113800, 114200, 114600, 115000,
+	115400,
+	/* Index 920 - 929 */
+	115800, 116200, 116600, 117000, 117400, 117800, 118200, 118600, 119000,
+	119400,
+	/* Index 930 - 939 */
+	119800, 120200, 120600, 121000, 121400, 121800, 122200, 122600, 123000,
+	123400,
+	/* Index 940 - 945 */
+	123800, 124200, 124600, 124900, 125000, 125000,
+};
+
+/* DRA752 data */
+const struct ti_bandgap_data dra752_data = {
+	.features = TI_BANDGAP_FEATURE_TSHUT_CONFIG |
+			TI_BANDGAP_FEATURE_FREEZE_BIT |
+			TI_BANDGAP_FEATURE_TALERT |
+			TI_BANDGAP_FEATURE_COUNTER_DELAY |
+			TI_BANDGAP_FEATURE_HISTORY_BUFFER,
+	.fclock_name = "l3instr_ts_gclk_div",
+	.div_ck_name = "l3instr_ts_gclk_div",
+	.conv_table = dra752_adc_to_temp,
+	.adc_start_val = DRA752_ADC_START_VALUE,
+	.adc_end_val = DRA752_ADC_END_VALUE,
+	.expose_sensor = ti_thermal_expose_sensor,
+	.remove_sensor = ti_thermal_remove_sensor,
+	.sensors = {
+		{
+		.registers = &dra752_mpu_temp_sensor_registers,
+		.ts_data = &dra752_mpu_temp_sensor_data,
+		.domain = "cpu",
+		.register_cooling = ti_thermal_register_cpu_cooling,
+		.unregister_cooling = ti_thermal_unregister_cpu_cooling,
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_gpu_temp_sensor_registers,
+		.ts_data = &dra752_gpu_temp_sensor_data,
+		.domain = "gpu",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_core_temp_sensor_registers,
+		.ts_data = &dra752_core_temp_sensor_data,
+		.domain = "core",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_dspeve_temp_sensor_registers,
+		.ts_data = &dra752_dspeve_temp_sensor_data,
+		.domain = "dspeve",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_iva_temp_sensor_registers,
+		.ts_data = &dra752_iva_temp_sensor_data,
+		.domain = "iva",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+	},
+	.sensor_count = 5,
+};
diff --git a/drivers/thermal/ti-soc-thermal/Kconfig b/drivers/thermal/ti-soc-thermal/Kconfig
index e81375f..bd4c7be 100644
--- a/drivers/thermal/ti-soc-thermal/Kconfig
+++ b/drivers/thermal/ti-soc-thermal/Kconfig
@@ -46,3 +46,15 @@ config OMAP5_THERMAL
 
 	  This includes alert interrupts generation and also the TSHUT
 	  support.
+
+config DRA752_THERMAL
+	bool "Texas Instruments DRA752 thermal support"
+	depends on TI_SOC_THERMAL
+	depends on SOC_DRA7XX
+	help
+	  If you say yes here you get thermal support for the Texas Instruments
+	  DRA752 SoC family. The current chip supported are:
+	   - DRA752
+
+	  This includes alert interrupts generation and also the TSHUT
+	  support.
diff --git a/drivers/thermal/ti-soc-thermal/Makefile b/drivers/thermal/ti-soc-thermal/Makefile
index 0ca034f..1226b24 100644
--- a/drivers/thermal/ti-soc-thermal/Makefile
+++ b/drivers/thermal/ti-soc-thermal/Makefile
@@ -1,5 +1,6 @@
 obj-$(CONFIG_TI_SOC_THERMAL)		+= ti-soc-thermal.o
 ti-soc-thermal-y			:= ti-bandgap.o
 ti-soc-thermal-$(CONFIG_TI_THERMAL)	+= ti-thermal-common.o
+ti-soc-thermal-$(CONFIG_DRA752_THERMAL)	+= dra752-thermal-data.o
 ti-soc-thermal-$(CONFIG_OMAP4_THERMAL)	+= omap4-thermal-data.o
 ti-soc-thermal-$(CONFIG_OMAP5_THERMAL)	+= omap5-thermal-data.o
diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal.h b/drivers/thermal/ti-soc-thermal/ti-thermal.h
index 5055777..f8b7ffe 100644
--- a/drivers/thermal/ti-soc-thermal/ti-thermal.h
+++ b/drivers/thermal/ti-soc-thermal/ti-thermal.h
@@ -38,6 +38,9 @@
 #define OMAP_GRADIENT_SLOPE_5430_GPU				117
 #define OMAP_GRADIENT_CONST_5430_GPU				-2992
 
+#define DRA752_GRADIENT_SLOPE					0
+#define DRA752_GRADIENT_CONST					2000
+
 /* PCB sensor calculation constants */
 #define OMAP_GRADIENT_SLOPE_W_PCB_4430				0
 #define OMAP_GRADIENT_CONST_W_PCB_4430				20000
@@ -51,6 +54,9 @@
 #define OMAP_GRADIENT_SLOPE_W_PCB_5430_GPU			464
 #define OMAP_GRADIENT_CONST_W_PCB_5430_GPU			-5102
 
+#define DRA752_GRADIENT_SLOPE_W_PCB				0
+#define DRA752_GRADIENT_CONST_W_PCB				2000
+
 /* trip points of interest in milicelsius (at hotspot level) */
 #define OMAP_TRIP_COLD						100000
 #define OMAP_TRIP_HOT						110000
-- 
1.8.2.1.342.gfa7285d

^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 6/7] thermal: ti-soc-thermal: add dra752 chip to device table
  2013-05-29 15:07 ` Eduardo Valentin
@ 2013-05-29 15:07   ` Eduardo Valentin
  -1 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang; +Cc: linux-pm, linux-kernel, Eduardo Valentin

Add support to TI dra752 chips by adapting the driver
device table.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 drivers/thermal/ti-soc-thermal/ti-bandgap.c | 6 ++++++
 drivers/thermal/ti-soc-thermal/ti-bandgap.h | 5 +++++
 2 files changed, 11 insertions(+)

diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.c b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
index f72695f..dea097d 100644
--- a/drivers/thermal/ti-soc-thermal/ti-bandgap.c
+++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
@@ -1532,6 +1532,12 @@ static const struct of_device_id of_ti_bandgap_match[] = {
 		.data = (void *)&omap5430_data,
 	},
 #endif
+#ifdef CONFIG_DRA752_THERMAL
+	{
+		.compatible = "ti,dra752-bandgap",
+		.data = (void *)&dra752_data,
+	},
+#endif
 	/* Sentinel */
 	{ },
 };
diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.h b/drivers/thermal/ti-soc-thermal/ti-bandgap.h
index 5f4794a..b3adf72 100644
--- a/drivers/thermal/ti-soc-thermal/ti-bandgap.h
+++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.h
@@ -400,4 +400,9 @@ extern const struct ti_bandgap_data omap5430_data;
 #define omap5430_data					NULL
 #endif
 
+#ifdef CONFIG_DRA752_THERMAL
+extern const struct ti_bandgap_data dra752_data;
+#else
+#define dra752_data					NULL
+#endif
 #endif
-- 
1.8.2.1.342.gfa7285d


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 6/7] thermal: ti-soc-thermal: add dra752 chip to device table
@ 2013-05-29 15:07   ` Eduardo Valentin
  0 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang; +Cc: linux-pm, linux-kernel, Eduardo Valentin

Add support to TI dra752 chips by adapting the driver
device table.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 drivers/thermal/ti-soc-thermal/ti-bandgap.c | 6 ++++++
 drivers/thermal/ti-soc-thermal/ti-bandgap.h | 5 +++++
 2 files changed, 11 insertions(+)

diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.c b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
index f72695f..dea097d 100644
--- a/drivers/thermal/ti-soc-thermal/ti-bandgap.c
+++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
@@ -1532,6 +1532,12 @@ static const struct of_device_id of_ti_bandgap_match[] = {
 		.data = (void *)&omap5430_data,
 	},
 #endif
+#ifdef CONFIG_DRA752_THERMAL
+	{
+		.compatible = "ti,dra752-bandgap",
+		.data = (void *)&dra752_data,
+	},
+#endif
 	/* Sentinel */
 	{ },
 };
diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.h b/drivers/thermal/ti-soc-thermal/ti-bandgap.h
index 5f4794a..b3adf72 100644
--- a/drivers/thermal/ti-soc-thermal/ti-bandgap.h
+++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.h
@@ -400,4 +400,9 @@ extern const struct ti_bandgap_data omap5430_data;
 #define omap5430_data					NULL
 #endif
 
+#ifdef CONFIG_DRA752_THERMAL
+extern const struct ti_bandgap_data dra752_data;
+#else
+#define dra752_data					NULL
+#endif
 #endif
-- 
1.8.2.1.342.gfa7285d

^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 7/7] thermal: ti-soc-thermal: add DT example for DRA752 chip
  2013-05-29 15:07 ` Eduardo Valentin
@ 2013-05-29 15:07   ` Eduardo Valentin
  -1 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang
  Cc: linux-pm, linux-kernel, Eduardo Valentin, Grant Likely,
	Rob Herring, Rob Landley, Greg Kroah-Hartman, J Keerthy,
	devicetree-discuss, linux-doc

Update documentation by adding an example for DRA752 on DT description.

Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: Grant Likely <grant.likely@linaro.org>
Cc: Rob Herring <rob.herring@calxeda.com>
Cc: Rob Landley <rob@landley.net>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: J Keerthy <j-keerthy@ti.com>
Cc: devicetree-discuss@lists.ozlabs.org
Cc: linux-doc@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
index 1629652..1953b33 100644
--- a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
+++ b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
@@ -59,3 +59,15 @@ bandgap {
 	compatible = "ti,omap5430-bandgap";
 	interrupts = <0 126 4>; /* talert */
 };
+
+DRA752:
+bandgap {
+	reg = <0x4a0021e0 0xc
+		0x4a00232c 0xc
+		0x4a002380 0x2c
+		0x4a0023C0 0x3c
+		0x4a002564 0x8
+		0x4a002574 0x50>;
+	compatible = "ti,dra752-bandgap";
+	interrupts = <0 126 4>; /* talert */
+};
-- 
1.8.2.1.342.gfa7285d


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 7/7] thermal: ti-soc-thermal: add DT example for DRA752 chip
@ 2013-05-29 15:07   ` Eduardo Valentin
  0 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-29 15:07 UTC (permalink / raw)
  To: rui.zhang
  Cc: linux-pm, linux-kernel, Eduardo Valentin, Grant Likely,
	Rob Herring, Rob Landley, Greg Kroah-Hartman, J Keerthy,
	devicetree-discuss, linux-doc

Update documentation by adding an example for DRA752 on DT description.

Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: Grant Likely <grant.likely@linaro.org>
Cc: Rob Herring <rob.herring@calxeda.com>
Cc: Rob Landley <rob@landley.net>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: J Keerthy <j-keerthy@ti.com>
Cc: devicetree-discuss@lists.ozlabs.org
Cc: linux-doc@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
index 1629652..1953b33 100644
--- a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
+++ b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
@@ -59,3 +59,15 @@ bandgap {
 	compatible = "ti,omap5430-bandgap";
 	interrupts = <0 126 4>; /* talert */
 };
+
+DRA752:
+bandgap {
+	reg = <0x4a0021e0 0xc
+		0x4a00232c 0xc
+		0x4a002380 0x2c
+		0x4a0023C0 0x3c
+		0x4a002564 0x8
+		0x4a002574 0x50>;
+	compatible = "ti,dra752-bandgap";
+	interrupts = <0 126 4>; /* talert */
+};
-- 
1.8.2.1.342.gfa7285d

^ permalink raw reply related	[flat|nested] 29+ messages in thread

* Re: [PATCH 7/7] thermal: ti-soc-thermal: add DT example for DRA752 chip
  2013-05-29 15:07   ` Eduardo Valentin
@ 2013-05-30  8:56     ` keerthy
  -1 siblings, 0 replies; 29+ messages in thread
From: keerthy @ 2013-05-30  8:56 UTC (permalink / raw)
  To: Eduardo Valentin
  Cc: rui.zhang, linux-pm, linux-kernel, Grant Likely, Rob Herring,
	Rob Landley, Greg Kroah-Hartman, devicetree-discuss, linux-doc

Hi Eduardo,

On 05/29/2013 08:37 PM, Eduardo Valentin wrote:

> Update documentation by adding an example for DRA752 on DT description.
> 
> Cc: linux-pm@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Cc: Grant Likely <grant.likely@linaro.org>
> Cc: Rob Herring <rob.herring@calxeda.com>
> Cc: Rob Landley <rob@landley.net>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Zhang Rui <rui.zhang@intel.com>
> Cc: J Keerthy <j-keerthy@ti.com>
> Cc: devicetree-discuss@lists.ozlabs.org
> Cc: linux-doc@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
> ---
>  Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
> index 1629652..1953b33 100644
> --- a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
> +++ b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
> @@ -59,3 +59,15 @@ bandgap {
>  	compatible = "ti,omap5430-bandgap";
>  	interrupts = <0 126 4>; /* talert */
>  };
> +
> +DRA752:
> +bandgap {
> +	reg = <0x4a0021e0 0xc
> +		0x4a00232c 0xc
> +		0x4a002380 0x2c
> +		0x4a0023C0 0x3c
> +		0x4a002564 0x8
> +		0x4a002574 0x50>;
> +	compatible = "ti,dra752-bandgap";


The general convention seems to be keeping it as dra7xx or dra7.
Why add specific nodes like dra752? We can always reuse for
forthcoming dra7 processors if the same address mapping and IP
is retained right?

> +	interrupts = <0 126 4>; /* talert */


The TRM does not have any term called talert. Can the comment
be /* thermal_alert */ so it is easy to figure out what it is.

> +};


Regards,
Keerthy

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 7/7] thermal: ti-soc-thermal: add DT example for DRA752 chip
@ 2013-05-30  8:56     ` keerthy
  0 siblings, 0 replies; 29+ messages in thread
From: keerthy @ 2013-05-30  8:56 UTC (permalink / raw)
  To: Eduardo Valentin
  Cc: rui.zhang, linux-pm, linux-kernel, Grant Likely, Rob Herring,
	Rob Landley, Greg Kroah-Hartman, devicetree-discuss, linux-doc

Hi Eduardo,

On 05/29/2013 08:37 PM, Eduardo Valentin wrote:

> Update documentation by adding an example for DRA752 on DT description.
> 
> Cc: linux-pm@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Cc: Grant Likely <grant.likely@linaro.org>
> Cc: Rob Herring <rob.herring@calxeda.com>
> Cc: Rob Landley <rob@landley.net>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Zhang Rui <rui.zhang@intel.com>
> Cc: J Keerthy <j-keerthy@ti.com>
> Cc: devicetree-discuss@lists.ozlabs.org
> Cc: linux-doc@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
> ---
>  Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
> index 1629652..1953b33 100644
> --- a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
> +++ b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
> @@ -59,3 +59,15 @@ bandgap {
>  	compatible = "ti,omap5430-bandgap";
>  	interrupts = <0 126 4>; /* talert */
>  };
> +
> +DRA752:
> +bandgap {
> +	reg = <0x4a0021e0 0xc
> +		0x4a00232c 0xc
> +		0x4a002380 0x2c
> +		0x4a0023C0 0x3c
> +		0x4a002564 0x8
> +		0x4a002574 0x50>;
> +	compatible = "ti,dra752-bandgap";


The general convention seems to be keeping it as dra7xx or dra7.
Why add specific nodes like dra752? We can always reuse for
forthcoming dra7 processors if the same address mapping and IP
is retained right?

> +	interrupts = <0 126 4>; /* talert */


The TRM does not have any term called talert. Can the comment
be /* thermal_alert */ so it is easy to figure out what it is.

> +};


Regards,
Keerthy

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 7/7] thermal: ti-soc-thermal: add DT example for DRA752 chip
  2013-05-30  8:56     ` keerthy
@ 2013-05-30 13:52       ` Eduardo Valentin
  -1 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-30 13:52 UTC (permalink / raw)
  To: keerthy
  Cc: Eduardo Valentin, rui.zhang, linux-pm, linux-kernel,
	Grant Likely, Rob Herring, Rob Landley, Greg Kroah-Hartman,
	devicetree-discuss, linux-doc

[-- Attachment #1: Type: text/plain, Size: 3596 bytes --]

On 30-05-2013 04:56, keerthy wrote:
> Hi Eduardo,
> 
> On 05/29/2013 08:37 PM, Eduardo Valentin wrote:
> 
>> Update documentation by adding an example for DRA752 on DT description.
>>
>> Cc: linux-pm@vger.kernel.org
>> Cc: linux-kernel@vger.kernel.org
>> Cc: Grant Likely <grant.likely@linaro.org>
>> Cc: Rob Herring <rob.herring@calxeda.com>
>> Cc: Rob Landley <rob@landley.net>
>> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>> Cc: Zhang Rui <rui.zhang@intel.com>
>> Cc: J Keerthy <j-keerthy@ti.com>
>> Cc: devicetree-discuss@lists.ozlabs.org
>> Cc: linux-doc@vger.kernel.org
>> Cc: linux-kernel@vger.kernel.org
>> Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
>> ---
>>  Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt | 12 ++++++++++++
>>  1 file changed, 12 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
>> index 1629652..1953b33 100644
>> --- a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
>> +++ b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
>> @@ -59,3 +59,15 @@ bandgap {
>>  	compatible = "ti,omap5430-bandgap";
>>  	interrupts = <0 126 4>; /* talert */
>>  };
>> +
>> +DRA752:
>> +bandgap {
>> +	reg = <0x4a0021e0 0xc
>> +		0x4a00232c 0xc
>> +		0x4a002380 0x2c
>> +		0x4a0023C0 0x3c
>> +		0x4a002564 0x8
>> +		0x4a002574 0x50>;
>> +	compatible = "ti,dra752-bandgap";
> 
> 
> The general convention seems to be keeping it as dra7xx or dra7.
> Why add specific nodes like dra752? We can always reuse for
> forthcoming dra7 processors if the same address mapping and IP
> is retained right?
> 
>>


In fact, I must agree with you that using a node such as dra752 is
restrictive. And I must also admit my original plan was to use dra7xx
naming convention. Not only on DT nodes, but in driver source code
symbols too. Well, this is about re-usability, right?

However, I took a step back and thought about the bandgap IP history.
Take that in mind, just look to the source code. We never succeed to
reuse nodes fully and it is because bandgap IPs do change from chip
version to chip version. That is also understandable as every chip has
its own thermal peculiarities. For instance, we do not have a omap4xxx
node because each OMAP4 chip has a different bandgap IP, with different
features.

I really would like to use a dra7xxx node, but that would contradict the
IP history :-). If we are trying to avoid patching the driver in the
future, I would say it is more likely to have a patch for another dra7
chip with specifics different from the current one than having a patch
reusing the existing dra752 node. This statement is obviously based on
driver and IP history (I might be wrong of course and the IP could
actually have reached a development stabilization point).

 +	interrupts = <0 126 4>; /* talert */
> 
> 
> The TRM does not have any term called talert. Can the comment
> be /* thermal_alert */ so it is easy to figure out what it is.
> 


Indeed, TRM does not, in fact! But the TI thermal engineering community
have coined this term and I think it is quite common used (within that
community) and if you look to the driver code too, it is all over. I
believe there is no doubt that talert stands for thermal alert. The
driver code does have documentation about that.

>> +};
> 
> 
> Regards,
> Keerthy
> 
> 


-- 
You have got to be excited about what you are doing. (L. Lamport)

Eduardo Valentin


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 295 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 7/7] thermal: ti-soc-thermal: add DT example for DRA752 chip
@ 2013-05-30 13:52       ` Eduardo Valentin
  0 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-05-30 13:52 UTC (permalink / raw)
  To: keerthy
  Cc: Eduardo Valentin, rui.zhang, linux-pm, linux-kernel,
	Grant Likely, Rob Herring, Rob Landley, Greg Kroah-Hartman,
	devicetree-discuss, linux-doc

[-- Attachment #1: Type: text/plain, Size: 3596 bytes --]

On 30-05-2013 04:56, keerthy wrote:
> Hi Eduardo,
> 
> On 05/29/2013 08:37 PM, Eduardo Valentin wrote:
> 
>> Update documentation by adding an example for DRA752 on DT description.
>>
>> Cc: linux-pm@vger.kernel.org
>> Cc: linux-kernel@vger.kernel.org
>> Cc: Grant Likely <grant.likely@linaro.org>
>> Cc: Rob Herring <rob.herring@calxeda.com>
>> Cc: Rob Landley <rob@landley.net>
>> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>> Cc: Zhang Rui <rui.zhang@intel.com>
>> Cc: J Keerthy <j-keerthy@ti.com>
>> Cc: devicetree-discuss@lists.ozlabs.org
>> Cc: linux-doc@vger.kernel.org
>> Cc: linux-kernel@vger.kernel.org
>> Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
>> ---
>>  Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt | 12 ++++++++++++
>>  1 file changed, 12 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
>> index 1629652..1953b33 100644
>> --- a/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
>> +++ b/Documentation/devicetree/bindings/thermal/ti_soc_thermal.txt
>> @@ -59,3 +59,15 @@ bandgap {
>>  	compatible = "ti,omap5430-bandgap";
>>  	interrupts = <0 126 4>; /* talert */
>>  };
>> +
>> +DRA752:
>> +bandgap {
>> +	reg = <0x4a0021e0 0xc
>> +		0x4a00232c 0xc
>> +		0x4a002380 0x2c
>> +		0x4a0023C0 0x3c
>> +		0x4a002564 0x8
>> +		0x4a002574 0x50>;
>> +	compatible = "ti,dra752-bandgap";
> 
> 
> The general convention seems to be keeping it as dra7xx or dra7.
> Why add specific nodes like dra752? We can always reuse for
> forthcoming dra7 processors if the same address mapping and IP
> is retained right?
> 
>>


In fact, I must agree with you that using a node such as dra752 is
restrictive. And I must also admit my original plan was to use dra7xx
naming convention. Not only on DT nodes, but in driver source code
symbols too. Well, this is about re-usability, right?

However, I took a step back and thought about the bandgap IP history.
Take that in mind, just look to the source code. We never succeed to
reuse nodes fully and it is because bandgap IPs do change from chip
version to chip version. That is also understandable as every chip has
its own thermal peculiarities. For instance, we do not have a omap4xxx
node because each OMAP4 chip has a different bandgap IP, with different
features.

I really would like to use a dra7xxx node, but that would contradict the
IP history :-). If we are trying to avoid patching the driver in the
future, I would say it is more likely to have a patch for another dra7
chip with specifics different from the current one than having a patch
reusing the existing dra752 node. This statement is obviously based on
driver and IP history (I might be wrong of course and the IP could
actually have reached a development stabilization point).

 +	interrupts = <0 126 4>; /* talert */
> 
> 
> The TRM does not have any term called talert. Can the comment
> be /* thermal_alert */ so it is easy to figure out what it is.
> 


Indeed, TRM does not, in fact! But the TI thermal engineering community
have coined this term and I think it is quite common used (within that
community) and if you look to the driver code too, it is all over. I
believe there is no doubt that talert stands for thermal alert. The
driver code does have documentation about that.

>> +};
> 
> 
> Regards,
> Keerthy
> 
> 


-- 
You have got to be excited about what you are doing. (L. Lamport)

Eduardo Valentin


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 295 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 5/7] thermal: ti-soc-thermal: add thermal data for DRA752 chips
  2013-05-29 15:07   ` Eduardo Valentin
@ 2013-06-03 20:31     ` Eduardo Valentin
  -1 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-06-03 20:31 UTC (permalink / raw)
  To: Eduardo Valentin; +Cc: rui.zhang, linux-pm, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 35643 bytes --]

Rui,

On 29-05-2013 11:07, Eduardo Valentin wrote:
> This patch adds the thermal data for TI DRA752 chips.
> In this change it includes (autogen):
> . Register offset definitions
> . Bitfields and masks for all registers
> . Conversion table
> 
> Also, the thermal limits, thresholds and extrapolation
> rules are included. The extrapolation rule is simply
> add +2C as margin.
> 
> All 5 sensors, MPU, GPU, CORE, DSPEVE and IVA, are defined
> and exposed. Only MPU has cooling device.
> 
> Cc: Zhang Rui <rui.zhang@intel.com>
> Cc: linux-pm@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
> ---
>  drivers/staging/ti-soc-thermal/dra752-bandgap.h    | 280 ++++++++++++
>  .../staging/ti-soc-thermal/dra752-thermal-data.c   | 476 +++++++++++++++++++++
>  drivers/thermal/ti-soc-thermal/Kconfig             |  12 +
>  drivers/thermal/ti-soc-thermal/Makefile            |   1 +
>  drivers/thermal/ti-soc-thermal/ti-thermal.h        |   6 +
>  5 files changed, 775 insertions(+)
>  create mode 100644 drivers/staging/ti-soc-thermal/dra752-bandgap.h
>  create mode 100644 drivers/staging/ti-soc-thermal/dra752-thermal-data.c
> 
> diff --git a/drivers/staging/ti-soc-thermal/dra752-bandgap.h b/drivers/staging/ti-soc-thermal/dra752-bandgap.h
> new file mode 100644
> index 0000000..6b0f2b1

This patch was generated against the wrong tree obviously. I will resend
this one. Others are fine.

> --- /dev/null
> +++ b/drivers/staging/ti-soc-thermal/dra752-bandgap.h
> @@ -0,0 +1,280 @@
> +/*
> + * DRA752 bandgap registers, bitfields and temperature definitions
> + *
> + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
> + * Contact:
> + *   Eduardo Valentin <eduardo.valentin@ti.com>
> + *   Tero Kristo <t-kristo@ti.com>
> + *
> + * This is an auto generated file.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * version 2 as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful, but
> + * WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
> + * 02110-1301 USA
> + *
> + */
> +#ifndef __DRA752_BANDGAP_H
> +#define __DRA752_BANDGAP_H
> +
> +/**
> + * *** DRA752 ***
> + *
> + * Below, in sequence, are the Register definitions,
> + * the bitfields and the temperature definitions for DRA752.
> + */
> +
> +/**
> + * DRA752 register definitions
> + *
> + * Registers are defined as offsets. The offsets are
> + * relative to FUSE_OPP_BGAP_GPU on DRA752.
> + * DRA752_BANDGAP_BASE		0x4a0021e0
> + *
> + * Register below are grouped by domain (not necessarily in offset order)
> + */
> +
> +
> +/* DRA752.common register offsets */
> +#define DRA752_BANDGAP_CTRL_1_OFFSET		0x1a0
> +#define DRA752_BANDGAP_STATUS_1_OFFSET		0x1c8
> +#define DRA752_BANDGAP_CTRL_2_OFFSET		0x39c
> +#define DRA752_BANDGAP_STATUS_2_OFFSET		0x3b8
> +
> +/* DRA752.core register offsets */
> +#define DRA752_STD_FUSE_OPP_BGAP_CORE_OFFSET		0x8
> +#define DRA752_TEMP_SENSOR_CORE_OFFSET			0x154
> +#define DRA752_BANDGAP_THRESHOLD_CORE_OFFSET		0x1ac
> +#define DRA752_BANDGAP_TSHUT_CORE_OFFSET		0x1b8
> +#define DRA752_BANDGAP_CUMUL_DTEMP_CORE_OFFSET		0x1c4
> +#define DRA752_DTEMP_CORE_0_OFFSET			0x208
> +#define DRA752_DTEMP_CORE_1_OFFSET			0x20c
> +#define DRA752_DTEMP_CORE_2_OFFSET			0x210
> +#define DRA752_DTEMP_CORE_3_OFFSET			0x214
> +#define DRA752_DTEMP_CORE_4_OFFSET			0x218
> +
> +/* DRA752.iva register offsets */
> +#define DRA752_STD_FUSE_OPP_BGAP_IVA_OFFSET		0x388
> +#define DRA752_TEMP_SENSOR_IVA_OFFSET			0x398
> +#define DRA752_BANDGAP_THRESHOLD_IVA_OFFSET		0x3a4
> +#define DRA752_BANDGAP_TSHUT_IVA_OFFSET			0x3ac
> +#define DRA752_BANDGAP_CUMUL_DTEMP_IVA_OFFSET		0x3b4
> +#define DRA752_DTEMP_IVA_0_OFFSET			0x3d0
> +#define DRA752_DTEMP_IVA_1_OFFSET			0x3d4
> +#define DRA752_DTEMP_IVA_2_OFFSET			0x3d8
> +#define DRA752_DTEMP_IVA_3_OFFSET			0x3dc
> +#define DRA752_DTEMP_IVA_4_OFFSET			0x3e0
> +
> +/* DRA752.mpu register offsets */
> +#define DRA752_STD_FUSE_OPP_BGAP_MPU_OFFSET		0x4
> +#define DRA752_TEMP_SENSOR_MPU_OFFSET			0x14c
> +#define DRA752_BANDGAP_THRESHOLD_MPU_OFFSET		0x1a4
> +#define DRA752_BANDGAP_TSHUT_MPU_OFFSET			0x1b0
> +#define DRA752_BANDGAP_CUMUL_DTEMP_MPU_OFFSET		0x1bc
> +#define DRA752_DTEMP_MPU_0_OFFSET			0x1e0
> +#define DRA752_DTEMP_MPU_1_OFFSET			0x1e4
> +#define DRA752_DTEMP_MPU_2_OFFSET			0x1e8
> +#define DRA752_DTEMP_MPU_3_OFFSET			0x1ec
> +#define DRA752_DTEMP_MPU_4_OFFSET			0x1f0
> +
> +/* DRA752.dspeve register offsets */
> +#define DRA752_STD_FUSE_OPP_BGAP_DSPEVE_OFFSET			0x384
> +#define DRA752_TEMP_SENSOR_DSPEVE_OFFSET			0x394
> +#define DRA752_BANDGAP_THRESHOLD_DSPEVE_OFFSET			0x3a0
> +#define DRA752_BANDGAP_TSHUT_DSPEVE_OFFSET			0x3a8
> +#define DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_OFFSET		0x3b0
> +#define DRA752_DTEMP_DSPEVE_0_OFFSET				0x3bc
> +#define DRA752_DTEMP_DSPEVE_1_OFFSET				0x3c0
> +#define DRA752_DTEMP_DSPEVE_2_OFFSET				0x3c4
> +#define DRA752_DTEMP_DSPEVE_3_OFFSET				0x3c8
> +#define DRA752_DTEMP_DSPEVE_4_OFFSET				0x3cc
> +
> +/* DRA752.gpu register offsets */
> +#define DRA752_STD_FUSE_OPP_BGAP_GPU_OFFSET		0x0
> +#define DRA752_TEMP_SENSOR_GPU_OFFSET			0x150
> +#define DRA752_BANDGAP_THRESHOLD_GPU_OFFSET		0x1a8
> +#define DRA752_BANDGAP_TSHUT_GPU_OFFSET			0x1b4
> +#define DRA752_BANDGAP_CUMUL_DTEMP_GPU_OFFSET		0x1c0
> +#define DRA752_DTEMP_GPU_0_OFFSET			0x1f4
> +#define DRA752_DTEMP_GPU_1_OFFSET			0x1f8
> +#define DRA752_DTEMP_GPU_2_OFFSET			0x1fc
> +#define DRA752_DTEMP_GPU_3_OFFSET			0x200
> +#define DRA752_DTEMP_GPU_4_OFFSET			0x204
> +
> +/**
> + * Register bitfields for DRA752
> + *
> + * All the macros bellow define the required bits for
> + * controlling temperature on DRA752. Bit defines are
> + * grouped by register.
> + */
> +
> +/* DRA752.BANDGAP_STATUS_1 */
> +#define DRA752_BANDGAP_STATUS_1_ALERT_MASK		BIT(31)
> +#define DRA752_BANDGAP_STATUS_1_HOT_CORE_MASK		BIT(5)
> +#define DRA752_BANDGAP_STATUS_1_COLD_CORE_MASK		BIT(4)
> +#define DRA752_BANDGAP_STATUS_1_HOT_GPU_MASK		BIT(3)
> +#define DRA752_BANDGAP_STATUS_1_COLD_GPU_MASK		BIT(2)
> +#define DRA752_BANDGAP_STATUS_1_HOT_MPU_MASK		BIT(1)
> +#define DRA752_BANDGAP_STATUS_1_COLD_MPU_MASK		BIT(0)
> +
> +/* DRA752.BANDGAP_CTRL_2 */
> +#define DRA752_BANDGAP_CTRL_2_FREEZE_IVA_MASK			BIT(22)
> +#define DRA752_BANDGAP_CTRL_2_FREEZE_DSPEVE_MASK		BIT(21)
> +#define DRA752_BANDGAP_CTRL_2_CLEAR_IVA_MASK			BIT(19)
> +#define DRA752_BANDGAP_CTRL_2_CLEAR_DSPEVE_MASK			BIT(18)
> +#define DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_IVA_MASK		BIT(16)
> +#define DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_DSPEVE_MASK		BIT(15)
> +#define DRA752_BANDGAP_CTRL_2_MASK_HOT_IVA_MASK			BIT(3)
> +#define DRA752_BANDGAP_CTRL_2_MASK_COLD_IVA_MASK		BIT(2)
> +#define DRA752_BANDGAP_CTRL_2_MASK_HOT_DSPEVE_MASK		BIT(1)
> +#define DRA752_BANDGAP_CTRL_2_MASK_COLD_DSPEVE_MASK		BIT(0)
> +
> +/* DRA752.BANDGAP_STATUS_2 */
> +#define DRA752_BANDGAP_STATUS_2_HOT_IVA_MASK			BIT(3)
> +#define DRA752_BANDGAP_STATUS_2_COLD_IVA_MASK			BIT(2)
> +#define DRA752_BANDGAP_STATUS_2_HOT_DSPEVE_MASK			BIT(1)
> +#define DRA752_BANDGAP_STATUS_2_COLD_DSPEVE_MASK		BIT(0)
> +
> +/* DRA752.BANDGAP_CTRL_1 */
> +#define DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK			(0x3 << 30)
> +#define DRA752_BANDGAP_CTRL_1_COUNTER_DELAY_MASK		(0x7 << 27)
> +#define DRA752_BANDGAP_CTRL_1_FREEZE_CORE_MASK			BIT(23)
> +#define DRA752_BANDGAP_CTRL_1_FREEZE_GPU_MASK			BIT(22)
> +#define DRA752_BANDGAP_CTRL_1_FREEZE_MPU_MASK			BIT(21)
> +#define DRA752_BANDGAP_CTRL_1_CLEAR_CORE_MASK			BIT(20)
> +#define DRA752_BANDGAP_CTRL_1_CLEAR_GPU_MASK			BIT(19)
> +#define DRA752_BANDGAP_CTRL_1_CLEAR_MPU_MASK			BIT(18)
> +#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_CORE_MASK		BIT(17)
> +#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_GPU_MASK		BIT(16)
> +#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_MPU_MASK		BIT(15)
> +#define DRA752_BANDGAP_CTRL_1_MASK_HOT_CORE_MASK		BIT(5)
> +#define DRA752_BANDGAP_CTRL_1_MASK_COLD_CORE_MASK		BIT(4)
> +#define DRA752_BANDGAP_CTRL_1_MASK_HOT_GPU_MASK			BIT(3)
> +#define DRA752_BANDGAP_CTRL_1_MASK_COLD_GPU_MASK		BIT(2)
> +#define DRA752_BANDGAP_CTRL_1_MASK_HOT_MPU_MASK			BIT(1)
> +#define DRA752_BANDGAP_CTRL_1_MASK_COLD_MPU_MASK		BIT(0)
> +
> +/* DRA752.TEMP_SENSOR */
> +#define DRA752_TEMP_SENSOR_TMPSOFF_MASK		BIT(11)
> +#define DRA752_TEMP_SENSOR_EOCZ_MASK		BIT(10)
> +#define DRA752_TEMP_SENSOR_DTEMP_MASK		(0x3ff << 0)
> +
> +/* DRA752.BANDGAP_THRESHOLD */
> +#define DRA752_BANDGAP_THRESHOLD_HOT_MASK		(0x3ff << 16)
> +#define DRA752_BANDGAP_THRESHOLD_COLD_MASK		(0x3ff << 0)
> +
> +/* DRA752.TSHUT_THRESHOLD */
> +#define DRA752_TSHUT_THRESHOLD_MUXCTRL_MASK		BIT(31)
> +#define DRA752_TSHUT_THRESHOLD_HOT_MASK			(0x3ff << 16)
> +#define DRA752_TSHUT_THRESHOLD_COLD_MASK		(0x3ff << 0)
> +
> +/* DRA752.BANDGAP_CUMUL_DTEMP_CORE */
> +#define DRA752_BANDGAP_CUMUL_DTEMP_CORE_MASK		(0xffffffff << 0)
> +
> +/* DRA752.BANDGAP_CUMUL_DTEMP_IVA */
> +#define DRA752_BANDGAP_CUMUL_DTEMP_IVA_MASK		(0xffffffff << 0)
> +
> +/* DRA752.BANDGAP_CUMUL_DTEMP_MPU */
> +#define DRA752_BANDGAP_CUMUL_DTEMP_MPU_MASK		(0xffffffff << 0)
> +
> +/* DRA752.BANDGAP_CUMUL_DTEMP_DSPEVE */
> +#define DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_MASK		(0xffffffff << 0)
> +
> +/* DRA752.BANDGAP_CUMUL_DTEMP_GPU */
> +#define DRA752_BANDGAP_CUMUL_DTEMP_GPU_MASK		(0xffffffff << 0)
> +
> +/**
> + * Temperature limits and thresholds for DRA752
> + *
> + * All the macros bellow are definitions for handling the
> + * ADC conversions and representation of temperature limits
> + * and thresholds for DRA752. Definitions are grouped
> + * by temperature domain.
> + */
> +
> +/* DRA752.common temperature definitions */
> +/* ADC conversion table limits */
> +#define DRA752_ADC_START_VALUE		540
> +#define DRA752_ADC_END_VALUE		945
> +
> +/* DRA752.GPU temperature definitions */
> +/* bandgap clock limits */
> +#define DRA752_GPU_MAX_FREQ				1500000
> +#define DRA752_GPU_MIN_FREQ				1000000
> +/* sensor limits */
> +#define DRA752_GPU_MIN_TEMP				-40000
> +#define DRA752_GPU_MAX_TEMP				125000
> +#define DRA752_GPU_HYST_VAL				5000
> +/* interrupts thresholds */
> +#define DRA752_GPU_TSHUT_HOT				915
> +#define DRA752_GPU_TSHUT_COLD				900
> +#define DRA752_GPU_T_HOT				800
> +#define DRA752_GPU_T_COLD				795
> +
> +/* DRA752.MPU temperature definitions */
> +/* bandgap clock limits */
> +#define DRA752_MPU_MAX_FREQ				1500000
> +#define DRA752_MPU_MIN_FREQ				1000000
> +/* sensor limits */
> +#define DRA752_MPU_MIN_TEMP				-40000
> +#define DRA752_MPU_MAX_TEMP				125000
> +#define DRA752_MPU_HYST_VAL				5000
> +/* interrupts thresholds */
> +#define DRA752_MPU_TSHUT_HOT				915
> +#define DRA752_MPU_TSHUT_COLD				900
> +#define DRA752_MPU_T_HOT				800
> +#define DRA752_MPU_T_COLD				795
> +
> +/* DRA752.CORE temperature definitions */
> +/* bandgap clock limits */
> +#define DRA752_CORE_MAX_FREQ				1500000
> +#define DRA752_CORE_MIN_FREQ				1000000
> +/* sensor limits */
> +#define DRA752_CORE_MIN_TEMP				-40000
> +#define DRA752_CORE_MAX_TEMP				125000
> +#define DRA752_CORE_HYST_VAL				5000
> +/* interrupts thresholds */
> +#define DRA752_CORE_TSHUT_HOT				915
> +#define DRA752_CORE_TSHUT_COLD				900
> +#define DRA752_CORE_T_HOT				800
> +#define DRA752_CORE_T_COLD				795
> +
> +/* DRA752.DSPEVE temperature definitions */
> +/* bandgap clock limits */
> +#define DRA752_DSPEVE_MAX_FREQ				1500000
> +#define DRA752_DSPEVE_MIN_FREQ				1000000
> +/* sensor limits */
> +#define DRA752_DSPEVE_MIN_TEMP				-40000
> +#define DRA752_DSPEVE_MAX_TEMP				125000
> +#define DRA752_DSPEVE_HYST_VAL				5000
> +/* interrupts thresholds */
> +#define DRA752_DSPEVE_TSHUT_HOT				915
> +#define DRA752_DSPEVE_TSHUT_COLD			900
> +#define DRA752_DSPEVE_T_HOT				800
> +#define DRA752_DSPEVE_T_COLD				795
> +
> +/* DRA752.IVA temperature definitions */
> +/* bandgap clock limits */
> +#define DRA752_IVA_MAX_FREQ				1500000
> +#define DRA752_IVA_MIN_FREQ				1000000
> +/* sensor limits */
> +#define DRA752_IVA_MIN_TEMP				-40000
> +#define DRA752_IVA_MAX_TEMP				125000
> +#define DRA752_IVA_HYST_VAL				5000
> +/* interrupts thresholds */
> +#define DRA752_IVA_TSHUT_HOT				915
> +#define DRA752_IVA_TSHUT_COLD				900
> +#define DRA752_IVA_T_HOT				800
> +#define DRA752_IVA_T_COLD				795
> +
> +#endif /* __DRA752_BANDGAP_H */
> diff --git a/drivers/staging/ti-soc-thermal/dra752-thermal-data.c b/drivers/staging/ti-soc-thermal/dra752-thermal-data.c
> new file mode 100644
> index 0000000..e5d8326
> --- /dev/null
> +++ b/drivers/staging/ti-soc-thermal/dra752-thermal-data.c
> @@ -0,0 +1,476 @@
> +/*
> + * DRA752 thermal data.
> + *
> + * Copyright (C) 2013 Texas Instruments Inc.
> + * Contact:
> + *	Eduardo Valentin <eduardo.valentin@ti.com>
> + *	Tero Kristo <t-kristo@ti.com>
> + *
> + * This file is partially autogenerated.
> + *
> + * This software is licensed under the terms of the GNU General Public
> + * License version 2, as published by the Free Software Foundation, and
> + * may be copied, distributed, and modified under those terms.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + */
> +
> +#include "ti-thermal.h"
> +#include "ti-bandgap.h"
> +#include "dra752-bandgap.h"
> +
> +/*
> + * DRA752 has five instances of thermal sensor: MPU, GPU, CORE,
> + * IVA and DSPEVE need to describe the individual registers and
> + * bit fields.
> + */
> +
> +/*
> + * DRA752 CORE thermal sensor register offsets and bit-fields
> + */
> +static struct temp_sensor_registers
> +dra752_core_temp_sensor_registers = {
> +	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_CORE_OFFSET,
> +	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
> +	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
> +	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
> +	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
> +	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_CORE_MASK,
> +	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_CORE_MASK,
> +	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
> +	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_CORE_MASK,
> +	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_CORE_MASK,
> +	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_CORE_MASK,
> +	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_CORE_OFFSET,
> +	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
> +	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
> +	.tshut_threshold = DRA752_BANDGAP_TSHUT_CORE_OFFSET,
> +	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
> +	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
> +	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
> +	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
> +	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_CORE_MASK,
> +	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_CORE_MASK,
> +	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_CORE_OFFSET,
> +	.ctrl_dtemp_0 = DRA752_DTEMP_CORE_0_OFFSET,
> +	.ctrl_dtemp_1 = DRA752_DTEMP_CORE_1_OFFSET,
> +	.ctrl_dtemp_2 = DRA752_DTEMP_CORE_2_OFFSET,
> +	.ctrl_dtemp_3 = DRA752_DTEMP_CORE_3_OFFSET,
> +	.ctrl_dtemp_4 = DRA752_DTEMP_CORE_4_OFFSET,
> +	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_CORE_OFFSET,
> +};
> +
> +/*
> + * DRA752 IVA thermal sensor register offsets and bit-fields
> + */
> +static struct temp_sensor_registers
> +dra752_iva_temp_sensor_registers = {
> +	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_IVA_OFFSET,
> +	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
> +	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
> +	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
> +	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_2_OFFSET,
> +	.mask_hot_mask = DRA752_BANDGAP_CTRL_2_MASK_HOT_IVA_MASK,
> +	.mask_cold_mask = DRA752_BANDGAP_CTRL_2_MASK_COLD_IVA_MASK,
> +	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
> +	.mask_freeze_mask = DRA752_BANDGAP_CTRL_2_FREEZE_IVA_MASK,
> +	.mask_clear_mask = DRA752_BANDGAP_CTRL_2_CLEAR_IVA_MASK,
> +	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_IVA_MASK,
> +	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_IVA_OFFSET,
> +	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
> +	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
> +	.tshut_threshold = DRA752_BANDGAP_TSHUT_IVA_OFFSET,
> +	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
> +	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
> +	.bgap_status = DRA752_BANDGAP_STATUS_2_OFFSET,
> +	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
> +	.status_hot_mask = DRA752_BANDGAP_STATUS_2_HOT_IVA_MASK,
> +	.status_cold_mask = DRA752_BANDGAP_STATUS_2_COLD_IVA_MASK,
> +	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_IVA_OFFSET,
> +	.ctrl_dtemp_0 = DRA752_DTEMP_IVA_0_OFFSET,
> +	.ctrl_dtemp_1 = DRA752_DTEMP_IVA_1_OFFSET,
> +	.ctrl_dtemp_2 = DRA752_DTEMP_IVA_2_OFFSET,
> +	.ctrl_dtemp_3 = DRA752_DTEMP_IVA_3_OFFSET,
> +	.ctrl_dtemp_4 = DRA752_DTEMP_IVA_4_OFFSET,
> +	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_IVA_OFFSET,
> +};
> +
> +/*
> + * DRA752 MPU thermal sensor register offsets and bit-fields
> + */
> +static struct temp_sensor_registers
> +dra752_mpu_temp_sensor_registers = {
> +	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_MPU_OFFSET,
> +	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
> +	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
> +	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
> +	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
> +	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_MPU_MASK,
> +	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_MPU_MASK,
> +	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
> +	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_MPU_MASK,
> +	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_MPU_MASK,
> +	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_MPU_MASK,
> +	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_MPU_OFFSET,
> +	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
> +	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
> +	.tshut_threshold = DRA752_BANDGAP_TSHUT_MPU_OFFSET,
> +	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
> +	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
> +	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
> +	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
> +	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_MPU_MASK,
> +	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_MPU_MASK,
> +	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_MPU_OFFSET,
> +	.ctrl_dtemp_0 = DRA752_DTEMP_MPU_0_OFFSET,
> +	.ctrl_dtemp_1 = DRA752_DTEMP_MPU_1_OFFSET,
> +	.ctrl_dtemp_2 = DRA752_DTEMP_MPU_2_OFFSET,
> +	.ctrl_dtemp_3 = DRA752_DTEMP_MPU_3_OFFSET,
> +	.ctrl_dtemp_4 = DRA752_DTEMP_MPU_4_OFFSET,
> +	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_MPU_OFFSET,
> +};
> +
> +/*
> + * DRA752 DSPEVE thermal sensor register offsets and bit-fields
> + */
> +static struct temp_sensor_registers
> +dra752_dspeve_temp_sensor_registers = {
> +	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_DSPEVE_OFFSET,
> +	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
> +	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
> +	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
> +	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_2_OFFSET,
> +	.mask_hot_mask = DRA752_BANDGAP_CTRL_2_MASK_HOT_DSPEVE_MASK,
> +	.mask_cold_mask = DRA752_BANDGAP_CTRL_2_MASK_COLD_DSPEVE_MASK,
> +	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
> +	.mask_freeze_mask = DRA752_BANDGAP_CTRL_2_FREEZE_DSPEVE_MASK,
> +	.mask_clear_mask = DRA752_BANDGAP_CTRL_2_CLEAR_DSPEVE_MASK,
> +	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_DSPEVE_MASK,
> +	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_DSPEVE_OFFSET,
> +	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
> +	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
> +	.tshut_threshold = DRA752_BANDGAP_TSHUT_DSPEVE_OFFSET,
> +	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
> +	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
> +	.bgap_status = DRA752_BANDGAP_STATUS_2_OFFSET,
> +	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
> +	.status_hot_mask = DRA752_BANDGAP_STATUS_2_HOT_DSPEVE_MASK,
> +	.status_cold_mask = DRA752_BANDGAP_STATUS_2_COLD_DSPEVE_MASK,
> +	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_OFFSET,
> +	.ctrl_dtemp_0 = DRA752_DTEMP_DSPEVE_0_OFFSET,
> +	.ctrl_dtemp_1 = DRA752_DTEMP_DSPEVE_1_OFFSET,
> +	.ctrl_dtemp_2 = DRA752_DTEMP_DSPEVE_2_OFFSET,
> +	.ctrl_dtemp_3 = DRA752_DTEMP_DSPEVE_3_OFFSET,
> +	.ctrl_dtemp_4 = DRA752_DTEMP_DSPEVE_4_OFFSET,
> +	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_DSPEVE_OFFSET,
> +};
> +
> +/*
> + * DRA752 GPU thermal sensor register offsets and bit-fields
> + */
> +static struct temp_sensor_registers
> +dra752_gpu_temp_sensor_registers = {
> +	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_GPU_OFFSET,
> +	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
> +	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
> +	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
> +	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
> +	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_GPU_MASK,
> +	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_GPU_MASK,
> +	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
> +	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_GPU_MASK,
> +	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_GPU_MASK,
> +	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_GPU_MASK,
> +	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_GPU_OFFSET,
> +	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
> +	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
> +	.tshut_threshold = DRA752_BANDGAP_TSHUT_GPU_OFFSET,
> +	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
> +	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
> +	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
> +	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
> +	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_GPU_MASK,
> +	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_GPU_MASK,
> +	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_GPU_OFFSET,
> +	.ctrl_dtemp_0 = DRA752_DTEMP_GPU_0_OFFSET,
> +	.ctrl_dtemp_1 = DRA752_DTEMP_GPU_1_OFFSET,
> +	.ctrl_dtemp_2 = DRA752_DTEMP_GPU_2_OFFSET,
> +	.ctrl_dtemp_3 = DRA752_DTEMP_GPU_3_OFFSET,
> +	.ctrl_dtemp_4 = DRA752_DTEMP_GPU_4_OFFSET,
> +	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_GPU_OFFSET,
> +};
> +
> +/* Thresholds and limits for DRA752 MPU temperature sensor */
> +static struct temp_sensor_data dra752_mpu_temp_sensor_data = {
> +	.tshut_hot = DRA752_MPU_TSHUT_HOT,
> +	.tshut_cold = DRA752_MPU_TSHUT_COLD,
> +	.t_hot = DRA752_MPU_T_HOT,
> +	.t_cold = DRA752_MPU_T_COLD,
> +	.min_freq = DRA752_MPU_MIN_FREQ,
> +	.max_freq = DRA752_MPU_MAX_FREQ,
> +	.max_temp = DRA752_MPU_MAX_TEMP,
> +	.min_temp = DRA752_MPU_MIN_TEMP,
> +	.hyst_val = DRA752_MPU_HYST_VAL,
> +	.update_int1 = 1000,
> +	.update_int2 = 2000,
> +};
> +
> +/* Thresholds and limits for DRA752 GPU temperature sensor */
> +static struct temp_sensor_data dra752_gpu_temp_sensor_data = {
> +	.tshut_hot = DRA752_GPU_TSHUT_HOT,
> +	.tshut_cold = DRA752_GPU_TSHUT_COLD,
> +	.t_hot = DRA752_GPU_T_HOT,
> +	.t_cold = DRA752_GPU_T_COLD,
> +	.min_freq = DRA752_GPU_MIN_FREQ,
> +	.max_freq = DRA752_GPU_MAX_FREQ,
> +	.max_temp = DRA752_GPU_MAX_TEMP,
> +	.min_temp = DRA752_GPU_MIN_TEMP,
> +	.hyst_val = DRA752_GPU_HYST_VAL,
> +	.update_int1 = 1000,
> +	.update_int2 = 2000,
> +};
> +
> +/* Thresholds and limits for DRA752 CORE temperature sensor */
> +static struct temp_sensor_data dra752_core_temp_sensor_data = {
> +	.tshut_hot = DRA752_CORE_TSHUT_HOT,
> +	.tshut_cold = DRA752_CORE_TSHUT_COLD,
> +	.t_hot = DRA752_CORE_T_HOT,
> +	.t_cold = DRA752_CORE_T_COLD,
> +	.min_freq = DRA752_CORE_MIN_FREQ,
> +	.max_freq = DRA752_CORE_MAX_FREQ,
> +	.max_temp = DRA752_CORE_MAX_TEMP,
> +	.min_temp = DRA752_CORE_MIN_TEMP,
> +	.hyst_val = DRA752_CORE_HYST_VAL,
> +	.update_int1 = 1000,
> +	.update_int2 = 2000,
> +};
> +
> +/* Thresholds and limits for DRA752 DSPEVE temperature sensor */
> +static struct temp_sensor_data dra752_dspeve_temp_sensor_data = {
> +	.tshut_hot = DRA752_DSPEVE_TSHUT_HOT,
> +	.tshut_cold = DRA752_DSPEVE_TSHUT_COLD,
> +	.t_hot = DRA752_DSPEVE_T_HOT,
> +	.t_cold = DRA752_DSPEVE_T_COLD,
> +	.min_freq = DRA752_DSPEVE_MIN_FREQ,
> +	.max_freq = DRA752_DSPEVE_MAX_FREQ,
> +	.max_temp = DRA752_DSPEVE_MAX_TEMP,
> +	.min_temp = DRA752_DSPEVE_MIN_TEMP,
> +	.hyst_val = DRA752_DSPEVE_HYST_VAL,
> +	.update_int1 = 1000,
> +	.update_int2 = 2000,
> +};
> +
> +/* Thresholds and limits for DRA752 IVA temperature sensor */
> +static struct temp_sensor_data dra752_iva_temp_sensor_data = {
> +	.tshut_hot = DRA752_IVA_TSHUT_HOT,
> +	.tshut_cold = DRA752_IVA_TSHUT_COLD,
> +	.t_hot = DRA752_IVA_T_HOT,
> +	.t_cold = DRA752_IVA_T_COLD,
> +	.min_freq = DRA752_IVA_MIN_FREQ,
> +	.max_freq = DRA752_IVA_MAX_FREQ,
> +	.max_temp = DRA752_IVA_MAX_TEMP,
> +	.min_temp = DRA752_IVA_MIN_TEMP,
> +	.hyst_val = DRA752_IVA_HYST_VAL,
> +	.update_int1 = 1000,
> +	.update_int2 = 2000,
> +};
> +
> +/*
> + * DRA752 : Temperature values in milli degree celsius
> + * ADC code values from 540 to 945
> + */
> +static
> +int dra752_adc_to_temp[DRA752_ADC_END_VALUE - DRA752_ADC_START_VALUE + 1] = {
> +	/* Index 540 - 549 */
> +	-40000, -40000, -40000, -40000, -39800, -39400, -39000, -38600, -38200,
> +	-37800,
> +	/* Index 550 - 559 */
> +	-37400, -37000, -36600, -36200, -35800, -35300, -34700, -34200, -33800,
> +	-33400,
> +	/* Index 560 - 569 */
> +	-33000, -32600, -32200, -31800, -31400, -31000, -30600, -30200, -29800,
> +	-29400,
> +	/* Index 570 - 579 */
> +	-29000, -28600, -28200, -27700, -27100, -26600, -26200, -25800, -25400,
> +	-25000,
> +	/* Index 580 - 589 */
> +	-24600, -24200, -23800, -23400, -23000, -22600, -22200, -21800, -21400,
> +	-21000,
> +	/* Index 590 - 599 */
> +	-20500, -19900, -19400, -19000, -18600, -18200, -17800, -17400, -17000,
> +	-16600,
> +	/* Index 600 - 609 */
> +	-16200, -15800, -15400, -15000, -14600, -14200, -13800, -13400, -13000,
> +	-12500,
> +	/* Index 610 - 619 */
> +	-11900, -11400, -11000, -10600, -10200, -9800, -9400, -9000, -8600,
> +	-8200,
> +	/* Index 620 - 629 */
> +	-7800, -7400, -7000, -6600, -6200, -5800, -5400, -5000, -4500,
> +	-3900,
> +	/* Index 630 - 639 */
> +	-3400, -3000, -2600, -2200, -1800, -1400, -1000, -600, -200,
> +	200,
> +	/* Index 640 - 649 */
> +	600, 1000, 1400, 1800, 2200, 2600, 3000, 3400, 3900,
> +	4500,
> +	/* Index 650 - 659 */
> +	5000, 5400, 5800, 6200, 6600, 7000, 7400, 7800, 8200,
> +	8600,
> +	/* Index 660 - 669 */
> +	9000, 9400, 9800, 10200, 10600, 11000, 11400, 11800, 12200,
> +	12700,
> +	/* Index 670 - 679 */
> +	13300, 13800, 14200, 14600, 15000, 15400, 15800, 16200, 16600,
> +	17000,
> +	/* Index 680 - 689 */
> +	17400, 17800, 18200, 18600, 19000, 19400, 19800, 20200, 20600,
> +	21000,
> +	/* Index 690 - 699 */
> +	21400, 21900, 22500, 23000, 23400, 23800, 24200, 24600, 25000,
> +	25400,
> +	/* Index 700 - 709 */
> +	25800, 26200, 26600, 27000, 27400, 27800, 28200, 28600, 29000,
> +	29400,
> +	/* Index 710 - 719 */
> +	29800, 30200, 30600, 31000, 31400, 31900, 32500, 33000, 33400,
> +	33800,
> +	/* Index 720 - 729 */
> +	34200, 34600, 35000, 35400, 35800, 36200, 36600, 37000, 37400,
> +	37800,
> +	/* Index 730 - 739 */
> +	38200, 38600, 39000, 39400, 39800, 40200, 40600, 41000, 41400,
> +	41800,
> +	/* Index 740 - 749 */
> +	42200, 42600, 43100, 43700, 44200, 44600, 45000, 45400, 45800,
> +	46200,
> +	/* Index 750 - 759 */
> +	46600, 47000, 47400, 47800, 48200, 48600, 49000, 49400, 49800,
> +	50200,
> +	/* Index 760 - 769 */
> +	50600, 51000, 51400, 51800, 52200, 52600, 53000, 53400, 53800,
> +	54200,
> +	/* Index 770 - 779 */
> +	54600, 55000, 55400, 55900, 56500, 57000, 57400, 57800, 58200,
> +	58600,
> +	/* Index 780 - 789 */
> +	59000, 59400, 59800, 60200, 60600, 61000, 61400, 61800, 62200,
> +	62600,
> +	/* Index 790 - 799 */
> +	63000, 63400, 63800, 64200, 64600, 65000, 65400, 65800, 66200,
> +	66600,
> +	/* Index 800 - 809 */
> +	67000, 67400, 67800, 68200, 68600, 69000, 69400, 69800, 70200,
> +	70600,
> +	/* Index 810 - 819 */
> +	71000, 71500, 72100, 72600, 73000, 73400, 73800, 74200, 74600,
> +	75000,
> +	/* Index 820 - 829 */
> +	75400, 75800, 76200, 76600, 77000, 77400, 77800, 78200, 78600,
> +	79000,
> +	/* Index 830 - 839 */
> +	79400, 79800, 80200, 80600, 81000, 81400, 81800, 82200, 82600,
> +	83000,
> +	/* Index 840 - 849 */
> +	83400, 83800, 84200, 84600, 85000, 85400, 85800, 86200, 86600,
> +	87000,
> +	/* Index 850 - 859 */
> +	87400, 87800, 88200, 88600, 89000, 89400, 89800, 90200, 90600,
> +	91000,
> +	/* Index 860 - 869 */
> +	91400, 91800, 92200, 92600, 93000, 93400, 93800, 94200, 94600,
> +	95000,
> +	/* Index 870 - 879 */
> +	95400, 95800, 96200, 96600, 97000, 97500, 98100, 98600, 99000,
> +	99400,
> +	/* Index 880 - 889 */
> +	99800, 100200, 100600, 101000, 101400, 101800, 102200, 102600, 103000,
> +	103400,
> +	/* Index 890 - 899 */
> +	103800, 104200, 104600, 105000, 105400, 105800, 106200, 106600, 107000,
> +	107400,
> +	/* Index 900 - 909 */
> +	107800, 108200, 108600, 109000, 109400, 109800, 110200, 110600, 111000,
> +	111400,
> +	/* Index 910 - 919 */
> +	111800, 112200, 112600, 113000, 113400, 113800, 114200, 114600, 115000,
> +	115400,
> +	/* Index 920 - 929 */
> +	115800, 116200, 116600, 117000, 117400, 117800, 118200, 118600, 119000,
> +	119400,
> +	/* Index 930 - 939 */
> +	119800, 120200, 120600, 121000, 121400, 121800, 122200, 122600, 123000,
> +	123400,
> +	/* Index 940 - 945 */
> +	123800, 124200, 124600, 124900, 125000, 125000,
> +};
> +
> +/* DRA752 data */
> +const struct ti_bandgap_data dra752_data = {
> +	.features = TI_BANDGAP_FEATURE_TSHUT_CONFIG |
> +			TI_BANDGAP_FEATURE_FREEZE_BIT |
> +			TI_BANDGAP_FEATURE_TALERT |
> +			TI_BANDGAP_FEATURE_COUNTER_DELAY |
> +			TI_BANDGAP_FEATURE_HISTORY_BUFFER,
> +	.fclock_name = "l3instr_ts_gclk_div",
> +	.div_ck_name = "l3instr_ts_gclk_div",
> +	.conv_table = dra752_adc_to_temp,
> +	.adc_start_val = DRA752_ADC_START_VALUE,
> +	.adc_end_val = DRA752_ADC_END_VALUE,
> +	.expose_sensor = ti_thermal_expose_sensor,
> +	.remove_sensor = ti_thermal_remove_sensor,
> +	.sensors = {
> +		{
> +		.registers = &dra752_mpu_temp_sensor_registers,
> +		.ts_data = &dra752_mpu_temp_sensor_data,
> +		.domain = "cpu",
> +		.register_cooling = ti_thermal_register_cpu_cooling,
> +		.unregister_cooling = ti_thermal_unregister_cpu_cooling,
> +		.slope = DRA752_GRADIENT_SLOPE,
> +		.constant = DRA752_GRADIENT_CONST,
> +		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
> +		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
> +		},
> +		{
> +		.registers = &dra752_gpu_temp_sensor_registers,
> +		.ts_data = &dra752_gpu_temp_sensor_data,
> +		.domain = "gpu",
> +		.slope = DRA752_GRADIENT_SLOPE,
> +		.constant = DRA752_GRADIENT_CONST,
> +		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
> +		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
> +		},
> +		{
> +		.registers = &dra752_core_temp_sensor_registers,
> +		.ts_data = &dra752_core_temp_sensor_data,
> +		.domain = "core",
> +		.slope = DRA752_GRADIENT_SLOPE,
> +		.constant = DRA752_GRADIENT_CONST,
> +		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
> +		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
> +		},
> +		{
> +		.registers = &dra752_dspeve_temp_sensor_registers,
> +		.ts_data = &dra752_dspeve_temp_sensor_data,
> +		.domain = "dspeve",
> +		.slope = DRA752_GRADIENT_SLOPE,
> +		.constant = DRA752_GRADIENT_CONST,
> +		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
> +		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
> +		},
> +		{
> +		.registers = &dra752_iva_temp_sensor_registers,
> +		.ts_data = &dra752_iva_temp_sensor_data,
> +		.domain = "iva",
> +		.slope = DRA752_GRADIENT_SLOPE,
> +		.constant = DRA752_GRADIENT_CONST,
> +		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
> +		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
> +		},
> +	},
> +	.sensor_count = 5,
> +};
> diff --git a/drivers/thermal/ti-soc-thermal/Kconfig b/drivers/thermal/ti-soc-thermal/Kconfig
> index e81375f..bd4c7be 100644
> --- a/drivers/thermal/ti-soc-thermal/Kconfig
> +++ b/drivers/thermal/ti-soc-thermal/Kconfig
> @@ -46,3 +46,15 @@ config OMAP5_THERMAL
>  
>  	  This includes alert interrupts generation and also the TSHUT
>  	  support.
> +
> +config DRA752_THERMAL
> +	bool "Texas Instruments DRA752 thermal support"
> +	depends on TI_SOC_THERMAL
> +	depends on SOC_DRA7XX
> +	help
> +	  If you say yes here you get thermal support for the Texas Instruments
> +	  DRA752 SoC family. The current chip supported are:
> +	   - DRA752
> +
> +	  This includes alert interrupts generation and also the TSHUT
> +	  support.
> diff --git a/drivers/thermal/ti-soc-thermal/Makefile b/drivers/thermal/ti-soc-thermal/Makefile
> index 0ca034f..1226b24 100644
> --- a/drivers/thermal/ti-soc-thermal/Makefile
> +++ b/drivers/thermal/ti-soc-thermal/Makefile
> @@ -1,5 +1,6 @@
>  obj-$(CONFIG_TI_SOC_THERMAL)		+= ti-soc-thermal.o
>  ti-soc-thermal-y			:= ti-bandgap.o
>  ti-soc-thermal-$(CONFIG_TI_THERMAL)	+= ti-thermal-common.o
> +ti-soc-thermal-$(CONFIG_DRA752_THERMAL)	+= dra752-thermal-data.o
>  ti-soc-thermal-$(CONFIG_OMAP4_THERMAL)	+= omap4-thermal-data.o
>  ti-soc-thermal-$(CONFIG_OMAP5_THERMAL)	+= omap5-thermal-data.o
> diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal.h b/drivers/thermal/ti-soc-thermal/ti-thermal.h
> index 5055777..f8b7ffe 100644
> --- a/drivers/thermal/ti-soc-thermal/ti-thermal.h
> +++ b/drivers/thermal/ti-soc-thermal/ti-thermal.h
> @@ -38,6 +38,9 @@
>  #define OMAP_GRADIENT_SLOPE_5430_GPU				117
>  #define OMAP_GRADIENT_CONST_5430_GPU				-2992
>  
> +#define DRA752_GRADIENT_SLOPE					0
> +#define DRA752_GRADIENT_CONST					2000
> +
>  /* PCB sensor calculation constants */
>  #define OMAP_GRADIENT_SLOPE_W_PCB_4430				0
>  #define OMAP_GRADIENT_CONST_W_PCB_4430				20000
> @@ -51,6 +54,9 @@
>  #define OMAP_GRADIENT_SLOPE_W_PCB_5430_GPU			464
>  #define OMAP_GRADIENT_CONST_W_PCB_5430_GPU			-5102
>  
> +#define DRA752_GRADIENT_SLOPE_W_PCB				0
> +#define DRA752_GRADIENT_CONST_W_PCB				2000
> +
>  /* trip points of interest in milicelsius (at hotspot level) */
>  #define OMAP_TRIP_COLD						100000
>  #define OMAP_TRIP_HOT						110000
> 


-- 
You have got to be excited about what you are doing. (L. Lamport)

Eduardo Valentin


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 295 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 5/7] thermal: ti-soc-thermal: add thermal data for DRA752 chips
@ 2013-06-03 20:31     ` Eduardo Valentin
  0 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-06-03 20:31 UTC (permalink / raw)
  To: Eduardo Valentin; +Cc: rui.zhang, linux-pm, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 35643 bytes --]

Rui,

On 29-05-2013 11:07, Eduardo Valentin wrote:
> This patch adds the thermal data for TI DRA752 chips.
> In this change it includes (autogen):
> . Register offset definitions
> . Bitfields and masks for all registers
> . Conversion table
> 
> Also, the thermal limits, thresholds and extrapolation
> rules are included. The extrapolation rule is simply
> add +2C as margin.
> 
> All 5 sensors, MPU, GPU, CORE, DSPEVE and IVA, are defined
> and exposed. Only MPU has cooling device.
> 
> Cc: Zhang Rui <rui.zhang@intel.com>
> Cc: linux-pm@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
> ---
>  drivers/staging/ti-soc-thermal/dra752-bandgap.h    | 280 ++++++++++++
>  .../staging/ti-soc-thermal/dra752-thermal-data.c   | 476 +++++++++++++++++++++
>  drivers/thermal/ti-soc-thermal/Kconfig             |  12 +
>  drivers/thermal/ti-soc-thermal/Makefile            |   1 +
>  drivers/thermal/ti-soc-thermal/ti-thermal.h        |   6 +
>  5 files changed, 775 insertions(+)
>  create mode 100644 drivers/staging/ti-soc-thermal/dra752-bandgap.h
>  create mode 100644 drivers/staging/ti-soc-thermal/dra752-thermal-data.c
> 
> diff --git a/drivers/staging/ti-soc-thermal/dra752-bandgap.h b/drivers/staging/ti-soc-thermal/dra752-bandgap.h
> new file mode 100644
> index 0000000..6b0f2b1

This patch was generated against the wrong tree obviously. I will resend
this one. Others are fine.

> --- /dev/null
> +++ b/drivers/staging/ti-soc-thermal/dra752-bandgap.h
> @@ -0,0 +1,280 @@
> +/*
> + * DRA752 bandgap registers, bitfields and temperature definitions
> + *
> + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
> + * Contact:
> + *   Eduardo Valentin <eduardo.valentin@ti.com>
> + *   Tero Kristo <t-kristo@ti.com>
> + *
> + * This is an auto generated file.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * version 2 as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful, but
> + * WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
> + * 02110-1301 USA
> + *
> + */
> +#ifndef __DRA752_BANDGAP_H
> +#define __DRA752_BANDGAP_H
> +
> +/**
> + * *** DRA752 ***
> + *
> + * Below, in sequence, are the Register definitions,
> + * the bitfields and the temperature definitions for DRA752.
> + */
> +
> +/**
> + * DRA752 register definitions
> + *
> + * Registers are defined as offsets. The offsets are
> + * relative to FUSE_OPP_BGAP_GPU on DRA752.
> + * DRA752_BANDGAP_BASE		0x4a0021e0
> + *
> + * Register below are grouped by domain (not necessarily in offset order)
> + */
> +
> +
> +/* DRA752.common register offsets */
> +#define DRA752_BANDGAP_CTRL_1_OFFSET		0x1a0
> +#define DRA752_BANDGAP_STATUS_1_OFFSET		0x1c8
> +#define DRA752_BANDGAP_CTRL_2_OFFSET		0x39c
> +#define DRA752_BANDGAP_STATUS_2_OFFSET		0x3b8
> +
> +/* DRA752.core register offsets */
> +#define DRA752_STD_FUSE_OPP_BGAP_CORE_OFFSET		0x8
> +#define DRA752_TEMP_SENSOR_CORE_OFFSET			0x154
> +#define DRA752_BANDGAP_THRESHOLD_CORE_OFFSET		0x1ac
> +#define DRA752_BANDGAP_TSHUT_CORE_OFFSET		0x1b8
> +#define DRA752_BANDGAP_CUMUL_DTEMP_CORE_OFFSET		0x1c4
> +#define DRA752_DTEMP_CORE_0_OFFSET			0x208
> +#define DRA752_DTEMP_CORE_1_OFFSET			0x20c
> +#define DRA752_DTEMP_CORE_2_OFFSET			0x210
> +#define DRA752_DTEMP_CORE_3_OFFSET			0x214
> +#define DRA752_DTEMP_CORE_4_OFFSET			0x218
> +
> +/* DRA752.iva register offsets */
> +#define DRA752_STD_FUSE_OPP_BGAP_IVA_OFFSET		0x388
> +#define DRA752_TEMP_SENSOR_IVA_OFFSET			0x398
> +#define DRA752_BANDGAP_THRESHOLD_IVA_OFFSET		0x3a4
> +#define DRA752_BANDGAP_TSHUT_IVA_OFFSET			0x3ac
> +#define DRA752_BANDGAP_CUMUL_DTEMP_IVA_OFFSET		0x3b4
> +#define DRA752_DTEMP_IVA_0_OFFSET			0x3d0
> +#define DRA752_DTEMP_IVA_1_OFFSET			0x3d4
> +#define DRA752_DTEMP_IVA_2_OFFSET			0x3d8
> +#define DRA752_DTEMP_IVA_3_OFFSET			0x3dc
> +#define DRA752_DTEMP_IVA_4_OFFSET			0x3e0
> +
> +/* DRA752.mpu register offsets */
> +#define DRA752_STD_FUSE_OPP_BGAP_MPU_OFFSET		0x4
> +#define DRA752_TEMP_SENSOR_MPU_OFFSET			0x14c
> +#define DRA752_BANDGAP_THRESHOLD_MPU_OFFSET		0x1a4
> +#define DRA752_BANDGAP_TSHUT_MPU_OFFSET			0x1b0
> +#define DRA752_BANDGAP_CUMUL_DTEMP_MPU_OFFSET		0x1bc
> +#define DRA752_DTEMP_MPU_0_OFFSET			0x1e0
> +#define DRA752_DTEMP_MPU_1_OFFSET			0x1e4
> +#define DRA752_DTEMP_MPU_2_OFFSET			0x1e8
> +#define DRA752_DTEMP_MPU_3_OFFSET			0x1ec
> +#define DRA752_DTEMP_MPU_4_OFFSET			0x1f0
> +
> +/* DRA752.dspeve register offsets */
> +#define DRA752_STD_FUSE_OPP_BGAP_DSPEVE_OFFSET			0x384
> +#define DRA752_TEMP_SENSOR_DSPEVE_OFFSET			0x394
> +#define DRA752_BANDGAP_THRESHOLD_DSPEVE_OFFSET			0x3a0
> +#define DRA752_BANDGAP_TSHUT_DSPEVE_OFFSET			0x3a8
> +#define DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_OFFSET		0x3b0
> +#define DRA752_DTEMP_DSPEVE_0_OFFSET				0x3bc
> +#define DRA752_DTEMP_DSPEVE_1_OFFSET				0x3c0
> +#define DRA752_DTEMP_DSPEVE_2_OFFSET				0x3c4
> +#define DRA752_DTEMP_DSPEVE_3_OFFSET				0x3c8
> +#define DRA752_DTEMP_DSPEVE_4_OFFSET				0x3cc
> +
> +/* DRA752.gpu register offsets */
> +#define DRA752_STD_FUSE_OPP_BGAP_GPU_OFFSET		0x0
> +#define DRA752_TEMP_SENSOR_GPU_OFFSET			0x150
> +#define DRA752_BANDGAP_THRESHOLD_GPU_OFFSET		0x1a8
> +#define DRA752_BANDGAP_TSHUT_GPU_OFFSET			0x1b4
> +#define DRA752_BANDGAP_CUMUL_DTEMP_GPU_OFFSET		0x1c0
> +#define DRA752_DTEMP_GPU_0_OFFSET			0x1f4
> +#define DRA752_DTEMP_GPU_1_OFFSET			0x1f8
> +#define DRA752_DTEMP_GPU_2_OFFSET			0x1fc
> +#define DRA752_DTEMP_GPU_3_OFFSET			0x200
> +#define DRA752_DTEMP_GPU_4_OFFSET			0x204
> +
> +/**
> + * Register bitfields for DRA752
> + *
> + * All the macros bellow define the required bits for
> + * controlling temperature on DRA752. Bit defines are
> + * grouped by register.
> + */
> +
> +/* DRA752.BANDGAP_STATUS_1 */
> +#define DRA752_BANDGAP_STATUS_1_ALERT_MASK		BIT(31)
> +#define DRA752_BANDGAP_STATUS_1_HOT_CORE_MASK		BIT(5)
> +#define DRA752_BANDGAP_STATUS_1_COLD_CORE_MASK		BIT(4)
> +#define DRA752_BANDGAP_STATUS_1_HOT_GPU_MASK		BIT(3)
> +#define DRA752_BANDGAP_STATUS_1_COLD_GPU_MASK		BIT(2)
> +#define DRA752_BANDGAP_STATUS_1_HOT_MPU_MASK		BIT(1)
> +#define DRA752_BANDGAP_STATUS_1_COLD_MPU_MASK		BIT(0)
> +
> +/* DRA752.BANDGAP_CTRL_2 */
> +#define DRA752_BANDGAP_CTRL_2_FREEZE_IVA_MASK			BIT(22)
> +#define DRA752_BANDGAP_CTRL_2_FREEZE_DSPEVE_MASK		BIT(21)
> +#define DRA752_BANDGAP_CTRL_2_CLEAR_IVA_MASK			BIT(19)
> +#define DRA752_BANDGAP_CTRL_2_CLEAR_DSPEVE_MASK			BIT(18)
> +#define DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_IVA_MASK		BIT(16)
> +#define DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_DSPEVE_MASK		BIT(15)
> +#define DRA752_BANDGAP_CTRL_2_MASK_HOT_IVA_MASK			BIT(3)
> +#define DRA752_BANDGAP_CTRL_2_MASK_COLD_IVA_MASK		BIT(2)
> +#define DRA752_BANDGAP_CTRL_2_MASK_HOT_DSPEVE_MASK		BIT(1)
> +#define DRA752_BANDGAP_CTRL_2_MASK_COLD_DSPEVE_MASK		BIT(0)
> +
> +/* DRA752.BANDGAP_STATUS_2 */
> +#define DRA752_BANDGAP_STATUS_2_HOT_IVA_MASK			BIT(3)
> +#define DRA752_BANDGAP_STATUS_2_COLD_IVA_MASK			BIT(2)
> +#define DRA752_BANDGAP_STATUS_2_HOT_DSPEVE_MASK			BIT(1)
> +#define DRA752_BANDGAP_STATUS_2_COLD_DSPEVE_MASK		BIT(0)
> +
> +/* DRA752.BANDGAP_CTRL_1 */
> +#define DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK			(0x3 << 30)
> +#define DRA752_BANDGAP_CTRL_1_COUNTER_DELAY_MASK		(0x7 << 27)
> +#define DRA752_BANDGAP_CTRL_1_FREEZE_CORE_MASK			BIT(23)
> +#define DRA752_BANDGAP_CTRL_1_FREEZE_GPU_MASK			BIT(22)
> +#define DRA752_BANDGAP_CTRL_1_FREEZE_MPU_MASK			BIT(21)
> +#define DRA752_BANDGAP_CTRL_1_CLEAR_CORE_MASK			BIT(20)
> +#define DRA752_BANDGAP_CTRL_1_CLEAR_GPU_MASK			BIT(19)
> +#define DRA752_BANDGAP_CTRL_1_CLEAR_MPU_MASK			BIT(18)
> +#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_CORE_MASK		BIT(17)
> +#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_GPU_MASK		BIT(16)
> +#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_MPU_MASK		BIT(15)
> +#define DRA752_BANDGAP_CTRL_1_MASK_HOT_CORE_MASK		BIT(5)
> +#define DRA752_BANDGAP_CTRL_1_MASK_COLD_CORE_MASK		BIT(4)
> +#define DRA752_BANDGAP_CTRL_1_MASK_HOT_GPU_MASK			BIT(3)
> +#define DRA752_BANDGAP_CTRL_1_MASK_COLD_GPU_MASK		BIT(2)
> +#define DRA752_BANDGAP_CTRL_1_MASK_HOT_MPU_MASK			BIT(1)
> +#define DRA752_BANDGAP_CTRL_1_MASK_COLD_MPU_MASK		BIT(0)
> +
> +/* DRA752.TEMP_SENSOR */
> +#define DRA752_TEMP_SENSOR_TMPSOFF_MASK		BIT(11)
> +#define DRA752_TEMP_SENSOR_EOCZ_MASK		BIT(10)
> +#define DRA752_TEMP_SENSOR_DTEMP_MASK		(0x3ff << 0)
> +
> +/* DRA752.BANDGAP_THRESHOLD */
> +#define DRA752_BANDGAP_THRESHOLD_HOT_MASK		(0x3ff << 16)
> +#define DRA752_BANDGAP_THRESHOLD_COLD_MASK		(0x3ff << 0)
> +
> +/* DRA752.TSHUT_THRESHOLD */
> +#define DRA752_TSHUT_THRESHOLD_MUXCTRL_MASK		BIT(31)
> +#define DRA752_TSHUT_THRESHOLD_HOT_MASK			(0x3ff << 16)
> +#define DRA752_TSHUT_THRESHOLD_COLD_MASK		(0x3ff << 0)
> +
> +/* DRA752.BANDGAP_CUMUL_DTEMP_CORE */
> +#define DRA752_BANDGAP_CUMUL_DTEMP_CORE_MASK		(0xffffffff << 0)
> +
> +/* DRA752.BANDGAP_CUMUL_DTEMP_IVA */
> +#define DRA752_BANDGAP_CUMUL_DTEMP_IVA_MASK		(0xffffffff << 0)
> +
> +/* DRA752.BANDGAP_CUMUL_DTEMP_MPU */
> +#define DRA752_BANDGAP_CUMUL_DTEMP_MPU_MASK		(0xffffffff << 0)
> +
> +/* DRA752.BANDGAP_CUMUL_DTEMP_DSPEVE */
> +#define DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_MASK		(0xffffffff << 0)
> +
> +/* DRA752.BANDGAP_CUMUL_DTEMP_GPU */
> +#define DRA752_BANDGAP_CUMUL_DTEMP_GPU_MASK		(0xffffffff << 0)
> +
> +/**
> + * Temperature limits and thresholds for DRA752
> + *
> + * All the macros bellow are definitions for handling the
> + * ADC conversions and representation of temperature limits
> + * and thresholds for DRA752. Definitions are grouped
> + * by temperature domain.
> + */
> +
> +/* DRA752.common temperature definitions */
> +/* ADC conversion table limits */
> +#define DRA752_ADC_START_VALUE		540
> +#define DRA752_ADC_END_VALUE		945
> +
> +/* DRA752.GPU temperature definitions */
> +/* bandgap clock limits */
> +#define DRA752_GPU_MAX_FREQ				1500000
> +#define DRA752_GPU_MIN_FREQ				1000000
> +/* sensor limits */
> +#define DRA752_GPU_MIN_TEMP				-40000
> +#define DRA752_GPU_MAX_TEMP				125000
> +#define DRA752_GPU_HYST_VAL				5000
> +/* interrupts thresholds */
> +#define DRA752_GPU_TSHUT_HOT				915
> +#define DRA752_GPU_TSHUT_COLD				900
> +#define DRA752_GPU_T_HOT				800
> +#define DRA752_GPU_T_COLD				795
> +
> +/* DRA752.MPU temperature definitions */
> +/* bandgap clock limits */
> +#define DRA752_MPU_MAX_FREQ				1500000
> +#define DRA752_MPU_MIN_FREQ				1000000
> +/* sensor limits */
> +#define DRA752_MPU_MIN_TEMP				-40000
> +#define DRA752_MPU_MAX_TEMP				125000
> +#define DRA752_MPU_HYST_VAL				5000
> +/* interrupts thresholds */
> +#define DRA752_MPU_TSHUT_HOT				915
> +#define DRA752_MPU_TSHUT_COLD				900
> +#define DRA752_MPU_T_HOT				800
> +#define DRA752_MPU_T_COLD				795
> +
> +/* DRA752.CORE temperature definitions */
> +/* bandgap clock limits */
> +#define DRA752_CORE_MAX_FREQ				1500000
> +#define DRA752_CORE_MIN_FREQ				1000000
> +/* sensor limits */
> +#define DRA752_CORE_MIN_TEMP				-40000
> +#define DRA752_CORE_MAX_TEMP				125000
> +#define DRA752_CORE_HYST_VAL				5000
> +/* interrupts thresholds */
> +#define DRA752_CORE_TSHUT_HOT				915
> +#define DRA752_CORE_TSHUT_COLD				900
> +#define DRA752_CORE_T_HOT				800
> +#define DRA752_CORE_T_COLD				795
> +
> +/* DRA752.DSPEVE temperature definitions */
> +/* bandgap clock limits */
> +#define DRA752_DSPEVE_MAX_FREQ				1500000
> +#define DRA752_DSPEVE_MIN_FREQ				1000000
> +/* sensor limits */
> +#define DRA752_DSPEVE_MIN_TEMP				-40000
> +#define DRA752_DSPEVE_MAX_TEMP				125000
> +#define DRA752_DSPEVE_HYST_VAL				5000
> +/* interrupts thresholds */
> +#define DRA752_DSPEVE_TSHUT_HOT				915
> +#define DRA752_DSPEVE_TSHUT_COLD			900
> +#define DRA752_DSPEVE_T_HOT				800
> +#define DRA752_DSPEVE_T_COLD				795
> +
> +/* DRA752.IVA temperature definitions */
> +/* bandgap clock limits */
> +#define DRA752_IVA_MAX_FREQ				1500000
> +#define DRA752_IVA_MIN_FREQ				1000000
> +/* sensor limits */
> +#define DRA752_IVA_MIN_TEMP				-40000
> +#define DRA752_IVA_MAX_TEMP				125000
> +#define DRA752_IVA_HYST_VAL				5000
> +/* interrupts thresholds */
> +#define DRA752_IVA_TSHUT_HOT				915
> +#define DRA752_IVA_TSHUT_COLD				900
> +#define DRA752_IVA_T_HOT				800
> +#define DRA752_IVA_T_COLD				795
> +
> +#endif /* __DRA752_BANDGAP_H */
> diff --git a/drivers/staging/ti-soc-thermal/dra752-thermal-data.c b/drivers/staging/ti-soc-thermal/dra752-thermal-data.c
> new file mode 100644
> index 0000000..e5d8326
> --- /dev/null
> +++ b/drivers/staging/ti-soc-thermal/dra752-thermal-data.c
> @@ -0,0 +1,476 @@
> +/*
> + * DRA752 thermal data.
> + *
> + * Copyright (C) 2013 Texas Instruments Inc.
> + * Contact:
> + *	Eduardo Valentin <eduardo.valentin@ti.com>
> + *	Tero Kristo <t-kristo@ti.com>
> + *
> + * This file is partially autogenerated.
> + *
> + * This software is licensed under the terms of the GNU General Public
> + * License version 2, as published by the Free Software Foundation, and
> + * may be copied, distributed, and modified under those terms.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + */
> +
> +#include "ti-thermal.h"
> +#include "ti-bandgap.h"
> +#include "dra752-bandgap.h"
> +
> +/*
> + * DRA752 has five instances of thermal sensor: MPU, GPU, CORE,
> + * IVA and DSPEVE need to describe the individual registers and
> + * bit fields.
> + */
> +
> +/*
> + * DRA752 CORE thermal sensor register offsets and bit-fields
> + */
> +static struct temp_sensor_registers
> +dra752_core_temp_sensor_registers = {
> +	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_CORE_OFFSET,
> +	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
> +	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
> +	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
> +	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
> +	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_CORE_MASK,
> +	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_CORE_MASK,
> +	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
> +	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_CORE_MASK,
> +	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_CORE_MASK,
> +	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_CORE_MASK,
> +	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_CORE_OFFSET,
> +	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
> +	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
> +	.tshut_threshold = DRA752_BANDGAP_TSHUT_CORE_OFFSET,
> +	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
> +	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
> +	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
> +	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
> +	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_CORE_MASK,
> +	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_CORE_MASK,
> +	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_CORE_OFFSET,
> +	.ctrl_dtemp_0 = DRA752_DTEMP_CORE_0_OFFSET,
> +	.ctrl_dtemp_1 = DRA752_DTEMP_CORE_1_OFFSET,
> +	.ctrl_dtemp_2 = DRA752_DTEMP_CORE_2_OFFSET,
> +	.ctrl_dtemp_3 = DRA752_DTEMP_CORE_3_OFFSET,
> +	.ctrl_dtemp_4 = DRA752_DTEMP_CORE_4_OFFSET,
> +	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_CORE_OFFSET,
> +};
> +
> +/*
> + * DRA752 IVA thermal sensor register offsets and bit-fields
> + */
> +static struct temp_sensor_registers
> +dra752_iva_temp_sensor_registers = {
> +	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_IVA_OFFSET,
> +	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
> +	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
> +	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
> +	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_2_OFFSET,
> +	.mask_hot_mask = DRA752_BANDGAP_CTRL_2_MASK_HOT_IVA_MASK,
> +	.mask_cold_mask = DRA752_BANDGAP_CTRL_2_MASK_COLD_IVA_MASK,
> +	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
> +	.mask_freeze_mask = DRA752_BANDGAP_CTRL_2_FREEZE_IVA_MASK,
> +	.mask_clear_mask = DRA752_BANDGAP_CTRL_2_CLEAR_IVA_MASK,
> +	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_IVA_MASK,
> +	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_IVA_OFFSET,
> +	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
> +	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
> +	.tshut_threshold = DRA752_BANDGAP_TSHUT_IVA_OFFSET,
> +	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
> +	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
> +	.bgap_status = DRA752_BANDGAP_STATUS_2_OFFSET,
> +	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
> +	.status_hot_mask = DRA752_BANDGAP_STATUS_2_HOT_IVA_MASK,
> +	.status_cold_mask = DRA752_BANDGAP_STATUS_2_COLD_IVA_MASK,
> +	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_IVA_OFFSET,
> +	.ctrl_dtemp_0 = DRA752_DTEMP_IVA_0_OFFSET,
> +	.ctrl_dtemp_1 = DRA752_DTEMP_IVA_1_OFFSET,
> +	.ctrl_dtemp_2 = DRA752_DTEMP_IVA_2_OFFSET,
> +	.ctrl_dtemp_3 = DRA752_DTEMP_IVA_3_OFFSET,
> +	.ctrl_dtemp_4 = DRA752_DTEMP_IVA_4_OFFSET,
> +	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_IVA_OFFSET,
> +};
> +
> +/*
> + * DRA752 MPU thermal sensor register offsets and bit-fields
> + */
> +static struct temp_sensor_registers
> +dra752_mpu_temp_sensor_registers = {
> +	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_MPU_OFFSET,
> +	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
> +	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
> +	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
> +	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
> +	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_MPU_MASK,
> +	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_MPU_MASK,
> +	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
> +	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_MPU_MASK,
> +	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_MPU_MASK,
> +	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_MPU_MASK,
> +	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_MPU_OFFSET,
> +	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
> +	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
> +	.tshut_threshold = DRA752_BANDGAP_TSHUT_MPU_OFFSET,
> +	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
> +	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
> +	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
> +	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
> +	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_MPU_MASK,
> +	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_MPU_MASK,
> +	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_MPU_OFFSET,
> +	.ctrl_dtemp_0 = DRA752_DTEMP_MPU_0_OFFSET,
> +	.ctrl_dtemp_1 = DRA752_DTEMP_MPU_1_OFFSET,
> +	.ctrl_dtemp_2 = DRA752_DTEMP_MPU_2_OFFSET,
> +	.ctrl_dtemp_3 = DRA752_DTEMP_MPU_3_OFFSET,
> +	.ctrl_dtemp_4 = DRA752_DTEMP_MPU_4_OFFSET,
> +	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_MPU_OFFSET,
> +};
> +
> +/*
> + * DRA752 DSPEVE thermal sensor register offsets and bit-fields
> + */
> +static struct temp_sensor_registers
> +dra752_dspeve_temp_sensor_registers = {
> +	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_DSPEVE_OFFSET,
> +	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
> +	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
> +	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
> +	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_2_OFFSET,
> +	.mask_hot_mask = DRA752_BANDGAP_CTRL_2_MASK_HOT_DSPEVE_MASK,
> +	.mask_cold_mask = DRA752_BANDGAP_CTRL_2_MASK_COLD_DSPEVE_MASK,
> +	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
> +	.mask_freeze_mask = DRA752_BANDGAP_CTRL_2_FREEZE_DSPEVE_MASK,
> +	.mask_clear_mask = DRA752_BANDGAP_CTRL_2_CLEAR_DSPEVE_MASK,
> +	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_DSPEVE_MASK,
> +	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_DSPEVE_OFFSET,
> +	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
> +	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
> +	.tshut_threshold = DRA752_BANDGAP_TSHUT_DSPEVE_OFFSET,
> +	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
> +	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
> +	.bgap_status = DRA752_BANDGAP_STATUS_2_OFFSET,
> +	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
> +	.status_hot_mask = DRA752_BANDGAP_STATUS_2_HOT_DSPEVE_MASK,
> +	.status_cold_mask = DRA752_BANDGAP_STATUS_2_COLD_DSPEVE_MASK,
> +	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_OFFSET,
> +	.ctrl_dtemp_0 = DRA752_DTEMP_DSPEVE_0_OFFSET,
> +	.ctrl_dtemp_1 = DRA752_DTEMP_DSPEVE_1_OFFSET,
> +	.ctrl_dtemp_2 = DRA752_DTEMP_DSPEVE_2_OFFSET,
> +	.ctrl_dtemp_3 = DRA752_DTEMP_DSPEVE_3_OFFSET,
> +	.ctrl_dtemp_4 = DRA752_DTEMP_DSPEVE_4_OFFSET,
> +	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_DSPEVE_OFFSET,
> +};
> +
> +/*
> + * DRA752 GPU thermal sensor register offsets and bit-fields
> + */
> +static struct temp_sensor_registers
> +dra752_gpu_temp_sensor_registers = {
> +	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_GPU_OFFSET,
> +	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
> +	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
> +	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
> +	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
> +	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_GPU_MASK,
> +	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_GPU_MASK,
> +	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
> +	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_GPU_MASK,
> +	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_GPU_MASK,
> +	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_GPU_MASK,
> +	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_GPU_OFFSET,
> +	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
> +	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
> +	.tshut_threshold = DRA752_BANDGAP_TSHUT_GPU_OFFSET,
> +	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
> +	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
> +	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
> +	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
> +	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_GPU_MASK,
> +	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_GPU_MASK,
> +	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_GPU_OFFSET,
> +	.ctrl_dtemp_0 = DRA752_DTEMP_GPU_0_OFFSET,
> +	.ctrl_dtemp_1 = DRA752_DTEMP_GPU_1_OFFSET,
> +	.ctrl_dtemp_2 = DRA752_DTEMP_GPU_2_OFFSET,
> +	.ctrl_dtemp_3 = DRA752_DTEMP_GPU_3_OFFSET,
> +	.ctrl_dtemp_4 = DRA752_DTEMP_GPU_4_OFFSET,
> +	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_GPU_OFFSET,
> +};
> +
> +/* Thresholds and limits for DRA752 MPU temperature sensor */
> +static struct temp_sensor_data dra752_mpu_temp_sensor_data = {
> +	.tshut_hot = DRA752_MPU_TSHUT_HOT,
> +	.tshut_cold = DRA752_MPU_TSHUT_COLD,
> +	.t_hot = DRA752_MPU_T_HOT,
> +	.t_cold = DRA752_MPU_T_COLD,
> +	.min_freq = DRA752_MPU_MIN_FREQ,
> +	.max_freq = DRA752_MPU_MAX_FREQ,
> +	.max_temp = DRA752_MPU_MAX_TEMP,
> +	.min_temp = DRA752_MPU_MIN_TEMP,
> +	.hyst_val = DRA752_MPU_HYST_VAL,
> +	.update_int1 = 1000,
> +	.update_int2 = 2000,
> +};
> +
> +/* Thresholds and limits for DRA752 GPU temperature sensor */
> +static struct temp_sensor_data dra752_gpu_temp_sensor_data = {
> +	.tshut_hot = DRA752_GPU_TSHUT_HOT,
> +	.tshut_cold = DRA752_GPU_TSHUT_COLD,
> +	.t_hot = DRA752_GPU_T_HOT,
> +	.t_cold = DRA752_GPU_T_COLD,
> +	.min_freq = DRA752_GPU_MIN_FREQ,
> +	.max_freq = DRA752_GPU_MAX_FREQ,
> +	.max_temp = DRA752_GPU_MAX_TEMP,
> +	.min_temp = DRA752_GPU_MIN_TEMP,
> +	.hyst_val = DRA752_GPU_HYST_VAL,
> +	.update_int1 = 1000,
> +	.update_int2 = 2000,
> +};
> +
> +/* Thresholds and limits for DRA752 CORE temperature sensor */
> +static struct temp_sensor_data dra752_core_temp_sensor_data = {
> +	.tshut_hot = DRA752_CORE_TSHUT_HOT,
> +	.tshut_cold = DRA752_CORE_TSHUT_COLD,
> +	.t_hot = DRA752_CORE_T_HOT,
> +	.t_cold = DRA752_CORE_T_COLD,
> +	.min_freq = DRA752_CORE_MIN_FREQ,
> +	.max_freq = DRA752_CORE_MAX_FREQ,
> +	.max_temp = DRA752_CORE_MAX_TEMP,
> +	.min_temp = DRA752_CORE_MIN_TEMP,
> +	.hyst_val = DRA752_CORE_HYST_VAL,
> +	.update_int1 = 1000,
> +	.update_int2 = 2000,
> +};
> +
> +/* Thresholds and limits for DRA752 DSPEVE temperature sensor */
> +static struct temp_sensor_data dra752_dspeve_temp_sensor_data = {
> +	.tshut_hot = DRA752_DSPEVE_TSHUT_HOT,
> +	.tshut_cold = DRA752_DSPEVE_TSHUT_COLD,
> +	.t_hot = DRA752_DSPEVE_T_HOT,
> +	.t_cold = DRA752_DSPEVE_T_COLD,
> +	.min_freq = DRA752_DSPEVE_MIN_FREQ,
> +	.max_freq = DRA752_DSPEVE_MAX_FREQ,
> +	.max_temp = DRA752_DSPEVE_MAX_TEMP,
> +	.min_temp = DRA752_DSPEVE_MIN_TEMP,
> +	.hyst_val = DRA752_DSPEVE_HYST_VAL,
> +	.update_int1 = 1000,
> +	.update_int2 = 2000,
> +};
> +
> +/* Thresholds and limits for DRA752 IVA temperature sensor */
> +static struct temp_sensor_data dra752_iva_temp_sensor_data = {
> +	.tshut_hot = DRA752_IVA_TSHUT_HOT,
> +	.tshut_cold = DRA752_IVA_TSHUT_COLD,
> +	.t_hot = DRA752_IVA_T_HOT,
> +	.t_cold = DRA752_IVA_T_COLD,
> +	.min_freq = DRA752_IVA_MIN_FREQ,
> +	.max_freq = DRA752_IVA_MAX_FREQ,
> +	.max_temp = DRA752_IVA_MAX_TEMP,
> +	.min_temp = DRA752_IVA_MIN_TEMP,
> +	.hyst_val = DRA752_IVA_HYST_VAL,
> +	.update_int1 = 1000,
> +	.update_int2 = 2000,
> +};
> +
> +/*
> + * DRA752 : Temperature values in milli degree celsius
> + * ADC code values from 540 to 945
> + */
> +static
> +int dra752_adc_to_temp[DRA752_ADC_END_VALUE - DRA752_ADC_START_VALUE + 1] = {
> +	/* Index 540 - 549 */
> +	-40000, -40000, -40000, -40000, -39800, -39400, -39000, -38600, -38200,
> +	-37800,
> +	/* Index 550 - 559 */
> +	-37400, -37000, -36600, -36200, -35800, -35300, -34700, -34200, -33800,
> +	-33400,
> +	/* Index 560 - 569 */
> +	-33000, -32600, -32200, -31800, -31400, -31000, -30600, -30200, -29800,
> +	-29400,
> +	/* Index 570 - 579 */
> +	-29000, -28600, -28200, -27700, -27100, -26600, -26200, -25800, -25400,
> +	-25000,
> +	/* Index 580 - 589 */
> +	-24600, -24200, -23800, -23400, -23000, -22600, -22200, -21800, -21400,
> +	-21000,
> +	/* Index 590 - 599 */
> +	-20500, -19900, -19400, -19000, -18600, -18200, -17800, -17400, -17000,
> +	-16600,
> +	/* Index 600 - 609 */
> +	-16200, -15800, -15400, -15000, -14600, -14200, -13800, -13400, -13000,
> +	-12500,
> +	/* Index 610 - 619 */
> +	-11900, -11400, -11000, -10600, -10200, -9800, -9400, -9000, -8600,
> +	-8200,
> +	/* Index 620 - 629 */
> +	-7800, -7400, -7000, -6600, -6200, -5800, -5400, -5000, -4500,
> +	-3900,
> +	/* Index 630 - 639 */
> +	-3400, -3000, -2600, -2200, -1800, -1400, -1000, -600, -200,
> +	200,
> +	/* Index 640 - 649 */
> +	600, 1000, 1400, 1800, 2200, 2600, 3000, 3400, 3900,
> +	4500,
> +	/* Index 650 - 659 */
> +	5000, 5400, 5800, 6200, 6600, 7000, 7400, 7800, 8200,
> +	8600,
> +	/* Index 660 - 669 */
> +	9000, 9400, 9800, 10200, 10600, 11000, 11400, 11800, 12200,
> +	12700,
> +	/* Index 670 - 679 */
> +	13300, 13800, 14200, 14600, 15000, 15400, 15800, 16200, 16600,
> +	17000,
> +	/* Index 680 - 689 */
> +	17400, 17800, 18200, 18600, 19000, 19400, 19800, 20200, 20600,
> +	21000,
> +	/* Index 690 - 699 */
> +	21400, 21900, 22500, 23000, 23400, 23800, 24200, 24600, 25000,
> +	25400,
> +	/* Index 700 - 709 */
> +	25800, 26200, 26600, 27000, 27400, 27800, 28200, 28600, 29000,
> +	29400,
> +	/* Index 710 - 719 */
> +	29800, 30200, 30600, 31000, 31400, 31900, 32500, 33000, 33400,
> +	33800,
> +	/* Index 720 - 729 */
> +	34200, 34600, 35000, 35400, 35800, 36200, 36600, 37000, 37400,
> +	37800,
> +	/* Index 730 - 739 */
> +	38200, 38600, 39000, 39400, 39800, 40200, 40600, 41000, 41400,
> +	41800,
> +	/* Index 740 - 749 */
> +	42200, 42600, 43100, 43700, 44200, 44600, 45000, 45400, 45800,
> +	46200,
> +	/* Index 750 - 759 */
> +	46600, 47000, 47400, 47800, 48200, 48600, 49000, 49400, 49800,
> +	50200,
> +	/* Index 760 - 769 */
> +	50600, 51000, 51400, 51800, 52200, 52600, 53000, 53400, 53800,
> +	54200,
> +	/* Index 770 - 779 */
> +	54600, 55000, 55400, 55900, 56500, 57000, 57400, 57800, 58200,
> +	58600,
> +	/* Index 780 - 789 */
> +	59000, 59400, 59800, 60200, 60600, 61000, 61400, 61800, 62200,
> +	62600,
> +	/* Index 790 - 799 */
> +	63000, 63400, 63800, 64200, 64600, 65000, 65400, 65800, 66200,
> +	66600,
> +	/* Index 800 - 809 */
> +	67000, 67400, 67800, 68200, 68600, 69000, 69400, 69800, 70200,
> +	70600,
> +	/* Index 810 - 819 */
> +	71000, 71500, 72100, 72600, 73000, 73400, 73800, 74200, 74600,
> +	75000,
> +	/* Index 820 - 829 */
> +	75400, 75800, 76200, 76600, 77000, 77400, 77800, 78200, 78600,
> +	79000,
> +	/* Index 830 - 839 */
> +	79400, 79800, 80200, 80600, 81000, 81400, 81800, 82200, 82600,
> +	83000,
> +	/* Index 840 - 849 */
> +	83400, 83800, 84200, 84600, 85000, 85400, 85800, 86200, 86600,
> +	87000,
> +	/* Index 850 - 859 */
> +	87400, 87800, 88200, 88600, 89000, 89400, 89800, 90200, 90600,
> +	91000,
> +	/* Index 860 - 869 */
> +	91400, 91800, 92200, 92600, 93000, 93400, 93800, 94200, 94600,
> +	95000,
> +	/* Index 870 - 879 */
> +	95400, 95800, 96200, 96600, 97000, 97500, 98100, 98600, 99000,
> +	99400,
> +	/* Index 880 - 889 */
> +	99800, 100200, 100600, 101000, 101400, 101800, 102200, 102600, 103000,
> +	103400,
> +	/* Index 890 - 899 */
> +	103800, 104200, 104600, 105000, 105400, 105800, 106200, 106600, 107000,
> +	107400,
> +	/* Index 900 - 909 */
> +	107800, 108200, 108600, 109000, 109400, 109800, 110200, 110600, 111000,
> +	111400,
> +	/* Index 910 - 919 */
> +	111800, 112200, 112600, 113000, 113400, 113800, 114200, 114600, 115000,
> +	115400,
> +	/* Index 920 - 929 */
> +	115800, 116200, 116600, 117000, 117400, 117800, 118200, 118600, 119000,
> +	119400,
> +	/* Index 930 - 939 */
> +	119800, 120200, 120600, 121000, 121400, 121800, 122200, 122600, 123000,
> +	123400,
> +	/* Index 940 - 945 */
> +	123800, 124200, 124600, 124900, 125000, 125000,
> +};
> +
> +/* DRA752 data */
> +const struct ti_bandgap_data dra752_data = {
> +	.features = TI_BANDGAP_FEATURE_TSHUT_CONFIG |
> +			TI_BANDGAP_FEATURE_FREEZE_BIT |
> +			TI_BANDGAP_FEATURE_TALERT |
> +			TI_BANDGAP_FEATURE_COUNTER_DELAY |
> +			TI_BANDGAP_FEATURE_HISTORY_BUFFER,
> +	.fclock_name = "l3instr_ts_gclk_div",
> +	.div_ck_name = "l3instr_ts_gclk_div",
> +	.conv_table = dra752_adc_to_temp,
> +	.adc_start_val = DRA752_ADC_START_VALUE,
> +	.adc_end_val = DRA752_ADC_END_VALUE,
> +	.expose_sensor = ti_thermal_expose_sensor,
> +	.remove_sensor = ti_thermal_remove_sensor,
> +	.sensors = {
> +		{
> +		.registers = &dra752_mpu_temp_sensor_registers,
> +		.ts_data = &dra752_mpu_temp_sensor_data,
> +		.domain = "cpu",
> +		.register_cooling = ti_thermal_register_cpu_cooling,
> +		.unregister_cooling = ti_thermal_unregister_cpu_cooling,
> +		.slope = DRA752_GRADIENT_SLOPE,
> +		.constant = DRA752_GRADIENT_CONST,
> +		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
> +		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
> +		},
> +		{
> +		.registers = &dra752_gpu_temp_sensor_registers,
> +		.ts_data = &dra752_gpu_temp_sensor_data,
> +		.domain = "gpu",
> +		.slope = DRA752_GRADIENT_SLOPE,
> +		.constant = DRA752_GRADIENT_CONST,
> +		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
> +		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
> +		},
> +		{
> +		.registers = &dra752_core_temp_sensor_registers,
> +		.ts_data = &dra752_core_temp_sensor_data,
> +		.domain = "core",
> +		.slope = DRA752_GRADIENT_SLOPE,
> +		.constant = DRA752_GRADIENT_CONST,
> +		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
> +		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
> +		},
> +		{
> +		.registers = &dra752_dspeve_temp_sensor_registers,
> +		.ts_data = &dra752_dspeve_temp_sensor_data,
> +		.domain = "dspeve",
> +		.slope = DRA752_GRADIENT_SLOPE,
> +		.constant = DRA752_GRADIENT_CONST,
> +		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
> +		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
> +		},
> +		{
> +		.registers = &dra752_iva_temp_sensor_registers,
> +		.ts_data = &dra752_iva_temp_sensor_data,
> +		.domain = "iva",
> +		.slope = DRA752_GRADIENT_SLOPE,
> +		.constant = DRA752_GRADIENT_CONST,
> +		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
> +		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
> +		},
> +	},
> +	.sensor_count = 5,
> +};
> diff --git a/drivers/thermal/ti-soc-thermal/Kconfig b/drivers/thermal/ti-soc-thermal/Kconfig
> index e81375f..bd4c7be 100644
> --- a/drivers/thermal/ti-soc-thermal/Kconfig
> +++ b/drivers/thermal/ti-soc-thermal/Kconfig
> @@ -46,3 +46,15 @@ config OMAP5_THERMAL
>  
>  	  This includes alert interrupts generation and also the TSHUT
>  	  support.
> +
> +config DRA752_THERMAL
> +	bool "Texas Instruments DRA752 thermal support"
> +	depends on TI_SOC_THERMAL
> +	depends on SOC_DRA7XX
> +	help
> +	  If you say yes here you get thermal support for the Texas Instruments
> +	  DRA752 SoC family. The current chip supported are:
> +	   - DRA752
> +
> +	  This includes alert interrupts generation and also the TSHUT
> +	  support.
> diff --git a/drivers/thermal/ti-soc-thermal/Makefile b/drivers/thermal/ti-soc-thermal/Makefile
> index 0ca034f..1226b24 100644
> --- a/drivers/thermal/ti-soc-thermal/Makefile
> +++ b/drivers/thermal/ti-soc-thermal/Makefile
> @@ -1,5 +1,6 @@
>  obj-$(CONFIG_TI_SOC_THERMAL)		+= ti-soc-thermal.o
>  ti-soc-thermal-y			:= ti-bandgap.o
>  ti-soc-thermal-$(CONFIG_TI_THERMAL)	+= ti-thermal-common.o
> +ti-soc-thermal-$(CONFIG_DRA752_THERMAL)	+= dra752-thermal-data.o
>  ti-soc-thermal-$(CONFIG_OMAP4_THERMAL)	+= omap4-thermal-data.o
>  ti-soc-thermal-$(CONFIG_OMAP5_THERMAL)	+= omap5-thermal-data.o
> diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal.h b/drivers/thermal/ti-soc-thermal/ti-thermal.h
> index 5055777..f8b7ffe 100644
> --- a/drivers/thermal/ti-soc-thermal/ti-thermal.h
> +++ b/drivers/thermal/ti-soc-thermal/ti-thermal.h
> @@ -38,6 +38,9 @@
>  #define OMAP_GRADIENT_SLOPE_5430_GPU				117
>  #define OMAP_GRADIENT_CONST_5430_GPU				-2992
>  
> +#define DRA752_GRADIENT_SLOPE					0
> +#define DRA752_GRADIENT_CONST					2000
> +
>  /* PCB sensor calculation constants */
>  #define OMAP_GRADIENT_SLOPE_W_PCB_4430				0
>  #define OMAP_GRADIENT_CONST_W_PCB_4430				20000
> @@ -51,6 +54,9 @@
>  #define OMAP_GRADIENT_SLOPE_W_PCB_5430_GPU			464
>  #define OMAP_GRADIENT_CONST_W_PCB_5430_GPU			-5102
>  
> +#define DRA752_GRADIENT_SLOPE_W_PCB				0
> +#define DRA752_GRADIENT_CONST_W_PCB				2000
> +
>  /* trip points of interest in milicelsius (at hotspot level) */
>  #define OMAP_TRIP_COLD						100000
>  #define OMAP_TRIP_HOT						110000
> 


-- 
You have got to be excited about what you are doing. (L. Lamport)

Eduardo Valentin


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 295 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* [PATCHv2 5/7] thermal: ti-soc-thermal: add thermal data for DRA752 chips
  2013-06-03 20:31     ` Eduardo Valentin
@ 2013-06-03 20:33       ` Eduardo Valentin
  -1 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-06-03 20:33 UTC (permalink / raw)
  To: rui.zhang; +Cc: linux-pm, linux-kernel, Eduardo Valentin

This patch adds the thermal data for TI DRA752 chips.
In this change it includes (autogen):
. Register offset definitions
. Bitfields and masks for all registers
. Conversion table

Also, the thermal limits, thresholds and extrapolation
rules are included. The extrapolation rule is simply
add +2C as margin.

All 5 sensors, MPU, GPU, CORE, DSPEVE and IVA, are defined
and exposed. Only MPU has cooling device.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 drivers/thermal/ti-soc-thermal/Kconfig             |  12 +
 drivers/thermal/ti-soc-thermal/Makefile            |   1 +
 drivers/thermal/ti-soc-thermal/dra752-bandgap.h    | 280 ++++++++++++
 .../thermal/ti-soc-thermal/dra752-thermal-data.c   | 476 +++++++++++++++++++++
 drivers/thermal/ti-soc-thermal/ti-thermal.h        |   6 +
 5 files changed, 775 insertions(+)
 create mode 100644 drivers/thermal/ti-soc-thermal/dra752-bandgap.h
 create mode 100644 drivers/thermal/ti-soc-thermal/dra752-thermal-data.c

diff --git a/drivers/thermal/ti-soc-thermal/Kconfig b/drivers/thermal/ti-soc-thermal/Kconfig
index e81375f..bd4c7be 100644
--- a/drivers/thermal/ti-soc-thermal/Kconfig
+++ b/drivers/thermal/ti-soc-thermal/Kconfig
@@ -46,3 +46,15 @@ config OMAP5_THERMAL
 
 	  This includes alert interrupts generation and also the TSHUT
 	  support.
+
+config DRA752_THERMAL
+	bool "Texas Instruments DRA752 thermal support"
+	depends on TI_SOC_THERMAL
+	depends on SOC_DRA7XX
+	help
+	  If you say yes here you get thermal support for the Texas Instruments
+	  DRA752 SoC family. The current chip supported are:
+	   - DRA752
+
+	  This includes alert interrupts generation and also the TSHUT
+	  support.
diff --git a/drivers/thermal/ti-soc-thermal/Makefile b/drivers/thermal/ti-soc-thermal/Makefile
index 0ca034f..1226b24 100644
--- a/drivers/thermal/ti-soc-thermal/Makefile
+++ b/drivers/thermal/ti-soc-thermal/Makefile
@@ -1,5 +1,6 @@
 obj-$(CONFIG_TI_SOC_THERMAL)		+= ti-soc-thermal.o
 ti-soc-thermal-y			:= ti-bandgap.o
 ti-soc-thermal-$(CONFIG_TI_THERMAL)	+= ti-thermal-common.o
+ti-soc-thermal-$(CONFIG_DRA752_THERMAL)	+= dra752-thermal-data.o
 ti-soc-thermal-$(CONFIG_OMAP4_THERMAL)	+= omap4-thermal-data.o
 ti-soc-thermal-$(CONFIG_OMAP5_THERMAL)	+= omap5-thermal-data.o
diff --git a/drivers/thermal/ti-soc-thermal/dra752-bandgap.h b/drivers/thermal/ti-soc-thermal/dra752-bandgap.h
new file mode 100644
index 0000000..6b0f2b1
--- /dev/null
+++ b/drivers/thermal/ti-soc-thermal/dra752-bandgap.h
@@ -0,0 +1,280 @@
+/*
+ * DRA752 bandgap registers, bitfields and temperature definitions
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Contact:
+ *   Eduardo Valentin <eduardo.valentin@ti.com>
+ *   Tero Kristo <t-kristo@ti.com>
+ *
+ * This is an auto generated file.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+#ifndef __DRA752_BANDGAP_H
+#define __DRA752_BANDGAP_H
+
+/**
+ * *** DRA752 ***
+ *
+ * Below, in sequence, are the Register definitions,
+ * the bitfields and the temperature definitions for DRA752.
+ */
+
+/**
+ * DRA752 register definitions
+ *
+ * Registers are defined as offsets. The offsets are
+ * relative to FUSE_OPP_BGAP_GPU on DRA752.
+ * DRA752_BANDGAP_BASE		0x4a0021e0
+ *
+ * Register below are grouped by domain (not necessarily in offset order)
+ */
+
+
+/* DRA752.common register offsets */
+#define DRA752_BANDGAP_CTRL_1_OFFSET		0x1a0
+#define DRA752_BANDGAP_STATUS_1_OFFSET		0x1c8
+#define DRA752_BANDGAP_CTRL_2_OFFSET		0x39c
+#define DRA752_BANDGAP_STATUS_2_OFFSET		0x3b8
+
+/* DRA752.core register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_CORE_OFFSET		0x8
+#define DRA752_TEMP_SENSOR_CORE_OFFSET			0x154
+#define DRA752_BANDGAP_THRESHOLD_CORE_OFFSET		0x1ac
+#define DRA752_BANDGAP_TSHUT_CORE_OFFSET		0x1b8
+#define DRA752_BANDGAP_CUMUL_DTEMP_CORE_OFFSET		0x1c4
+#define DRA752_DTEMP_CORE_0_OFFSET			0x208
+#define DRA752_DTEMP_CORE_1_OFFSET			0x20c
+#define DRA752_DTEMP_CORE_2_OFFSET			0x210
+#define DRA752_DTEMP_CORE_3_OFFSET			0x214
+#define DRA752_DTEMP_CORE_4_OFFSET			0x218
+
+/* DRA752.iva register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_IVA_OFFSET		0x388
+#define DRA752_TEMP_SENSOR_IVA_OFFSET			0x398
+#define DRA752_BANDGAP_THRESHOLD_IVA_OFFSET		0x3a4
+#define DRA752_BANDGAP_TSHUT_IVA_OFFSET			0x3ac
+#define DRA752_BANDGAP_CUMUL_DTEMP_IVA_OFFSET		0x3b4
+#define DRA752_DTEMP_IVA_0_OFFSET			0x3d0
+#define DRA752_DTEMP_IVA_1_OFFSET			0x3d4
+#define DRA752_DTEMP_IVA_2_OFFSET			0x3d8
+#define DRA752_DTEMP_IVA_3_OFFSET			0x3dc
+#define DRA752_DTEMP_IVA_4_OFFSET			0x3e0
+
+/* DRA752.mpu register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_MPU_OFFSET		0x4
+#define DRA752_TEMP_SENSOR_MPU_OFFSET			0x14c
+#define DRA752_BANDGAP_THRESHOLD_MPU_OFFSET		0x1a4
+#define DRA752_BANDGAP_TSHUT_MPU_OFFSET			0x1b0
+#define DRA752_BANDGAP_CUMUL_DTEMP_MPU_OFFSET		0x1bc
+#define DRA752_DTEMP_MPU_0_OFFSET			0x1e0
+#define DRA752_DTEMP_MPU_1_OFFSET			0x1e4
+#define DRA752_DTEMP_MPU_2_OFFSET			0x1e8
+#define DRA752_DTEMP_MPU_3_OFFSET			0x1ec
+#define DRA752_DTEMP_MPU_4_OFFSET			0x1f0
+
+/* DRA752.dspeve register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_DSPEVE_OFFSET			0x384
+#define DRA752_TEMP_SENSOR_DSPEVE_OFFSET			0x394
+#define DRA752_BANDGAP_THRESHOLD_DSPEVE_OFFSET			0x3a0
+#define DRA752_BANDGAP_TSHUT_DSPEVE_OFFSET			0x3a8
+#define DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_OFFSET		0x3b0
+#define DRA752_DTEMP_DSPEVE_0_OFFSET				0x3bc
+#define DRA752_DTEMP_DSPEVE_1_OFFSET				0x3c0
+#define DRA752_DTEMP_DSPEVE_2_OFFSET				0x3c4
+#define DRA752_DTEMP_DSPEVE_3_OFFSET				0x3c8
+#define DRA752_DTEMP_DSPEVE_4_OFFSET				0x3cc
+
+/* DRA752.gpu register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_GPU_OFFSET		0x0
+#define DRA752_TEMP_SENSOR_GPU_OFFSET			0x150
+#define DRA752_BANDGAP_THRESHOLD_GPU_OFFSET		0x1a8
+#define DRA752_BANDGAP_TSHUT_GPU_OFFSET			0x1b4
+#define DRA752_BANDGAP_CUMUL_DTEMP_GPU_OFFSET		0x1c0
+#define DRA752_DTEMP_GPU_0_OFFSET			0x1f4
+#define DRA752_DTEMP_GPU_1_OFFSET			0x1f8
+#define DRA752_DTEMP_GPU_2_OFFSET			0x1fc
+#define DRA752_DTEMP_GPU_3_OFFSET			0x200
+#define DRA752_DTEMP_GPU_4_OFFSET			0x204
+
+/**
+ * Register bitfields for DRA752
+ *
+ * All the macros bellow define the required bits for
+ * controlling temperature on DRA752. Bit defines are
+ * grouped by register.
+ */
+
+/* DRA752.BANDGAP_STATUS_1 */
+#define DRA752_BANDGAP_STATUS_1_ALERT_MASK		BIT(31)
+#define DRA752_BANDGAP_STATUS_1_HOT_CORE_MASK		BIT(5)
+#define DRA752_BANDGAP_STATUS_1_COLD_CORE_MASK		BIT(4)
+#define DRA752_BANDGAP_STATUS_1_HOT_GPU_MASK		BIT(3)
+#define DRA752_BANDGAP_STATUS_1_COLD_GPU_MASK		BIT(2)
+#define DRA752_BANDGAP_STATUS_1_HOT_MPU_MASK		BIT(1)
+#define DRA752_BANDGAP_STATUS_1_COLD_MPU_MASK		BIT(0)
+
+/* DRA752.BANDGAP_CTRL_2 */
+#define DRA752_BANDGAP_CTRL_2_FREEZE_IVA_MASK			BIT(22)
+#define DRA752_BANDGAP_CTRL_2_FREEZE_DSPEVE_MASK		BIT(21)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_IVA_MASK			BIT(19)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_DSPEVE_MASK			BIT(18)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_IVA_MASK		BIT(16)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_DSPEVE_MASK		BIT(15)
+#define DRA752_BANDGAP_CTRL_2_MASK_HOT_IVA_MASK			BIT(3)
+#define DRA752_BANDGAP_CTRL_2_MASK_COLD_IVA_MASK		BIT(2)
+#define DRA752_BANDGAP_CTRL_2_MASK_HOT_DSPEVE_MASK		BIT(1)
+#define DRA752_BANDGAP_CTRL_2_MASK_COLD_DSPEVE_MASK		BIT(0)
+
+/* DRA752.BANDGAP_STATUS_2 */
+#define DRA752_BANDGAP_STATUS_2_HOT_IVA_MASK			BIT(3)
+#define DRA752_BANDGAP_STATUS_2_COLD_IVA_MASK			BIT(2)
+#define DRA752_BANDGAP_STATUS_2_HOT_DSPEVE_MASK			BIT(1)
+#define DRA752_BANDGAP_STATUS_2_COLD_DSPEVE_MASK		BIT(0)
+
+/* DRA752.BANDGAP_CTRL_1 */
+#define DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK			(0x3 << 30)
+#define DRA752_BANDGAP_CTRL_1_COUNTER_DELAY_MASK		(0x7 << 27)
+#define DRA752_BANDGAP_CTRL_1_FREEZE_CORE_MASK			BIT(23)
+#define DRA752_BANDGAP_CTRL_1_FREEZE_GPU_MASK			BIT(22)
+#define DRA752_BANDGAP_CTRL_1_FREEZE_MPU_MASK			BIT(21)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_CORE_MASK			BIT(20)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_GPU_MASK			BIT(19)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_MPU_MASK			BIT(18)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_CORE_MASK		BIT(17)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_GPU_MASK		BIT(16)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_MPU_MASK		BIT(15)
+#define DRA752_BANDGAP_CTRL_1_MASK_HOT_CORE_MASK		BIT(5)
+#define DRA752_BANDGAP_CTRL_1_MASK_COLD_CORE_MASK		BIT(4)
+#define DRA752_BANDGAP_CTRL_1_MASK_HOT_GPU_MASK			BIT(3)
+#define DRA752_BANDGAP_CTRL_1_MASK_COLD_GPU_MASK		BIT(2)
+#define DRA752_BANDGAP_CTRL_1_MASK_HOT_MPU_MASK			BIT(1)
+#define DRA752_BANDGAP_CTRL_1_MASK_COLD_MPU_MASK		BIT(0)
+
+/* DRA752.TEMP_SENSOR */
+#define DRA752_TEMP_SENSOR_TMPSOFF_MASK		BIT(11)
+#define DRA752_TEMP_SENSOR_EOCZ_MASK		BIT(10)
+#define DRA752_TEMP_SENSOR_DTEMP_MASK		(0x3ff << 0)
+
+/* DRA752.BANDGAP_THRESHOLD */
+#define DRA752_BANDGAP_THRESHOLD_HOT_MASK		(0x3ff << 16)
+#define DRA752_BANDGAP_THRESHOLD_COLD_MASK		(0x3ff << 0)
+
+/* DRA752.TSHUT_THRESHOLD */
+#define DRA752_TSHUT_THRESHOLD_MUXCTRL_MASK		BIT(31)
+#define DRA752_TSHUT_THRESHOLD_HOT_MASK			(0x3ff << 16)
+#define DRA752_TSHUT_THRESHOLD_COLD_MASK		(0x3ff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_CORE */
+#define DRA752_BANDGAP_CUMUL_DTEMP_CORE_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_IVA */
+#define DRA752_BANDGAP_CUMUL_DTEMP_IVA_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_MPU */
+#define DRA752_BANDGAP_CUMUL_DTEMP_MPU_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_DSPEVE */
+#define DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_GPU */
+#define DRA752_BANDGAP_CUMUL_DTEMP_GPU_MASK		(0xffffffff << 0)
+
+/**
+ * Temperature limits and thresholds for DRA752
+ *
+ * All the macros bellow are definitions for handling the
+ * ADC conversions and representation of temperature limits
+ * and thresholds for DRA752. Definitions are grouped
+ * by temperature domain.
+ */
+
+/* DRA752.common temperature definitions */
+/* ADC conversion table limits */
+#define DRA752_ADC_START_VALUE		540
+#define DRA752_ADC_END_VALUE		945
+
+/* DRA752.GPU temperature definitions */
+/* bandgap clock limits */
+#define DRA752_GPU_MAX_FREQ				1500000
+#define DRA752_GPU_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_GPU_MIN_TEMP				-40000
+#define DRA752_GPU_MAX_TEMP				125000
+#define DRA752_GPU_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_GPU_TSHUT_HOT				915
+#define DRA752_GPU_TSHUT_COLD				900
+#define DRA752_GPU_T_HOT				800
+#define DRA752_GPU_T_COLD				795
+
+/* DRA752.MPU temperature definitions */
+/* bandgap clock limits */
+#define DRA752_MPU_MAX_FREQ				1500000
+#define DRA752_MPU_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_MPU_MIN_TEMP				-40000
+#define DRA752_MPU_MAX_TEMP				125000
+#define DRA752_MPU_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_MPU_TSHUT_HOT				915
+#define DRA752_MPU_TSHUT_COLD				900
+#define DRA752_MPU_T_HOT				800
+#define DRA752_MPU_T_COLD				795
+
+/* DRA752.CORE temperature definitions */
+/* bandgap clock limits */
+#define DRA752_CORE_MAX_FREQ				1500000
+#define DRA752_CORE_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_CORE_MIN_TEMP				-40000
+#define DRA752_CORE_MAX_TEMP				125000
+#define DRA752_CORE_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_CORE_TSHUT_HOT				915
+#define DRA752_CORE_TSHUT_COLD				900
+#define DRA752_CORE_T_HOT				800
+#define DRA752_CORE_T_COLD				795
+
+/* DRA752.DSPEVE temperature definitions */
+/* bandgap clock limits */
+#define DRA752_DSPEVE_MAX_FREQ				1500000
+#define DRA752_DSPEVE_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_DSPEVE_MIN_TEMP				-40000
+#define DRA752_DSPEVE_MAX_TEMP				125000
+#define DRA752_DSPEVE_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_DSPEVE_TSHUT_HOT				915
+#define DRA752_DSPEVE_TSHUT_COLD			900
+#define DRA752_DSPEVE_T_HOT				800
+#define DRA752_DSPEVE_T_COLD				795
+
+/* DRA752.IVA temperature definitions */
+/* bandgap clock limits */
+#define DRA752_IVA_MAX_FREQ				1500000
+#define DRA752_IVA_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_IVA_MIN_TEMP				-40000
+#define DRA752_IVA_MAX_TEMP				125000
+#define DRA752_IVA_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_IVA_TSHUT_HOT				915
+#define DRA752_IVA_TSHUT_COLD				900
+#define DRA752_IVA_T_HOT				800
+#define DRA752_IVA_T_COLD				795
+
+#endif /* __DRA752_BANDGAP_H */
diff --git a/drivers/thermal/ti-soc-thermal/dra752-thermal-data.c b/drivers/thermal/ti-soc-thermal/dra752-thermal-data.c
new file mode 100644
index 0000000..e5d8326
--- /dev/null
+++ b/drivers/thermal/ti-soc-thermal/dra752-thermal-data.c
@@ -0,0 +1,476 @@
+/*
+ * DRA752 thermal data.
+ *
+ * Copyright (C) 2013 Texas Instruments Inc.
+ * Contact:
+ *	Eduardo Valentin <eduardo.valentin@ti.com>
+ *	Tero Kristo <t-kristo@ti.com>
+ *
+ * This file is partially autogenerated.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include "ti-thermal.h"
+#include "ti-bandgap.h"
+#include "dra752-bandgap.h"
+
+/*
+ * DRA752 has five instances of thermal sensor: MPU, GPU, CORE,
+ * IVA and DSPEVE need to describe the individual registers and
+ * bit fields.
+ */
+
+/*
+ * DRA752 CORE thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_core_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_CORE_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_CORE_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_CORE_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_CORE_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_CORE_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_CORE_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_CORE_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_CORE_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_CORE_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_CORE_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_CORE_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_CORE_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_CORE_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_CORE_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_CORE_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_CORE_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_CORE_OFFSET,
+};
+
+/*
+ * DRA752 IVA thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_iva_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_IVA_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_2_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_2_MASK_HOT_IVA_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_2_MASK_COLD_IVA_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_2_FREEZE_IVA_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_2_CLEAR_IVA_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_IVA_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_IVA_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_IVA_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_2_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_2_HOT_IVA_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_2_COLD_IVA_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_IVA_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_IVA_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_IVA_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_IVA_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_IVA_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_IVA_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_IVA_OFFSET,
+};
+
+/*
+ * DRA752 MPU thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_mpu_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_MPU_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_MPU_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_MPU_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_MPU_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_MPU_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_MPU_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_MPU_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_MPU_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_MPU_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_MPU_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_MPU_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_MPU_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_MPU_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_MPU_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_MPU_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_MPU_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_MPU_OFFSET,
+};
+
+/*
+ * DRA752 DSPEVE thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_dspeve_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_DSPEVE_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_2_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_2_MASK_HOT_DSPEVE_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_2_MASK_COLD_DSPEVE_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_2_FREEZE_DSPEVE_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_2_CLEAR_DSPEVE_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_DSPEVE_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_DSPEVE_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_DSPEVE_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_2_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_2_HOT_DSPEVE_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_2_COLD_DSPEVE_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_DSPEVE_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_DSPEVE_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_DSPEVE_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_DSPEVE_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_DSPEVE_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_DSPEVE_OFFSET,
+};
+
+/*
+ * DRA752 GPU thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_gpu_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_GPU_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_GPU_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_GPU_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_GPU_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_GPU_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_GPU_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_GPU_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_GPU_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_GPU_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_GPU_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_GPU_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_GPU_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_GPU_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_GPU_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_GPU_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_GPU_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_GPU_OFFSET,
+};
+
+/* Thresholds and limits for DRA752 MPU temperature sensor */
+static struct temp_sensor_data dra752_mpu_temp_sensor_data = {
+	.tshut_hot = DRA752_MPU_TSHUT_HOT,
+	.tshut_cold = DRA752_MPU_TSHUT_COLD,
+	.t_hot = DRA752_MPU_T_HOT,
+	.t_cold = DRA752_MPU_T_COLD,
+	.min_freq = DRA752_MPU_MIN_FREQ,
+	.max_freq = DRA752_MPU_MAX_FREQ,
+	.max_temp = DRA752_MPU_MAX_TEMP,
+	.min_temp = DRA752_MPU_MIN_TEMP,
+	.hyst_val = DRA752_MPU_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 GPU temperature sensor */
+static struct temp_sensor_data dra752_gpu_temp_sensor_data = {
+	.tshut_hot = DRA752_GPU_TSHUT_HOT,
+	.tshut_cold = DRA752_GPU_TSHUT_COLD,
+	.t_hot = DRA752_GPU_T_HOT,
+	.t_cold = DRA752_GPU_T_COLD,
+	.min_freq = DRA752_GPU_MIN_FREQ,
+	.max_freq = DRA752_GPU_MAX_FREQ,
+	.max_temp = DRA752_GPU_MAX_TEMP,
+	.min_temp = DRA752_GPU_MIN_TEMP,
+	.hyst_val = DRA752_GPU_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 CORE temperature sensor */
+static struct temp_sensor_data dra752_core_temp_sensor_data = {
+	.tshut_hot = DRA752_CORE_TSHUT_HOT,
+	.tshut_cold = DRA752_CORE_TSHUT_COLD,
+	.t_hot = DRA752_CORE_T_HOT,
+	.t_cold = DRA752_CORE_T_COLD,
+	.min_freq = DRA752_CORE_MIN_FREQ,
+	.max_freq = DRA752_CORE_MAX_FREQ,
+	.max_temp = DRA752_CORE_MAX_TEMP,
+	.min_temp = DRA752_CORE_MIN_TEMP,
+	.hyst_val = DRA752_CORE_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 DSPEVE temperature sensor */
+static struct temp_sensor_data dra752_dspeve_temp_sensor_data = {
+	.tshut_hot = DRA752_DSPEVE_TSHUT_HOT,
+	.tshut_cold = DRA752_DSPEVE_TSHUT_COLD,
+	.t_hot = DRA752_DSPEVE_T_HOT,
+	.t_cold = DRA752_DSPEVE_T_COLD,
+	.min_freq = DRA752_DSPEVE_MIN_FREQ,
+	.max_freq = DRA752_DSPEVE_MAX_FREQ,
+	.max_temp = DRA752_DSPEVE_MAX_TEMP,
+	.min_temp = DRA752_DSPEVE_MIN_TEMP,
+	.hyst_val = DRA752_DSPEVE_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 IVA temperature sensor */
+static struct temp_sensor_data dra752_iva_temp_sensor_data = {
+	.tshut_hot = DRA752_IVA_TSHUT_HOT,
+	.tshut_cold = DRA752_IVA_TSHUT_COLD,
+	.t_hot = DRA752_IVA_T_HOT,
+	.t_cold = DRA752_IVA_T_COLD,
+	.min_freq = DRA752_IVA_MIN_FREQ,
+	.max_freq = DRA752_IVA_MAX_FREQ,
+	.max_temp = DRA752_IVA_MAX_TEMP,
+	.min_temp = DRA752_IVA_MIN_TEMP,
+	.hyst_val = DRA752_IVA_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/*
+ * DRA752 : Temperature values in milli degree celsius
+ * ADC code values from 540 to 945
+ */
+static
+int dra752_adc_to_temp[DRA752_ADC_END_VALUE - DRA752_ADC_START_VALUE + 1] = {
+	/* Index 540 - 549 */
+	-40000, -40000, -40000, -40000, -39800, -39400, -39000, -38600, -38200,
+	-37800,
+	/* Index 550 - 559 */
+	-37400, -37000, -36600, -36200, -35800, -35300, -34700, -34200, -33800,
+	-33400,
+	/* Index 560 - 569 */
+	-33000, -32600, -32200, -31800, -31400, -31000, -30600, -30200, -29800,
+	-29400,
+	/* Index 570 - 579 */
+	-29000, -28600, -28200, -27700, -27100, -26600, -26200, -25800, -25400,
+	-25000,
+	/* Index 580 - 589 */
+	-24600, -24200, -23800, -23400, -23000, -22600, -22200, -21800, -21400,
+	-21000,
+	/* Index 590 - 599 */
+	-20500, -19900, -19400, -19000, -18600, -18200, -17800, -17400, -17000,
+	-16600,
+	/* Index 600 - 609 */
+	-16200, -15800, -15400, -15000, -14600, -14200, -13800, -13400, -13000,
+	-12500,
+	/* Index 610 - 619 */
+	-11900, -11400, -11000, -10600, -10200, -9800, -9400, -9000, -8600,
+	-8200,
+	/* Index 620 - 629 */
+	-7800, -7400, -7000, -6600, -6200, -5800, -5400, -5000, -4500,
+	-3900,
+	/* Index 630 - 639 */
+	-3400, -3000, -2600, -2200, -1800, -1400, -1000, -600, -200,
+	200,
+	/* Index 640 - 649 */
+	600, 1000, 1400, 1800, 2200, 2600, 3000, 3400, 3900,
+	4500,
+	/* Index 650 - 659 */
+	5000, 5400, 5800, 6200, 6600, 7000, 7400, 7800, 8200,
+	8600,
+	/* Index 660 - 669 */
+	9000, 9400, 9800, 10200, 10600, 11000, 11400, 11800, 12200,
+	12700,
+	/* Index 670 - 679 */
+	13300, 13800, 14200, 14600, 15000, 15400, 15800, 16200, 16600,
+	17000,
+	/* Index 680 - 689 */
+	17400, 17800, 18200, 18600, 19000, 19400, 19800, 20200, 20600,
+	21000,
+	/* Index 690 - 699 */
+	21400, 21900, 22500, 23000, 23400, 23800, 24200, 24600, 25000,
+	25400,
+	/* Index 700 - 709 */
+	25800, 26200, 26600, 27000, 27400, 27800, 28200, 28600, 29000,
+	29400,
+	/* Index 710 - 719 */
+	29800, 30200, 30600, 31000, 31400, 31900, 32500, 33000, 33400,
+	33800,
+	/* Index 720 - 729 */
+	34200, 34600, 35000, 35400, 35800, 36200, 36600, 37000, 37400,
+	37800,
+	/* Index 730 - 739 */
+	38200, 38600, 39000, 39400, 39800, 40200, 40600, 41000, 41400,
+	41800,
+	/* Index 740 - 749 */
+	42200, 42600, 43100, 43700, 44200, 44600, 45000, 45400, 45800,
+	46200,
+	/* Index 750 - 759 */
+	46600, 47000, 47400, 47800, 48200, 48600, 49000, 49400, 49800,
+	50200,
+	/* Index 760 - 769 */
+	50600, 51000, 51400, 51800, 52200, 52600, 53000, 53400, 53800,
+	54200,
+	/* Index 770 - 779 */
+	54600, 55000, 55400, 55900, 56500, 57000, 57400, 57800, 58200,
+	58600,
+	/* Index 780 - 789 */
+	59000, 59400, 59800, 60200, 60600, 61000, 61400, 61800, 62200,
+	62600,
+	/* Index 790 - 799 */
+	63000, 63400, 63800, 64200, 64600, 65000, 65400, 65800, 66200,
+	66600,
+	/* Index 800 - 809 */
+	67000, 67400, 67800, 68200, 68600, 69000, 69400, 69800, 70200,
+	70600,
+	/* Index 810 - 819 */
+	71000, 71500, 72100, 72600, 73000, 73400, 73800, 74200, 74600,
+	75000,
+	/* Index 820 - 829 */
+	75400, 75800, 76200, 76600, 77000, 77400, 77800, 78200, 78600,
+	79000,
+	/* Index 830 - 839 */
+	79400, 79800, 80200, 80600, 81000, 81400, 81800, 82200, 82600,
+	83000,
+	/* Index 840 - 849 */
+	83400, 83800, 84200, 84600, 85000, 85400, 85800, 86200, 86600,
+	87000,
+	/* Index 850 - 859 */
+	87400, 87800, 88200, 88600, 89000, 89400, 89800, 90200, 90600,
+	91000,
+	/* Index 860 - 869 */
+	91400, 91800, 92200, 92600, 93000, 93400, 93800, 94200, 94600,
+	95000,
+	/* Index 870 - 879 */
+	95400, 95800, 96200, 96600, 97000, 97500, 98100, 98600, 99000,
+	99400,
+	/* Index 880 - 889 */
+	99800, 100200, 100600, 101000, 101400, 101800, 102200, 102600, 103000,
+	103400,
+	/* Index 890 - 899 */
+	103800, 104200, 104600, 105000, 105400, 105800, 106200, 106600, 107000,
+	107400,
+	/* Index 900 - 909 */
+	107800, 108200, 108600, 109000, 109400, 109800, 110200, 110600, 111000,
+	111400,
+	/* Index 910 - 919 */
+	111800, 112200, 112600, 113000, 113400, 113800, 114200, 114600, 115000,
+	115400,
+	/* Index 920 - 929 */
+	115800, 116200, 116600, 117000, 117400, 117800, 118200, 118600, 119000,
+	119400,
+	/* Index 930 - 939 */
+	119800, 120200, 120600, 121000, 121400, 121800, 122200, 122600, 123000,
+	123400,
+	/* Index 940 - 945 */
+	123800, 124200, 124600, 124900, 125000, 125000,
+};
+
+/* DRA752 data */
+const struct ti_bandgap_data dra752_data = {
+	.features = TI_BANDGAP_FEATURE_TSHUT_CONFIG |
+			TI_BANDGAP_FEATURE_FREEZE_BIT |
+			TI_BANDGAP_FEATURE_TALERT |
+			TI_BANDGAP_FEATURE_COUNTER_DELAY |
+			TI_BANDGAP_FEATURE_HISTORY_BUFFER,
+	.fclock_name = "l3instr_ts_gclk_div",
+	.div_ck_name = "l3instr_ts_gclk_div",
+	.conv_table = dra752_adc_to_temp,
+	.adc_start_val = DRA752_ADC_START_VALUE,
+	.adc_end_val = DRA752_ADC_END_VALUE,
+	.expose_sensor = ti_thermal_expose_sensor,
+	.remove_sensor = ti_thermal_remove_sensor,
+	.sensors = {
+		{
+		.registers = &dra752_mpu_temp_sensor_registers,
+		.ts_data = &dra752_mpu_temp_sensor_data,
+		.domain = "cpu",
+		.register_cooling = ti_thermal_register_cpu_cooling,
+		.unregister_cooling = ti_thermal_unregister_cpu_cooling,
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_gpu_temp_sensor_registers,
+		.ts_data = &dra752_gpu_temp_sensor_data,
+		.domain = "gpu",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_core_temp_sensor_registers,
+		.ts_data = &dra752_core_temp_sensor_data,
+		.domain = "core",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_dspeve_temp_sensor_registers,
+		.ts_data = &dra752_dspeve_temp_sensor_data,
+		.domain = "dspeve",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_iva_temp_sensor_registers,
+		.ts_data = &dra752_iva_temp_sensor_data,
+		.domain = "iva",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+	},
+	.sensor_count = 5,
+};
diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal.h b/drivers/thermal/ti-soc-thermal/ti-thermal.h
index 5055777..f8b7ffe 100644
--- a/drivers/thermal/ti-soc-thermal/ti-thermal.h
+++ b/drivers/thermal/ti-soc-thermal/ti-thermal.h
@@ -38,6 +38,9 @@
 #define OMAP_GRADIENT_SLOPE_5430_GPU				117
 #define OMAP_GRADIENT_CONST_5430_GPU				-2992
 
+#define DRA752_GRADIENT_SLOPE					0
+#define DRA752_GRADIENT_CONST					2000
+
 /* PCB sensor calculation constants */
 #define OMAP_GRADIENT_SLOPE_W_PCB_4430				0
 #define OMAP_GRADIENT_CONST_W_PCB_4430				20000
@@ -51,6 +54,9 @@
 #define OMAP_GRADIENT_SLOPE_W_PCB_5430_GPU			464
 #define OMAP_GRADIENT_CONST_W_PCB_5430_GPU			-5102
 
+#define DRA752_GRADIENT_SLOPE_W_PCB				0
+#define DRA752_GRADIENT_CONST_W_PCB				2000
+
 /* trip points of interest in milicelsius (at hotspot level) */
 #define OMAP_TRIP_COLD						100000
 #define OMAP_TRIP_HOT						110000
-- 
1.8.2.1.342.gfa7285d


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCHv2 5/7] thermal: ti-soc-thermal: add thermal data for DRA752 chips
@ 2013-06-03 20:33       ` Eduardo Valentin
  0 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-06-03 20:33 UTC (permalink / raw)
  To: rui.zhang; +Cc: linux-pm, linux-kernel, Eduardo Valentin

This patch adds the thermal data for TI DRA752 chips.
In this change it includes (autogen):
. Register offset definitions
. Bitfields and masks for all registers
. Conversion table

Also, the thermal limits, thresholds and extrapolation
rules are included. The extrapolation rule is simply
add +2C as margin.

All 5 sensors, MPU, GPU, CORE, DSPEVE and IVA, are defined
and exposed. Only MPU has cooling device.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 drivers/thermal/ti-soc-thermal/Kconfig             |  12 +
 drivers/thermal/ti-soc-thermal/Makefile            |   1 +
 drivers/thermal/ti-soc-thermal/dra752-bandgap.h    | 280 ++++++++++++
 .../thermal/ti-soc-thermal/dra752-thermal-data.c   | 476 +++++++++++++++++++++
 drivers/thermal/ti-soc-thermal/ti-thermal.h        |   6 +
 5 files changed, 775 insertions(+)
 create mode 100644 drivers/thermal/ti-soc-thermal/dra752-bandgap.h
 create mode 100644 drivers/thermal/ti-soc-thermal/dra752-thermal-data.c

diff --git a/drivers/thermal/ti-soc-thermal/Kconfig b/drivers/thermal/ti-soc-thermal/Kconfig
index e81375f..bd4c7be 100644
--- a/drivers/thermal/ti-soc-thermal/Kconfig
+++ b/drivers/thermal/ti-soc-thermal/Kconfig
@@ -46,3 +46,15 @@ config OMAP5_THERMAL
 
 	  This includes alert interrupts generation and also the TSHUT
 	  support.
+
+config DRA752_THERMAL
+	bool "Texas Instruments DRA752 thermal support"
+	depends on TI_SOC_THERMAL
+	depends on SOC_DRA7XX
+	help
+	  If you say yes here you get thermal support for the Texas Instruments
+	  DRA752 SoC family. The current chip supported are:
+	   - DRA752
+
+	  This includes alert interrupts generation and also the TSHUT
+	  support.
diff --git a/drivers/thermal/ti-soc-thermal/Makefile b/drivers/thermal/ti-soc-thermal/Makefile
index 0ca034f..1226b24 100644
--- a/drivers/thermal/ti-soc-thermal/Makefile
+++ b/drivers/thermal/ti-soc-thermal/Makefile
@@ -1,5 +1,6 @@
 obj-$(CONFIG_TI_SOC_THERMAL)		+= ti-soc-thermal.o
 ti-soc-thermal-y			:= ti-bandgap.o
 ti-soc-thermal-$(CONFIG_TI_THERMAL)	+= ti-thermal-common.o
+ti-soc-thermal-$(CONFIG_DRA752_THERMAL)	+= dra752-thermal-data.o
 ti-soc-thermal-$(CONFIG_OMAP4_THERMAL)	+= omap4-thermal-data.o
 ti-soc-thermal-$(CONFIG_OMAP5_THERMAL)	+= omap5-thermal-data.o
diff --git a/drivers/thermal/ti-soc-thermal/dra752-bandgap.h b/drivers/thermal/ti-soc-thermal/dra752-bandgap.h
new file mode 100644
index 0000000..6b0f2b1
--- /dev/null
+++ b/drivers/thermal/ti-soc-thermal/dra752-bandgap.h
@@ -0,0 +1,280 @@
+/*
+ * DRA752 bandgap registers, bitfields and temperature definitions
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Contact:
+ *   Eduardo Valentin <eduardo.valentin@ti.com>
+ *   Tero Kristo <t-kristo@ti.com>
+ *
+ * This is an auto generated file.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+#ifndef __DRA752_BANDGAP_H
+#define __DRA752_BANDGAP_H
+
+/**
+ * *** DRA752 ***
+ *
+ * Below, in sequence, are the Register definitions,
+ * the bitfields and the temperature definitions for DRA752.
+ */
+
+/**
+ * DRA752 register definitions
+ *
+ * Registers are defined as offsets. The offsets are
+ * relative to FUSE_OPP_BGAP_GPU on DRA752.
+ * DRA752_BANDGAP_BASE		0x4a0021e0
+ *
+ * Register below are grouped by domain (not necessarily in offset order)
+ */
+
+
+/* DRA752.common register offsets */
+#define DRA752_BANDGAP_CTRL_1_OFFSET		0x1a0
+#define DRA752_BANDGAP_STATUS_1_OFFSET		0x1c8
+#define DRA752_BANDGAP_CTRL_2_OFFSET		0x39c
+#define DRA752_BANDGAP_STATUS_2_OFFSET		0x3b8
+
+/* DRA752.core register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_CORE_OFFSET		0x8
+#define DRA752_TEMP_SENSOR_CORE_OFFSET			0x154
+#define DRA752_BANDGAP_THRESHOLD_CORE_OFFSET		0x1ac
+#define DRA752_BANDGAP_TSHUT_CORE_OFFSET		0x1b8
+#define DRA752_BANDGAP_CUMUL_DTEMP_CORE_OFFSET		0x1c4
+#define DRA752_DTEMP_CORE_0_OFFSET			0x208
+#define DRA752_DTEMP_CORE_1_OFFSET			0x20c
+#define DRA752_DTEMP_CORE_2_OFFSET			0x210
+#define DRA752_DTEMP_CORE_3_OFFSET			0x214
+#define DRA752_DTEMP_CORE_4_OFFSET			0x218
+
+/* DRA752.iva register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_IVA_OFFSET		0x388
+#define DRA752_TEMP_SENSOR_IVA_OFFSET			0x398
+#define DRA752_BANDGAP_THRESHOLD_IVA_OFFSET		0x3a4
+#define DRA752_BANDGAP_TSHUT_IVA_OFFSET			0x3ac
+#define DRA752_BANDGAP_CUMUL_DTEMP_IVA_OFFSET		0x3b4
+#define DRA752_DTEMP_IVA_0_OFFSET			0x3d0
+#define DRA752_DTEMP_IVA_1_OFFSET			0x3d4
+#define DRA752_DTEMP_IVA_2_OFFSET			0x3d8
+#define DRA752_DTEMP_IVA_3_OFFSET			0x3dc
+#define DRA752_DTEMP_IVA_4_OFFSET			0x3e0
+
+/* DRA752.mpu register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_MPU_OFFSET		0x4
+#define DRA752_TEMP_SENSOR_MPU_OFFSET			0x14c
+#define DRA752_BANDGAP_THRESHOLD_MPU_OFFSET		0x1a4
+#define DRA752_BANDGAP_TSHUT_MPU_OFFSET			0x1b0
+#define DRA752_BANDGAP_CUMUL_DTEMP_MPU_OFFSET		0x1bc
+#define DRA752_DTEMP_MPU_0_OFFSET			0x1e0
+#define DRA752_DTEMP_MPU_1_OFFSET			0x1e4
+#define DRA752_DTEMP_MPU_2_OFFSET			0x1e8
+#define DRA752_DTEMP_MPU_3_OFFSET			0x1ec
+#define DRA752_DTEMP_MPU_4_OFFSET			0x1f0
+
+/* DRA752.dspeve register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_DSPEVE_OFFSET			0x384
+#define DRA752_TEMP_SENSOR_DSPEVE_OFFSET			0x394
+#define DRA752_BANDGAP_THRESHOLD_DSPEVE_OFFSET			0x3a0
+#define DRA752_BANDGAP_TSHUT_DSPEVE_OFFSET			0x3a8
+#define DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_OFFSET		0x3b0
+#define DRA752_DTEMP_DSPEVE_0_OFFSET				0x3bc
+#define DRA752_DTEMP_DSPEVE_1_OFFSET				0x3c0
+#define DRA752_DTEMP_DSPEVE_2_OFFSET				0x3c4
+#define DRA752_DTEMP_DSPEVE_3_OFFSET				0x3c8
+#define DRA752_DTEMP_DSPEVE_4_OFFSET				0x3cc
+
+/* DRA752.gpu register offsets */
+#define DRA752_STD_FUSE_OPP_BGAP_GPU_OFFSET		0x0
+#define DRA752_TEMP_SENSOR_GPU_OFFSET			0x150
+#define DRA752_BANDGAP_THRESHOLD_GPU_OFFSET		0x1a8
+#define DRA752_BANDGAP_TSHUT_GPU_OFFSET			0x1b4
+#define DRA752_BANDGAP_CUMUL_DTEMP_GPU_OFFSET		0x1c0
+#define DRA752_DTEMP_GPU_0_OFFSET			0x1f4
+#define DRA752_DTEMP_GPU_1_OFFSET			0x1f8
+#define DRA752_DTEMP_GPU_2_OFFSET			0x1fc
+#define DRA752_DTEMP_GPU_3_OFFSET			0x200
+#define DRA752_DTEMP_GPU_4_OFFSET			0x204
+
+/**
+ * Register bitfields for DRA752
+ *
+ * All the macros bellow define the required bits for
+ * controlling temperature on DRA752. Bit defines are
+ * grouped by register.
+ */
+
+/* DRA752.BANDGAP_STATUS_1 */
+#define DRA752_BANDGAP_STATUS_1_ALERT_MASK		BIT(31)
+#define DRA752_BANDGAP_STATUS_1_HOT_CORE_MASK		BIT(5)
+#define DRA752_BANDGAP_STATUS_1_COLD_CORE_MASK		BIT(4)
+#define DRA752_BANDGAP_STATUS_1_HOT_GPU_MASK		BIT(3)
+#define DRA752_BANDGAP_STATUS_1_COLD_GPU_MASK		BIT(2)
+#define DRA752_BANDGAP_STATUS_1_HOT_MPU_MASK		BIT(1)
+#define DRA752_BANDGAP_STATUS_1_COLD_MPU_MASK		BIT(0)
+
+/* DRA752.BANDGAP_CTRL_2 */
+#define DRA752_BANDGAP_CTRL_2_FREEZE_IVA_MASK			BIT(22)
+#define DRA752_BANDGAP_CTRL_2_FREEZE_DSPEVE_MASK		BIT(21)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_IVA_MASK			BIT(19)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_DSPEVE_MASK			BIT(18)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_IVA_MASK		BIT(16)
+#define DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_DSPEVE_MASK		BIT(15)
+#define DRA752_BANDGAP_CTRL_2_MASK_HOT_IVA_MASK			BIT(3)
+#define DRA752_BANDGAP_CTRL_2_MASK_COLD_IVA_MASK		BIT(2)
+#define DRA752_BANDGAP_CTRL_2_MASK_HOT_DSPEVE_MASK		BIT(1)
+#define DRA752_BANDGAP_CTRL_2_MASK_COLD_DSPEVE_MASK		BIT(0)
+
+/* DRA752.BANDGAP_STATUS_2 */
+#define DRA752_BANDGAP_STATUS_2_HOT_IVA_MASK			BIT(3)
+#define DRA752_BANDGAP_STATUS_2_COLD_IVA_MASK			BIT(2)
+#define DRA752_BANDGAP_STATUS_2_HOT_DSPEVE_MASK			BIT(1)
+#define DRA752_BANDGAP_STATUS_2_COLD_DSPEVE_MASK		BIT(0)
+
+/* DRA752.BANDGAP_CTRL_1 */
+#define DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK			(0x3 << 30)
+#define DRA752_BANDGAP_CTRL_1_COUNTER_DELAY_MASK		(0x7 << 27)
+#define DRA752_BANDGAP_CTRL_1_FREEZE_CORE_MASK			BIT(23)
+#define DRA752_BANDGAP_CTRL_1_FREEZE_GPU_MASK			BIT(22)
+#define DRA752_BANDGAP_CTRL_1_FREEZE_MPU_MASK			BIT(21)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_CORE_MASK			BIT(20)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_GPU_MASK			BIT(19)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_MPU_MASK			BIT(18)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_CORE_MASK		BIT(17)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_GPU_MASK		BIT(16)
+#define DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_MPU_MASK		BIT(15)
+#define DRA752_BANDGAP_CTRL_1_MASK_HOT_CORE_MASK		BIT(5)
+#define DRA752_BANDGAP_CTRL_1_MASK_COLD_CORE_MASK		BIT(4)
+#define DRA752_BANDGAP_CTRL_1_MASK_HOT_GPU_MASK			BIT(3)
+#define DRA752_BANDGAP_CTRL_1_MASK_COLD_GPU_MASK		BIT(2)
+#define DRA752_BANDGAP_CTRL_1_MASK_HOT_MPU_MASK			BIT(1)
+#define DRA752_BANDGAP_CTRL_1_MASK_COLD_MPU_MASK		BIT(0)
+
+/* DRA752.TEMP_SENSOR */
+#define DRA752_TEMP_SENSOR_TMPSOFF_MASK		BIT(11)
+#define DRA752_TEMP_SENSOR_EOCZ_MASK		BIT(10)
+#define DRA752_TEMP_SENSOR_DTEMP_MASK		(0x3ff << 0)
+
+/* DRA752.BANDGAP_THRESHOLD */
+#define DRA752_BANDGAP_THRESHOLD_HOT_MASK		(0x3ff << 16)
+#define DRA752_BANDGAP_THRESHOLD_COLD_MASK		(0x3ff << 0)
+
+/* DRA752.TSHUT_THRESHOLD */
+#define DRA752_TSHUT_THRESHOLD_MUXCTRL_MASK		BIT(31)
+#define DRA752_TSHUT_THRESHOLD_HOT_MASK			(0x3ff << 16)
+#define DRA752_TSHUT_THRESHOLD_COLD_MASK		(0x3ff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_CORE */
+#define DRA752_BANDGAP_CUMUL_DTEMP_CORE_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_IVA */
+#define DRA752_BANDGAP_CUMUL_DTEMP_IVA_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_MPU */
+#define DRA752_BANDGAP_CUMUL_DTEMP_MPU_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_DSPEVE */
+#define DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_MASK		(0xffffffff << 0)
+
+/* DRA752.BANDGAP_CUMUL_DTEMP_GPU */
+#define DRA752_BANDGAP_CUMUL_DTEMP_GPU_MASK		(0xffffffff << 0)
+
+/**
+ * Temperature limits and thresholds for DRA752
+ *
+ * All the macros bellow are definitions for handling the
+ * ADC conversions and representation of temperature limits
+ * and thresholds for DRA752. Definitions are grouped
+ * by temperature domain.
+ */
+
+/* DRA752.common temperature definitions */
+/* ADC conversion table limits */
+#define DRA752_ADC_START_VALUE		540
+#define DRA752_ADC_END_VALUE		945
+
+/* DRA752.GPU temperature definitions */
+/* bandgap clock limits */
+#define DRA752_GPU_MAX_FREQ				1500000
+#define DRA752_GPU_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_GPU_MIN_TEMP				-40000
+#define DRA752_GPU_MAX_TEMP				125000
+#define DRA752_GPU_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_GPU_TSHUT_HOT				915
+#define DRA752_GPU_TSHUT_COLD				900
+#define DRA752_GPU_T_HOT				800
+#define DRA752_GPU_T_COLD				795
+
+/* DRA752.MPU temperature definitions */
+/* bandgap clock limits */
+#define DRA752_MPU_MAX_FREQ				1500000
+#define DRA752_MPU_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_MPU_MIN_TEMP				-40000
+#define DRA752_MPU_MAX_TEMP				125000
+#define DRA752_MPU_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_MPU_TSHUT_HOT				915
+#define DRA752_MPU_TSHUT_COLD				900
+#define DRA752_MPU_T_HOT				800
+#define DRA752_MPU_T_COLD				795
+
+/* DRA752.CORE temperature definitions */
+/* bandgap clock limits */
+#define DRA752_CORE_MAX_FREQ				1500000
+#define DRA752_CORE_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_CORE_MIN_TEMP				-40000
+#define DRA752_CORE_MAX_TEMP				125000
+#define DRA752_CORE_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_CORE_TSHUT_HOT				915
+#define DRA752_CORE_TSHUT_COLD				900
+#define DRA752_CORE_T_HOT				800
+#define DRA752_CORE_T_COLD				795
+
+/* DRA752.DSPEVE temperature definitions */
+/* bandgap clock limits */
+#define DRA752_DSPEVE_MAX_FREQ				1500000
+#define DRA752_DSPEVE_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_DSPEVE_MIN_TEMP				-40000
+#define DRA752_DSPEVE_MAX_TEMP				125000
+#define DRA752_DSPEVE_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_DSPEVE_TSHUT_HOT				915
+#define DRA752_DSPEVE_TSHUT_COLD			900
+#define DRA752_DSPEVE_T_HOT				800
+#define DRA752_DSPEVE_T_COLD				795
+
+/* DRA752.IVA temperature definitions */
+/* bandgap clock limits */
+#define DRA752_IVA_MAX_FREQ				1500000
+#define DRA752_IVA_MIN_FREQ				1000000
+/* sensor limits */
+#define DRA752_IVA_MIN_TEMP				-40000
+#define DRA752_IVA_MAX_TEMP				125000
+#define DRA752_IVA_HYST_VAL				5000
+/* interrupts thresholds */
+#define DRA752_IVA_TSHUT_HOT				915
+#define DRA752_IVA_TSHUT_COLD				900
+#define DRA752_IVA_T_HOT				800
+#define DRA752_IVA_T_COLD				795
+
+#endif /* __DRA752_BANDGAP_H */
diff --git a/drivers/thermal/ti-soc-thermal/dra752-thermal-data.c b/drivers/thermal/ti-soc-thermal/dra752-thermal-data.c
new file mode 100644
index 0000000..e5d8326
--- /dev/null
+++ b/drivers/thermal/ti-soc-thermal/dra752-thermal-data.c
@@ -0,0 +1,476 @@
+/*
+ * DRA752 thermal data.
+ *
+ * Copyright (C) 2013 Texas Instruments Inc.
+ * Contact:
+ *	Eduardo Valentin <eduardo.valentin@ti.com>
+ *	Tero Kristo <t-kristo@ti.com>
+ *
+ * This file is partially autogenerated.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include "ti-thermal.h"
+#include "ti-bandgap.h"
+#include "dra752-bandgap.h"
+
+/*
+ * DRA752 has five instances of thermal sensor: MPU, GPU, CORE,
+ * IVA and DSPEVE need to describe the individual registers and
+ * bit fields.
+ */
+
+/*
+ * DRA752 CORE thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_core_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_CORE_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_CORE_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_CORE_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_CORE_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_CORE_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_CORE_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_CORE_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_CORE_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_CORE_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_CORE_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_CORE_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_CORE_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_CORE_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_CORE_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_CORE_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_CORE_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_CORE_OFFSET,
+};
+
+/*
+ * DRA752 IVA thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_iva_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_IVA_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_2_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_2_MASK_HOT_IVA_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_2_MASK_COLD_IVA_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_2_FREEZE_IVA_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_2_CLEAR_IVA_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_IVA_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_IVA_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_IVA_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_2_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_2_HOT_IVA_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_2_COLD_IVA_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_IVA_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_IVA_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_IVA_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_IVA_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_IVA_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_IVA_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_IVA_OFFSET,
+};
+
+/*
+ * DRA752 MPU thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_mpu_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_MPU_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_MPU_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_MPU_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_MPU_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_MPU_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_MPU_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_MPU_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_MPU_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_MPU_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_MPU_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_MPU_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_MPU_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_MPU_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_MPU_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_MPU_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_MPU_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_MPU_OFFSET,
+};
+
+/*
+ * DRA752 DSPEVE thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_dspeve_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_DSPEVE_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_2_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_2_MASK_HOT_DSPEVE_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_2_MASK_COLD_DSPEVE_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_2_FREEZE_DSPEVE_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_2_CLEAR_DSPEVE_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_2_CLEAR_ACCUM_DSPEVE_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_DSPEVE_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_DSPEVE_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_2_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_2_HOT_DSPEVE_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_2_COLD_DSPEVE_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_DSPEVE_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_DSPEVE_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_DSPEVE_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_DSPEVE_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_DSPEVE_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_DSPEVE_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_DSPEVE_OFFSET,
+};
+
+/*
+ * DRA752 GPU thermal sensor register offsets and bit-fields
+ */
+static struct temp_sensor_registers
+dra752_gpu_temp_sensor_registers = {
+	.temp_sensor_ctrl = DRA752_TEMP_SENSOR_GPU_OFFSET,
+	.bgap_tempsoff_mask = DRA752_TEMP_SENSOR_TMPSOFF_MASK,
+	.bgap_eocz_mask = DRA752_TEMP_SENSOR_EOCZ_MASK,
+	.bgap_dtemp_mask = DRA752_TEMP_SENSOR_DTEMP_MASK,
+	.bgap_mask_ctrl = DRA752_BANDGAP_CTRL_1_OFFSET,
+	.mask_hot_mask = DRA752_BANDGAP_CTRL_1_MASK_HOT_GPU_MASK,
+	.mask_cold_mask = DRA752_BANDGAP_CTRL_1_MASK_COLD_GPU_MASK,
+	.mask_sidlemode_mask = DRA752_BANDGAP_CTRL_1_SIDLEMODE_MASK,
+	.mask_freeze_mask = DRA752_BANDGAP_CTRL_1_FREEZE_GPU_MASK,
+	.mask_clear_mask = DRA752_BANDGAP_CTRL_1_CLEAR_GPU_MASK,
+	.mask_clear_accum_mask = DRA752_BANDGAP_CTRL_1_CLEAR_ACCUM_GPU_MASK,
+	.bgap_threshold = DRA752_BANDGAP_THRESHOLD_GPU_OFFSET,
+	.threshold_thot_mask = DRA752_BANDGAP_THRESHOLD_HOT_MASK,
+	.threshold_tcold_mask = DRA752_BANDGAP_THRESHOLD_COLD_MASK,
+	.tshut_threshold = DRA752_BANDGAP_TSHUT_GPU_OFFSET,
+	.tshut_hot_mask = DRA752_TSHUT_THRESHOLD_HOT_MASK,
+	.tshut_cold_mask = DRA752_TSHUT_THRESHOLD_COLD_MASK,
+	.bgap_status = DRA752_BANDGAP_STATUS_1_OFFSET,
+	.status_bgap_alert_mask = DRA752_BANDGAP_STATUS_1_ALERT_MASK,
+	.status_hot_mask = DRA752_BANDGAP_STATUS_1_HOT_GPU_MASK,
+	.status_cold_mask = DRA752_BANDGAP_STATUS_1_COLD_GPU_MASK,
+	.bgap_cumul_dtemp = DRA752_BANDGAP_CUMUL_DTEMP_GPU_OFFSET,
+	.ctrl_dtemp_0 = DRA752_DTEMP_GPU_0_OFFSET,
+	.ctrl_dtemp_1 = DRA752_DTEMP_GPU_1_OFFSET,
+	.ctrl_dtemp_2 = DRA752_DTEMP_GPU_2_OFFSET,
+	.ctrl_dtemp_3 = DRA752_DTEMP_GPU_3_OFFSET,
+	.ctrl_dtemp_4 = DRA752_DTEMP_GPU_4_OFFSET,
+	.bgap_efuse = DRA752_STD_FUSE_OPP_BGAP_GPU_OFFSET,
+};
+
+/* Thresholds and limits for DRA752 MPU temperature sensor */
+static struct temp_sensor_data dra752_mpu_temp_sensor_data = {
+	.tshut_hot = DRA752_MPU_TSHUT_HOT,
+	.tshut_cold = DRA752_MPU_TSHUT_COLD,
+	.t_hot = DRA752_MPU_T_HOT,
+	.t_cold = DRA752_MPU_T_COLD,
+	.min_freq = DRA752_MPU_MIN_FREQ,
+	.max_freq = DRA752_MPU_MAX_FREQ,
+	.max_temp = DRA752_MPU_MAX_TEMP,
+	.min_temp = DRA752_MPU_MIN_TEMP,
+	.hyst_val = DRA752_MPU_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 GPU temperature sensor */
+static struct temp_sensor_data dra752_gpu_temp_sensor_data = {
+	.tshut_hot = DRA752_GPU_TSHUT_HOT,
+	.tshut_cold = DRA752_GPU_TSHUT_COLD,
+	.t_hot = DRA752_GPU_T_HOT,
+	.t_cold = DRA752_GPU_T_COLD,
+	.min_freq = DRA752_GPU_MIN_FREQ,
+	.max_freq = DRA752_GPU_MAX_FREQ,
+	.max_temp = DRA752_GPU_MAX_TEMP,
+	.min_temp = DRA752_GPU_MIN_TEMP,
+	.hyst_val = DRA752_GPU_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 CORE temperature sensor */
+static struct temp_sensor_data dra752_core_temp_sensor_data = {
+	.tshut_hot = DRA752_CORE_TSHUT_HOT,
+	.tshut_cold = DRA752_CORE_TSHUT_COLD,
+	.t_hot = DRA752_CORE_T_HOT,
+	.t_cold = DRA752_CORE_T_COLD,
+	.min_freq = DRA752_CORE_MIN_FREQ,
+	.max_freq = DRA752_CORE_MAX_FREQ,
+	.max_temp = DRA752_CORE_MAX_TEMP,
+	.min_temp = DRA752_CORE_MIN_TEMP,
+	.hyst_val = DRA752_CORE_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 DSPEVE temperature sensor */
+static struct temp_sensor_data dra752_dspeve_temp_sensor_data = {
+	.tshut_hot = DRA752_DSPEVE_TSHUT_HOT,
+	.tshut_cold = DRA752_DSPEVE_TSHUT_COLD,
+	.t_hot = DRA752_DSPEVE_T_HOT,
+	.t_cold = DRA752_DSPEVE_T_COLD,
+	.min_freq = DRA752_DSPEVE_MIN_FREQ,
+	.max_freq = DRA752_DSPEVE_MAX_FREQ,
+	.max_temp = DRA752_DSPEVE_MAX_TEMP,
+	.min_temp = DRA752_DSPEVE_MIN_TEMP,
+	.hyst_val = DRA752_DSPEVE_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/* Thresholds and limits for DRA752 IVA temperature sensor */
+static struct temp_sensor_data dra752_iva_temp_sensor_data = {
+	.tshut_hot = DRA752_IVA_TSHUT_HOT,
+	.tshut_cold = DRA752_IVA_TSHUT_COLD,
+	.t_hot = DRA752_IVA_T_HOT,
+	.t_cold = DRA752_IVA_T_COLD,
+	.min_freq = DRA752_IVA_MIN_FREQ,
+	.max_freq = DRA752_IVA_MAX_FREQ,
+	.max_temp = DRA752_IVA_MAX_TEMP,
+	.min_temp = DRA752_IVA_MIN_TEMP,
+	.hyst_val = DRA752_IVA_HYST_VAL,
+	.update_int1 = 1000,
+	.update_int2 = 2000,
+};
+
+/*
+ * DRA752 : Temperature values in milli degree celsius
+ * ADC code values from 540 to 945
+ */
+static
+int dra752_adc_to_temp[DRA752_ADC_END_VALUE - DRA752_ADC_START_VALUE + 1] = {
+	/* Index 540 - 549 */
+	-40000, -40000, -40000, -40000, -39800, -39400, -39000, -38600, -38200,
+	-37800,
+	/* Index 550 - 559 */
+	-37400, -37000, -36600, -36200, -35800, -35300, -34700, -34200, -33800,
+	-33400,
+	/* Index 560 - 569 */
+	-33000, -32600, -32200, -31800, -31400, -31000, -30600, -30200, -29800,
+	-29400,
+	/* Index 570 - 579 */
+	-29000, -28600, -28200, -27700, -27100, -26600, -26200, -25800, -25400,
+	-25000,
+	/* Index 580 - 589 */
+	-24600, -24200, -23800, -23400, -23000, -22600, -22200, -21800, -21400,
+	-21000,
+	/* Index 590 - 599 */
+	-20500, -19900, -19400, -19000, -18600, -18200, -17800, -17400, -17000,
+	-16600,
+	/* Index 600 - 609 */
+	-16200, -15800, -15400, -15000, -14600, -14200, -13800, -13400, -13000,
+	-12500,
+	/* Index 610 - 619 */
+	-11900, -11400, -11000, -10600, -10200, -9800, -9400, -9000, -8600,
+	-8200,
+	/* Index 620 - 629 */
+	-7800, -7400, -7000, -6600, -6200, -5800, -5400, -5000, -4500,
+	-3900,
+	/* Index 630 - 639 */
+	-3400, -3000, -2600, -2200, -1800, -1400, -1000, -600, -200,
+	200,
+	/* Index 640 - 649 */
+	600, 1000, 1400, 1800, 2200, 2600, 3000, 3400, 3900,
+	4500,
+	/* Index 650 - 659 */
+	5000, 5400, 5800, 6200, 6600, 7000, 7400, 7800, 8200,
+	8600,
+	/* Index 660 - 669 */
+	9000, 9400, 9800, 10200, 10600, 11000, 11400, 11800, 12200,
+	12700,
+	/* Index 670 - 679 */
+	13300, 13800, 14200, 14600, 15000, 15400, 15800, 16200, 16600,
+	17000,
+	/* Index 680 - 689 */
+	17400, 17800, 18200, 18600, 19000, 19400, 19800, 20200, 20600,
+	21000,
+	/* Index 690 - 699 */
+	21400, 21900, 22500, 23000, 23400, 23800, 24200, 24600, 25000,
+	25400,
+	/* Index 700 - 709 */
+	25800, 26200, 26600, 27000, 27400, 27800, 28200, 28600, 29000,
+	29400,
+	/* Index 710 - 719 */
+	29800, 30200, 30600, 31000, 31400, 31900, 32500, 33000, 33400,
+	33800,
+	/* Index 720 - 729 */
+	34200, 34600, 35000, 35400, 35800, 36200, 36600, 37000, 37400,
+	37800,
+	/* Index 730 - 739 */
+	38200, 38600, 39000, 39400, 39800, 40200, 40600, 41000, 41400,
+	41800,
+	/* Index 740 - 749 */
+	42200, 42600, 43100, 43700, 44200, 44600, 45000, 45400, 45800,
+	46200,
+	/* Index 750 - 759 */
+	46600, 47000, 47400, 47800, 48200, 48600, 49000, 49400, 49800,
+	50200,
+	/* Index 760 - 769 */
+	50600, 51000, 51400, 51800, 52200, 52600, 53000, 53400, 53800,
+	54200,
+	/* Index 770 - 779 */
+	54600, 55000, 55400, 55900, 56500, 57000, 57400, 57800, 58200,
+	58600,
+	/* Index 780 - 789 */
+	59000, 59400, 59800, 60200, 60600, 61000, 61400, 61800, 62200,
+	62600,
+	/* Index 790 - 799 */
+	63000, 63400, 63800, 64200, 64600, 65000, 65400, 65800, 66200,
+	66600,
+	/* Index 800 - 809 */
+	67000, 67400, 67800, 68200, 68600, 69000, 69400, 69800, 70200,
+	70600,
+	/* Index 810 - 819 */
+	71000, 71500, 72100, 72600, 73000, 73400, 73800, 74200, 74600,
+	75000,
+	/* Index 820 - 829 */
+	75400, 75800, 76200, 76600, 77000, 77400, 77800, 78200, 78600,
+	79000,
+	/* Index 830 - 839 */
+	79400, 79800, 80200, 80600, 81000, 81400, 81800, 82200, 82600,
+	83000,
+	/* Index 840 - 849 */
+	83400, 83800, 84200, 84600, 85000, 85400, 85800, 86200, 86600,
+	87000,
+	/* Index 850 - 859 */
+	87400, 87800, 88200, 88600, 89000, 89400, 89800, 90200, 90600,
+	91000,
+	/* Index 860 - 869 */
+	91400, 91800, 92200, 92600, 93000, 93400, 93800, 94200, 94600,
+	95000,
+	/* Index 870 - 879 */
+	95400, 95800, 96200, 96600, 97000, 97500, 98100, 98600, 99000,
+	99400,
+	/* Index 880 - 889 */
+	99800, 100200, 100600, 101000, 101400, 101800, 102200, 102600, 103000,
+	103400,
+	/* Index 890 - 899 */
+	103800, 104200, 104600, 105000, 105400, 105800, 106200, 106600, 107000,
+	107400,
+	/* Index 900 - 909 */
+	107800, 108200, 108600, 109000, 109400, 109800, 110200, 110600, 111000,
+	111400,
+	/* Index 910 - 919 */
+	111800, 112200, 112600, 113000, 113400, 113800, 114200, 114600, 115000,
+	115400,
+	/* Index 920 - 929 */
+	115800, 116200, 116600, 117000, 117400, 117800, 118200, 118600, 119000,
+	119400,
+	/* Index 930 - 939 */
+	119800, 120200, 120600, 121000, 121400, 121800, 122200, 122600, 123000,
+	123400,
+	/* Index 940 - 945 */
+	123800, 124200, 124600, 124900, 125000, 125000,
+};
+
+/* DRA752 data */
+const struct ti_bandgap_data dra752_data = {
+	.features = TI_BANDGAP_FEATURE_TSHUT_CONFIG |
+			TI_BANDGAP_FEATURE_FREEZE_BIT |
+			TI_BANDGAP_FEATURE_TALERT |
+			TI_BANDGAP_FEATURE_COUNTER_DELAY |
+			TI_BANDGAP_FEATURE_HISTORY_BUFFER,
+	.fclock_name = "l3instr_ts_gclk_div",
+	.div_ck_name = "l3instr_ts_gclk_div",
+	.conv_table = dra752_adc_to_temp,
+	.adc_start_val = DRA752_ADC_START_VALUE,
+	.adc_end_val = DRA752_ADC_END_VALUE,
+	.expose_sensor = ti_thermal_expose_sensor,
+	.remove_sensor = ti_thermal_remove_sensor,
+	.sensors = {
+		{
+		.registers = &dra752_mpu_temp_sensor_registers,
+		.ts_data = &dra752_mpu_temp_sensor_data,
+		.domain = "cpu",
+		.register_cooling = ti_thermal_register_cpu_cooling,
+		.unregister_cooling = ti_thermal_unregister_cpu_cooling,
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_gpu_temp_sensor_registers,
+		.ts_data = &dra752_gpu_temp_sensor_data,
+		.domain = "gpu",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_core_temp_sensor_registers,
+		.ts_data = &dra752_core_temp_sensor_data,
+		.domain = "core",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_dspeve_temp_sensor_registers,
+		.ts_data = &dra752_dspeve_temp_sensor_data,
+		.domain = "dspeve",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+		{
+		.registers = &dra752_iva_temp_sensor_registers,
+		.ts_data = &dra752_iva_temp_sensor_data,
+		.domain = "iva",
+		.slope = DRA752_GRADIENT_SLOPE,
+		.constant = DRA752_GRADIENT_CONST,
+		.slope_pcb = DRA752_GRADIENT_SLOPE_W_PCB,
+		.constant_pcb = DRA752_GRADIENT_CONST_W_PCB,
+		},
+	},
+	.sensor_count = 5,
+};
diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal.h b/drivers/thermal/ti-soc-thermal/ti-thermal.h
index 5055777..f8b7ffe 100644
--- a/drivers/thermal/ti-soc-thermal/ti-thermal.h
+++ b/drivers/thermal/ti-soc-thermal/ti-thermal.h
@@ -38,6 +38,9 @@
 #define OMAP_GRADIENT_SLOPE_5430_GPU				117
 #define OMAP_GRADIENT_CONST_5430_GPU				-2992
 
+#define DRA752_GRADIENT_SLOPE					0
+#define DRA752_GRADIENT_CONST					2000
+
 /* PCB sensor calculation constants */
 #define OMAP_GRADIENT_SLOPE_W_PCB_4430				0
 #define OMAP_GRADIENT_CONST_W_PCB_4430				20000
@@ -51,6 +54,9 @@
 #define OMAP_GRADIENT_SLOPE_W_PCB_5430_GPU			464
 #define OMAP_GRADIENT_CONST_W_PCB_5430_GPU			-5102
 
+#define DRA752_GRADIENT_SLOPE_W_PCB				0
+#define DRA752_GRADIENT_CONST_W_PCB				2000
+
 /* trip points of interest in milicelsius (at hotspot level) */
 #define OMAP_TRIP_COLD						100000
 #define OMAP_TRIP_HOT						110000
-- 
1.8.2.1.342.gfa7285d


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* Re: [PATCH 3/7] thermal: ti-soc-thermal: freeze FSM while computing trend
  2013-05-29 15:07   ` Eduardo Valentin
@ 2013-06-07 19:10     ` Eduardo Valentin
  -1 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-06-07 19:10 UTC (permalink / raw)
  To: Eduardo Valentin; +Cc: rui.zhang, linux-pm, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 2237 bytes --]

On 29-05-2013 11:07, Eduardo Valentin wrote:
> In order to read the history buffer, it is required to
> freeze BG FSM. This patch adds the missing piece of code
> to freeze the FSM and also a contention area to avoid
> other parts of the code to access the DTEMPs.
> 
> Cc: Zhang Rui <rui.zhang@intel.com>
> Cc: linux-pm@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
> ---
>  drivers/thermal/ti-soc-thermal/ti-bandgap.c | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.c b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
> index f20c1cf..be9dba5 100644
> --- a/drivers/thermal/ti-soc-thermal/ti-bandgap.c
> +++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
> @@ -992,9 +992,12 @@ int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend)
>  		goto exit;
>  	}
>  
> +	spin_lock(&bgp->lock);
> +
>  	tsr = bgp->conf->sensors[id].registers;
>  
>  	/* Freeze and read the last 2 valid readings */
> +	RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 1);
>  	reg1 = tsr->ctrl_dtemp_1;
>  	reg2 = tsr->ctrl_dtemp_2;
>  
> @@ -1008,22 +1011,26 @@ int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend)
>  	/* Convert from adc values to mCelsius temperature */
>  	ret = ti_bandgap_adc_to_mcelsius(bgp, temp1, &t1);
>  	if (ret)
> -		goto exit;
> +		goto unfreeze;
>  
>  	ret = ti_bandgap_adc_to_mcelsius(bgp, temp2, &t2);
>  	if (ret)
> -		goto exit;
> +		goto unfreeze;
>  
>  	/* Fetch the update interval */
>  	ret = ti_bandgap_read_update_interval(bgp, id, &interval);
>  	if (ret || !interval)
> -		goto exit;
> +		goto unfreeze;
>  
>  	*trend = (t1 - t2) / interval;
>  
>  	dev_dbg(bgp->dev, "The temperatures are t1 = %d and t2 = %d and trend =%d\n",
>  		t1, t2, *trend);
>  
> +unfreeze:
> +	RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 0);
> +unlock:

This label is unused. I will repost this patch only without this label.

> +	spin_unlock(&bgp->lock);
>  exit:
>  	return ret;
>  }
> 


-- 
You have got to be excited about what you are doing. (L. Lamport)

Eduardo Valentin


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 295 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 3/7] thermal: ti-soc-thermal: freeze FSM while computing trend
@ 2013-06-07 19:10     ` Eduardo Valentin
  0 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-06-07 19:10 UTC (permalink / raw)
  To: Eduardo Valentin; +Cc: rui.zhang, linux-pm, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 2237 bytes --]

On 29-05-2013 11:07, Eduardo Valentin wrote:
> In order to read the history buffer, it is required to
> freeze BG FSM. This patch adds the missing piece of code
> to freeze the FSM and also a contention area to avoid
> other parts of the code to access the DTEMPs.
> 
> Cc: Zhang Rui <rui.zhang@intel.com>
> Cc: linux-pm@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
> ---
>  drivers/thermal/ti-soc-thermal/ti-bandgap.c | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.c b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
> index f20c1cf..be9dba5 100644
> --- a/drivers/thermal/ti-soc-thermal/ti-bandgap.c
> +++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
> @@ -992,9 +992,12 @@ int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend)
>  		goto exit;
>  	}
>  
> +	spin_lock(&bgp->lock);
> +
>  	tsr = bgp->conf->sensors[id].registers;
>  
>  	/* Freeze and read the last 2 valid readings */
> +	RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 1);
>  	reg1 = tsr->ctrl_dtemp_1;
>  	reg2 = tsr->ctrl_dtemp_2;
>  
> @@ -1008,22 +1011,26 @@ int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend)
>  	/* Convert from adc values to mCelsius temperature */
>  	ret = ti_bandgap_adc_to_mcelsius(bgp, temp1, &t1);
>  	if (ret)
> -		goto exit;
> +		goto unfreeze;
>  
>  	ret = ti_bandgap_adc_to_mcelsius(bgp, temp2, &t2);
>  	if (ret)
> -		goto exit;
> +		goto unfreeze;
>  
>  	/* Fetch the update interval */
>  	ret = ti_bandgap_read_update_interval(bgp, id, &interval);
>  	if (ret || !interval)
> -		goto exit;
> +		goto unfreeze;
>  
>  	*trend = (t1 - t2) / interval;
>  
>  	dev_dbg(bgp->dev, "The temperatures are t1 = %d and t2 = %d and trend =%d\n",
>  		t1, t2, *trend);
>  
> +unfreeze:
> +	RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 0);
> +unlock:

This label is unused. I will repost this patch only without this label.

> +	spin_unlock(&bgp->lock);
>  exit:
>  	return ret;
>  }
> 


-- 
You have got to be excited about what you are doing. (L. Lamport)

Eduardo Valentin


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 295 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* [PATCHv2 3/7] thermal: ti-soc-thermal: freeze FSM while computing trend
  2013-06-07 19:10     ` Eduardo Valentin
@ 2013-06-07 19:13       ` Eduardo Valentin
  -1 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-06-07 19:13 UTC (permalink / raw)
  To: Zhang Rui; +Cc: Eduardo Valentin, linux-pm, linux-kernel

In order to read the history buffer, it is required to
freeze BG FSM. This patch adds the missing piece of code
to freeze the FSM and also a contention area to avoid
other parts of the code to access the DTEMPs.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 drivers/thermal/ti-soc-thermal/ti-bandgap.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
---

v2: Removed unused label 'unlock:'.

diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.c b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
index f20c1cf..219c051 100644
--- a/drivers/thermal/ti-soc-thermal/ti-bandgap.c
+++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
@@ -992,9 +992,12 @@ int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend)
 		goto exit;
 	}
 
+	spin_lock(&bgp->lock);
+
 	tsr = bgp->conf->sensors[id].registers;
 
 	/* Freeze and read the last 2 valid readings */
+	RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 1);
 	reg1 = tsr->ctrl_dtemp_1;
 	reg2 = tsr->ctrl_dtemp_2;
 
@@ -1008,22 +1011,25 @@ int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend)
 	/* Convert from adc values to mCelsius temperature */
 	ret = ti_bandgap_adc_to_mcelsius(bgp, temp1, &t1);
 	if (ret)
-		goto exit;
+		goto unfreeze;
 
 	ret = ti_bandgap_adc_to_mcelsius(bgp, temp2, &t2);
 	if (ret)
-		goto exit;
+		goto unfreeze;
 
 	/* Fetch the update interval */
 	ret = ti_bandgap_read_update_interval(bgp, id, &interval);
 	if (ret || !interval)
-		goto exit;
+		goto unfreeze;
 
 	*trend = (t1 - t2) / interval;
 
 	dev_dbg(bgp->dev, "The temperatures are t1 = %d and t2 = %d and trend =%d\n",
 		t1, t2, *trend);
 
+unfreeze:
+	RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 0);
+	spin_unlock(&bgp->lock);
 exit:
 	return ret;
 }
-- 
1.8.2.1.342.gfa7285d


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCHv2 3/7] thermal: ti-soc-thermal: freeze FSM while computing trend
@ 2013-06-07 19:13       ` Eduardo Valentin
  0 siblings, 0 replies; 29+ messages in thread
From: Eduardo Valentin @ 2013-06-07 19:13 UTC (permalink / raw)
  To: Zhang Rui; +Cc: Eduardo Valentin, linux-pm, linux-kernel

In order to read the history buffer, it is required to
freeze BG FSM. This patch adds the missing piece of code
to freeze the FSM and also a contention area to avoid
other parts of the code to access the DTEMPs.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
---
 drivers/thermal/ti-soc-thermal/ti-bandgap.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
---

v2: Removed unused label 'unlock:'.

diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.c b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
index f20c1cf..219c051 100644
--- a/drivers/thermal/ti-soc-thermal/ti-bandgap.c
+++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
@@ -992,9 +992,12 @@ int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend)
 		goto exit;
 	}
 
+	spin_lock(&bgp->lock);
+
 	tsr = bgp->conf->sensors[id].registers;
 
 	/* Freeze and read the last 2 valid readings */
+	RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 1);
 	reg1 = tsr->ctrl_dtemp_1;
 	reg2 = tsr->ctrl_dtemp_2;
 
@@ -1008,22 +1011,25 @@ int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend)
 	/* Convert from adc values to mCelsius temperature */
 	ret = ti_bandgap_adc_to_mcelsius(bgp, temp1, &t1);
 	if (ret)
-		goto exit;
+		goto unfreeze;
 
 	ret = ti_bandgap_adc_to_mcelsius(bgp, temp2, &t2);
 	if (ret)
-		goto exit;
+		goto unfreeze;
 
 	/* Fetch the update interval */
 	ret = ti_bandgap_read_update_interval(bgp, id, &interval);
 	if (ret || !interval)
-		goto exit;
+		goto unfreeze;
 
 	*trend = (t1 - t2) / interval;
 
 	dev_dbg(bgp->dev, "The temperatures are t1 = %d and t2 = %d and trend =%d\n",
 		t1, t2, *trend);
 
+unfreeze:
+	RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 0);
+	spin_unlock(&bgp->lock);
 exit:
 	return ret;
 }
-- 
1.8.2.1.342.gfa7285d


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* Re: [PATCH 0/7] thermal: ti-soc-thermal: fixes and DRA752 support
  2013-05-29 15:07 ` Eduardo Valentin
                   ` (7 preceding siblings ...)
  (?)
@ 2013-06-13  2:20 ` Zhang Rui
  -1 siblings, 0 replies; 29+ messages in thread
From: Zhang Rui @ 2013-06-13  2:20 UTC (permalink / raw)
  To: Eduardo Valentin; +Cc: linux-pm, linux-kernel

On Wed, 2013-05-29 at 11:07 -0400, Eduardo Valentin wrote:
> Hello Rui,
> 
> Here is a patch set for your consideration on ti-soc-thermal driver.
> 

the whole patch set has been applied.

thanks,
rui
> This patch set is mix of:
> 
> (a) patches that were added to the staging tree post 3.10-rc1 but
> were not included after the move from staging to thermal. This is
> because your thermal tree is based of 3.10-rc1 and not staging/next
> or linux-next/master. Thus the first two patches make sure the driver
> under drivers/thermal/ti-soc-thermal has also the needed fixes.
> 
> (b) patches containing fixes found during the addition of DRA752
> chip support.
> 
> (c) patches adding the support to DRA752 chips.
> 
> Please consider these too for 3.11.
> 
> For those people interested in testing this patch set, it is based
> on thermal/next and can also be found here:
> https://git.gitorious.org/thermal-framework/thermal-framework.git thermal_work/ti-soc-thermal/fixes+dra752
> 
> All best,
> 
> Eduardo Valentin (7):
>   thermal: ti-soc-thermal: update DT reference for OMAP5430
>   thermal: ti-soc-thermal: remove external heat while extrapolating
>     hotspot
>   thermal: ti-soc-thermal: freeze FSM while computing trend
>   thermal: ti-soc-thermal: remove usage of IS_ERR_OR_NULL
>   thermal: ti-soc-thermal: add thermal data for DRA752 chips
>   thermal: ti-soc-thermal: add dra752 chip to device table
>   thermal: ti-soc-thermal: add DT example for DRA752 chip
> 
>  .../devicetree/bindings/thermal/ti_soc_thermal.txt |  13 +
>  drivers/staging/ti-soc-thermal/dra752-bandgap.h    | 280 ++++++++++++
>  .../staging/ti-soc-thermal/dra752-thermal-data.c   | 476 +++++++++++++++++++++
>  drivers/thermal/ti-soc-thermal/Kconfig             |  12 +
>  drivers/thermal/ti-soc-thermal/Makefile            |   1 +
>  drivers/thermal/ti-soc-thermal/ti-bandgap.c        |  29 +-
>  drivers/thermal/ti-soc-thermal/ti-bandgap.h        |   5 +
>  drivers/thermal/ti-soc-thermal/ti-thermal-common.c |  43 +-
>  drivers/thermal/ti-soc-thermal/ti-thermal.h        |   6 +
>  9 files changed, 842 insertions(+), 23 deletions(-)
>  create mode 100644 drivers/staging/ti-soc-thermal/dra752-bandgap.h
>  create mode 100644 drivers/staging/ti-soc-thermal/dra752-thermal-data.c
> 



^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2013-06-13  2:21 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-05-29 15:07 [PATCH 0/7] thermal: ti-soc-thermal: fixes and DRA752 support Eduardo Valentin
2013-05-29 15:07 ` Eduardo Valentin
2013-05-29 15:07 ` [PATCH 1/7] thermal: ti-soc-thermal: update DT reference for OMAP5430 Eduardo Valentin
2013-05-29 15:07   ` Eduardo Valentin
2013-05-29 15:07 ` [PATCH 2/7] thermal: ti-soc-thermal: remove external heat while extrapolating hotspot Eduardo Valentin
2013-05-29 15:07   ` Eduardo Valentin
2013-05-29 15:07 ` [PATCH 3/7] thermal: ti-soc-thermal: freeze FSM while computing trend Eduardo Valentin
2013-05-29 15:07   ` Eduardo Valentin
2013-06-07 19:10   ` Eduardo Valentin
2013-06-07 19:10     ` Eduardo Valentin
2013-06-07 19:13     ` [PATCHv2 " Eduardo Valentin
2013-06-07 19:13       ` Eduardo Valentin
2013-05-29 15:07 ` [PATCH 4/7] thermal: ti-soc-thermal: remove usage of IS_ERR_OR_NULL Eduardo Valentin
2013-05-29 15:07   ` Eduardo Valentin
2013-05-29 15:07 ` [PATCH 5/7] thermal: ti-soc-thermal: add thermal data for DRA752 chips Eduardo Valentin
2013-05-29 15:07   ` Eduardo Valentin
2013-06-03 20:31   ` Eduardo Valentin
2013-06-03 20:31     ` Eduardo Valentin
2013-06-03 20:33     ` [PATCHv2 " Eduardo Valentin
2013-06-03 20:33       ` Eduardo Valentin
2013-05-29 15:07 ` [PATCH 6/7] thermal: ti-soc-thermal: add dra752 chip to device table Eduardo Valentin
2013-05-29 15:07   ` Eduardo Valentin
2013-05-29 15:07 ` [PATCH 7/7] thermal: ti-soc-thermal: add DT example for DRA752 chip Eduardo Valentin
2013-05-29 15:07   ` Eduardo Valentin
2013-05-30  8:56   ` keerthy
2013-05-30  8:56     ` keerthy
2013-05-30 13:52     ` Eduardo Valentin
2013-05-30 13:52       ` Eduardo Valentin
2013-06-13  2:20 ` [PATCH 0/7] thermal: ti-soc-thermal: fixes and DRA752 support Zhang Rui

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.