Linux-ARM-Kernel Archive on lore.kernel.org
 help / Atom feed
* [PATCH 0/7] Add Mediatek thermal dirver for mt8183
@ 2019-02-01  7:38 michael.kao
  2019-02-01  7:38 ` [PATCH 1/7] thermal: mediatek: fix register index error michael.kao
                   ` (6 more replies)
  0 siblings, 7 replies; 14+ messages in thread
From: michael.kao @ 2019-02-01  7:38 UTC (permalink / raw)
  To: =Zhang Rui, =Eduardo Valentin, =Daniel Lezcano, =Rob Herring,
	=Mark Rutland, =Matthias Brugger
  Cc: devicetree, srv_heupstream, linux-pm, linux-kernel, Michael Kao,
	linux-mediatek, linux-arm-kernel

From: Michael Kao <michael.kao@mediatek.com>

This patchset supports for mt8183 chip to mtk_thermal.c.
MT8183 has six temperature sensors and two thermal
controllers. It has different calibration coefficent with
past project, and doesn't need to select bank.
As a result, we add the common architecture for scalability.

Michael Kao (7):
  thermal: mediatek: fix register index error
  thermal: mediatek: add common index of vts settings.
  thermal: mediatek: add calibration item
  thermal: mediatek: add thermal controller offset
  thermal: mediatek: add flag for bank selection
  dt-bindings: thermal: add binding document for mt8183 thermal
    controller
  thermal: mediatek: add support for MT8183

 .../bindings/thermal/mediatek-thermal.txt          |   1 +
 drivers/thermal/mtk_thermal.c                      | 315 +++++++++++++++++----
 2 files changed, 257 insertions(+), 59 deletions(-)

-- 
1.9.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH 1/7] thermal: mediatek: fix register index error
  2019-02-01  7:38 [PATCH 0/7] Add Mediatek thermal dirver for mt8183 michael.kao
@ 2019-02-01  7:38 ` michael.kao
  2019-02-04 17:24   ` Matthias Brugger
  2019-02-01  7:38 ` [PATCH 2/7] thermal: mediatek: add common index of vts settings michael.kao
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 14+ messages in thread
From: michael.kao @ 2019-02-01  7:38 UTC (permalink / raw)
  To: =Zhang Rui, =Eduardo Valentin, =Daniel Lezcano, =Rob Herring,
	=Mark Rutland, =Matthias Brugger
  Cc: devicetree, srv_heupstream, linux-pm, linux-kernel, Michael Kao,
	linux-mediatek, linux-arm-kernel

From: Michael Kao <michael.kao@mediatek.com>

The index of msr and adcpnp should match the sensor
which belongs to the selected bank in the for loop.

Signed-off-by: Michael Kao <michael.kao@mediatek.com>
---
 drivers/thermal/mtk_thermal.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
index 0691f26..f646436 100644
--- a/drivers/thermal/mtk_thermal.c
+++ b/drivers/thermal/mtk_thermal.c
@@ -431,7 +431,8 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
 	u32 raw;
 
 	for (i = 0; i < conf->bank_data[bank->id].num_sensors; i++) {
-		raw = readl(mt->thermal_base + conf->msr[i]);
+		raw = readl(mt->thermal_base +
+			    conf->msr[conf->bank_data[bank->id].sensors[i]]);
 
 		temp = raw_to_mcelsius(mt,
 				       conf->bank_data[bank->id].sensors[i],
@@ -568,7 +569,8 @@ static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
 
 	for (i = 0; i < conf->bank_data[num].num_sensors; i++)
 		writel(conf->sensor_mux_values[conf->bank_data[num].sensors[i]],
-		       mt->thermal_base + conf->adcpnp[i]);
+		       mt->thermal_base +
+		       conf->adcpnp[conf->bank_data[num].sensors[i]]);
 
 	writel((1 << conf->bank_data[num].num_sensors) - 1,
 	       mt->thermal_base + TEMP_MONCTL0);
-- 
1.9.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH 2/7] thermal: mediatek: add common index of vts settings.
  2019-02-01  7:38 [PATCH 0/7] Add Mediatek thermal dirver for mt8183 michael.kao
  2019-02-01  7:38 ` [PATCH 1/7] thermal: mediatek: fix register index error michael.kao
@ 2019-02-01  7:38 ` michael.kao
  2019-02-01  7:38 ` [PATCH 3/7] thermal: mediatek: add calibration item michael.kao
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: michael.kao @ 2019-02-01  7:38 UTC (permalink / raw)
  To: =Zhang Rui, =Eduardo Valentin, =Daniel Lezcano, =Rob Herring,
	=Mark Rutland, =Matthias Brugger
  Cc: devicetree, srv_heupstream, linux-pm, linux-kernel, Michael Kao,
	linux-mediatek, linux-arm-kernel

From: Michael Kao <michael.kao@mediatek.com>

Each project has different number of vts settings.
For the MT2701 just have to set three vts, but the
original code flow add five unnecessary vts.
Add common index of vts settings for scalablity,
and reduce the setting of unnecessary vts.

Signed-off-by: Michael Kao <michael.kao@mediatek.com>
---
 drivers/thermal/mtk_thermal.c | 93 ++++++++++++++++++++++++++++++++-----------
 1 file changed, 69 insertions(+), 24 deletions(-)

diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
index f646436..07f8ad7 100644
--- a/drivers/thermal/mtk_thermal.c
+++ b/drivers/thermal/mtk_thermal.c
@@ -112,17 +112,26 @@
  * MT2701 has 3 sensors and needs 3 VTS calibration data.
  * MT2712 has 4 sensors and needs 4 VTS calibration data.
  */
-#define MT8173_CALIB_BUF0_VALID		BIT(0)
-#define MT8173_CALIB_BUF1_ADC_GE(x)	(((x) >> 22) & 0x3ff)
-#define MT8173_CALIB_BUF0_VTS_TS1(x)	(((x) >> 17) & 0x1ff)
-#define MT8173_CALIB_BUF0_VTS_TS2(x)	(((x) >> 8) & 0x1ff)
-#define MT8173_CALIB_BUF1_VTS_TS3(x)	(((x) >> 0) & 0x1ff)
-#define MT8173_CALIB_BUF2_VTS_TS4(x)	(((x) >> 23) & 0x1ff)
-#define MT8173_CALIB_BUF2_VTS_TSABB(x)	(((x) >> 14) & 0x1ff)
-#define MT8173_CALIB_BUF0_DEGC_CALI(x)	(((x) >> 1) & 0x3f)
-#define MT8173_CALIB_BUF0_O_SLOPE(x)	(((x) >> 26) & 0x3f)
-#define MT8173_CALIB_BUF0_O_SLOPE_SIGN(x)	(((x) >> 7) & 0x1)
-#define MT8173_CALIB_BUF1_ID(x)	(((x) >> 9) & 0x1)
+#define CALIB_BUF0_VALID		BIT(0)
+#define CALIB_BUF1_ADC_GE(x)		(((x) >> 22) & 0x3ff)
+#define CALIB_BUF0_VTS_TS1(x)		(((x) >> 17) & 0x1ff)
+#define CALIB_BUF0_VTS_TS2(x)		(((x) >> 8) & 0x1ff)
+#define CALIB_BUF1_VTS_TS3(x)		(((x) >> 0) & 0x1ff)
+#define CALIB_BUF2_VTS_TS4(x)		(((x) >> 23) & 0x1ff)
+#define CALIB_BUF2_VTS_TSABB(x)		(((x) >> 14) & 0x1ff)
+#define CALIB_BUF0_DEGC_CALI(x)		(((x) >> 1) & 0x3f)
+#define CALIB_BUF0_O_SLOPE(x)		(((x) >> 26) & 0x3f)
+#define CALIB_BUF0_O_SLOPE_SIGN(x)	(((x) >> 7) & 0x1)
+#define CALIB_BUF1_ID(x)		(((x) >> 9) & 0x1)
+
+enum {
+	VTS1,
+	VTS2,
+	VTS3,
+	VTS4,
+	VTSABB,
+	MAX_NUM_VTS,
+};
 
 /* MT2701 thermal sensors */
 #define MT2701_TS1	0
