2019-08-10 05:31:04

by Frank Lee

[permalink] [raw]
Subject: [PATCH v5 00/18] add thermal driver for h6

This patchset add support for A64, H3, H5, H6 and R40 thermal sensor.

Thx to Icenowy and Vasily.

BTY, do a cleanup in thermal makfile.

Icenowy Zheng (3):
thermal: sun8i: allow to use custom temperature calculation function
thermal: sun8i: add support for Allwinner H5 thermal sensor
thermal: sun8i: add support for Allwinner R40 thermal sensor

Vasily Khoruzhick (1):
thermal: sun8i: add thermal driver for A64

Yangtao Li (14):
thermal: sun8i: add thermal driver for h6
dt-bindings: thermal: add binding document for h6 thermal controller
thermal: fix indentation in makefile
thermal: sun8i: get ths sensor number from device compatible
thermal: sun8i: rework for sun8i_ths_get_temp()
thermal: sun8i: get ths init func from device compatible
thermal: sun8i: rework for ths irq handler func
thermal: sun8i: support mod clocks
thermal: sun8i: rework for ths calibrate func
dt-bindings: thermal: add binding document for h3 thermal controller
thermal: sun8i: add thermal driver for h3
dt-bindings: thermal: add binding document for a64 thermal controller
dt-bindings: thermal: add binding document for h5 thermal controller
dt-bindings: thermal: add binding document for r40 thermal controller

.../bindings/thermal/sun8i-thermal.yaml | 157 +++++
MAINTAINERS | 7 +
drivers/thermal/Kconfig | 14 +
drivers/thermal/Makefile | 9 +-
drivers/thermal/sun8i_thermal.c | 596 ++++++++++++++++++
5 files changed, 779 insertions(+), 4 deletions(-)
create mode 100644 Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
create mode 100644 drivers/thermal/sun8i_thermal.c

---
v5:
-add more support
-some trival fix
---
2.17.1


2019-08-10 05:31:05

by Frank Lee

[permalink] [raw]
Subject: [PATCH v5 04/18] thermal: sun8i: get ths sensor number from device compatible

For different socs, the number of ths sensors is different.
So we need to do some work in order to support more soc.

Signed-off-by: Yangtao Li <[email protected]>
---
drivers/thermal/sun8i_thermal.c | 28 ++++++++++++++++++++--------
1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/drivers/thermal/sun8i_thermal.c b/drivers/thermal/sun8i_thermal.c
index 2ce36fa3fec3..e9c2acbaac74 100644
--- a/drivers/thermal/sun8i_thermal.c
+++ b/drivers/thermal/sun8i_thermal.c
@@ -22,7 +22,6 @@

#define MAX_SENSOR_NUM 4

-#define SUN50I_H6_SENSOR_NUM 2
#define SUN50I_H6_OFFSET -2794
#define SUN50I_H6_SCALE -67

@@ -57,7 +56,12 @@ struct tsensor {
int id;
};

