66 lines
2.3 KiB
Diff
66 lines
2.3 KiB
Diff
diff --git a/drivers/thermal/sun8i_thermal.c b/drivers/thermal/sun8i_thermal.c
|
|
index 89e27f34a..1687497dc 100644
|
|
--- a/drivers/thermal/sun8i_thermal.c
|
|
+++ b/drivers/thermal/sun8i_thermal.c
|
|
@@ -81,7 +81,8 @@ struct ths_thermal_chip {
|
|
};
|
|
|
|
struct ths_device {
|
|
- const struct ths_thermal_chip *chip;
|
|
+// const struct ths_thermal_chip *chip;
|
|
+ struct ths_thermal_chip *chip;
|
|
struct device *dev;
|
|
struct regmap *regmap;
|
|
struct reset_control *reset;
|
|
@@ -223,6 +224,32 @@ static int sun8i_h3_ths_calibrate(struct ths_device *tmdev,
|
|
return 0;
|
|
}
|
|
|
|
+static int sun8i_h3only_ths_calibrate(struct ths_device *tmdev,
|
|
+ u16 *caldata, int callen)
|
|
+{
|
|
+ // 12.4.2023 radoslavv: meaningless code for H3 chip in sun8i_h3_ths_calibrate()
|
|
+ // 1) no need to iterate 1 sensor on h3 chip (however still another family chips needs this) => separate function for h3 chip only
|
|
+ // 2) register SUN8I_THS_TEMP_CALIB is rather to be read, than trying to "FIX" factory written value with regmap_update_bits
|
|
+ // 3) we need to read it to update .offset value => main reason for change
|
|
+ // 4) per each chip could be value slightly different, can't be predefined const in code
|
|
+
|
|
+ int val = 0;
|
|
+
|
|
+ dev_warn(tmdev->dev, "DEBUG: h3 caldata=0x%04x=%u, callen=%i\n", (*caldata), (*caldata), callen );
|
|
+
|
|
+ if (callen != 4)
|
|
+ return -EINVAL;
|
|
+
|
|
+ regmap_read(tmdev->regmap, SUN8I_THS_TEMP_CALIB, &val);
|
|
+ val &= 0xFFF; //only 12bits to use
|
|
+ caldata[0] = val;
|
|
+
|
|
+ tmdev->chip->scale = 10000/14.882; //according datasheet (= 672)
|
|
+ tmdev->chip->offset = val * tmdev->chip->scale / 10;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
static int sun50i_h6_ths_calibrate(struct ths_device *tmdev,
|
|
u16 *caldata, int callen)
|
|
{
|
|
@@ -663,14 +690,15 @@ static const struct ths_thermal_chip sun8i_a83t_ths = {
|
|
.calc_temp = sun8i_ths_calc_temp,
|
|
};
|
|
|
|
-static const struct ths_thermal_chip sun8i_h3_ths = {
|
|
+//static const struct ths_thermal_chip sun8i_h3_ths = {
|
|
+static struct ths_thermal_chip sun8i_h3_ths = {
|
|
.sensor_num = 1,
|
|
.scale = 1211,
|
|
.offset = 217000,
|
|
.has_mod_clk = true,
|
|
.has_bus_clk_reset = true,
|
|
.temp_data_base = SUN8I_THS_TEMP_DATA,
|
|
- .calibrate = sun8i_h3_ths_calibrate,
|
|
+ .calibrate = sun8i_h3only_ths_calibrate,
|
|
.init = sun8i_h3_thermal_init,
|
|
.irq_ack = sun8i_h3_irq_ack,
|
|
.calc_temp = sun8i_ths_calc_temp,
|