@@ -175,6 +184,7 @@ struct mtk_thermal_data {
 	s32 num_banks;
 	s32 num_sensors;
 	s32 auxadc_channel;
+	const int *vts_index;
 	const int *sensor_mux_values;
 	const int *msr;
 	const int *adcpnp;
@@ -194,7 +204,7 @@ struct mtk_thermal {
 	s32 adc_ge;
 	s32 degc_cali;
 	s32 o_slope;
-	s32 vts[MT8173_NUM_SENSORS];
+	s32 vts[MAX_NUM_VTS];
 
 	const struct mtk_thermal_data *conf;
 	struct mtk_thermal_bank banks[];
@@ -218,6 +228,10 @@ struct mtk_thermal {
 
 static const int mt8173_mux_values[MT8173_NUM_SENSORS] = { 0, 1, 2, 3, 16 };
 
+static const int mt8173_vts_index[MT8173_NUM_SENSORS] = {
+	VTS1, VTS2, VTS3, VTS4, VTSABB
+};
+
 /* MT2701 thermal sensor data */
 static const int mt2701_bank_data[MT2701_NUM_SENSORS] = {
 	MT2701_TS1, MT2701_TS2, MT2701_TSABB
@@ -233,6 +247,10 @@ struct mtk_thermal {
 
 static const int mt2701_mux_values[MT2701_NUM_SENSORS] = { 0, 1, 16 };
 
+static const int mt2701_vts_index[MT2701_NUM_SENSORS] = {
+	VTS1, VTS2, VTS3
+};
+
 /* MT2712 thermal sensor data */
 static const int mt2712_bank_data[MT2712_NUM_SENSORS] = {
 	MT2712_TS1, MT2712_TS2, MT2712_TS3, MT2712_TS4
@@ -248,11 +266,16 @@ struct mtk_thermal {
 
 static const int mt2712_mux_values[MT2712_NUM_SENSORS] = { 0, 1, 2, 3 };
 
+static const int mt2712_vts_index[MT2712_NUM_SENSORS] = {
+	VTS1, VTS2, VTS3, VTS4
+};
+
 /* MT7622 thermal sensor data */
 static const int mt7622_bank_data[MT7622_NUM_SENSORS] = { MT7622_TS1, };
 static const int mt7622_msr[MT7622_NUM_SENSORS_PER_ZONE] = { TEMP_MSR0, };
 static const int mt7622_adcpnp[MT7622_NUM_SENSORS_PER_ZONE] = { TEMP_ADCPNP0, };
 static const int mt7622_mux_values[MT7622_NUM_SENSORS] = { 0, };
+static const int mt7622_vts_index[MT7622_NUM_SENSORS] = { VTS1 };
 
 /**
  * The MT8173 thermal controller has four banks. Each bank can read up to
@@ -271,6 +294,7 @@ struct mtk_thermal {
 	.auxadc_channel = MT8173_TEMP_AUXADC_CHANNEL,
 	.num_banks = MT8173_NUM_ZONES,
 	.num_sensors = MT8173_NUM_SENSORS,
+	.vts_index = mt8173_vts_index,
 	.bank_data = {
 		{
 			.num_sensors = 2,
@@ -305,6 +329,7 @@ struct mtk_thermal {
 	.auxadc_channel = MT2701_TEMP_AUXADC_CHANNEL,
 	.num_banks = 1,
 	.num_sensors = MT2701_NUM_SENSORS,
+	.vts_index = mt2701_vts_index,
 	.bank_data = {
 		{
 			.num_sensors = 3,
@@ -330,6 +355,7 @@ struct mtk_thermal {
 	.auxadc_channel = MT2712_TEMP_AUXADC_CHANNEL,
 	.num_banks = 1,
 	.num_sensors = MT2712_NUM_SENSORS,
+	.vts_index = mt2712_vts_index,
 	.bank_data = {
 		{
 			.num_sensors = 4,
@@ -349,6 +375,7 @@ struct mtk_thermal {
 	.auxadc_channel = MT7622_TEMP_AUXADC_CHANNEL,
 	.num_banks = MT7622_NUM_ZONES,
 	.num_sensors = MT7622_NUM_SENSORS,
+	.vts_index = mt7622_vts_index,
 	.bank_data = {
 		{
 			.num_sensors = 1,
@@ -629,19 +656,37 @@ static int mtk_thermal_get_calibration_data(struct device *dev,
 		goto out;
 	}
 
-	if (buf[0] & MT8173_CALIB_BUF0_VALID) {
-		mt->adc_ge = MT8173_CALIB_BUF1_ADC_GE(buf[1]);
-		mt->vts[MT8173_TS1] = MT8173_CALIB_BUF0_VTS_TS1(buf[0]);
-		mt->vts[MT8173_TS2] = MT8173_CALIB_BUF0_VTS_TS2(buf[0]);
-		mt->vts[MT8173_TS3] = MT8173_CALIB_BUF1_VTS_TS3(buf[1]);
-		mt->vts[MT8173_TS4] = MT8173_CALIB_BUF2_VTS_TS4(buf[2]);
-		mt->vts[MT8173_TSABB] = MT8173_CALIB_BUF2_VTS_TSABB(buf[2]);
-		mt->degc_cali = MT8173_CALIB_BUF0_DEGC_CALI(buf[0]);
-		if (MT8173_CALIB_BUF1_ID(buf[1]) &
-		    MT8173_CALIB_BUF0_O_SLOPE_SIGN(buf[0]))
-			mt->o_slope = -MT8173_CALIB_BUF0_O_SLOPE(buf[0]);
+	if (buf[0] & CALIB_BUF0_VALID) {
+		mt->adc_ge = CALIB_BUF1_ADC_GE(buf[1]);
+
+		for (i = 0; i < mt->conf->num_sensors; i++) {
+			switch (mt->conf->vts_index[i]) {
+			case VTS1:
+				mt->vts[VTS1] = CALIB_BUF0_VTS_TS1(buf[0]);
+				break;
+			case VTS2:
+				mt->vts[VTS2] = CALIB_BUF0_VTS_TS2(buf[0]);
+				break;
+			case VTS3:
+				mt->vts[VTS3] = CALIB_BUF1_VTS_TS3(buf[1]);
+				break;
+			case VTS4:
+				mt->vts[VTS4] = CALIB_BUF2_VTS_TS4(buf[2]);
+				break;
+			case VTSABB:
+				mt->vts[VTSABB] = CALIB_BUF2_VTS_TSABB(buf[2]);
+				break;
+			default:
+				break;
+			}
+		}
+
+		mt->degc_cali = CALIB_BUF0_DEGC_CALI(buf[0]);
+		if (CALIB_BUF1_ID(buf[1]) &
+		    CALIB_BUF0_O_SLOPE_SIGN(buf[0]))
+			mt->o_slope = -CALIB_BUF0_O_SLOPE(buf[0]);
 		else
-			mt->o_slope = MT8173_CALIB_BUF0_O_SLOPE(buf[0]);
+			mt->o_slope = CALIB_BUF0_O_SLOPE(buf[0]);
 	} else {
 		dev_info(dev, "Device not calibrated, using default calibration values\n");
 	}
-- 
1.9.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH 3/7] thermal: mediatek: add calibration item
  2019-02-01  7:38 [PATCH 0/7] Add Mediatek thermal dirver for mt8183 michael.kao
  2019-02-01  7:38 ` [PATCH 1/7] thermal: mediatek: fix register index error michael.kao
  2019-02-01  7:38 ` [PATCH 2/7] thermal: mediatek: add common index of vts settings michael.kao
@ 2019-02-01  7:38 ` michael.kao
  2019-02-04 17:31   ` Matthias Brugger
  2019-02-01  7:38 ` [PATCH 4/7] thermal: mediatek: add thermal controller offset michael.kao
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 14+ messages in thread
From: michael.kao @ 2019-02-01  7:38 UTC (permalink / raw)
  To: =Zhang Rui, =Eduardo Valentin, =Daniel Lezcano, =Rob Herring,
	=Mark Rutland, =Matthias Brugger
  Cc: devicetree, srv_heupstream, linux-pm, linux-kernel, Michael Kao,
	linux-mediatek, linux-arm-kernel

From: Michael Kao <michael.kao@mediatek.com>

Add calibration item in thermal_data to support
the project with different calibration coefficient.

Signed-off-by: Michael Kao <michael.kao@mediatek.com>
---
 drivers/thermal/mtk_thermal.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
index 07f8ad7..45c6587 100644
--- a/drivers/thermal/mtk_thermal.c
+++ b/drivers/thermal/mtk_thermal.c
@@ -105,6 +105,9 @@
 /* The number of sensing points per bank */
 #define MT8173_NUM_SENSORS_PER_ZONE	4
 
+/* The calibration coefficient of sensor  */
+#define MT8173_CALIBRATION	165
+
 /*
  * Layout of the fuses providing the calibration data
  * These macros could be used for MT8173, MT2701, and MT2712.
@@ -147,6 +150,9 @@ enum {
 /* The number of sensing points per bank */
 #define MT2701_NUM_SENSORS_PER_ZONE	3
 
+/* The calibration coefficient of sensor  */
+#define MT2701_CALIBRATION	165
+
 /* MT2712 thermal sensors */
 #define MT2712_TS1	0
 #define MT2712_TS2	1
@@ -162,12 +168,18 @@ enum {
 /* The number of sensing points per bank */
 #define MT2712_NUM_SENSORS_PER_ZONE	4
 
+/* The calibration coefficient of sensor  */
+#define MT2712_CALIBRATION	165
+
 #define MT7622_TEMP_AUXADC_CHANNEL	11
 #define MT7622_NUM_SENSORS		1
 #define MT7622_NUM_ZONES		1
 #define MT7622_NUM_SENSORS_PER_ZONE	1
 #define MT7622_TS1	0
 
+/* The calibration coefficient of sensor  */
+#define MT7622_CALIBRATION	165
+
 struct mtk_thermal;
 
 struct thermal_bank_cfg {
@@ -188,6 +200,7 @@ struct mtk_thermal_data {
 	const int *sensor_mux_values;
 	const int *msr;
 	const int *adcpnp;
+	const int cali_val;
 	struct thermal_bank_cfg bank_data[];
 };
 
@@ -295,6 +308,7 @@ struct mtk_thermal {
 	.num_banks = MT8173_NUM_ZONES,
 	.num_sensors = MT8173_NUM_SENSORS,
 	.vts_index = mt8173_vts_index,
+	.cali_val = MT8173_CALIBRATION,
 	.bank_data = {
 		{
 			.num_sensors = 2,
@@ -330,6 +344,7 @@ struct mtk_thermal {
 	.num_banks = 1,
 	.num_sensors = MT2701_NUM_SENSORS,
 	.vts_index = mt2701_vts_index,
+	.cali_val = MT2701_CALIBRATION,
 	.bank_data = {
 		{
 			.num_sensors = 3,
@@ -356,6 +371,7 @@ struct mtk_thermal {
 	.num_banks = 1,
 	.num_sensors = MT2712_NUM_SENSORS,
 	.vts_index = mt2712_vts_index,
+	.cali_val = MT2712_CALIBRATION,
 	.bank_data = {
 		{
 			.num_sensors = 4,
@@ -376,6 +392,7 @@ struct mtk_thermal {
 	.num_banks = MT7622_NUM_ZONES,
 	.num_sensors = MT7622_NUM_SENSORS,
 	.vts_index = mt7622_vts_index,
+	.cali_val = MT7622_CALIBRATION,
 	.bank_data = {
 		{
 			.num_sensors = 1,
@@ -402,7 +419,7 @@ static int raw_to_mcelsius(struct mtk_thermal *mt, int sensno, s32 raw)
 	raw &= 0xfff;
 
 	tmp = 203450520 << 3;
-	tmp /= 165 + mt->o_slope;
+	tmp /= mt->conf->cali_val + mt->o_slope;
 	tmp /= 10000 + mt->adc_ge;
 	tmp *= raw - mt->vts[sensno] - 3350;
 	tmp >>= 3;
-- 
1.9.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH 4/7] thermal: mediatek: add thermal controller offset
  2019-02-01  7:38 [PATCH 0/7] Add Mediatek thermal dirver for mt8183 michael.kao
                   ` (2 preceding siblings ...)
  2019-02-01  7:38 ` [PATCH 3/7] thermal: mediatek: add calibration item michael.kao
@ 2019-02-01  7:38 ` michael.kao
  2019-02-06  0:53   ` Eduardo Valentin
  2019-02-01  7:38 ` [PATCH 5/7] thermal: mediatek: add flag for bank selection michael.kao
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 14+ messages in thread
From: michael.kao @ 2019-02-01  7:38 UTC (permalink / raw)
  To: =Zhang Rui, =Eduardo Valentin, =Daniel Lezcano, =Rob Herring,
	=Mark Rutland, =Matthias Brugger
  Cc: devicetree, srv_heupstream, linux-pm, linux-kernel, Michael Kao,
	linux-mediatek, linux-arm-kernel

From: Michael Kao <michael.kao@mediatek.com>

One thermal controller can read four sensors at most,
so we need to add controller_offset for the project with
more than four sensors to reuse the same register settings.

Signed-off-by: Michael Kao <michael.kao@mediatek.com>
---
 drivers/thermal/mtk_thermal.c | 79 +++++++++++++++++++++++++++++--------------
 1 file changed, 54 insertions(+), 25 deletions(-)

diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
index 45c6587..e5cf3f4 100644
--- a/drivers/thermal/mtk_thermal.c
+++ b/drivers/thermal/mtk_thermal.c
@@ -105,6 +105,9 @@
 /* The number of sensing points per bank */
 #define MT8173_NUM_SENSORS_PER_ZONE	4
 
+/* The number of controller in the MT8173 */
+#define MT8173_NUM_CONTROLLER		1
+
 /* The calibration coefficient of sensor  */
 #define MT8173_CALIBRATION	165
 
@@ -150,6 +153,9 @@ enum {
 /* The number of sensing points per bank */
 #define MT2701_NUM_SENSORS_PER_ZONE	3
 
+/* The number of controller in the MT2701 */
+#define MT2701_NUM_CONTROLLER		1
+
 /* The calibration coefficient of sensor  */
 #define MT2701_CALIBRATION	165
 
@@ -168,6 +174,9 @@ enum {
 /* The number of sensing points per bank */
 #define MT2712_NUM_SENSORS_PER_ZONE	4
 
+/* The number of controller in the MT2712 */
+#define MT2712_NUM_CONTROLLER		1
+
 /* The calibration coefficient of sensor  */
 #define MT2712_CALIBRATION	165
 
@@ -176,6 +185,7 @@ enum {
 #define MT7622_NUM_ZONES		1
 #define MT7622_NUM_SENSORS_PER_ZONE	1
 #define MT7622_TS1	0
+#define MT7622_NUM_CONTROLLER		1
 
 /* The calibration coefficient of sensor  */
 #define MT7622_CALIBRATION	165
@@ -201,6 +211,8 @@ struct mtk_thermal_data {
 	const int *msr;
 	const int *adcpnp;
 	const int cali_val;
+	const int num_controller;
+	const int *controller_offset;
 	struct thermal_bank_cfg bank_data[];
 };
 
@@ -240,6 +252,7 @@ struct mtk_thermal {
 };
 
 static const int mt8173_mux_values[MT8173_NUM_SENSORS] = { 0, 1, 2, 3, 16 };
+static const int mt8173_tc_offset[MT8173_NUM_CONTROLLER] = { 0x0, };
 
 static const int mt8173_vts_index[MT8173_NUM_SENSORS] = {
 	VTS1, VTS2, VTS3, VTS4, VTSABB
@@ -259,6 +272,7 @@ struct mtk_thermal {
 };
 
 static const int mt2701_mux_values[MT2701_NUM_SENSORS] = { 0, 1, 16 };
+static const int mt2701_tc_offset[MT2701_NUM_CONTROLLER] = { 0x0, };
 
 static const int mt2701_vts_index[MT2701_NUM_SENSORS] = {
 	VTS1, VTS2, VTS3
@@ -278,6 +292,7 @@ struct mtk_thermal {
 };
 
 static const int mt2712_mux_values[MT2712_NUM_SENSORS] = { 0, 1, 2, 3 };
+static const int mt2712_tc_offset[MT2712_NUM_CONTROLLER] = { 0x0, };
 
 static const int mt2712_vts_index[MT2712_NUM_SENSORS] = {
 	VTS1, VTS2, VTS3, VTS4
@@ -289,6 +304,7 @@ struct mtk_thermal {
 static const int mt7622_adcpnp[MT7622_NUM_SENSORS_PER_ZONE] = { TEMP_ADCPNP0, };
 static const int mt7622_mux_values[MT7622_NUM_SENSORS] = { 0, };
 static const int mt7622_vts_index[MT7622_NUM_SENSORS] = { VTS1 };
+static const int mt7622_tc_offset[MT7622_NUM_CONTROLLER] = { 0x0, };
 
 /**
  * The MT8173 thermal controller has four banks. Each bank can read up to
@@ -309,6 +325,8 @@ struct mtk_thermal {
 	.num_sensors = MT8173_NUM_SENSORS,
 	.vts_index = mt8173_vts_index,
 	.cali_val = MT8173_CALIBRATION,
+	.num_controller = MT8173_NUM_CONTROLLER,
+	.controller_offset = mt8173_tc_offset,
 	.bank_data = {
 		{
 			.num_sensors = 2,
@@ -345,6 +363,8 @@ struct mtk_thermal {
 	.num_sensors = MT2701_NUM_SENSORS,
 	.vts_index = mt2701_vts_index,
 	.cali_val = MT2701_CALIBRATION,
+	.num_controller = MT2701_NUM_CONTROLLER,
+	.controller_offset = mt2701_tc_offset,
 	.bank_data = {
 		{
 			.num_sensors = 3,
@@ -372,6 +392,8 @@ struct mtk_thermal {
 	.num_sensors = MT2712_NUM_SENSORS,
 	.vts_index = mt2712_vts_index,
 	.cali_val = MT2712_CALIBRATION,
+	.num_controller = MT2712_NUM_CONTROLLER,
+	.controller_offset = mt2712_tc_offset,
 	.bank_data = {
 		{
 			.num_sensors = 4,
@@ -393,6 +415,8 @@ struct mtk_thermal {
 	.num_sensors = MT7622_NUM_SENSORS,
 	.vts_index = mt7622_vts_index,
 	.cali_val = MT7622_CALIBRATION,
+	.num_controller = MT7622_NUM_CONTROLLER,
+	.controller_offset = mt7622_tc_offset,
 	.bank_data = {
 		{
 			.num_sensors = 1,
@@ -523,19 +547,23 @@ static int mtk_read_temp(void *data, int *temperature)
 };
 
 static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
-				  u32 apmixed_phys_base, u32 auxadc_phys_base)
+				  u32 apmixed_phys_base, u32 auxadc_phys_base,
+				  int ctrl_id)
 {
 	struct mtk_thermal_bank *bank = &mt->banks[num];
 	const struct mtk_thermal_data *conf = mt->conf;
 	int i;
 
+	int offset = mt->conf->controller_offset[ctrl_id];
+	void *controller_base = mt->thermal_base + offset;
+
 	bank->id = num;
 	bank->mt = mt;
 
 	mtk_thermal_get_bank(bank);
 
 	/* bus clock 66M counting unit is 12 * 15.15ns * 256 = 46.540us */
-	writel(TEMP_MONCTL1_PERIOD_UNIT(12), mt->thermal_base + TEMP_MONCTL1);
+	writel(TEMP_MONCTL1_PERIOD_UNIT(12), controller_base + TEMP_MONCTL1);
 
 	/*
 	 * filt interval is 1 * 46.540us = 46.54us,
@@ -543,21 +571,21 @@ static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
 	 */
 	writel(TEMP_MONCTL2_FILTER_INTERVAL(1) |
 			TEMP_MONCTL2_SENSOR_INTERVAL(429),
-			mt->thermal_base + TEMP_MONCTL2);
+			controller_base + TEMP_MONCTL2);
 
 	/* poll is set to 10u */
 	writel(TEMP_AHBPOLL_ADC_POLL_INTERVAL(768),
-	       mt->thermal_base + TEMP_AHBPOLL);
+	       controller_base + TEMP_AHBPOLL);
 
 	/* temperature sampling control, 1 sample */
-	writel(0x0, mt->thermal_base + TEMP_MSRCTL0);
+	writel(0x0, controller_base + TEMP_MSRCTL0);
 
 	/* exceed this polling time, IRQ would be inserted */
-	writel(0xffffffff, mt->thermal_base + TEMP_AHBTO);
+	writel(0xffffffff, controller_base + TEMP_AHBTO);
 
 	/* number of interrupts per event, 1 is enough */
-	writel(0x0, mt->thermal_base + TEMP_MONIDET0);
-	writel(0x0, mt->thermal_base + TEMP_MONIDET1);
+	writel(0x0, controller_base + TEMP_MONIDET0);
+	writel(0x0, controller_base + TEMP_MONIDET1);
 
 	/*
 	 * The MT8173 thermal controller does not have its own ADC. Instead it
@@ -572,44 +600,44 @@ static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
 	 * this value will be stored to TEMP_PNPMUXADDR (TEMP_SPARE0)
 	 * automatically by hw
 	 */
-	writel(BIT(conf->auxadc_channel), mt->thermal_base + TEMP_ADCMUX);
+	writel(BIT(conf->auxadc_channel), controller_base + TEMP_ADCMUX);
 
 	/* AHB address for auxadc mux selection */
 	writel(auxadc_phys_base + AUXADC_CON1_CLR_V,
-	       mt->thermal_base + TEMP_ADCMUXADDR);
+	       controller_base + TEMP_ADCMUXADDR);
 
 	/* AHB address for pnp sensor mux selection */
 	writel(apmixed_phys_base + APMIXED_SYS_TS_CON1,
-	       mt->thermal_base + TEMP_PNPMUXADDR);
+	       controller_base + TEMP_PNPMUXADDR);
 
 	/* AHB value for auxadc enable */
-	writel(BIT(conf->auxadc_channel), mt->thermal_base + TEMP_ADCEN);
+	writel(BIT(conf->auxadc_channel), controller_base + TEMP_ADCEN);
 
 	/* AHB address for auxadc enable (channel 0 immediate mode selected) */
 	writel(auxadc_phys_base + AUXADC_CON1_SET_V,
-	       mt->thermal_base + TEMP_ADCENADDR);
+	       controller_base + TEMP_ADCENADDR);
 
 	/* AHB address for auxadc valid bit */
 	writel(auxadc_phys_base + AUXADC_DATA(conf->auxadc_channel),
-	       mt->thermal_base + TEMP_ADCVALIDADDR);
+	       controller_base + TEMP_ADCVALIDADDR);
 
 	/* AHB address for auxadc voltage output */
 	writel(auxadc_phys_base + AUXADC_DATA(conf->auxadc_channel),
-	       mt->thermal_base + TEMP_ADCVOLTADDR);
+	       controller_base + TEMP_ADCVOLTADDR);
 
 	/* read valid & voltage are at the same register */
-	writel(0x0, mt->thermal_base + TEMP_RDCTRL);
+	writel(0x0, controller_base + TEMP_RDCTRL);
 
 	/* indicate where the valid bit is */
 	writel(TEMP_ADCVALIDMASK_VALID_HIGH | TEMP_ADCVALIDMASK_VALID_POS(12),
-	       mt->thermal_base + TEMP_ADCVALIDMASK);
+	       controller_base + TEMP_ADCVALIDMASK);
 
 	/* no shift */
-	writel(0x0, mt->thermal_base + TEMP_ADCVOLTAGESHIFT);
+	writel(0x0, controller_base + TEMP_ADCVOLTAGESHIFT);
 
 	/* enable auxadc mux write transaction */
 	writel(TEMP_ADCWRITECTRL_ADC_MUX_WRITE,
-	       mt->thermal_base + TEMP_ADCWRITECTRL);
+		controller_base + TEMP_ADCWRITECTRL);
 
 	for (i = 0; i < conf->bank_data[num].num_sensors; i++)
 		writel(conf->sensor_mux_values[conf->bank_data[num].sensors[i]],
@@ -617,11 +645,11 @@ static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
 		       conf->adcpnp[conf->bank_data[num].sensors[i]]);
 
 	writel((1 << conf->bank_data[num].num_sensors) - 1,
-	       mt->thermal_base + TEMP_MONCTL0);
+	       controller_base + TEMP_MONCTL0);
 
 	writel(TEMP_ADCWRITECTRL_ADC_PNP_WRITE |
 	       TEMP_ADCWRITECTRL_ADC_MUX_WRITE,
-	       mt->thermal_base + TEMP_ADCWRITECTRL);
+	       controller_base + TEMP_ADCWRITECTRL);
 
 	mtk_thermal_put_bank(bank);
 }
@@ -737,7 +765,7 @@ static int mtk_thermal_get_calibration_data(struct device *dev,
 
 static int mtk_thermal_probe(struct platform_device *pdev)
 {
-	int ret, i;
+	int ret, i, ctrl_id;
 	struct device_node *auxadc, *apmixedsys, *np = pdev->dev.of_node;
 	struct mtk_thermal *mt;
 	struct resource *res;
@@ -817,9 +845,10 @@ static int mtk_thermal_probe(struct platform_device *pdev)
 		goto err_disable_clk_auxadc;
 	}
 
-	for (i = 0; i < mt->conf->num_banks; i++)
-		mtk_thermal_init_bank(mt, i, apmixed_phys_base,
-				      auxadc_phys_base);
+	for (ctrl_id = 0; ctrl_id < mt->conf->num_controller ; ctrl_id++)
+		for (i = 0; i < mt->conf->num_banks; i++)
+			mtk_thermal_init_bank(mt, i, apmixed_phys_base,
+					      auxadc_phys_base, ctrl_id);
 
 	platform_set_drvdata(pdev, mt);
 
-- 
1.9.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH 5/7] thermal: mediatek: add flag for bank selection
  2019-02-01  7:38 [PATCH 0/7] Add Mediatek thermal dirver for mt8183 michael.kao
                   ` (3 preceding siblings ...)
  2019-02-01  7:38 ` [PATCH 4/7] thermal: mediatek: add thermal controller offset michael.kao
@ 2019-02-01  7:38 ` michael.kao
  2019-02-01  7:38 ` [PATCH 6/7] dt-bindings: thermal: add binding document for mt8183 thermal controller michael.kao
  2019-02-01  7:38 ` [PATCH 7/7] thermal: mediatek: add support for MT8183 michael.kao
  6 siblings, 0 replies; 14+ messages in thread
From: michael.kao @ 2019-02-01  7:38 UTC (permalink / raw)
  To: =Zhang Rui, =Eduardo Valentin, =Daniel Lezcano, =Rob Herring,
	=Mark Rutland, =Matthias Brugger
  Cc: devicetree, srv_heupstream, linux-pm, linux-kernel, Michael Kao,
	linux-mediatek, linux-arm-kernel

From: Michael Kao <michael.kao@mediatek.com>

For past ic designs, the thermal controller should select banks before
reading the thermal sensor.
And the new ic design architecture removes this mechanism.

Signed-off-by: Michael Kao <michael.kao@mediatek.com>
---
 drivers/thermal/mtk_thermal.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
index e5cf3f4..3e97638 100644
--- a/drivers/thermal/mtk_thermal.c
+++ b/drivers/thermal/mtk_thermal.c
@@ -213,6 +213,7 @@ struct mtk_thermal_data {
 	const int cali_val;
 	const int num_controller;
 	const int *controller_offset;
+	bool need_switch_bank;
 	struct thermal_bank_cfg bank_data[];
 };
 
@@ -327,6 +328,7 @@ struct mtk_thermal {
 	.cali_val = MT8173_CALIBRATION,
 	.num_controller = MT8173_NUM_CONTROLLER,
 	.controller_offset = mt8173_tc_offset,
+	.need_switch_bank = true,
 	.bank_data = {
 		{
 			.num_sensors = 2,
@@ -365,6 +367,7 @@ struct mtk_thermal {
 	.cali_val = MT2701_CALIBRATION,
 	.num_controller = MT2701_NUM_CONTROLLER,
 	.controller_offset = mt2701_tc_offset,
+	.need_switch_bank = true,
 	.bank_data = {
 		{
 			.num_sensors = 3,
@@ -394,6 +397,7 @@ struct mtk_thermal {
 	.cali_val = MT2712_CALIBRATION,
 	.num_controller = MT2712_NUM_CONTROLLER,
 	.controller_offset = mt2712_tc_offset,
+	.need_switch_bank = true,
 	.bank_data = {
 		{
 			.num_sensors = 4,
@@ -417,6 +421,7 @@ struct mtk_thermal {
 	.cali_val = MT7622_CALIBRATION,
 	.num_controller = MT7622_NUM_CONTROLLER,
 	.controller_offset = mt7622_tc_offset,
+	.need_switch_bank = true,
 	.bank_data = {
 		{
 			.num_sensors = 1,
@@ -463,12 +468,14 @@ static void mtk_thermal_get_bank(struct mtk_thermal_bank *bank)
 	struct mtk_thermal *mt = bank->mt;
 	u32 val;
 
-	mutex_lock(&mt->lock);
+	if (mt->conf->need_switch_bank) {
+		mutex_lock(&mt->lock);
 
-	val = readl(mt->thermal_base + PTPCORESEL);
-	val &= ~0xf;
-	val |= bank->id;
-	writel(val, mt->thermal_base + PTPCORESEL);
+		val = readl(mt->thermal_base + PTPCORESEL);
+		val &= ~0xf;
+		val |= bank->id;
+		writel(val, mt->thermal_base + PTPCORESEL);
+	}
 }
 
 /**
@@ -481,7 +488,8 @@ static void mtk_thermal_put_bank(struct mtk_thermal_bank *bank)
 {
 	struct mtk_thermal *mt = bank->mt;
 
-	mutex_unlock(&mt->lock);
+	if (mt->conf->need_switch_bank)
+		mutex_unlock(&mt->lock);
 }
 
 /**
-- 
1.9.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH 6/7] dt-bindings: thermal: add binding document for mt8183 thermal controller
  2019-02-01  7:38 [PATCH 0/7] Add Mediatek thermal dirver for mt8183 michael.kao
                   ` (4 preceding siblings ...)
  2019-02-01  7:38 ` [PATCH 5/7] thermal: mediatek: add flag for bank selection michael.kao
@ 2019-02-01  7:38 ` michael.kao
  2019-02-01  7:38 ` [PATCH 7/7] thermal: mediatek: add support for MT8183 michael.kao
  6 siblings, 0 replies; 14+ messages in thread
From: michael.kao @ 2019-02-01  7:38 UTC (permalink / raw)
  To: =Zhang Rui, =Eduardo Valentin, =Daniel Lezcano, =Rob Herring,
	=Mark Rutland, =Matthias Brugger
  Cc: devicetree, srv_heupstream, linux-pm, linux-kernel, Michael Kao,
	linux-mediatek, linux-arm-kernel

From: Michael Kao <michael.kao@mediatek.com>

This patch adds binding document for mt8183 thermal controller.

Signed-off-by: Michael Kao <michael.kao@mediatek.com>
---
 Documentation/devicetree/bindings/thermal/mediatek-thermal.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/thermal/mediatek-thermal.txt b/Documentation/devicetree/bindings/thermal/mediatek-thermal.txt
index 41d6a44..f8d7831 100644
--- a/Documentation/devicetree/bindings/thermal/mediatek-thermal.txt
+++ b/Documentation/devicetree/bindings/thermal/mediatek-thermal.txt
@@ -13,6 +13,7 @@ Required properties:
   - "mediatek,mt2701-thermal" : For MT2701 family of SoCs
   - "mediatek,mt2712-thermal" : For MT2712 family of SoCs
   - "mediatek,mt7622-thermal" : For MT7622 SoC
+  - "mediatek,mt8183-thermal" : For MT8183 family of SoCs
 - reg: Address range of the thermal controller
 - interrupts: IRQ for the thermal controller
 - clocks, clock-names: Clocks needed for the thermal controller. required
-- 
1.9.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH 7/7] thermal: mediatek: add support for MT8183
  2019-02-01  7:38 [PATCH 0/7] Add Mediatek thermal dirver for mt8183 michael.kao
                   ` (5 preceding siblings ...)
  2019-02-01  7:38 ` [PATCH 6/7] dt-bindings: thermal: add binding document for mt8183 thermal controller michael.kao
@ 2019-02-01  7:38 ` michael.kao
  6 siblings, 0 replies; 14+ messages in thread
From: michael.kao @ 2019-02-01  7:38 UTC (permalink / raw)
  To: =Zhang Rui, =Eduardo Valentin, =Daniel Lezcano, =Rob Herring,
	=Mark Rutland, =Matthias Brugger
  Cc: devicetree, srv_heupstream, linux-pm, linux-kernel, Michael Kao,
	linux-mediatek, linux-arm-kernel

From: Michael Kao <michael.kao@mediatek.com>

MT8183 has two built-in thermal controllers with total six thermal
sensors. And it doesn't have bank, so doesn't need to select bank.
This patch adds support for mt8183.

Signed-off-by: Michael Kao <michael.kao@mediatek.com>
---
 drivers/thermal/mtk_thermal.c | 98 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 97 insertions(+), 1 deletion(-)

diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
index 3e97638..e449177 100644
--- a/drivers/thermal/mtk_thermal.c
+++ b/drivers/thermal/mtk_thermal.c
@@ -71,6 +71,15 @@
 
 #define TEMP_SPARE0		0x0f0
 
+#define TEMP_ADCPNP0_1          0x148
+#define TEMP_ADCPNP1_1          0x14c
+#define TEMP_ADCPNP2_1          0x150
+#define TEMP_MSR0_1             0x190
+#define TEMP_MSR1_1             0x194
+#define TEMP_MSR2_1             0x198
+#define TEMP_ADCPNP3_1          0x1b4
+#define TEMP_MSR3_1             0x1B8
+
 #define PTPCORESEL		0x400
 
 #define TEMP_MONCTL1_PERIOD_UNIT(x)	((x) & 0x3ff)
@@ -113,7 +122,8 @@
 
 /*
  * Layout of the fuses providing the calibration data
- * These macros could be used for MT8173, MT2701, and MT2712.
+ * These macros could be used for MT8183, MT8173, MT2701, and MT2712.
+ * MT8183 has 6 sensors and needs 6 VTS calibration data.
  * MT8173 has 5 sensors and needs 5 VTS calibration data.
  * MT2701 has 3 sensors and needs 3 VTS calibration data.
  * MT2712 has 4 sensors and needs 4 VTS calibration data.
@@ -124,6 +134,7 @@
 #define CALIB_BUF0_VTS_TS2(x)		(((x) >> 8) & 0x1ff)
 #define CALIB_BUF1_VTS_TS3(x)		(((x) >> 0) & 0x1ff)
 #define CALIB_BUF2_VTS_TS4(x)		(((x) >> 23) & 0x1ff)
+#define CALIB_BUF2_VTS_TS5(x)		(((x) >> 5) & 0x1ff)
 #define CALIB_BUF2_VTS_TSABB(x)		(((x) >> 14) & 0x1ff)
 #define CALIB_BUF0_DEGC_CALI(x)		(((x) >> 1) & 0x3f)
 #define CALIB_BUF0_O_SLOPE(x)		(((x) >> 26) & 0x3f)
@@ -135,6 +146,7 @@ enum {
 	VTS2,
 	VTS3,
 	VTS4,
+	VTS5,
 	VTSABB,
 	MAX_NUM_VTS,
 };
@@ -190,6 +202,29 @@ enum {
 /* The calibration coefficient of sensor  */
 #define MT7622_CALIBRATION	165
 
+/* MT8183 thermal sensors */
+#define MT8183_TS1	0
+#define MT8183_TS2	1
+#define MT8183_TS3	2
+#define MT8183_TS4	3
+#define MT8183_TS5	4
+#define MT8183_TSABB	5
+
+/* AUXADC channel  is used for the temperature sensors */
+#define MT8183_TEMP_AUXADC_CHANNEL	11
+
+/* The total number of temperature sensors in the MT8183 */
+#define MT8183_NUM_SENSORS	6
+
+/* The number of sensing points per bank */
+#define MT8183_NUM_SENSORS_PER_ZONE	 6
+
+/* The number of controller in the MT8183 */
+#define MT8183_NUM_CONTROLLER		2
+
+/* The calibration coefficient of sensor  */
+#define MT8183_CALIBRATION	153
+
 struct mtk_thermal;
 
 struct thermal_bank_cfg {
@@ -236,6 +271,27 @@ struct mtk_thermal {
 	struct mtk_thermal_bank banks[];
 };
 
+/* MT8183 thermal sensor data */
+static const int mt8183_bank_data[MT8183_NUM_SENSORS] = {
+	MT8183_TS1, MT8183_TS2, MT8183_TS3, MT8183_TS4, MT8183_TS5, MT8183_TSABB
+};
+
+static const int mt8183_msr[MT8183_NUM_SENSORS_PER_ZONE] = {
+	TEMP_MSR0_1, TEMP_MSR1_1, TEMP_MSR2_1, TEMP_MSR1, TEMP_MSR0, TEMP_MSR3_1
+};
+
+static const int mt8183_adcpnp[MT8183_NUM_SENSORS_PER_ZONE] = {
+	TEMP_ADCPNP0_1, TEMP_ADCPNP1_1, TEMP_ADCPNP2_1,
+	TEMP_ADCPNP1, TEMP_ADCPNP0, TEMP_ADCPNP3_1
+};
+
+static const int mt8183_mux_values[MT8183_NUM_SENSORS] = { 0, 1, 2, 3, 4, 0 };
+static const int mt8183_tc_offset[MT8183_NUM_CONTROLLER] = {0x0, 0x100};
+
+static const int mt8183_vts_index[MT8183_NUM_SENSORS] = {
+	VTS1, VTS2, VTS3, VTS4, VTS5, VTSABB
+};
+
 /* MT8173 thermal sensor data */
 static const int mt8173_bank_data[MT8173_NUM_ZONES][3] = {
 	{ MT8173_TS2, MT8173_TS3 },
@@ -434,6 +490,39 @@ struct mtk_thermal {
 };
 
 /**
+ * The MT8183 thermal controller has one bank for the current SW framework.
+ * The MT8183 has a total of 6 temperature sensors.
+ * There are two thermal controller to control the six sensor.
+ * The first one bind 2 sensor, and the other bind 4 sensors.
+ * The thermal core only gets the maximum temperature of all sensor, so
+ * the bank concept wouldn't be necessary here. However, the SVS (Smart
+ * Voltage Scaling) unit makes its decisions based on the same bank
+ * data, and this indeed needs the temperatures of the individual banks
+ * for making better decisions.
+ */
+
+static const struct mtk_thermal_data mt8183_thermal_data = {
+	.auxadc_channel = MT8183_TEMP_AUXADC_CHANNEL,
+	.num_banks = MT8183_NUM_SENSORS_PER_ZONE,
+	.num_sensors = MT8183_NUM_SENSORS,
+	.vts_index = mt8183_vts_index,
+	.cali_val = MT8183_CALIBRATION,
+	.num_controller = MT8183_NUM_CONTROLLER,
+	.controller_offset = mt8183_tc_offset,
+	.need_switch_bank = false,
+	.bank_data = {
+		{
+			.num_sensors = 6,
+			.sensors = mt8183_bank_data,
+		},
+	},
+
+	.msr = mt8183_msr,
+	.adcpnp = mt8183_adcpnp,
+	.sensor_mux_values = mt8183_mux_values,
+};
+
+/**
  * raw_to_mcelsius - convert a raw ADC value to mcelsius
  * @mt:		The thermal controller
  * @raw:	raw ADC value
@@ -726,6 +815,9 @@ static int mtk_thermal_get_calibration_data(struct device *dev,
 			case VTS4:
 				mt->vts[VTS4] = CALIB_BUF2_VTS_TS4(buf[2]);
 				break;
+			case VTS5:
+				mt->vts[VTS5] = CALIB_BUF2_VTS_TS5(buf[2]);
+				break;
 			case VTSABB:
 				mt->vts[VTSABB] = CALIB_BUF2_VTS_TSABB(buf[2]);
 				break;
@@ -766,6 +858,10 @@ static int mtk_thermal_get_calibration_data(struct device *dev,
 	{
 		.compatible = "mediatek,mt7622-thermal",
 		.data = (void *)&mt7622_thermal_data,
+	},
+	{
+		.compatible = "mediatek,mt8183-thermal",
+		.data = (void *)&mt8183_thermal_data,
 	}, {
 	},
 };
-- 
1.9.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 1/7] thermal: mediatek: fix register index error
  2019-02-01  7:38 ` [PATCH 1/7] thermal: mediatek: fix register index error michael.kao
@ 2019-02-04 17:24   ` Matthias Brugger
  2019-02-12  8:20     ` Michael Kao
  0 siblings, 1 reply; 14+ messages in thread
From: Matthias Brugger @ 2019-02-04 17:24 UTC (permalink / raw)
  To: michael.kao, =Zhang Rui, =Eduardo Valentin, =Daniel Lezcano,
	=Rob Herring, =Mark Rutland
  Cc: devicetree, srv_heupstream, linux-pm, linux-kernel,
	linux-mediatek, linux-arm-kernel



On 01/02/2019 08:38, michael.kao@mediatek.com wrote:
> From: Michael Kao <michael.kao@mediatek.com>
> 
> The index of msr and adcpnp should match the sensor
> which belongs to the selected bank in the for loop.
> 

If I get that right, this fixes
b7cf0053738c ("thermal: Add Mediatek thermal driver for mt2701.")

So please add a fixes tag to the commit.

Thanks,
Matthias

> Signed-off-by: Michael Kao <michael.kao@mediatek.com>
> ---
>  drivers/thermal/mtk_thermal.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
> index 0691f26..f646436 100644
> --- a/drivers/thermal/mtk_thermal.c
> +++ b/drivers/thermal/mtk_thermal.c
> @@ -431,7 +431,8 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
>  	u32 raw;
>  
>  	for (i = 0; i < conf->bank_data[bank->id].num_sensors; i++) {
> -		raw = readl(mt->thermal_base + conf->msr[i]);
> +		raw = readl(mt->thermal_base +
> +			    conf->msr[conf->bank_data[bank->id].sensors[i]]);
>  
>  		temp = raw_to_mcelsius(mt,
>  				       conf->bank_data[bank->id].sensors[i],
> @@ -568,7 +569,8 @@ static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
>  
>  	for (i = 0; i < conf->bank_data[num].num_sensors; i++)
>  		writel(conf->sensor_mux_values[conf->bank_data[num].sensors[i]],
> -		       mt->thermal_base + conf->adcpnp[i]);
> +		       mt->thermal_base +
> +		       conf->adcpnp[conf->bank_data[num].sensors[i]]);
>  
>  	writel((1 << conf->bank_data[num].num_sensors) - 1,
>  	       mt->thermal_base + TEMP_MONCTL0);
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 3/7] thermal: mediatek: add calibration item
  2019-02-01  7:38 ` [PATCH 3/7] thermal: mediatek: add calibration item michael.kao
@ 2019-02-04 17:31   ` Matthias Brugger
  2019-02-06  0:48     ` Eduardo Valentin
  0 siblings, 1 reply; 14+ messages in thread
From: Matthias Brugger @ 2019-02-04 17:31 UTC (permalink / raw)
  To: michael.kao, =Zhang Rui, =Eduardo Valentin, =Daniel Lezcano,
	=Rob Herring, =Mark Rutland
  Cc: devicetree, srv_heupstream, linux-pm, linux-kernel,
	linux-mediatek, linux-arm-kernel



On 01/02/2019 08:38, michael.kao@mediatek.com wrote:
> From: Michael Kao <michael.kao@mediatek.com>
> 
> Add calibration item in thermal_data to support
> the project with different calibration coefficient.
> 
> Signed-off-by: Michael Kao <michael.kao@mediatek.com>
> ---
>  drivers/thermal/mtk_thermal.c | 19 ++++++++++++++++++-
>  1 file changed, 18 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
> index 07f8ad7..45c6587 100644
> --- a/drivers/thermal/mtk_thermal.c
> +++ b/drivers/thermal/mtk_thermal.c
> @@ -105,6 +105,9 @@
>  /* The number of sensing points per bank */
>  #define MT8173_NUM_SENSORS_PER_ZONE	4
>  
> +/* The calibration coefficient of sensor  */
> +#define MT8173_CALIBRATION	165
> +

Calibration value is the same for all SoCs (including mt8183), we can define it
once and use it in all mtk_thermal structs.

Regards,
Matthias


>  /*
>   * Layout of the fuses providing the calibration data
>   * These macros could be used for MT8173, MT2701, and MT2712.
> @@ -147,6 +150,9 @@ enum {
>  /* The number of sensing points per bank */
>  #define MT2701_NUM_SENSORS_PER_ZONE	3
>  
> +/* The calibration coefficient of sensor  */
> +#define MT2701_CALIBRATION	165
> +
>  /* MT2712 thermal sensors */
>  #define MT2712_TS1	0
>  #define MT2712_TS2	1
> @@ -162,12 +168,18 @@ enum {
>  /* The number of sensing points per bank */
>  #define MT2712_NUM_SENSORS_PER_ZONE	4
>  
> +/* The calibration coefficient of sensor  */
> +#define MT2712_CALIBRATION	165
> +
>  #define MT7622_TEMP_AUXADC_CHANNEL	11
>  #define MT7622_NUM_SENSORS		1
>  #define MT7622_NUM_ZONES		1
>  #define MT7622_NUM_SENSORS_PER_ZONE	1
>  #define MT7622_TS1	0
>  
> +/* The calibration coefficient of sensor  */
> +#define MT7622_CALIBRATION	165
> +
>  struct mtk_thermal;
>  
>  struct thermal_bank_cfg {
> @@ -188,6 +200,7 @@ struct mtk_thermal_data {
>  	const int *sensor_mux_values;
>  	const int *msr;
>  	const int *adcpnp;
> +	const int cali_val;
>  	struct thermal_bank_cfg bank_data[];
>  };
>  
> @@ -295,6 +308,7 @@ struct mtk_thermal {
>  	.num_banks = MT8173_NUM_ZONES,
>  	.num_sensors = MT8173_NUM_SENSORS,
>  	.vts_index = mt8173_vts_index,
> +	.cali_val = MT8173_CALIBRATION,
>  	.bank_data = {
>  		{
>  			.num_sensors = 2,
> @@ -330,6 +344,7 @@ struct mtk_thermal {
>  	.num_banks = 1,
>  	.num_sensors = MT2701_NUM_SENSORS,
>  	.vts_index = mt2701_vts_index,
> +	.cali_val = MT2701_CALIBRATION,
>  	.bank_data = {
>  		{
>  			.num_sensors = 3,
> @@ -356,6 +371,7 @@ struct mtk_thermal {
>  	.num_banks = 1,
>  	.num_sensors = MT2712_NUM_SENSORS,
>  	.vts_index = mt2712_vts_index,
> +	.cali_val = MT2712_CALIBRATION,
>  	.bank_data = {
>  		{
>  			.num_sensors = 4,
> @@ -376,6 +392,7 @@ struct mtk_thermal {
>  	.num_banks = MT7622_NUM_ZONES,
>  	.num_sensors = MT7622_NUM_SENSORS,
>  	.vts_index = mt7622_vts_index,
> +	.cali_val = MT7622_CALIBRATION,
>  	.bank_data = {
>  		{
>  			.num_sensors = 1,
> @@ -402,7 +419,7 @@ static int raw_to_mcelsius(struct mtk_thermal *mt, int sensno, s32 raw)
>  	raw &= 0xfff;
>  
>  	tmp = 203450520 << 3;
> -	tmp /= 165 + mt->o_slope;
> +	tmp /= mt->conf->cali_val + mt->o_slope;
>  	tmp /= 10000 + mt->adc_ge;
>  	tmp *= raw - mt->vts[sensno] - 3350;
>  	tmp >>= 3;
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 3/7] thermal: mediatek: add calibration item
  2019-02-04 17:31   ` Matthias Brugger
@ 2019-02-06  0:48     ` Eduardo Valentin
  0 siblings, 0 replies; 14+ messages in thread
From: Eduardo Valentin @ 2019-02-06  0:48 UTC (permalink / raw)
  To: Matthias Brugger
  Cc: =Mark Rutland, devicetree, srv_heupstream, linux-pm,
	=Daniel Lezcano, linux-kernel, michael.kao, =Rob Herring,
	linux-mediatek, =Zhang Rui, linux-arm-kernel

On Mon, Feb 04, 2019 at 06:31:41PM +0100, Matthias Brugger wrote:
> 
> 
> On 01/02/2019 08:38, michael.kao@mediatek.com wrote:
> > From: Michael Kao <michael.kao@mediatek.com>
> > 
> > Add calibration item in thermal_data to support
> > the project with different calibration coefficient.
> > 
> > Signed-off-by: Michael Kao <michael.kao@mediatek.com>
> > ---
> >  drivers/thermal/mtk_thermal.c | 19 ++++++++++++++++++-
> >  1 file changed, 18 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
> > index 07f8ad7..45c6587 100644
> > --- a/drivers/thermal/mtk_thermal.c
> > +++ b/drivers/thermal/mtk_thermal.c
> > @@ -105,6 +105,9 @@
> >  /* The number of sensing points per bank */
> >  #define MT8173_NUM_SENSORS_PER_ZONE	4
> >  
> > +/* The calibration coefficient of sensor  */
> > +#define MT8173_CALIBRATION	165
> > +
> 
> Calibration value is the same for all SoCs (including mt8183), we can define it
> once and use it in all mtk_thermal structs.

Well, on patch 7 we have:

+#define MT8183_CALIBRATION	153

> 
> Regards,
> Matthias
> 
> 
> >  /*
> >   * Layout of the fuses providing the calibration data
> >   * These macros could be used for MT8173, MT2701, and MT2712.
> > @@ -147,6 +150,9 @@ enum {
> >  /* The number of sensing points per bank */
> >  #define MT2701_NUM_SENSORS_PER_ZONE	3
> >  
> > +/* The calibration coefficient of sensor  */
> > +#define MT2701_CALIBRATION	165
> > +
> >  /* MT2712 thermal sensors */
> >  #define MT2712_TS1	0
> >  #define MT2712_TS2	1
> > @@ -162,12 +168,18 @@ enum {
> >  /* The number of sensing points per bank */
> >  #define MT2712_NUM_SENSORS_PER_ZONE	4
> >  
> > +/* The calibration coefficient of sensor  */
> > +#define MT2712_CALIBRATION	165
> > +
> >  #define MT7622_TEMP_AUXADC_CHANNEL	11
> >  #define MT7622_NUM_SENSORS		1
> >  #define MT7622_NUM_ZONES		1
> >  #define MT7622_NUM_SENSORS_PER_ZONE	1
> >  #define MT7622_TS1	0
> >  
> > +/* The calibration coefficient of sensor  */
> > +#define MT7622_CALIBRATION	165
> > +
> >  struct mtk_thermal;
> >  
> >  struct thermal_bank_cfg {
> > @@ -188,6 +200,7 @@ struct mtk_thermal_data {
> >  	const int *sensor_mux_values;
> >  	const int *msr;
> >  	const int *adcpnp;
> > +	const int cali_val;
> >  	struct thermal_bank_cfg bank_data[];
> >  };
> >  
> > @@ -295,6 +308,7 @@ struct mtk_thermal {
> >  	.num_banks = MT8173_NUM_ZONES,
> >  	.num_sensors = MT8173_NUM_SENSORS,
> >  	.vts_index = mt8173_vts_index,
> > +	.cali_val = MT8173_CALIBRATION,
> >  	.bank_data = {
> >  		{
> >  			.num_sensors = 2,
> > @@ -330,6 +344,7 @@ struct mtk_thermal {
> >  	.num_banks = 1,
> >  	.num_sensors = MT2701_NUM_SENSORS,
> >  	.vts_index = mt2701_vts_index,
> > +	.cali_val = MT2701_CALIBRATION,
> >  	.bank_data = {
> >  		{
> >  			.num_sensors = 3,
> > @@ -356,6 +371,7 @@ struct mtk_thermal {
> >  	.num_banks = 1,
> >  	.num_sensors = MT2712_NUM_SENSORS,
> >  	.vts_index = mt2712_vts_index,
> > +	.cali_val = MT2712_CALIBRATION,
> >  	.bank_data = {
> >  		{
> >  			.num_sensors = 4,
> > @@ -376,6 +392,7 @@ struct mtk_thermal {
> >  	.num_banks = MT7622_NUM_ZONES,
> >  	.num_sensors = MT7622_NUM_SENSORS,
> >  	.vts_index = mt7622_vts_index,
> > +	.cali_val = MT7622_CALIBRATION,
> >  	.bank_data = {
> >  		{
> >  			.num_sensors = 1,
> > @@ -402,7 +419,7 @@ static int raw_to_mcelsius(struct mtk_thermal *mt, int sensno, s32 raw)
> >  	raw &= 0xfff;
> >  
> >  	tmp = 203450520 << 3;
> > -	tmp /= 165 + mt->o_slope;
> > +	tmp /= mt->conf->cali_val + mt->o_slope;
> >  	tmp /= 10000 + mt->adc_ge;
> >  	tmp *= raw - mt->vts[sensno] - 3350;
> >  	tmp >>= 3;
> > 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 4/7] thermal: mediatek: add thermal controller offset
  2019-02-01  7:38 ` [PATCH 4/7] thermal: mediatek: add thermal controller offset michael.kao
@ 2019-02-06  0:53   ` Eduardo Valentin
  2019-02-12  9:55     ` Michael Kao
  0 siblings, 1 reply; 14+ messages in thread
From: Eduardo Valentin @ 2019-02-06  0:53 UTC (permalink / raw)
  To: michael.kao
  Cc: =Mark Rutland, devicetree, srv_heupstream, linux-pm,
	=Daniel Lezcano, linux-kernel, =Rob Herring, linux-mediatek,
	=Matthias Brugger, =Zhang Rui, linux-arm-kernel

On Fri, Feb 01, 2019 at 03:38:10PM +0800, michael.kao@mediatek.com wrote:
> From: Michael Kao <michael.kao@mediatek.com>
> 
> One thermal controller can read four sensors at most,
> so we need to add controller_offset for the project with
> more than four sensors to reuse the same register settings.
> 
> Signed-off-by: Michael Kao <michael.kao@mediatek.com>
> ---
>  drivers/thermal/mtk_thermal.c | 79 +++++++++++++++++++++++++++++--------------
>  1 file changed, 54 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
> index 45c6587..e5cf3f4 100644
> --- a/drivers/thermal/mtk_thermal.c
> +++ b/drivers/thermal/mtk_thermal.c
> @@ -105,6 +105,9 @@
>  /* The number of sensing points per bank */
>  #define MT8173_NUM_SENSORS_PER_ZONE	4
>  
> +/* The number of controller in the MT8173 */
> +#define MT8173_NUM_CONTROLLER		1
> +
>  /* The calibration coefficient of sensor  */
>  #define MT8173_CALIBRATION	165
>  
> @@ -150,6 +153,9 @@ enum {
>  /* The number of sensing points per bank */
>  #define MT2701_NUM_SENSORS_PER_ZONE	3
>  
> +/* The number of controller in the MT2701 */
> +#define MT2701_NUM_CONTROLLER		1
> +
>  /* The calibration coefficient of sensor  */
>  #define MT2701_CALIBRATION	165
>  
> @@ -168,6 +174,9 @@ enum {
>  /* The number of sensing points per bank */
>  #define MT2712_NUM_SENSORS_PER_ZONE	4
>  
> +/* The number of controller in the MT2712 */
> +#define MT2712_NUM_CONTROLLER		1
> +
>  /* The calibration coefficient of sensor  */
>  #define MT2712_CALIBRATION	165
>  
> @@ -176,6 +185,7 @@ enum {
>  #define MT7622_NUM_ZONES		1
>  #define MT7622_NUM_SENSORS_PER_ZONE	1
>  #define MT7622_TS1	0
> +#define MT7622_NUM_CONTROLLER		1
>  
>  /* The calibration coefficient of sensor  */
>  #define MT7622_CALIBRATION	165
> @@ -201,6 +211,8 @@ struct mtk_thermal_data {
>  	const int *msr;
>  	const int *adcpnp;
>  	const int cali_val;
> +	const int num_controller;
> +	const int *controller_offset;
>  	struct thermal_bank_cfg bank_data[];
>  };
>  
> @@ -240,6 +252,7 @@ struct mtk_thermal {
>  };
>  
>  static const int mt8173_mux_values[MT8173_NUM_SENSORS] = { 0, 1, 2, 3, 16 };
> +static const int mt8173_tc_offset[MT8173_NUM_CONTROLLER] = { 0x0, };
>  
>  static const int mt8173_vts_index[MT8173_NUM_SENSORS] = {
>  	VTS1, VTS2, VTS3, VTS4, VTSABB
> @@ -259,6 +272,7 @@ struct mtk_thermal {
>  };
>  
>  static const int mt2701_mux_values[MT2701_NUM_SENSORS] = { 0, 1, 16 };
> +static const int mt2701_tc_offset[MT2701_NUM_CONTROLLER] = { 0x0, };
>  
>  static const int mt2701_vts_index[MT2701_NUM_SENSORS] = {
>  	VTS1, VTS2, VTS3
> @@ -278,6 +292,7 @@ struct mtk_thermal {
>  };
>  
>  static const int mt2712_mux_values[MT2712_NUM_SENSORS] = { 0, 1, 2, 3 };
> +static const int mt2712_tc_offset[MT2712_NUM_CONTROLLER] = { 0x0, };
>  
>  static const int mt2712_vts_index[MT2712_NUM_SENSORS] = {
>  	VTS1, VTS2, VTS3, VTS4
> @@ -289,6 +304,7 @@ struct mtk_thermal {
>  static const int mt7622_adcpnp[MT7622_NUM_SENSORS_PER_ZONE] = { TEMP_ADCPNP0, };
>  static const int mt7622_mux_values[MT7622_NUM_SENSORS] = { 0, };
>  static const int mt7622_vts_index[MT7622_NUM_SENSORS] = { VTS1 };
> +static const int mt7622_tc_offset[MT7622_NUM_CONTROLLER] = { 0x0, };
>  
>  /**
>   * The MT8173 thermal controller has four banks. Each bank can read up to
> @@ -309,6 +325,8 @@ struct mtk_thermal {
>  	.num_sensors = MT8173_NUM_SENSORS,
>  	.vts_index = mt8173_vts_index,
>  	.cali_val = MT8173_CALIBRATION,
> +	.num_controller = MT8173_NUM_CONTROLLER,
> +	.controller_offset = mt8173_tc_offset,
>  	.bank_data = {
>  		{
>  			.num_sensors = 2,
> @@ -345,6 +363,8 @@ struct mtk_thermal {
>  	.num_sensors = MT2701_NUM_SENSORS,
>  	.vts_index = mt2701_vts_index,
>  	.cali_val = MT2701_CALIBRATION,
> +	.num_controller = MT2701_NUM_CONTROLLER,
> +	.controller_offset = mt2701_tc_offset,
>  	.bank_data = {
>  		{
>  			.num_sensors = 3,
> @@ -372,6 +392,8 @@ struct mtk_thermal {
>  	.num_sensors = MT2712_NUM_SENSORS,
>  	.vts_index = mt2712_vts_index,
>  	.cali_val = MT2712_CALIBRATION,
> +	.num_controller = MT2712_NUM_CONTROLLER,
> +	.controller_offset = mt2712_tc_offset,
>  	.bank_data = {
>  		{
>  			.num_sensors = 4,
> @@ -393,6 +415,8 @@ struct mtk_thermal {
>  	.num_sensors = MT7622_NUM_SENSORS,
>  	.vts_index = mt7622_vts_index,
>  	.cali_val = MT7622_CALIBRATION,
> +	.num_controller = MT7622_NUM_CONTROLLER,
> +	.controller_offset = mt7622_tc_offset,
>  	.bank_data = {
>  		{
>  			.num_sensors = 1,
> @@ -523,19 +547,23 @@ static int mtk_read_temp(void *data, int *temperature)
>  };
>  
>  static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
> -				  u32 apmixed_phys_base, u32 auxadc_phys_base)
> +				  u32 apmixed_phys_base, u32 auxadc_phys_base,
> +				  int ctrl_id)
>  {
>  	struct mtk_thermal_bank *bank = &mt->banks[num];
>  	const struct mtk_thermal_data *conf = mt->conf;
>  	int i;
>  
> +	int offset = mt->conf->controller_offset[ctrl_id];
> +	void *controller_base = mt->thermal_base + offset;

This void * has to be at least __iomem, right?

See the report of kbuild bot, fix it and send it back.

> +
>  	bank->id = num;
>  	bank->mt = mt;
>  
>  	mtk_thermal_get_bank(bank);
>  
>  	/* bus clock 66M counting unit is 12 * 15.15ns * 256 = 46.540us */
> -	writel(TEMP_MONCTL1_PERIOD_UNIT(12), mt->thermal_base + TEMP_MONCTL1);
> +	writel(TEMP_MONCTL1_PERIOD_UNIT(12), controller_base + TEMP_MONCTL1);
>  
>  	/*
>  	 * filt interval is 1 * 46.540us = 46.54us,
> @@ -543,21 +571,21 @@ static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
>  	 */
>  	writel(TEMP_MONCTL2_FILTER_INTERVAL(1) |
>  			TEMP_MONCTL2_SENSOR_INTERVAL(429),
> -			mt->thermal_base + TEMP_MONCTL2);
> +			controller_base + TEMP_MONCTL2);
>  
>  	/* poll is set to 10u */
>  	writel(TEMP_AHBPOLL_ADC_POLL_INTERVAL(768),
> -	       mt->thermal_base + TEMP_AHBPOLL);
> +	       controller_base + TEMP_AHBPOLL);
>  
>  	/* temperature sampling control, 1 sample */
> -	writel(0x0, mt->thermal_base + TEMP_MSRCTL0);
> +	writel(0x0, controller_base + TEMP_MSRCTL0);
>  
>  	/* exceed this polling time, IRQ would be inserted */
> -	writel(0xffffffff, mt->thermal_base + TEMP_AHBTO);
> +	writel(0xffffffff, controller_base + TEMP_AHBTO);
>  
>  	/* number of interrupts per event, 1 is enough */
> -	writel(0x0, mt->thermal_base + TEMP_MONIDET0);
> -	writel(0x0, mt->thermal_base + TEMP_MONIDET1);
> +	writel(0x0, controller_base + TEMP_MONIDET0);
> +	writel(0x0, controller_base + TEMP_MONIDET1);
>  
>  	/*
>  	 * The MT8173 thermal controller does not have its own ADC. Instead it
> @@ -572,44 +600,44 @@ static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
>  	 * this value will be stored to TEMP_PNPMUXADDR (TEMP_SPARE0)
>  	 * automatically by hw
>  	 */
> -	writel(BIT(conf->auxadc_channel), mt->thermal_base + TEMP_ADCMUX);
> +	writel(BIT(conf->auxadc_channel), controller_base + TEMP_ADCMUX);
>  
>  	/* AHB address for auxadc mux selection */
>  	writel(auxadc_phys_base + AUXADC_CON1_CLR_V,
> -	       mt->thermal_base + TEMP_ADCMUXADDR);
> +	       controller_base + TEMP_ADCMUXADDR);
>  
>  	/* AHB address for pnp sensor mux selection */
>  	writel(apmixed_phys_base + APMIXED_SYS_TS_CON1,
> -	       mt->thermal_base + TEMP_PNPMUXADDR);
> +	       controller_base + TEMP_PNPMUXADDR);
>  
>  	/* AHB value for auxadc enable */
> -	writel(BIT(conf->auxadc_channel), mt->thermal_base + TEMP_ADCEN);
> +	writel(BIT(conf->auxadc_channel), controller_base + TEMP_ADCEN);
>  
>  	/* AHB address for auxadc enable (channel 0 immediate mode selected) */
>  	writel(auxadc_phys_base + AUXADC_CON1_SET_V,
> -	       mt->thermal_base + TEMP_ADCENADDR);
> +	       controller_base + TEMP_ADCENADDR);
>  
>  	/* AHB address for auxadc valid bit */
>  	writel(auxadc_phys_base + AUXADC_DATA(conf->auxadc_channel),
> -	       mt->thermal_base + TEMP_ADCVALIDADDR);
> +	       controller_base + TEMP_ADCVALIDADDR);
>  
>  	/* AHB address for auxadc voltage output */
>  	writel(auxadc_phys_base + AUXADC_DATA(conf->auxadc_channel),
> -	       mt->thermal_base + TEMP_ADCVOLTADDR);
> +	       controller_base + TEMP_ADCVOLTADDR);
>  
>  	/* read valid & voltage are at the same register */
> -	writel(0x0, mt->thermal_base + TEMP_RDCTRL);
> +	writel(0x0, controller_base + TEMP_RDCTRL);
>  
>  	/* indicate where the valid bit is */
>  	writel(TEMP_ADCVALIDMASK_VALID_HIGH | TEMP_ADCVALIDMASK_VALID_POS(12),
> -	       mt->thermal_base + TEMP_ADCVALIDMASK);
> +	       controller_base + TEMP_ADCVALIDMASK);
>  
>  	/* no shift */
> -	writel(0x0, mt->thermal_base + TEMP_ADCVOLTAGESHIFT);
> +	writel(0x0, controller_base + TEMP_ADCVOLTAGESHIFT);
>  
>  	/* enable auxadc mux write transaction */
>  	writel(TEMP_ADCWRITECTRL_ADC_MUX_WRITE,
> -	       mt->thermal_base + TEMP_ADCWRITECTRL);
> +		controller_base + TEMP_ADCWRITECTRL);
>  
>  	for (i = 0; i < conf->bank_data[num].num_sensors; i++)
>  		writel(conf->sensor_mux_values[conf->bank_data[num].sensors[i]],
> @@ -617,11 +645,11 @@ static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
>  		       conf->adcpnp[conf->bank_data[num].sensors[i]]);
>  
>  	writel((1 << conf->bank_data[num].num_sensors) - 1,
> -	       mt->thermal_base + TEMP_MONCTL0);
> +	       controller_base + TEMP_MONCTL0);
>  
>  	writel(TEMP_ADCWRITECTRL_ADC_PNP_WRITE |
>  	       TEMP_ADCWRITECTRL_ADC_MUX_WRITE,
> -	       mt->thermal_base + TEMP_ADCWRITECTRL);
> +	       controller_base + TEMP_ADCWRITECTRL);
>  
>  	mtk_thermal_put_bank(bank);
>  }
> @@ -737,7 +765,7 @@ static int mtk_thermal_get_calibration_data(struct device *dev,
>  
>  static int mtk_thermal_probe(struct platform_device *pdev)
>  {
> -	int ret, i;
> +	int ret, i, ctrl_id;
>  	struct device_node *auxadc, *apmixedsys, *np = pdev->dev.of_node;
>  	struct mtk_thermal *mt;
>  	struct resource *res;
> @@ -817,9 +845,10 @@ static int mtk_thermal_probe(struct platform_device *pdev)
>  		goto err_disable_clk_auxadc;
>  	}
>  
> -	for (i = 0; i < mt->conf->num_banks; i++)
> -		mtk_thermal_init_bank(mt, i, apmixed_phys_base,
> -				      auxadc_phys_base);
> +	for (ctrl_id = 0; ctrl_id < mt->conf->num_controller ; ctrl_id++)
> +		for (i = 0; i < mt->conf->num_banks; i++)
> +			mtk_thermal_init_bank(mt, i, apmixed_phys_base,
> +					      auxadc_phys_base, ctrl_id);
>  
>  	platform_set_drvdata(pdev, mt);
>  
> -- 
> 1.9.1
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 1/7] thermal: mediatek: fix register index error
  2019-02-04 17:24   ` Matthias Brugger
@ 2019-02-12  8:20     ` Michael Kao
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Kao @ 2019-02-12  8:20 UTC (permalink / raw)
  To: Matthias Brugger
  Cc: =Mark Rutland, devicetree, srv_heupstream, linux-pm,
	=Daniel Lezcano, linux-kernel, =Eduardo Valentin, =Rob Herring,
	linux-mediatek, =Zhang Rui, linux-arm-kernel

On Mon, 2019-02-04 at 18:24 +0100, Matthias Brugger wrote:
> 
> On 01/02/2019 08:38, michael.kao@mediatek.com wrote:
> > From: Michael Kao <michael.kao@mediatek.com>
> > 
> > The index of msr and adcpnp should match the sensor
> > which belongs to the selected bank in the for loop.
> > 
> 
> If I get that right, this fixes
> b7cf0053738c ("thermal: Add Mediatek thermal driver for mt2701.")
> 
> So please add a fixes tag to the commit.

It is true that the patch is fix b7cf0053738c.
I will add 
Fixes: b7cf0053738c ("thermal: Add Mediatek thermal driver for mt2701.")
to the commit message of next version.

> Thanks,
> Matthias
> 
> > Signed-off-by: Michael Kao <michael.kao@mediatek.com>
> > ---
> >  drivers/thermal/mtk_thermal.c | 6 ++++--
> >  1 file changed, 4 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
> > index 0691f26..f646436 100644
> > --- a/drivers/thermal/mtk_thermal.c
> > +++ b/drivers/thermal/mtk_thermal.c
> > @@ -431,7 +431,8 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
> >  	u32 raw;
> >  
> >  	for (i = 0; i < conf->bank_data[bank->id].num_sensors; i++) {
> > -		raw = readl(mt->thermal_base + conf->msr[i]);
> > +		raw = readl(mt->thermal_base +
> > +			    conf->msr[conf->bank_data[bank->id].sensors[i]]);
> >  
> >  		temp = raw_to_mcelsius(mt,
> >  				       conf->bank_data[bank->id].sensors[i],
> > @@ -568,7 +569,8 @@ static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
> >  
> >  	for (i = 0; i < conf->bank_data[num].num_sensors; i++)
> >  		writel(conf->sensor_mux_values[conf->bank_data[num].sensors[i]],
> > -		       mt->thermal_base + conf->adcpnp[i]);
> > +		       mt->thermal_base +
> > +		       conf->adcpnp[conf->bank_data[num].sensors[i]]);
> >  
> >  	writel((1 << conf->bank_data[num].num_sensors) - 1,
> >  	       mt->thermal_base + TEMP_MONCTL0);
> > 



_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 4/7] thermal: mediatek: add thermal controller offset
  2019-02-06  0:53   ` Eduardo Valentin
@ 2019-02-12  9:55     ` Michael Kao
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Kao @ 2019-02-12  9:55 UTC (permalink / raw)
  To: Eduardo Valentin
  Cc: =Mark Rutland, devicetree, srv_heupstream, linux-pm,
	=Daniel Lezcano, linux-kernel, =Rob Herring, linux-mediatek,
	=Matthias Brugger, =Zhang Rui, linux-arm-kernel

On Tue, 2019-02-05 at 16:53 -0800, Eduardo Valentin wrote:
> On Fri, Feb 01, 2019 at 03:38:10PM +0800, michael.kao@mediatek.com wrote:
> > From: Michael Kao <michael.kao@mediatek.com>
> > 
> > One thermal controller can read four sensors at most,
> > so we need to add controller_offset for the project with
> > more than four sensors to reuse the same register settings.
> > 
> > Signed-off-by: Michael Kao <michael.kao@mediatek.com>
> > ---
> >  drivers/thermal/mtk_thermal.c | 79 +++++++++++++++++++++++++++++--------------
> >  1 file changed, 54 insertions(+), 25 deletions(-)
> > 
> > diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
> > index 45c6587..e5cf3f4 100644
> > --- a/drivers/thermal/mtk_thermal.c
> > +++ b/drivers/thermal/mtk_thermal.c
> > @@ -105,6 +105,9 @@
> >  /* The number of sensing points per bank */
> >  #define MT8173_NUM_SENSORS_PER_ZONE	4
> >  
> > +/* The number of controller in the MT8173 */
> > +#define MT8173_NUM_CONTROLLER		1
> > +
> >  /* The calibration coefficient of sensor  */
> >  #define MT8173_CALIBRATION	165
> >  
> > @@ -150,6 +153,9 @@ enum {
> >  /* The number of sensing points per bank */
> >  #define MT2701_NUM_SENSORS_PER_ZONE	3
> >  
> > +/* The number of controller in the MT2701 */
> > +#define MT2701_NUM_CONTROLLER		1
> > +
> >  /* The calibration coefficient of sensor  */
> >  #define MT2701_CALIBRATION	165
> >  
> > @@ -168,6 +174,9 @@ enum {
> >  /* The number of sensing points per bank */
> >  #define MT2712_NUM_SENSORS_PER_ZONE	4
> >  
> > +/* The number of controller in the MT2712 */
> > +#define MT2712_NUM_CONTROLLER		1
> > +
> >  /* The calibration coefficient of sensor  */
> >  #define MT2712_CALIBRATION	165
> >  
> > @@ -176,6 +185,7 @@ enum {
> >  #define MT7622_NUM_ZONES		1
> >  #define MT7622_NUM_SENSORS_PER_ZONE	1
> >  #define MT7622_TS1	0
> > +#define MT7622_NUM_CONTROLLER		1
> >  
> >  /* The calibration coefficient of sensor  */
> >  #define MT7622_CALIBRATION	165
> > @@ -201,6 +211,8 @@ struct mtk_thermal_data {
> >  	const int *msr;
> >  	const int *adcpnp;
> >  	const int cali_val;
> > +	const int num_controller;
> > +	const int *controller_offset;
> >  	struct thermal_bank_cfg bank_data[];
> >  };
> >  
> > @@ -240,6 +252,7 @@ struct mtk_thermal {
> >  };
> >  
> >  static const int mt8173_mux_values[MT8173_NUM_SENSORS] = { 0, 1, 2, 3, 16 };
> > +static const int mt8173_tc_offset[MT8173_NUM_CONTROLLER] = { 0x0, };
> >  
> >  static const int mt8173_vts_index[MT8173_NUM_SENSORS] = {
> >  	VTS1, VTS2, VTS3, VTS4, VTSABB
> > @@ -259,6 +272,7 @@ struct mtk_thermal {
> >  };
> >  
> >  static const int mt2701_mux_values[MT2701_NUM_SENSORS] = { 0, 1, 16 };
> > +static const int mt2701_tc_offset[MT2701_NUM_CONTROLLER] = { 0x0, };
> >  
> >  static const int mt2701_vts_index[MT2701_NUM_SENSORS] = {
> >  	VTS1, VTS2, VTS3
> > @@ -278,6 +292,7 @@ struct mtk_thermal {
> >  };
> >  
> >  static const int mt2712_mux_values[MT2712_NUM_SENSORS] = { 0, 1, 2, 3 };
> > +static const int mt2712_tc_offset[MT2712_NUM_CONTROLLER] = { 0x0, };
> >  
> >  static const int mt2712_vts_index[MT2712_NUM_SENSORS] = {
> >  	VTS1, VTS2, VTS3, VTS4
> > @@ -289,6 +304,7 @@ struct mtk_thermal {
> >  static const int mt7622_adcpnp[MT7622_NUM_SENSORS_PER_ZONE] = { TEMP_ADCPNP0, };
> >  static const int mt7622_mux_values[MT7622_NUM_SENSORS] = { 0, };
> >  static const int mt7622_vts_index[MT7622_NUM_SENSORS] = { VTS1 };
> > +static const int mt7622_tc_offset[MT7622_NUM_CONTROLLER] = { 0x0, };
> >  
> >  /**
> >   * The MT8173 thermal controller has four banks. Each bank can read up to
> > @@ -309,6 +325,8 @@ struct mtk_thermal {
> >  	.num_sensors = MT8173_NUM_SENSORS,
> >  	.vts_index = mt8173_vts_index,
> >  	.cali_val = MT8173_CALIBRATION,
> > +	.num_controller = MT8173_NUM_CONTROLLER,
> > +	.controller_offset = mt8173_tc_offset,
> >  	.bank_data = {
> >  		{
> >  			.num_sensors = 2,
> > @@ -345,6 +363,8 @@ struct mtk_thermal {
> >  	.num_sensors = MT2701_NUM_SENSORS,
> >  	.vts_index = mt2701_vts_index,
> >  	.cali_val = MT2701_CALIBRATION,
> > +	.num_controller = MT2701_NUM_CONTROLLER,
> > +	.controller_offset = mt2701_tc_offset,
> >  	.bank_data = {
> >  		{
> >  			.num_sensors = 3,
> > @@ -372,6 +392,8 @@ struct mtk_thermal {
> >  	.num_sensors = MT2712_NUM_SENSORS,
> >  	.vts_index = mt2712_vts_index,
> >  	.cali_val = MT2712_CALIBRATION,
> > +	.num_controller = MT2712_NUM_CONTROLLER,
> > +	.controller_offset = mt2712_tc_offset,
> >  	.bank_data = {
> >  		{
> >  			.num_sensors = 4,
> > @@ -393,6 +415,8 @@ struct mtk_thermal {
> >  	.num_sensors = MT7622_NUM_SENSORS,
> >  	.vts_index = mt7622_vts_index,
> >  	.cali_val = MT7622_CALIBRATION,
> > +	.num_controller = MT7622_NUM_CONTROLLER,
> > +	.controller_offset = mt7622_tc_offset,
> >  	.bank_data = {
> >  		{
> >  			.num_sensors = 1,
> > @@ -523,19 +547,23 @@ static int mtk_read_temp(void *data, int *temperature)
> >  };
> >  
> >  static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
> > -				  u32 apmixed_phys_base, u32 auxadc_phys_base)
> > +				  u32 apmixed_phys_base, u32 auxadc_phys_base,
> > +				  int ctrl_id)
> >  {
> >  	struct mtk_thermal_bank *bank = &mt->banks[num];
> >  	const struct mtk_thermal_data *conf = mt->conf;
> >  	int i;
> >  
> > +	int offset = mt->conf->controller_offset[ctrl_id];
> > +	void *controller_base = mt->thermal_base + offset;
> 
> This void * has to be at least __iomem, right?
> 
> See the report of kbuild bot, fix it and send it back.
> 
OK, I will fix the declaration and send it again.
Thanks!

> > +
> >  	bank->id = num;
> >  	bank->mt = mt;
> >  
> >  	mtk_thermal_get_bank(bank);
> >  
> >  	/* bus clock 66M counting unit is 12 * 15.15ns * 256 = 46.540us */
> > -	writel(TEMP_MONCTL1_PERIOD_UNIT(12), mt->thermal_base + TEMP_MONCTL1);
> > +	writel(TEMP_MONCTL1_PERIOD_UNIT(12), controller_base + TEMP_MONCTL1);
> >  
> >  	/*
> >  	 * filt interval is 1 * 46.540us = 46.54us,
> > @@ -543,21 +571,21 @@ static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
> >  	 */
> >  	writel(TEMP_MONCTL2_FILTER_INTERVAL(1) |
> >  			TEMP_MONCTL2_SENSOR_INTERVAL(429),
> > -			mt->thermal_base + TEMP_MONCTL2);
> > +			controller_base + TEMP_MONCTL2);
> >  
> >  	/* poll is set to 10u */
> >  	writel(TEMP_AHBPOLL_ADC_POLL_INTERVAL(768),
> > -	       mt->thermal_base + TEMP_AHBPOLL);
> > +	       controller_base + TEMP_AHBPOLL);
> >  
> >  	/* temperature sampling control, 1 sample */
> > -	writel(0x0, mt->thermal_base + TEMP_MSRCTL0);
> > +	writel(0x0, controller_base + TEMP_MSRCTL0);
> >  
> >  	/* exceed this polling time, IRQ would be inserted */
> > -	writel(0xffffffff, mt->thermal_base + TEMP_AHBTO);
> > +	writel(0xffffffff, controller_base + TEMP_AHBTO);
> >  
> >  	/* number of interrupts per event, 1 is enough */
> > -	writel(0x0, mt->thermal_base + TEMP_MONIDET0);
> > -	writel(0x0, mt->thermal_base + TEMP_MONIDET1);
> > +	writel(0x0, controller_base + TEMP_MONIDET0);
> > +	writel(0x0, controller_base + TEMP_MONIDET1);
> >  
> >  	/*
> >  	 * The MT8173 thermal controller does not have its own ADC. Instead it
> > @@ -572,44 +600,44 @@ static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
> >  	 * this value will be stored to TEMP_PNPMUXADDR (TEMP_SPARE0)
> >  	 * automatically by hw
> >  	 */
> > -	writel(BIT(conf->auxadc_channel), mt->thermal_base + TEMP_ADCMUX);
> > +	writel(BIT(conf->auxadc_channel), controller_base + TEMP_ADCMUX);
> >  
> >  	/* AHB address for auxadc mux selection */
> >  	writel(auxadc_phys_base + AUXADC_CON1_CLR_V,
> > -	       mt->thermal_base + TEMP_ADCMUXADDR);
> > +	       controller_base + TEMP_ADCMUXADDR);
> >  
> >  	/* AHB address for pnp sensor mux selection */
> >  	writel(apmixed_phys_base + APMIXED_SYS_TS_CON1,
> > -	       mt->thermal_base + TEMP_PNPMUXADDR);
> > +	       controller_base + TEMP_PNPMUXADDR);
> >  
> >  	/* AHB value for auxadc enable */
> > -	writel(BIT(conf->auxadc_channel), mt->thermal_base + TEMP_ADCEN);
> > +	writel(BIT(conf->auxadc_channel), controller_base + TEMP_ADCEN);
> >  
> >  	/* AHB address for auxadc enable (channel 0 immediate mode selected) */
> >  	writel(auxadc_phys_base + AUXADC_CON1_SET_V,
> > -	       mt->thermal_base + TEMP_ADCENADDR);
> > +	       controller_base + TEMP_ADCENADDR);
> >  
> >  	/* AHB address for auxadc valid bit */
> >  	writel(auxadc_phys_base + AUXADC_DATA(conf->auxadc_channel),
> > -	       mt->thermal_base + TEMP_ADCVALIDADDR);
> > +	       controller_base + TEMP_ADCVALIDADDR);
> >  
> >  	/* AHB address for auxadc voltage output */
> >  	writel(auxadc_phys_base + AUXADC_DATA(conf->auxadc_channel),
> > -	       mt->thermal_base + TEMP_ADCVOLTADDR);
> > +	       controller_base + TEMP_ADCVOLTADDR);
> >  
> >  	/* read valid & voltage are at the same register */
> > -	writel(0x0, mt->thermal_base + TEMP_RDCTRL);
> > +	writel(0x0, controller_base + TEMP_RDCTRL);
> >  
> >  	/* indicate where the valid bit is */
> >  	writel(TEMP_ADCVALIDMASK_VALID_HIGH | TEMP_ADCVALIDMASK_VALID_POS(12),
> > -	       mt->thermal_base + TEMP_ADCVALIDMASK);
> > +	       controller_base + TEMP_ADCVALIDMASK);
> >  
> >  	/* no shift */
> > -	writel(0x0, mt->thermal_base + TEMP_ADCVOLTAGESHIFT);
> > +	writel(0x0, controller_base + TEMP_ADCVOLTAGESHIFT);
> >  
> >  	/* enable auxadc mux write transaction */
> >  	writel(TEMP_ADCWRITECTRL_ADC_MUX_WRITE,
> > -	       mt->thermal_base + TEMP_ADCWRITECTRL);
> > +		controller_base + TEMP_ADCWRITECTRL);
> >  
> >  	for (i = 0; i < conf->bank_data[num].num_sensors; i++)
> >  		writel(conf->sensor_mux_values[conf->bank_data[num].sensors[i]],
> > @@ -617,11 +645,11 @@ static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
> >  		       conf->adcpnp[conf->bank_data[num].sensors[i]]);
> >  
> >  	writel((1 << conf->bank_data[num].num_sensors) - 1,
> > -	       mt->thermal_base + TEMP_MONCTL0);
> > +	       controller_base + TEMP_MONCTL0);
> >  
> >  	writel(TEMP_ADCWRITECTRL_ADC_PNP_WRITE |
> >  	       TEMP_ADCWRITECTRL_ADC_MUX_WRITE,
> > -	       mt->thermal_base + TEMP_ADCWRITECTRL);
> > +	       controller_base + TEMP_ADCWRITECTRL);
> >  
> >  	mtk_thermal_put_bank(bank);
> >  }
> > @@ -737,7 +765,7 @@ static int mtk_thermal_get_calibration_data(struct device *dev,
> >  
> >  static int mtk_thermal_probe(struct platform_device *pdev)
> >  {
> > -	int ret, i;
> > +	int ret, i, ctrl_id;
> >  	struct device_node *auxadc, *apmixedsys, *np = pdev->dev.of_node;
> >  	struct mtk_thermal *mt;
> >  	struct resource *res;
> > @@ -817,9 +845,10 @@ static int mtk_thermal_probe(struct platform_device *pdev)
> >  		goto err_disable_clk_auxadc;
> >  	}
> >  
> > -	for (i = 0; i < mt->conf->num_banks; i++)
> > -		mtk_thermal_init_bank(mt, i, apmixed_phys_base,
> > -				      auxadc_phys_base);
> > +	for (ctrl_id = 0; ctrl_id < mt->conf->num_controller ; ctrl_id++)
> > +		for (i = 0; i < mt->conf->num_banks; i++)
> > +			mtk_thermal_init_bank(mt, i, apmixed_phys_base,
> > +					      auxadc_phys_base, ctrl_id);
> >  
> >  	platform_set_drvdata(pdev, mt);
> >  
> > -- 
> > 1.9.1
> > 



_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

end of thread, back to index

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-01  7:38 [PATCH 0/7] Add Mediatek thermal dirver for mt8183 michael.kao
2019-02-01  7:38 ` [PATCH 1/7] thermal: mediatek: fix register index error michael.kao
2019-02-04 17:24   ` Matthias Brugger
2019-02-12  8:20     ` Michael Kao
2019-02-01  7:38 ` [PATCH 2/7] thermal: mediatek: add common index of vts settings michael.kao
2019-02-01  7:38 ` [PATCH 3/7] thermal: mediatek: add calibration item michael.kao
2019-02-04 17:31   ` Matthias Brugger
2019-02-06  0:48     ` Eduardo Valentin
2019-02-01  7:38 ` [PATCH 4/7] thermal: mediatek: add thermal controller offset michael.kao
2019-02-06  0:53   ` Eduardo Valentin
2019-02-12  9:55     ` Michael Kao
2019-02-01  7:38 ` [PATCH 5/7] thermal: mediatek: add flag for bank selection michael.kao
2019-02-01  7:38 ` [PATCH 6/7] dt-bindings: thermal: add binding document for mt8183 thermal controller michael.kao
2019-02-01  7:38 ` [PATCH 7/7] thermal: mediatek: add support for MT8183 michael.kao

Linux-ARM-Kernel Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-arm-kernel/0 linux-arm-kernel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-arm-kernel linux-arm-kernel/ https://lore.kernel.org/linux-arm-kernel \
		linux-arm-kernel@lists.infradead.org infradead-linux-arm-kernel@archiver.kernel.org
	public-inbox-index linux-arm-kernel


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.infradead.lists.linux-arm-kernel


AGPL code for this site: git clone https://public-inbox.org/ public-inbox