Commit 63e39fca authored by Maksim Kiselev's avatar Maksim Kiselev Committed by Daniel Lezcano
Browse files

thermal/drivers/sun8i: Extend H6 calibration to support 4 sensors



The H616 SoC resembles the H6 thermal sensor controller, with a few
changes like four sensors.

Extend sun50i_h6_ths_calibrate() function to support calibration of
these sensors.

Co-developed-by: default avatarMartin Botka <martin.botka@somainline.org>
Signed-off-by: default avatarMartin Botka <martin.botka@somainline.org>
Signed-off-by: default avatarMaksim Kiselev <bigunclemax@gmail.com>
Reviewed-by: default avatarAndre Przywara <andre.przywara@arm.com>
Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
Reviewed-by: default avatarJernej Skrabec <jernej.skrabec@gmail.com>
Acked-by: default avatarVasily Khoruzhick <anarsoul@gmail.com>
Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20240219153639.179814-5-andre.przywara@arm.com
parent d7bf0a1a
Loading
Loading
Loading
Loading
+20 −8
Original line number Diff line number Diff line
@@ -222,16 +222,21 @@ static int sun50i_h6_ths_calibrate(struct ths_device *tmdev,
	struct device *dev = tmdev->dev;
	int i, ft_temp;

	if (!caldata[0] || callen < 2 + 2 * tmdev->chip->sensor_num)
	if (!caldata[0])
		return -EINVAL;

	/*
	 * efuse layout:
	 *
	 *	0   11  16	 32
	 *	+-------+-------+-------+
	 *	|temp|  |sensor0|sensor1|
	 *	+-------+-------+-------+
	 * 0      11  16     27   32     43   48    57
	 * +----------+-----------+-----------+-----------+
	 * |  temp |  |sensor0|   |sensor1|   |sensor2|   |
	 * +----------+-----------+-----------+-----------+
	 *                      ^           ^           ^
	 *                      |           |           |
	 *                      |           |           sensor3[11:8]
	 *                      |           sensor3[7:4]
	 *                      sensor3[3:0]
	 *
	 * The calibration data on the H6 is the ambient temperature and
	 * sensor values that are filled during the factory test stage.
@@ -244,9 +249,16 @@ static int sun50i_h6_ths_calibrate(struct ths_device *tmdev,
	ft_temp = (caldata[0] & FT_TEMP_MASK) * 100;

	for (i = 0; i < tmdev->chip->sensor_num; i++) {
		int sensor_reg = caldata[i + 1] & TEMP_CALIB_MASK;
		int cdata, offset;
		int sensor_temp = tmdev->chip->calc_temp(tmdev, i, sensor_reg);
		int sensor_reg, sensor_temp, cdata, offset;

		if (i == 3)
			sensor_reg = (caldata[1] >> 12)
				     | ((caldata[2] >> 12) << 4)
				     | ((caldata[3] >> 12) << 8);
		else
			sensor_reg = caldata[i + 1] & TEMP_CALIB_MASK;

		sensor_temp = tmdev->chip->calc_temp(tmdev, i, sensor_reg);

		/*
		 * Calibration data is CALIBRATE_DEFAULT - (calculated