+struct ths_thermal_chip {
+ int sensor_num;
+};
+
struct ths_device {
+ const struct ths_thermal_chip *chip;
struct device *dev;
struct regmap *regmap;
struct reset_control *reset;
@@ -117,7 +121,7 @@ static irqreturn_t sun50i_h6_irq_thread(int irq, void *data)

regmap_read(tmdev->regmap, SUN50I_H6_THS_DIS, &state);

- for (i = 0; i < SUN50I_H6_SENSOR_NUM; i++) {
+ for (i = 0; i < tmdev->chip->sensor_num; i++) {

if (state & SUN50I_H6_THS_DATA_IRQ_STS(i)) {
/* clear data irq pending */
@@ -167,7 +171,7 @@ static int sun50i_ths_calibrate(struct ths_device *tmdev)
goto out;
}

- if (!caldata[0] || callen < 2 + 2 * SUN50I_H6_SENSOR_NUM) {
+ if (!caldata[0] || callen < 2 + 2 * tmdev->chip->sensor_num) {
ret = -EINVAL;
goto out_free;
}
@@ -190,7 +194,7 @@ static int sun50i_ths_calibrate(struct ths_device *tmdev)
*/
ft_temp = caldata[0] & FT_TEMP_MASK;

- for (i = 0; i < SUN50I_H6_SENSOR_NUM; i++) {
+ for (i = 0; i < tmdev->chip->sensor_num; i++) {
int reg = (int)caldata[i + 1];
int sensor_temp = sun8i_ths_reg2temp(tmdev, reg);
int delta, cdata, offset;
@@ -297,10 +301,10 @@ static int sun50i_h6_thermal_init(struct ths_device *tmdev)
regmap_write(tmdev->regmap, SUN50I_H6_THS_PC,
SUN50I_H6_THS_PC_TEMP_PERIOD(58));
/* enable sensor */
- val = GENMASK(SUN50I_H6_SENSOR_NUM - 1, 0);
+ val = GENMASK(tmdev->chip->sensor_num - 1, 0);
regmap_write(tmdev->regmap, SUN50I_H6_THS_ENABLE, val);
/* thermal data interrupt enable */
- val = GENMASK(SUN50I_H6_SENSOR_NUM - 1, 0);
+ val = GENMASK(tmdev->chip->sensor_num - 1, 0);
regmap_write(tmdev->regmap, SUN50I_H6_THS_DIC, val);

return 0;
@@ -311,7 +315,7 @@ static int sun8i_ths_register(struct ths_device *tmdev)
struct thermal_zone_device *tzd;
int i;

- for (i = 0; i < SUN50I_H6_SENSOR_NUM; i++) {
+ for (i = 0; i < tmdev->chip->sensor_num; i++) {
tmdev->sensor[i].tmdev = tmdev;
tmdev->sensor[i].id = i;
tmdev->sensor[i].tzd =
@@ -337,6 +341,10 @@ static int sun8i_ths_probe(struct platform_device *pdev)
return -ENOMEM;

tmdev->dev = dev;
+ tmdev->chip = of_device_get_match_data(&pdev->dev);
+ if (!tmdev->chip)
+ return -EINVAL;
+
platform_set_drvdata(pdev, tmdev);

ret = sun8i_ths_resource_init(tmdev);
@@ -379,8 +387,12 @@ static int sun8i_ths_remove(struct platform_device *pdev)
return 0;
}

+static const struct ths_thermal_chip sun50i_h6_ths = {
+ .sensor_num = 2,
+};
+
static const struct of_device_id of_ths_match[] = {
- { .compatible = "allwinner,sun50i-h6-ths"},
+ { .compatible = "allwinner,sun50i-h6-ths", .data = &sun50i_h6_ths },
{ /* sentinel */ },
};
MODULE_DEVICE_TABLE(of, of_ths_match);
--
2.17.1

2019-08-10 05:31:07

by Frank Lee

[permalink] [raw]
Subject: [PATCH v5 09/18] thermal: sun8i: rework for ths calibrate func

Here, we do something to prepare for the subsequent
support of multiple platforms.

1) rename sun50i_ths_calibrate to sun8i_ths_calibrate, because
this function should be suitable for all platforms now.

2) introduce calibrate callback to mask calibration method
differences.

Signed-off-by: Yangtao Li <[email protected]>
---
drivers/thermal/sun8i_thermal.c | 86 ++++++++++++++++++---------------
1 file changed, 48 insertions(+), 38 deletions(-)

diff --git a/drivers/thermal/sun8i_thermal.c b/drivers/thermal/sun8i_thermal.c
index 6f4294c2aba7..47c20c4c69e7 100644
--- a/drivers/thermal/sun8i_thermal.c
+++ b/drivers/thermal/sun8i_thermal.c
@@ -60,6 +60,8 @@ struct ths_thermal_chip {
int scale;
int ft_deviation;
int temp_data_base;
+ int (*calibrate)(struct ths_device *tmdev,
+ u16 *caldata, int callen);
int (*init)(struct ths_device *tmdev);
int (*irq_ack)(struct ths_device *tmdev);
};
@@ -152,45 +154,14 @@ static irqreturn_t sun8i_irq_thread(int irq, void *data)
return IRQ_HANDLED;
}

-static int sun50i_ths_calibrate(struct ths_device *tmdev)
+static int sun50i_h6_ths_calibrate(struct ths_device *tmdev,
+ u16 *caldata, int callen)
{
- struct nvmem_cell *calcell;
struct device *dev = tmdev->dev;
- u16 *caldata;
- size_t callen;
- int ft_temp;
- int i, ret = 0;
-
- calcell = devm_nvmem_cell_get(dev, "calib");
- if (IS_ERR(calcell)) {
- if (PTR_ERR(calcell) == -EPROBE_DEFER)
- return -EPROBE_DEFER;
- /*
- * Even if the external calibration data stored in sid is
- * not accessible, the THS hardware can still work, although
- * the data won't be so accurate.
- *
- * The default value of calibration register is 0x800 for
- * every sensor, and the calibration value is usually 0x7xx
- * or 0x8xx, so they won't be away from the default value
- * for a lot.
- *
- * So here we do not return error if the calibartion data is
- * not available, except the probe needs deferring.
- */
- goto out;
- }
+ int i, ft_temp;

- caldata = nvmem_cell_read(calcell, &callen);
- if (IS_ERR(caldata)) {
- ret = PTR_ERR(caldata);
- goto out;
- }
-
- if (!caldata[0] || callen < 2 + 2 * tmdev->chip->sensor_num) {
- ret = -EINVAL;
- goto out_free;
- }
+ if (!caldata[0] || callen < 2 + 2 * tmdev->chip->sensor_num)
+ return -EINVAL;

/*
* efuse layout:
@@ -245,7 +216,45 @@ static int sun50i_ths_calibrate(struct ths_device *tmdev)
cdata << offset);
}

-out_free:
+ return 0;
+}
+
+static int sun8i_ths_calibrate(struct ths_device *tmdev)
+{
+ struct nvmem_cell *calcell;
+ struct device *dev = tmdev->dev;
+ u16 *caldata;
+ size_t callen;
+ int ret = 0;
+
+ calcell = devm_nvmem_cell_get(dev, "calib");
+ if (IS_ERR(calcell)) {
+ if (PTR_ERR(calcell) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+ /*
+ * Even if the external calibration data stored in sid is
+ * not accessible, the THS hardware can still work, although
+ * the data won't be so accurate.
+ *
+ * The default value of calibration register is 0x800 for
+ * every sensor, and the calibration value is usually 0x7xx
+ * or 0x8xx, so they won't be away from the default value
+ * for a lot.
+ *
+ * So here we do not return error if the calibartion data is
+ * not available, except the probe needs deferring.
+ */
+ goto out;
+ }
+
+ caldata = nvmem_cell_read(calcell, &callen);
+ if (IS_ERR(caldata)) {
+ ret = PTR_ERR(caldata);
+ goto out;
+ }
+
+ tmdev->chip->calibrate(tmdev, caldata, callen);
+
kfree(caldata);
out:
return ret;
@@ -294,7 +303,7 @@ static int sun8i_ths_resource_init(struct ths_device *tmdev)
if (ret)
goto bus_disable;

- ret = sun50i_ths_calibrate(tmdev);
+ ret = sun8i_ths_calibrate(tmdev);
if (ret)
goto mod_disable;

@@ -422,6 +431,7 @@ static const struct ths_thermal_chip sun50i_h6_ths = {
.scale = -67,
.ft_deviation = SUN50I_H6_FT_DEVIATION,
.temp_data_base = SUN50I_H6_THS_TEMP_DATA,
+ .calibrate = sun50i_h6_ths_calibrate,
.init = sun50i_h6_thermal_init,
.irq_ack = sun50i_h6_irq_ack,
};
--
2.17.1

2019-08-10 05:31:11

by Frank Lee

[permalink] [raw]
Subject: [PATCH v5 10/18] dt-bindings: thermal: add binding document for h3 thermal controller

This patch adds binding document for allwinner h3 thermal controller.

Signed-off-by: Yangtao Li <[email protected]>
---
.../bindings/thermal/sun8i-thermal.yaml | 81 ++++++++++++++++++-
1 file changed, 78 insertions(+), 3 deletions(-)

diff --git a/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml b/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
index e0973199ba3c..6624cf6b1ce8 100644
--- a/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
+++ b/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
@@ -16,6 +16,7 @@ description: |-
properties:
compatible:
enum:
+ - allwinner,sun8i-h3-ths
- allwinner,sun50i-h6-ths

reg:
@@ -28,13 +29,21 @@ properties:
maxItems: 1

clocks:
- maxItems: 1
+ minItems: 1
+ maxItems: 2
+ items:
+ - description: ths bus clock
+ - description: ths mod clock

clock-names:
- const: bus
+ minItems: 1
+ maxItems: 2
+ items:
+ - const: bus
+ - const: mod

"#thermal-sensor-cells":
- const: 1
+ enum: [ 0, 1 ]

nvmem-cells:
description: ths calibrate data
@@ -51,9 +60,75 @@ required:
- interrupts
- "#thermal-sensor-cells"

+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: allwinner,sun50i-h6-ths
+
+ then:
+ properties:
+ clocks:
+ minItems: 1
+ maxItems: 1
+
+ clock-names:
+ minItems: 1
+ maxItems: 1
+
+ else:
+ properties:
+ clocks:
+ minItems: 2
+ maxItems: 2
+
+ clock-names:
+ minItems: 2
+ maxItems: 2
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: allwinner,sun8i-h3-ths
+
+ then:
+ properties:
+ "#thermal-sensor-cells":
+ const: 0
+
+ else:
+ properties:
+ "#thermal-sensor-cells":
+ const: 1
+
additionalProperties: false

examples:
+ - |
+ ths: ths@1c25000 {
+ compatible = "allwinner,sun8i-h3-ths";
+ reg = <0x01c25000 0x400>;
+ clocks = <&ccu CLK_BUS_THS>, <&ccu CLK_THS>;
+ clock-names = "bus", "mod";
+ resets = <&ccu RST_BUS_THS>;
+ interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
+ nvmem-cells = <&tsen_calib>;
+ nvmem-cell-names = "calib";
+ #thermal-sensor-cells = <0>;
+ };
+
+ sid: sid@1c14000 {
+ compatible = "allwinner,sun8i-h3-sid";
+ reg = <0x1c14000 0x400>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+ tsen_calib: calib@34 {
+ reg = <0x34 2>;
+ };
+ };
+
- |
ths: ths@5070400 {
compatible = "allwinner,sun50i-h6-ths";
--
2.17.1

2019-08-10 05:31:24

by Frank Lee

[permalink] [raw]
Subject: [PATCH v5 13/18] thermal: sun8i: add thermal driver for A64

From: Vasily Khoruzhick <[email protected]>

Thermal sensor controller in A64 is similar to H3, but it has 3 sensors.
Extend H3 functions to add support for multiple sensors.

Signed-off-by: Vasily Khoruzhick <[email protected]>
---
drivers/thermal/sun8i_thermal.c | 12 ++++++++++++
1 file changed, 12 insertions(+)

diff --git a/drivers/thermal/sun8i_thermal.c b/drivers/thermal/sun8i_thermal.c
index 41ce8cdc0546..3259081da841 100644
--- a/drivers/thermal/sun8i_thermal.c
+++ b/drivers/thermal/sun8i_thermal.c
@@ -515,6 +515,17 @@ static const struct ths_thermal_chip sun8i_h3_ths = {
.irq_ack = sun8i_h3_irq_ack,
};

+static const struct ths_thermal_chip sun50i_a64_ths = {
+ .sensor_num = 3,
+ .offset = -2170,
+ .scale = -117,
+ .has_mod_clk = true,
+ .temp_data_base = SUN8I_THS_TEMP_DATA,
+ .calibrate = sun8i_h3_ths_calibrate,
+ .init = sun8i_h3_thermal_init,
+ .irq_ack = sun8i_h3_irq_ack,
+};
+
static const struct ths_thermal_chip sun50i_h6_ths = {
.sensor_num = 2,
.offset = -2794,
@@ -528,6 +539,7 @@ static const struct ths_thermal_chip sun50i_h6_ths = {

static const struct of_device_id of_ths_match[] = {
{ .compatible = "allwinner,sun8i-h3-ths", .data = &sun8i_h3_ths },
+ { .compatible = "allwinner,sun50i-a64-ths", .data = &sun50i_a64_ths },
{ .compatible = "allwinner,sun50i-h6-ths", .data = &sun50i_h6_ths },
{ /* sentinel */ },
};
--
2.17.1

2019-08-10 05:31:30

by Frank Lee

[permalink] [raw]
Subject: [PATCH v5 15/18] thermal: sun8i: allow to use custom temperature calculation function

From: Icenowy Zheng <[email protected]>

The H5 temperature calculation function is strange. Firstly, it's
segmented. Secondly, the formula of two sensors are different in the
second segment.

Allow to use a custom temperature calculation function, in case of
the function is complex.

Signed-off-by: Icenowy Zheng <[email protected]>
---
drivers/thermal/sun8i_thermal.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/thermal/sun8i_thermal.c b/drivers/thermal/sun8i_thermal.c
index 3259081da841..a761e2afda08 100644
--- a/drivers/thermal/sun8i_thermal.c
+++ b/drivers/thermal/sun8i_thermal.c
@@ -76,6 +76,7 @@ struct ths_thermal_chip {
u16 *caldata, int callen);
int (*init)(struct ths_device *tmdev);
int (*irq_ack)(struct ths_device *tmdev);
+ int (*calc_temp)(int id, int reg);
};

struct ths_device {
@@ -90,9 +91,12 @@ struct ths_device {

/* Temp Unit: millidegree Celsius */
static int sun8i_ths_reg2temp(struct ths_device *tmdev,
- int reg)
+ int id, int reg)
{
- return (reg + tmdev->chip->offset) * tmdev->chip->scale;
+ if (tmdev->chip->calc_temp)
+ return tmdev->chip->calc_temp(id, reg);
+ else
+ return (reg + tmdev->chip->offset) * tmdev->chip->scale;
}

static int sun8i_ths_get_temp(void *data, int *temp)
@@ -108,7 +112,7 @@ static int sun8i_ths_get_temp(void *data, int *temp)
if (!val)
return -EAGAIN;

- *temp = sun8i_ths_reg2temp(tmdev, val);
+ *temp = sun8i_ths_reg2temp(tmdev, s->id, val);
/*
* XX - According to the original sdk, there are some platforms(rarely)
* that add a fixed offset value after calculating the temperature
@@ -232,7 +236,7 @@ static int sun50i_h6_ths_calibrate(struct ths_device *tmdev,

for (i = 0; i < tmdev->chip->sensor_num; i++) {
int reg = (int)caldata[i + 1];
- int sensor_temp = sun8i_ths_reg2temp(tmdev, reg);
+ int sensor_temp = sun8i_ths_reg2temp(tmdev, i, reg);
int delta, cdata, offset;

/*
--
2.17.1

2019-08-10 05:31:39

by Frank Lee

[permalink] [raw]
Subject: [PATCH v5 16/18] thermal: sun8i: add support for Allwinner H5 thermal sensor

From: Icenowy Zheng <[email protected]>

The thermal sensor in Allwinner H5 has 2 sensors, and they have a
special segmented temperature calculation formula.

Add support for this thermal sensor.

Signed-off-by: Icenowy Zheng <[email protected]>
---
drivers/thermal/sun8i_thermal.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)

diff --git a/drivers/thermal/sun8i_thermal.c b/drivers/thermal/sun8i_thermal.c
index a761e2afda08..78a888d85cba 100644
--- a/drivers/thermal/sun8i_thermal.c
+++ b/drivers/thermal/sun8i_thermal.c
@@ -99,6 +99,16 @@ static int sun8i_ths_reg2temp(struct ths_device *tmdev,
return (reg + tmdev->chip->offset) * tmdev->chip->scale;
}

+static int sun50i_h5_calc_temp(int id, int reg)
+{
+ if (reg >= 0x500)
+ return -1191 * reg / 10 + 223000;
+ else if (!id)
+ return -1452 * reg / 10 + 259000;
+ else
+ return -1590 * reg / 10 + 276000;
+}
+
static int sun8i_ths_get_temp(void *data, int *temp)
{
struct tsensor *s = data;
@@ -530,6 +540,16 @@ static const struct ths_thermal_chip sun50i_a64_ths = {
.irq_ack = sun8i_h3_irq_ack,
};

+static const struct ths_thermal_chip sun50i_h5_ths = {
+ .sensor_num = 2,
+ .has_mod_clk = true,
+ .temp_data_base = SUN8I_THS_TEMP_DATA,
+ .calibrate = sun8i_h3_ths_calibrate,
+ .init = sun8i_h3_thermal_init,
+ .irq_ack = sun8i_h3_irq_ack,
+ .calc_temp = sun50i_h5_calc_temp,
+};
+
static const struct ths_thermal_chip sun50i_h6_ths = {
.sensor_num = 2,
.offset = -2794,
@@ -544,6 +564,7 @@ static const struct ths_thermal_chip sun50i_h6_ths = {
static const struct of_device_id of_ths_match[] = {
{ .compatible = "allwinner,sun8i-h3-ths", .data = &sun8i_h3_ths },
{ .compatible = "allwinner,sun50i-a64-ths", .data = &sun50i_a64_ths },
+ { .compatible = "allwinner,sun50i-h5-ths", .data = &sun50i_h5_ths },
{ .compatible = "allwinner,sun50i-h6-ths", .data = &sun50i_h6_ths },
{ /* sentinel */ },
};
--
2.17.1

2019-08-10 05:31:45

by Frank Lee

[permalink] [raw]
Subject: [PATCH v5 17/18] dt-bindings: thermal: add binding document for r40 thermal controller

This patch adds binding document for allwinner r40 thermal controller.

Signed-off-by: Yangtao Li <[email protected]>
---
Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml | 1 +
1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml b/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
index 2e28f5b33d33..28c438d3bfea 100644
--- a/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
+++ b/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
@@ -17,6 +17,7 @@ properties:
compatible:
enum:
- allwinner,sun8i-h3-ths
+ - allwinner,sun8i-r40-ths
- allwinner,sun50i-a64-ths
- allwinner,sun50i-h5-ths
- allwinner,sun50i-h6-ths
--
2.17.1

2019-08-10 05:31:59

by Frank Lee

[permalink] [raw]
Subject: [PATCH v5 18/18] thermal: sun8i: add support for Allwinner R40 thermal sensor

From: Icenowy Zheng <[email protected]>

The thermal sensor in Allwinner R40 SoC is quite similar to the one in
Allwinner A64 SoC, with only slightly different temperature calculation
formula.

Signed-off-by: Icenowy Zheng <[email protected]>
---
drivers/thermal/sun8i_thermal.c | 12 ++++++++++++
1 file changed, 12 insertions(+)

diff --git a/drivers/thermal/sun8i_thermal.c b/drivers/thermal/sun8i_thermal.c
index 78a888d85cba..0de9a56c3775 100644
--- a/drivers/thermal/sun8i_thermal.c
+++ b/drivers/thermal/sun8i_thermal.c
@@ -529,6 +529,17 @@ static const struct ths_thermal_chip sun8i_h3_ths = {
.irq_ack = sun8i_h3_irq_ack,
};

+static const struct ths_thermal_chip sun8i_r40_ths = {
+ .sensor_num = 3,
+ .offset = -2222,
+ .scale = -113,
+ .has_mod_clk = true,
+ .temp_data_base = SUN8I_THS_TEMP_DATA,
+ .calibrate = sun8i_h3_ths_calibrate,
+ .init = sun8i_h3_thermal_init,
+ .irq_ack = sun8i_h3_irq_ack,
+};
+
static const struct ths_thermal_chip sun50i_a64_ths = {
.sensor_num = 3,
.offset = -2170,
@@ -563,6 +574,7 @@ static const struct ths_thermal_chip sun50i_h6_ths = {

static const struct of_device_id of_ths_match[] = {
{ .compatible = "allwinner,sun8i-h3-ths", .data = &sun8i_h3_ths },
+ { .compatible = "allwinner,sun8i-r40-ths", .data = &sun8i_r40_ths },
{ .compatible = "allwinner,sun50i-a64-ths", .data = &sun50i_a64_ths },
{ .compatible = "allwinner,sun50i-h5-ths", .data = &sun50i_h5_ths },
{ .compatible = "allwinner,sun50i-h6-ths", .data = &sun50i_h6_ths },
--
2.17.1

2019-08-10 05:32:26

by Frank Lee

[permalink] [raw]
Subject: [PATCH v5 11/18] thermal: sun8i: add thermal driver for h3

This patch adds the support for allwinner h3 thermal sensor.

Signed-off-by: Yangtao Li <[email protected]>
---
drivers/thermal/sun8i_thermal.c | 91 +++++++++++++++++++++++++++++++++
1 file changed, 91 insertions(+)

diff --git a/drivers/thermal/sun8i_thermal.c b/drivers/thermal/sun8i_thermal.c
index 47c20c4c69e7..41ce8cdc0546 100644
--- a/drivers/thermal/sun8i_thermal.c
+++ b/drivers/thermal/sun8i_thermal.c
@@ -27,6 +27,14 @@
#define TEMP_TO_REG 672
#define CALIBRATE_DEFAULT 0x800

+#define SUN8I_THS_CTRL0 0x00
+#define SUN8I_THS_CTRL2 0x40
+#define SUN8I_THS_IC 0x44
+#define SUN8I_THS_IS 0x48
+#define SUN8I_THS_MFC 0x70
+#define SUN8I_THS_TEMP_CALIB 0x74
+#define SUN8I_THS_TEMP_DATA 0x80
+
#define SUN50I_THS_CTRL0 0x00
#define SUN50I_H6_THS_ENABLE 0x04
#define SUN50I_H6_THS_PC 0x08
@@ -36,6 +44,10 @@
#define SUN50I_H6_THS_TEMP_CALIB 0xa0
#define SUN50I_H6_THS_TEMP_DATA 0xc0

+#define SUN8I_THS_CTRL0_T_ACQ0(x) (GENMASK(15, 0) & (x))
+#define SUN8I_THS_CTRL2_T_ACQ1(x) ((GENMASK(15, 0) & (x)) << 16)
+#define SUN8I_THS_DATA_IRQ_STS(x) BIT(x + 8)
+
#define SUN50I_THS_CTRL0_T_ACQ(x) ((GENMASK(15, 0) & (x)) << 16)
#define SUN50I_THS_FILTER_EN BIT(2)
#define SUN50I_THS_FILTER_TYPE(x) (GENMASK(1, 0) & (x))
@@ -121,6 +133,23 @@ static const struct regmap_config config = {
.fast_io = true,
};

+static int sun8i_h3_irq_ack(struct ths_device *tmdev)
+{
+ int i, state, ret = 0;
+
+ regmap_read(tmdev->regmap, SUN8I_THS_IS, &state);
+
+ for (i = 0; i < tmdev->chip->sensor_num; i++) {
+ if (state & SUN8I_THS_DATA_IRQ_STS(i)) {
+ regmap_write(tmdev->regmap, SUN8I_THS_IS,
+ SUN8I_THS_DATA_IRQ_STS(i));
+ ret |= BIT(i);
+ }
+ }
+
+ return ret;
+}
+
static int sun50i_h6_irq_ack(struct ths_device *tmdev)
{
int i, state, ret = 0;
@@ -154,6 +183,26 @@ static irqreturn_t sun8i_irq_thread(int irq, void *data)
return IRQ_HANDLED;
}

+static int sun8i_h3_ths_calibrate(struct ths_device *tmdev,
+ u16 *caldata, int callen)
+{
+ int i;
+
+ if (!caldata[0] || callen < 2 * tmdev->chip->sensor_num)
+ return -EINVAL;
+
+ for (i = 0; i < tmdev->chip->sensor_num; i++) {
+ int offset = (i % 2) << 4;
+
+ regmap_update_bits(tmdev->regmap,
+ SUN8I_THS_TEMP_CALIB + (4 * (i >> 1)),
+ 0xfff << offset,
+ caldata[i] << offset);
+ }
+
+ return 0;
+}
+
static int sun50i_h6_ths_calibrate(struct ths_device *tmdev,
u16 *caldata, int callen)
{
@@ -319,6 +368,36 @@ static int sun8i_ths_resource_init(struct ths_device *tmdev)
return ret;
}

+static int sun8i_h3_thermal_init(struct ths_device *tmdev)
+{
+ int val;
+
+ /* average over 4 samples */
+ regmap_write(tmdev->regmap, SUN8I_THS_MFC,
+ SUN50I_THS_FILTER_EN |
+ SUN50I_THS_FILTER_TYPE(1));
+ /*
+ * period = (x + 1) * 4096 / clkin; ~10ms
+ * enable data interrupt
+ */
+ val = GENMASK(7 + tmdev->chip->sensor_num, 8);
+ regmap_write(tmdev->regmap, SUN8I_THS_IC,
+ SUN50I_H6_THS_PC_TEMP_PERIOD(58) | val);
+ /*
+ * clkin = 24MHz
+ * T acquire = clkin / (x + 1)
+ * = 20us
+ * enable sensor
+ */
+ regmap_write(tmdev->regmap, SUN8I_THS_CTRL0,
+ SUN8I_THS_CTRL0_T_ACQ0(479));
+ val = GENMASK(tmdev->chip->sensor_num - 1, 0);
+ regmap_write(tmdev->regmap, SUN8I_THS_CTRL2,
+ SUN8I_THS_CTRL2_T_ACQ1(479) | val);
+
+ return 0;
+}
+
static int sun50i_h6_thermal_init(struct ths_device *tmdev)
{
int val;
@@ -425,6 +504,17 @@ static int sun8i_ths_remove(struct platform_device *pdev)
return 0;
}

+static const struct ths_thermal_chip sun8i_h3_ths = {
+ .sensor_num = 1,
+ .offset = -1794,
+ .scale = -121,
+ .has_mod_clk = true,
+ .temp_data_base = SUN8I_THS_TEMP_DATA,
+ .calibrate = sun8i_h3_ths_calibrate,
+ .init = sun8i_h3_thermal_init,
+ .irq_ack = sun8i_h3_irq_ack,
+};
+
static const struct ths_thermal_chip sun50i_h6_ths = {
.sensor_num = 2,
.offset = -2794,
@@ -437,6 +527,7 @@ static const struct ths_thermal_chip sun50i_h6_ths = {
};

static const struct of_device_id of_ths_match[] = {
+ { .compatible = "allwinner,sun8i-h3-ths", .data = &sun8i_h3_ths },
{ .compatible = "allwinner,sun50i-h6-ths", .data = &sun50i_h6_ths },
{ /* sentinel */ },
};
--
2.17.1

2019-08-10 05:32:31

by Frank Lee

[permalink] [raw]
Subject: [PATCH v5 12/18] dt-bindings: thermal: add binding document for a64 thermal controller

This patch adds binding document for allwinner a64 thermal controller.

Signed-off-by: Yangtao Li <[email protected]>
---
Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml | 1 +
1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml b/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
index 6624cf6b1ce8..f935b4fab8ec 100644
--- a/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
+++ b/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
@@ -17,6 +17,7 @@ properties:
compatible:
enum:
- allwinner,sun8i-h3-ths
+ - allwinner,sun50i-a64-ths
- allwinner,sun50i-h6-ths

reg:
--
2.17.1

2019-08-10 05:32:40

by Frank Lee

[permalink] [raw]
Subject: [PATCH v5 14/18] dt-bindings: thermal: add binding document for h5 thermal controller

This patch adds binding document for allwinner h5 thermal controller.

Signed-off-by: Yangtao Li <[email protected]>
---
Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml | 1 +
1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml b/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
index f935b4fab8ec..2e28f5b33d33 100644
--- a/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
+++ b/Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
@@ -18,6 +18,7 @@ properties:
enum:
- allwinner,sun8i-h3-ths
- allwinner,sun50i-a64-ths
+ - allwinner,sun50i-h5-ths
- allwinner,sun50i-h6-ths

reg:
--
2.17.1

2019-08-11 21:15:20

by Clément Péron

[permalink] [raw]
Subject: Re: [PATCH v5 00/18] add thermal driver for h6

Hi Yangtao,

On 10/08/2019 07:28, Yangtao Li wrote:
> This patchset add support for A64, H3, H5, H6 and R40 thermal sensor.

Could you add the device-tree configuration in the same series?
This will allow user to test it.

Thanks,
Clément

>
> Thx to Icenowy and Vasily.
>
> BTY, do a cleanup in thermal makfile.
>
> Icenowy Zheng (3):
> thermal: sun8i: allow to use custom temperature calculation function
> thermal: sun8i: add support for Allwinner H5 thermal sensor
> thermal: sun8i: add support for Allwinner R40 thermal sensor
>
> Vasily Khoruzhick (1):
> thermal: sun8i: add thermal driver for A64
>
> Yangtao Li (14):
> thermal: sun8i: add thermal driver for h6
> dt-bindings: thermal: add binding document for h6 thermal controller
> thermal: fix indentation in makefile
> thermal: sun8i: get ths sensor number from device compatible
> thermal: sun8i: rework for sun8i_ths_get_temp()
> thermal: sun8i: get ths init func from device compatible
> thermal: sun8i: rework for ths irq handler func
> thermal: sun8i: support mod clocks
> thermal: sun8i: rework for ths calibrate func
> dt-bindings: thermal: add binding document for h3 thermal controller
> thermal: sun8i: add thermal driver for h3
> dt-bindings: thermal: add binding document for a64 thermal controller
> dt-bindings: thermal: add binding document for h5 thermal controller
> dt-bindings: thermal: add binding document for r40 thermal controller
>
> .../bindings/thermal/sun8i-thermal.yaml | 157 +++++
> MAINTAINERS | 7 +
> drivers/thermal/Kconfig | 14 +
> drivers/thermal/Makefile | 9 +-
> drivers/thermal/sun8i_thermal.c | 596 ++++++++++++++++++
> 5 files changed, 779 insertions(+), 4 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
> create mode 100644 drivers/thermal/sun8i_thermal.c
> ---
> v5:
> -add more support
> -some trival fix
> ---
> 2.17.1
>
>

2019-08-12 08:51:33

by Maxime Ripard

[permalink] [raw]
Subject: Re: [PATCH v5 15/18] thermal: sun8i: allow to use custom temperature calculation function

Hi,

On Sat, Aug 10, 2019 at 05:28:26AM +0000, Yangtao Li wrote:
> From: Icenowy Zheng <[email protected]>
>
> The H5 temperature calculation function is strange. Firstly, it's
> segmented. Secondly, the formula of two sensors are different in the
> second segment.
>
> Allow to use a custom temperature calculation function, in case of
> the function is complex.
>
> Signed-off-by: Icenowy Zheng <[email protected]>

When you send a patch on someone else's behalf, you need to put your
Signed-off-by as well.

> ---
> drivers/thermal/sun8i_thermal.c | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/thermal/sun8i_thermal.c b/drivers/thermal/sun8i_thermal.c
> index 3259081da841..a761e2afda08 100644
> --- a/drivers/thermal/sun8i_thermal.c
> +++ b/drivers/thermal/sun8i_thermal.c
> @@ -76,6 +76,7 @@ struct ths_thermal_chip {
> u16 *caldata, int callen);
> int (*init)(struct ths_device *tmdev);
> int (*irq_ack)(struct ths_device *tmdev);
> + int (*calc_temp)(int id, int reg);
> };
>
> struct ths_device {
> @@ -90,9 +91,12 @@ struct ths_device {
>
> /* Temp Unit: millidegree Celsius */
> static int sun8i_ths_reg2temp(struct ths_device *tmdev,
> - int reg)
> + int id, int reg)
> {
> - return (reg + tmdev->chip->offset) * tmdev->chip->scale;
> + if (tmdev->chip->calc_temp)
> + return tmdev->chip->calc_temp(id, reg);
> + else
> + return (reg + tmdev->chip->offset) * tmdev->chip->scale;

You're not consistent here compared to the other callbacks you have
introduced: calibrate, init and irq_ack all need to be set and will
fail (hard) if you don't set them, yet this one will have a different
behaviour (that behaviour being to use the H6 formula, which is the
latest SoC, which is a bit odd in itself).

I guess we should either make it mandatory as the rest of the
callbacks, or document which callbacks are mandatory and which are
optional (and the behaviour when it's optional).

Maxime

--
Maxime Ripard, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


Attachments:
(No filename) (2.09 kB)
signature.asc (235.00 B)
Download all attachments

2019-08-13 00:16:50

by Frank Lee

[permalink] [raw]
Subject: Re: [PATCH v5 00/18] add thermal driver for h6

On Mon, Aug 12, 2019 at 5:14 AM Clément Péron <[email protected]> wrote:
>
> Hi Yangtao,
>
> On 10/08/2019 07:28, Yangtao Li wrote:
> > This patchset add support for A64, H3, H5, H6 and R40 thermal sensor.
>
> Could you add the device-tree configuration in the same series?
> This will allow user to test it.

Ok, it will be added later.

Yangtao

>
> Thanks,
> Clément
>
> >
> > Thx to Icenowy and Vasily.
> >
> > BTY, do a cleanup in thermal makfile.
> >
> > Icenowy Zheng (3):
> > thermal: sun8i: allow to use custom temperature calculation function
> > thermal: sun8i: add support for Allwinner H5 thermal sensor
> > thermal: sun8i: add support for Allwinner R40 thermal sensor
> >
> > Vasily Khoruzhick (1):
> > thermal: sun8i: add thermal driver for A64
> >
> > Yangtao Li (14):
> > thermal: sun8i: add thermal driver for h6
> > dt-bindings: thermal: add binding document for h6 thermal controller
> > thermal: fix indentation in makefile
> > thermal: sun8i: get ths sensor number from device compatible
> > thermal: sun8i: rework for sun8i_ths_get_temp()
> > thermal: sun8i: get ths init func from device compatible
> > thermal: sun8i: rework for ths irq handler func
> > thermal: sun8i: support mod clocks
> > thermal: sun8i: rework for ths calibrate func
> > dt-bindings: thermal: add binding document for h3 thermal controller
> > thermal: sun8i: add thermal driver for h3
> > dt-bindings: thermal: add binding document for a64 thermal controller
> > dt-bindings: thermal: add binding document for h5 thermal controller
> > dt-bindings: thermal: add binding document for r40 thermal controller
> >
> > .../bindings/thermal/sun8i-thermal.yaml | 157 +++++
> > MAINTAINERS | 7 +
> > drivers/thermal/Kconfig | 14 +
> > drivers/thermal/Makefile | 9 +-
> > drivers/thermal/sun8i_thermal.c | 596 ++++++++++++++++++
> > 5 files changed, 779 insertions(+), 4 deletions(-)
> > create mode 100644 Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
> > create mode 100644 drivers/thermal/sun8i_thermal.c
> > ---
> > v5:
> > -add more support
> > -some trival fix
> > ---
> > 2.17.1
> >
> >

2019-08-27 15:27:45

by Rob Herring

[permalink] [raw]
Subject: Re: [PATCH v5 12/18] dt-bindings: thermal: add binding document for a64 thermal controller

On Sat, 10 Aug 2019 05:28:23 +0000, Yangtao Li wrote:
> This patch adds binding document for allwinner a64 thermal controller.
>
> Signed-off-by: Yangtao Li <[email protected]>
> ---
> Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml | 1 +
> 1 file changed, 1 insertion(+)
>

Reviewed-by: Rob Herring <[email protected]>

2019-08-27 15:28:45

by Rob Herring

[permalink] [raw]
Subject: Re: [PATCH v5 10/18] dt-bindings: thermal: add binding document for h3 thermal controller

On Sat, 10 Aug 2019 05:28:21 +0000, Yangtao Li wrote:
> This patch adds binding document for allwinner h3 thermal controller.
>
> Signed-off-by: Yangtao Li <[email protected]>
> ---
> .../bindings/thermal/sun8i-thermal.yaml | 81 ++++++++++++++++++-
> 1 file changed, 78 insertions(+), 3 deletions(-)
>

Reviewed-by: Rob Herring <[email protected]>

2019-08-27 15:28:45

by Rob Herring

[permalink] [raw]
Subject: Re: [PATCH v5 17/18] dt-bindings: thermal: add binding document for r40 thermal controller

On Sat, 10 Aug 2019 05:28:28 +0000, Yangtao Li wrote:
> This patch adds binding document for allwinner r40 thermal controller.
>
> Signed-off-by: Yangtao Li <[email protected]>
> ---
> Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml | 1 +
> 1 file changed, 1 insertion(+)
>

Reviewed-by: Rob Herring <[email protected]>

2019-08-27 15:29:52

by Rob Herring

[permalink] [raw]
Subject: Re: [PATCH v5 14/18] dt-bindings: thermal: add binding document for h5 thermal controller

On Sat, 10 Aug 2019 05:28:25 +0000, Yangtao Li wrote:
> This patch adds binding document for allwinner h5 thermal controller.
>
> Signed-off-by: Yangtao Li <[email protected]>
> ---
> Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml | 1 +
> 1 file changed, 1 insertion(+)
>

Reviewed-by: Rob Herring <[email protected]>

2019-08-28 12:46:46

by Zhang, Rui

[permalink] [raw]
Subject: Re: [PATCH v5 09/18] thermal: sun8i: rework for ths calibrate func

On Sat, 2019-08-10 at 05:28 +0000, Yangtao Li wrote:
> Here, we do something to prepare for the subsequent
> support of multiple platforms.
>
> 1) rename sun50i_ths_calibrate to sun8i_ths_calibrate, because
> this function should be suitable for all platforms now.
>
> 2) introduce calibrate callback to mask calibration method
> differences.
>
> Signed-off-by: Yangtao Li <[email protected]>

IMO, patch 4/18 to patch 9/18 are all changes to a new file introduced
in patch 1/18, so why not have a prettier patch 1/18 instead of
separate patches?

thanks,
rui

> ---
> drivers/thermal/sun8i_thermal.c | 86 ++++++++++++++++++-------------
> --
> 1 file changed, 48 insertions(+), 38 deletions(-)
>
> diff --git a/drivers/thermal/sun8i_thermal.c
> b/drivers/thermal/sun8i_thermal.c
> index 6f4294c2aba7..47c20c4c69e7 100644
> --- a/drivers/thermal/sun8i_thermal.c
> +++ b/drivers/thermal/sun8i_thermal.c
> @@ -60,6 +60,8 @@ struct ths_thermal_chip {
> int scale;
> int ft_deviation;
> int temp_data_base;
> + int (*calibrate)(struct ths_device *tmdev,
> + u16 *caldata, int callen);
> int (*init)(struct ths_device *tmdev);
> int (*irq_ack)(struct ths_device *tmdev);
> };
> @@ -152,45 +154,14 @@ static irqreturn_t sun8i_irq_thread(int irq,
> void *data)
> return IRQ_HANDLED;
> }
>
> -static int sun50i_ths_calibrate(struct ths_device *tmdev)
> +static int sun50i_h6_ths_calibrate(struct ths_device *tmdev,
> + u16 *caldata, int callen)
> {
> - struct nvmem_cell *calcell;
> struct device *dev = tmdev->dev;
> - u16 *caldata;
> - size_t callen;
> - int ft_temp;
> - int i, ret = 0;
> -
> - calcell = devm_nvmem_cell_get(dev, "calib");
> - if (IS_ERR(calcell)) {
> - if (PTR_ERR(calcell) == -EPROBE_DEFER)
> - return -EPROBE_DEFER;
> - /*
> - * Even if the external calibration data stored in sid
> is
> - * not accessible, the THS hardware can still work,
> although
> - * the data won't be so accurate.
> - *
> - * The default value of calibration register is 0x800
> for
> - * every sensor, and the calibration value is usually
> 0x7xx
> - * or 0x8xx, so they won't be away from the default
> value
> - * for a lot.
> - *
> - * So here we do not return error if the calibartion
> data is
> - * not available, except the probe needs deferring.
> - */
> - goto out;
> - }
> + int i, ft_temp;
>
> - caldata = nvmem_cell_read(calcell, &callen);
> - if (IS_ERR(caldata)) {
> - ret = PTR_ERR(caldata);
> - goto out;
> - }
> -
> - if (!caldata[0] || callen < 2 + 2 * tmdev->chip->sensor_num) {
> - ret = -EINVAL;
> - goto out_free;
> - }
> + if (!caldata[0] || callen < 2 + 2 * tmdev->chip->sensor_num)
> + return -EINVAL;
>
> /*
> * efuse layout:
> @@ -245,7 +216,45 @@ static int sun50i_ths_calibrate(struct
> ths_device *tmdev)
> cdata << offset);
> }
>
> -out_free:
> + return 0;
> +}
> +
> +static int sun8i_ths_calibrate(struct ths_device *tmdev)
> +{
> + struct nvmem_cell *calcell;
> + struct device *dev = tmdev->dev;
> + u16 *caldata;
> + size_t callen;
> + int ret = 0;
> +
> + calcell = devm_nvmem_cell_get(dev, "calib");
> + if (IS_ERR(calcell)) {
> + if (PTR_ERR(calcell) == -EPROBE_DEFER)
> + return -EPROBE_DEFER;
> + /*
> + * Even if the external calibration data stored in sid
> is
> + * not accessible, the THS hardware can still work,
> although
> + * the data won't be so accurate.
> + *
> + * The default value of calibration register is 0x800
> for
> + * every sensor, and the calibration value is usually
> 0x7xx
> + * or 0x8xx, so they won't be away from the default
> value
> + * for a lot.
> + *
> + * So here we do not return error if the calibartion
> data is
> + * not available, except the probe needs deferring.
> + */
> + goto out;
> + }
> +
> + caldata = nvmem_cell_read(calcell, &callen);
> + if (IS_ERR(caldata)) {
> + ret = PTR_ERR(caldata);
> + goto out;
> + }
> +
> + tmdev->chip->calibrate(tmdev, caldata, callen);
> +
> kfree(caldata);
> out:
> return ret;
> @@ -294,7 +303,7 @@ static int sun8i_ths_resource_init(struct
> ths_device *tmdev)
> if (ret)
> goto bus_disable;
>
> - ret = sun50i_ths_calibrate(tmdev);
> + ret = sun8i_ths_calibrate(tmdev);
> if (ret)
> goto mod_disable;
>
> @@ -422,6 +431,7 @@ static const struct ths_thermal_chip
> sun50i_h6_ths = {
> .scale = -67,
> .ft_deviation = SUN50I_H6_FT_DEVIATION,
> .temp_data_base = SUN50I_H6_THS_TEMP_DATA,
> + .calibrate = sun50i_h6_ths_calibrate,
> .init = sun50i_h6_thermal_init,
> .irq_ack = sun50i_h6_irq_ack,
> };

2019-09-01 21:54:14

by Ondřej Jirman

[permalink] [raw]
Subject: Re: [PATCH v5 00/18] add thermal driver for h6

Hello Yangtao,

On Sat, Aug 10, 2019 at 05:28:11AM +0000, Yangtao Li wrote:
> This patchset add support for A64, H3, H5, H6 and R40 thermal sensor.
>
> Thx to Icenowy and Vasily.
>
> BTY, do a cleanup in thermal makfile.

I've added support for A83T and also some cleanups, according to my
feedback:

https://megous.com/git/linux/log/?h=ths-5.3

Feel free to pick up whatever you like from that tree.

For others, there are also DTS patches in that tree for H3, H5, A83T, and H6, so
that shoul make testing of this driver easier.

regards,
Ondrej

> Icenowy Zheng (3):
> thermal: sun8i: allow to use custom temperature calculation function
> thermal: sun8i: add support for Allwinner H5 thermal sensor
> thermal: sun8i: add support for Allwinner R40 thermal sensor
>
> Vasily Khoruzhick (1):
> thermal: sun8i: add thermal driver for A64
>
> Yangtao Li (14):
> thermal: sun8i: add thermal driver for h6
> dt-bindings: thermal: add binding document for h6 thermal controller
> thermal: fix indentation in makefile
> thermal: sun8i: get ths sensor number from device compatible
> thermal: sun8i: rework for sun8i_ths_get_temp()
> thermal: sun8i: get ths init func from device compatible
> thermal: sun8i: rework for ths irq handler func
> thermal: sun8i: support mod clocks
> thermal: sun8i: rework for ths calibrate func
> dt-bindings: thermal: add binding document for h3 thermal controller
> thermal: sun8i: add thermal driver for h3
> dt-bindings: thermal: add binding document for a64 thermal controller
> dt-bindings: thermal: add binding document for h5 thermal controller
> dt-bindings: thermal: add binding document for r40 thermal controller
>
> .../bindings/thermal/sun8i-thermal.yaml | 157 +++++
> MAINTAINERS | 7 +
> drivers/thermal/Kconfig | 14 +
> drivers/thermal/Makefile | 9 +-
> drivers/thermal/sun8i_thermal.c | 596 ++++++++++++++++++
> 5 files changed, 779 insertions(+), 4 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/thermal/sun8i-thermal.yaml
> create mode 100644 drivers/thermal/sun8i_thermal.c
>
> ---
> v5:
> -add more support
> -some trival fix
> ---
> 2.17.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

2019-09-02 07:30:17

by Maxime Ripard

[permalink] [raw]
Subject: Re: [PATCH v5 00/18] add thermal driver for h6

Hi,

On Sun, Sep 01, 2019 at 11:52:14PM +0200, Ondřej Jirman wrote:
> Hello Yangtao,
>
> On Sat, Aug 10, 2019 at 05:28:11AM +0000, Yangtao Li wrote:
> > This patchset add support for A64, H3, H5, H6 and R40 thermal sensor.
> >
> > Thx to Icenowy and Vasily.
> >
> > BTY, do a cleanup in thermal makfile.
>
> I've added support for A83T and also some cleanups, according to my
> feedback:
>
> https://megous.com/git/linux/log/?h=ths-5.3
>
> Feel free to pick up whatever you like from that tree.
>
> For others, there are also DTS patches in that tree for H3, H5, A83T, and H6, so
> that shoul make testing of this driver easier.

I'm not convinced that always expanding the number of SoC supported is
the best strategy to get this merged. Usually, keeping the same
feature set across version, consolidating that, and then once it's in
sending the new SoC support works best.

Maxime

--
Maxime Ripard, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

2019-09-02 11:01:09

by Ondřej Jirman

[permalink] [raw]
Subject: Re: [PATCH v5 00/18] add thermal driver for h6

Hello Maxime,

On Mon, Sep 02, 2019 at 09:27:35AM +0200, Maxime Ripard wrote:
> Hi,
>
> On Sun, Sep 01, 2019 at 11:52:14PM +0200, Ondřej Jirman wrote:
> > Hello Yangtao,
> >
> > On Sat, Aug 10, 2019 at 05:28:11AM +0000, Yangtao Li wrote:
> > > This patchset add support for A64, H3, H5, H6 and R40 thermal sensor.
> > >
> > > Thx to Icenowy and Vasily.
> > >
> > > BTY, do a cleanup in thermal makfile.
> >
> > I've added support for A83T and also some cleanups, according to my
> > feedback:
> >
> > https://megous.com/git/linux/log/?h=ths-5.3
> >
> > Feel free to pick up whatever you like from that tree.
> >
> > For others, there are also DTS patches in that tree for H3, H5, A83T, and H6, so
> > that shoul make testing of this driver easier.
>
> I'm not convinced that always expanding the number of SoC supported is
> the best strategy to get this merged. Usually, keeping the same
> feature set across version, consolidating that, and then once it's in
> sending the new SoC support works best.

That's fine and all, but I've mostly added DT descriptions for already supported
SoCs and fixed bugs in the driver, so that people can actually test the existing
driver.

I think adding DT changes will actually help get needed exposure for this
patch series.

A83T support that I added, was actually just a small change to the driver.

regards,
o.

> Maxime
>
> --
> Maxime Ripard, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
>
> _______________________________________________
> linux-arm-kernel mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

2019-11-26 19:37:01

by Vasily Khoruzhick

[permalink] [raw]
Subject: Re: [PATCH v5 00/18] add thermal driver for h6

On Mon, Sep 2, 2019 at 3:58 AM Ondřej Jirman <[email protected]> wrote:
>
> Hello Maxime,
>
> On Mon, Sep 02, 2019 at 09:27:35AM +0200, Maxime Ripard wrote:
> > Hi,
> >
> > On Sun, Sep 01, 2019 at 11:52:14PM +0200, Ondřej Jirman wrote:
> > > Hello Yangtao,
> > >
> > > On Sat, Aug 10, 2019 at 05:28:11AM +0000, Yangtao Li wrote:
> > > > This patchset add support for A64, H3, H5, H6 and R40 thermal sensor.
> > > >
> > > > Thx to Icenowy and Vasily.
> > > >
> > > > BTY, do a cleanup in thermal makfile.

Hey Yangtao,

Are there any plans for v6?

Regards,
Vasily

> > > I've added support for A83T and also some cleanups, according to my
> > > feedback:
> > >
> > > https://megous.com/git/linux/log/?h=ths-5.3
> > >
> > > Feel free to pick up whatever you like from that tree.
> > >
> > > For others, there are also DTS patches in that tree for H3, H5, A83T, and H6, so
> > > that shoul make testing of this driver easier.
> >
> > I'm not convinced that always expanding the number of SoC supported is
> > the best strategy to get this merged. Usually, keeping the same
> > feature set across version, consolidating that, and then once it's in
> > sending the new SoC support works best.
>
> That's fine and all, but I've mostly added DT descriptions for already supported
> SoCs and fixed bugs in the driver, so that people can actually test the existing
> driver.
>
> I think adding DT changes will actually help get needed exposure for this
> patch series.
>
> A83T support that I added, was actually just a small change to the driver.
>
> regards,
> o.
>
> > Maxime
> >
> > --
> > Maxime Ripard, Bootlin
> > Embedded Linux and Kernel engineering
> > https://bootlin.com
> >
> > _______________________________________________
> > linux-arm-kernel mailing list
> > [email protected]
> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
> _______________________________________________
> linux-arm-kernel mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel