Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 385785c8 authored by Siddartha Mohanadoss's avatar Siddartha Mohanadoss
Browse files

thermal: msm_tsens: Check for valid status bit



Add support to read the temperature sensors valid
bit from the status register if present. This is to ensure
the last temperature data read from the status register is
a valid one. If the first read does not have a valid data
proceed to read the status register a max of three times
and choose the status code from the read that has the valid
bit set.

Also update the string of the efuse masks to align it with
the corresponding SoC's fusemap.

Change-Id: If9f96d2c29c8913f960da662060e911fea3dd036
Signed-off-by: default avatarSiddartha Mohanadoss <smohanad@codeaurora.org>
parent 62a8ead9
Loading
Loading
Loading
Loading
+212 −175
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@

#define TSENS2_SN_STATUS_ADDR(n)	((n) + 0x1044)
#define TSENS2_SN_STATUS_VALID		BIT(14)
#define TSENS2_SN_STATUS_VALID_MASK	0x4000
#define TSENS2_TRDY_ADDR(n)		((n) + 0x84)

#define TSENS_CTRL_ADDR(n)		(n)
@@ -64,7 +65,6 @@
#define TSENS_312_5_MS_MEAS_PERIOD	2
#define TSENS_MEAS_PERIOD_SHIFT		18

#define TSENS_SN_MIN_MAX_STATUS_CTRL(n)	((n) + 4)
#define TSENS_GLOBAL_CONFIG(n)		((n) + 0x34)
#define TSENS_S0_MAIN_CONFIG(n)		((n) + 0x38)
#define TSENS_SN_REMOTE_CONFIG(n)	((n) + 0x3c)
@@ -93,8 +93,8 @@

#define TSENS_8939_EEPROM(n)			((n) + 0xa0)

#define TSENS_PLUTO_EEPROM(n)			((n) + 0xd0)
#define TSENS_PLUTO_EEPROM_REDUN_SEL(n)		((n) + 0x464)
#define TSENS_8994_EEPROM(n)			((n) + 0xd0)
#define TSENS_8994_EEPROM_REDUN_SEL(n)		((n) + 0x464)
#define TSENS_REDUN_REGION1_EEPROM(n)		((n) + 0x1c0)
#define TSENS_REDUN_REGION2_EEPROM(n)		((n) + 0x1c4)
#define TSENS_REDUN_REGION3_EEPROM(n)		((n) + 0x1cc)
@@ -279,7 +279,6 @@

#define TSENS_GLOBAL_INIT_DATA		0x302f16c
#define TSENS_S0_MAIN_CFG_INIT_DATA	0x1c3
#define TSENS_SN_MIN_MAX_STATUS_CTRL_DATA	0x3ffc00
#define TSENS_SN_REMOTE_CFG_DATA	0x11c3

#define TSENS_QFPROM_BACKUP_SEL		0x3
@@ -389,83 +388,83 @@
#define TSENS7_8939_POINT2_SHIFT	6
#define TSENS8_8939_POINT2_SHIFT	18

#define TSENS_BASE0_PLUTO_MASK		0x3ff
#define TSENS_BASE1_PLUTO_MASK		0xffc00
#define TSENS_BASE1_PLUTO_SHIFT		10
#define TSENS0_OFFSET_PLUTO_MASK	0xf00000
#define TSENS0_OFFSET_PLUTO_SHIFT	20
#define TSENS1_OFFSET_PLUTO_MASK	0xf000000
#define TSENS1_OFFSET_PLUTO_SHIFT	24
#define TSENS2_OFFSET_PLUTO_MASK	0xf0000000
#define TSENS2_OFFSET_PLUTO_SHIFT	28
#define TSENS3_OFFSET_PLUTO_MASK	0xf
#define TSENS4_OFFSET_PLUTO_MASK	0xf0
#define TSENS4_OFFSET_PLUTO_SHIFT	4
#define TSENS5_OFFSET_PLUTO_MASK	0xf00
#define TSENS5_OFFSET_PLUTO_SHIFT	8
#define TSENS6_OFFSET_PLUTO_MASK	0xf000
#define TSENS6_OFFSET_PLUTO_SHIFT	12
#define TSENS7_OFFSET_PLUTO_MASK	0xf0000
#define TSENS7_OFFSET_PLUTO_SHIFT	16
#define TSENS8_OFFSET_PLUTO_MASK	0xf00000
#define TSENS8_OFFSET_PLUTO_SHIFT	20
#define TSENS9_OFFSET_PLUTO_MASK	0xf000000
#define TSENS9_OFFSET_PLUTO_SHIFT	24
#define TSENS10_OFFSET_PLUTO_MASK	0xf0000000
#define TSENS10_OFFSET_PLUTO_SHIFT	28
#define TSENS11_OFFSET_PLUTO_MASK	0xf
#define TSENS12_OFFSET_PLUTO_MASK	0xf0
#define TSENS12_OFFSET_PLUTO_SHIFT	4
#define TSENS13_OFFSET_PLUTO_MASK	0xf00
#define TSENS13_OFFSET_PLUTO_SHIFT	8
#define TSENS14_OFFSET_PLUTO_MASK	0xf000
#define TSENS14_OFFSET_PLUTO_SHIFT	12
#define TSENS15_OFFSET_PLUTO_MASK	0xf0000
#define TSENS15_OFFSET_PLUTO_SHIFT	16
#define TSENS_PLUTO_CAL_SEL_MASK	0x700000
#define TSENS_PLUTO_CAL_SEL_SHIFT	20

#define TSENS_BASE0_PLUTO_REDUN_MASK		0x7fe00000
#define TSENS_BASE0_PLUTO_REDUN_MASK_SHIFT	21
#define TSENS_BASE1_BIT0_PLUTO_REDUN_MASK	0x80000000
#define TSENS_BASE1_BIT0_SHIFT_COMPUTE		22
#define TSENS_BASE1_BIT1_9_PLUTO_REDUN_MASK	0x1ff
#define TSENS0_OFFSET_PLUTO_REDUN_MASK		0x1e00
#define TSENS0_OFFSET_PLUTO_REDUN_SHIFT		9
#define TSENS1_OFFSET_PLUTO_REDUN_MASK		0x1e000
#define TSENS1_OFFSET_PLUTO_REDUN_SHIFT		13
#define TSENS2_OFFSET_PLUTO_REDUN_MASK		0x1e0000
#define TSENS2_OFFSET_PLUTO_REDUN_SHIFT		17
#define TSENS3_OFFSET_PLUTO_REDUN_MASK		0x1e00000
#define TSENS3_OFFSET_PLUTO_REDUN_SHIFT		21
#define TSENS4_OFFSET_PLUTO_REDUN_MASK		0x1e000000
#define TSENS4_OFFSET_PLUTO_REDUN_SHIFT		25
#define TSENS5_OFFSET_PLUTO_REDUN_MASK_BIT0_2	0xe0000000
#define TSENS5_OFFSET_PLUTO_REDUN_SHIFT_BIT0_2	29
#define TSENS5_OFFSET_PLUTO_REDUN_MASK_BIT3	0x800000
#define TSENS5_OFFSET_PLUTO_REDUN_SHIFT_BIT3	20
#define TSENS6_OFFSET_PLUTO_REDUN_MASK		0xf000000
#define TSENS6_OFFSET_PLUTO_REDUN_SHIFT		24
#define TSENS7_OFFSET_PLUTO_REDUN_MASK		0xf0000000
#define TSENS7_OFFSET_PLUTO_REDUN_SHIFT		28
#define TSENS8_OFFSET_PLUTO_REDUN_MASK		0xf
#define TSENS9_OFFSET_PLUTO_REDUN_MASK		0xf0
#define TSENS9_OFFSET_PLUTO_REDUN_SHIFT		4
#define TSENS10_OFFSET_PLUTO_REDUN_MASK		0xf00
#define TSENS10_OFFSET_PLUTO_REDUN_SHIFT	8
#define TSENS11_OFFSET_PLUTO_REDUN_MASK		0xf000
#define TSENS11_OFFSET_PLUTO_REDUN_SHIFT	12
#define TSENS12_OFFSET_PLUTO_REDUN_MASK		0xf0000
#define TSENS12_OFFSET_PLUTO_REDUN_SHIFT	16
#define TSENS13_OFFSET_PLUTO_REDUN_MASK		0xf00000
#define TSENS13_OFFSET_PLUTO_REDUN_SHIFT	20
#define TSENS14_OFFSET_PLUTO_REDUN_MASK		0xf000000
#define TSENS14_OFFSET_PLUTO_REDUN_SHIFT	24
#define TSENS15_OFFSET_PLUTO_REDUN_MASK		0xf0000000
#define TSENS15_OFFSET_PLUTO_REDUN_SHIFT	28
#define TSENS_PLUTO_REDUN_SEL_MASK		0x7
#define TSENS_PLUTO_CAL_SEL_REDUN_MASK		0xe0000000
#define TSENS_PLUTO_CAL_SEL_REDUN_SHIFT		29
#define TSENS_BASE0_8994_MASK		0x3ff
#define TSENS_BASE1_8994_MASK		0xffc00
#define TSENS_BASE1_8994_SHIFT		10
#define TSENS0_OFFSET_8994_MASK		0xf00000
#define TSENS0_OFFSET_8994_SHIFT	20
#define TSENS1_OFFSET_8994_MASK		0xf000000
#define TSENS1_OFFSET_8994_SHIFT	24
#define TSENS2_OFFSET_8994_MASK		0xf0000000
#define TSENS2_OFFSET_8994_SHIFT	28
#define TSENS3_OFFSET_8994_MASK		0xf
#define TSENS4_OFFSET_8994_MASK		0xf0
#define TSENS4_OFFSET_8994_SHIFT	4
#define TSENS5_OFFSET_8994_MASK		0xf00
#define TSENS5_OFFSET_8994_SHIFT	8
#define TSENS6_OFFSET_8994_MASK		0xf000
#define TSENS6_OFFSET_8994_SHIFT	12
#define TSENS7_OFFSET_8994_MASK		0xf0000
#define TSENS7_OFFSET_8994_SHIFT	16
#define TSENS8_OFFSET_8994_MASK		0xf00000
#define TSENS8_OFFSET_8994_SHIFT	20
#define TSENS9_OFFSET_8994_MASK		0xf000000
#define TSENS9_OFFSET_8994_SHIFT	24
#define TSENS10_OFFSET_8994_MASK	0xf0000000
#define TSENS10_OFFSET_8994_SHIFT	28
#define TSENS11_OFFSET_8994_MASK	0xf
#define TSENS12_OFFSET_8994_MASK	0xf0
#define TSENS12_OFFSET_8994_SHIFT	4
#define TSENS13_OFFSET_8994_MASK	0xf00
#define TSENS13_OFFSET_8994_SHIFT	8
#define TSENS14_OFFSET_8994_MASK	0xf000
#define TSENS14_OFFSET_8994_SHIFT	12
#define TSENS15_OFFSET_8994_MASK	0xf0000
#define TSENS15_OFFSET_8994_SHIFT	16
#define TSENS_8994_CAL_SEL_MASK		0x700000
#define TSENS_8994_CAL_SEL_SHIFT	20

#define TSENS_BASE0_8994_REDUN_MASK		0x7fe00000
#define TSENS_BASE0_8994_REDUN_MASK_SHIFT	21
#define TSENS_BASE1_BIT0_8994_REDUN_MASK	0x80000000
#define TSENS_BASE1_BIT0_SHIFT_COMPUTE		31
#define TSENS_BASE1_BIT1_9_8994_REDUN_MASK	0x1ff
#define TSENS0_OFFSET_8994_REDUN_MASK		0x1e00
#define TSENS0_OFFSET_8994_REDUN_SHIFT		9
#define TSENS1_OFFSET_8994_REDUN_MASK		0x1e000
#define TSENS1_OFFSET_8994_REDUN_SHIFT		13
#define TSENS2_OFFSET_8994_REDUN_MASK		0x1e0000
#define TSENS2_OFFSET_8994_REDUN_SHIFT		17
#define TSENS3_OFFSET_8994_REDUN_MASK		0x1e00000
#define TSENS3_OFFSET_8994_REDUN_SHIFT		21
#define TSENS4_OFFSET_8994_REDUN_MASK		0x1e000000
#define TSENS4_OFFSET_8994_REDUN_SHIFT		25
#define TSENS5_OFFSET_8994_REDUN_MASK_BIT0_2	0xe0000000
#define TSENS5_OFFSET_8994_REDUN_SHIFT_BIT0_2	29
#define TSENS5_OFFSET_8994_REDUN_MASK_BIT3	0x800000
#define TSENS5_OFFSET_8994_REDUN_SHIFT_BIT3	23
#define TSENS6_OFFSET_8994_REDUN_MASK		0xf000000
#define TSENS6_OFFSET_8994_REDUN_SHIFT		24
#define TSENS7_OFFSET_8994_REDUN_MASK		0xf0000000
#define TSENS7_OFFSET_8994_REDUN_SHIFT		28
#define TSENS8_OFFSET_8994_REDUN_MASK		0xf
#define TSENS9_OFFSET_8994_REDUN_MASK		0xf0
#define TSENS9_OFFSET_8994_REDUN_SHIFT		4
#define TSENS10_OFFSET_8994_REDUN_MASK		0xf00
#define TSENS10_OFFSET_8994_REDUN_SHIFT		8
#define TSENS11_OFFSET_8994_REDUN_MASK		0xf000
#define TSENS11_OFFSET_8994_REDUN_SHIFT		12
#define TSENS12_OFFSET_8994_REDUN_MASK		0xf0000
#define TSENS12_OFFSET_8994_REDUN_SHIFT		16
#define TSENS13_OFFSET_8994_REDUN_MASK		0xf00000
#define TSENS13_OFFSET_8994_REDUN_SHIFT		20
#define TSENS14_OFFSET_8994_REDUN_MASK		0xf000000
#define TSENS14_OFFSET_8994_REDUN_SHIFT		24
#define TSENS15_OFFSET_8994_REDUN_MASK		0xf0000000
#define TSENS15_OFFSET_8994_REDUN_SHIFT		28
#define TSENS_8994_REDUN_SEL_MASK		0x7
#define TSENS_8994_CAL_SEL_REDUN_MASK		0xe0000000
#define TSENS_8994_CAL_SEL_REDUN_SHIFT		29

enum tsens_calib_fuse_map_type {
	TSENS_CALIB_FUSE_MAP_8974 = 0,
@@ -475,7 +474,7 @@ enum tsens_calib_fuse_map_type {
	TSENS_CALIB_FUSE_MAP_9630,
	TSENS_CALIB_FUSE_MAP_8916,
	TSENS_CALIB_FUSE_MAP_8939,
	TSENS_CALIB_FUSE_MAP_PLUTO,
	TSENS_CALIB_FUSE_MAP_8994,
	TSENS_CALIB_FUSE_MAP_NUM,
};

@@ -522,6 +521,7 @@ struct tsens_tm_device {
	struct work_struct		tsens_work;
	uint32_t			calib_mode;
	uint32_t			tsens_type;
	bool				tsens_valid_status_check;
	struct tsens_tm_device_sensor	sensor[0];
};

@@ -628,7 +628,10 @@ static void msm_tsens_get_temp(int sensor_hw_num, unsigned long *temp)
	unsigned int code;
	void __iomem *sensor_addr;
	void __iomem *trdy_addr;
	int sensor_sw_id = -EINVAL, rc = 0;
	int sensor_sw_id = -EINVAL, rc = 0, last_temp = 0, last_temp2 = 0;
	int last_temp3 = 0;
	bool last_temp_valid = false, last_temp2_valid = false;
	bool last_temp3_valid = false;

	if (tmdev->tsens_type == TSENS_TYPE2) {
		trdy_addr = TSENS2_TRDY_ADDR(tmdev->tsens_addr);
@@ -638,7 +641,7 @@ static void msm_tsens_get_temp(int sensor_hw_num, unsigned long *temp)
		sensor_addr = TSENS_S0_STATUS_ADDR(tmdev->tsens_addr);
	}

	if (!tmdev->prev_reading_avail) {
	if ((!tmdev->prev_reading_avail) && !tmdev->tsens_valid_status_check) {
		while (!((readl_relaxed(trdy_addr)) & TSENS_TRDY_MASK))
			usleep_range(TSENS_TRDY_RDY_MIN_TIME,
				TSENS_TRDY_RDY_MAX_TIME);
@@ -647,6 +650,39 @@ static void msm_tsens_get_temp(int sensor_hw_num, unsigned long *temp)

	code = readl_relaxed(sensor_addr +
			(sensor_hw_num << TSENS_STATUS_ADDR_OFFSET));
	last_temp = code & TSENS_SN_STATUS_TEMP_MASK;

	if (tmdev->tsens_valid_status_check) {
		if (code & TSENS2_SN_STATUS_VALID_MASK)
			last_temp_valid = true;
		else {
			code = readl_relaxed(sensor_addr +
				(sensor_hw_num << TSENS_STATUS_ADDR_OFFSET));
			last_temp2 = code & TSENS_SN_STATUS_TEMP_MASK;
			if (code & TSENS2_SN_STATUS_VALID_MASK) {
				last_temp = last_temp2;
				last_temp2_valid = true;
			} else {
				code = readl_relaxed(sensor_addr +
					(sensor_hw_num <<
					TSENS_STATUS_ADDR_OFFSET));
				last_temp3 = code & TSENS_SN_STATUS_TEMP_MASK;
				if (code & TSENS2_SN_STATUS_VALID_MASK) {
					last_temp = last_temp3;
					last_temp3_valid = true;
				}
			}
		}
	}

	if ((tmdev->tsens_valid_status_check) &&
		(!last_temp_valid && !last_temp2_valid && !last_temp3_valid)) {
		if (last_temp == last_temp2)
			last_temp = last_temp2;
		else if (last_temp2 == last_temp3)
			last_temp = last_temp3;
	}

	/* Obtain SW index to map the corresponding thermal zone's
	 * offset and slope for code to degc conversion. */
	rc = tsens_get_sw_id_mapping(sensor_hw_num, &sensor_sw_id);
@@ -655,8 +691,7 @@ static void msm_tsens_get_temp(int sensor_hw_num, unsigned long *temp)
		return;
	}

	*temp = tsens_tz_code_to_degc((code & TSENS_SN_STATUS_TEMP_MASK),
								sensor_sw_id);
	*temp = tsens_tz_code_to_degc(last_temp, sensor_sw_id);
	trace_tsens_read(*temp, sensor_hw_num);
}

@@ -994,7 +1029,7 @@ static void tsens_hw_init(void)
	unsigned int reg_cntl = 0, sensor_en = 0;
	unsigned int i;

	if (tmdev->tsens_local_init) {
	if (tmdev->tsens_local_init && tmdev->tsens_type == TSENS_TYPE0) {
		writel_relaxed(reg_cntl, TSENS_CTRL_ADDR(tmdev->tsens_addr));
		writel_relaxed(reg_cntl | TSENS_SW_RST,
			TSENS_CTRL_ADDR(tmdev->tsens_addr));
@@ -1010,10 +1045,6 @@ static void tsens_hw_init(void)
		writel_relaxed(TSENS_S0_MAIN_CFG_INIT_DATA,
			TSENS_S0_MAIN_CONFIG(tmdev->tsens_addr));
		for (i = 0; i < tmdev->tsens_num_sensor; i++) {
			writel_relaxed(TSENS_SN_MIN_MAX_STATUS_CTRL_DATA,
			TSENS_SN_MIN_MAX_STATUS_CTRL(tmdev->tsens_addr)
				+ (tmdev->sensor[i].sensor_hw_num *
						TSENS_SN_ADDR_OFFSET));
			writel_relaxed(TSENS_SN_REMOTE_CFG_DATA,
			TSENS_SN_REMOTE_CONFIG(tmdev->tsens_addr)
				+ (tmdev->sensor[i].sensor_hw_num *
@@ -1400,7 +1431,7 @@ compute_intercept_slope:
	return 0;
}

static int tsens_calib_pluto_sensors(void)
static int tsens_calib_8994_sensors(void)
{
	int i, tsens_base0_data = 0, tsens0_point = 0, tsens1_point = 0;
	int tsens2_point = 0, tsens3_point = 0, tsens4_point = 0;
@@ -1415,9 +1446,9 @@ static int tsens_calib_pluto_sensors(void)
		goto calibration_less_mode;

	calib_redun_sel = readl_relaxed(
			TSENS_PLUTO_EEPROM_REDUN_SEL(tmdev->tsens_calib_addr));
	calib_redun_sel = calib_redun_sel & TSENS_PLUTO_CAL_SEL_REDUN_MASK;
	calib_redun_sel >>= TSENS_PLUTO_CAL_SEL_REDUN_SHIFT;
			TSENS_8994_EEPROM_REDUN_SEL(tmdev->tsens_calib_addr));
	calib_redun_sel = calib_redun_sel & TSENS_8994_CAL_SEL_REDUN_MASK;
	calib_redun_sel >>= TSENS_8994_CAL_SEL_REDUN_SHIFT;

	if (calib_redun_sel == TSENS_QFPROM_BACKUP_SEL) {
		calib_data[0] = readl_relaxed(
@@ -1431,67 +1462,67 @@ static int tsens_calib_pluto_sensors(void)
		calib_data[4] = readl_relaxed(
			TSENS_REDUN_REGION5_EEPROM(tmdev->tsens_calib_addr));

		calib_mode = (calib_data[4] & TSENS_PLUTO_REDUN_SEL_MASK);
		calib_mode = (calib_data[4] & TSENS_8994_REDUN_SEL_MASK);
		pr_debug("calib mode is %d\n", calib_mode);
		if (calib_mode == TSENS_TWO_POINT_CALIB) {
			tsens_base0_data = (calib_data[0] &
				TSENS_BASE0_PLUTO_REDUN_MASK) >>
				TSENS_BASE0_PLUTO_REDUN_MASK_SHIFT;
				TSENS_BASE0_8994_REDUN_MASK) >>
				TSENS_BASE0_8994_REDUN_MASK_SHIFT;
			tsens_base1_data = (calib_data[0] &
				TSENS_BASE1_BIT0_PLUTO_REDUN_MASK) >>
				TSENS_BASE1_BIT0_8994_REDUN_MASK) >>
				TSENS_BASE1_BIT0_SHIFT_COMPUTE;
			tsens_base1_data |= (calib_data[1] &
				TSENS_BASE1_BIT1_9_PLUTO_REDUN_MASK);
				TSENS_BASE1_BIT1_9_8994_REDUN_MASK);
			tsens0_point = (calib_data[1] &
				TSENS0_OFFSET_PLUTO_REDUN_MASK) >>
				TSENS0_OFFSET_PLUTO_REDUN_SHIFT;
				TSENS0_OFFSET_8994_REDUN_MASK) >>
				TSENS0_OFFSET_8994_REDUN_SHIFT;
			tsens1_point = (calib_data[1] &
				TSENS1_OFFSET_PLUTO_REDUN_MASK) >>
				TSENS1_OFFSET_PLUTO_REDUN_SHIFT;
				TSENS1_OFFSET_8994_REDUN_MASK) >>
				TSENS1_OFFSET_8994_REDUN_SHIFT;
			tsens2_point = (calib_data[1] &
				TSENS2_OFFSET_PLUTO_REDUN_MASK) >>
				TSENS2_OFFSET_PLUTO_REDUN_SHIFT;
				TSENS2_OFFSET_8994_REDUN_MASK) >>
				TSENS2_OFFSET_8994_REDUN_SHIFT;
			tsens3_point = (calib_data[1] &
				TSENS3_OFFSET_PLUTO_REDUN_MASK) >>
				TSENS3_OFFSET_PLUTO_REDUN_SHIFT;
				TSENS3_OFFSET_8994_REDUN_MASK) >>
				TSENS3_OFFSET_8994_REDUN_SHIFT;
			tsens4_point = (calib_data[1] &
				TSENS4_OFFSET_PLUTO_REDUN_MASK) >>
				TSENS4_OFFSET_PLUTO_REDUN_SHIFT;
				TSENS4_OFFSET_8994_REDUN_MASK) >>
				TSENS4_OFFSET_8994_REDUN_SHIFT;
			tsens5_point = (calib_data[1] &
				TSENS5_OFFSET_PLUTO_REDUN_MASK_BIT0_2) >>
				TSENS5_OFFSET_PLUTO_REDUN_SHIFT_BIT0_2;
				TSENS5_OFFSET_8994_REDUN_MASK_BIT0_2) >>
				TSENS5_OFFSET_8994_REDUN_SHIFT_BIT0_2;
			tsens5_point |= ((calib_data[2] &
				TSENS5_OFFSET_PLUTO_REDUN_MASK_BIT3) >>
				TSENS5_OFFSET_PLUTO_REDUN_SHIFT_BIT3);
				TSENS5_OFFSET_8994_REDUN_MASK_BIT3) >>
				TSENS5_OFFSET_8994_REDUN_SHIFT_BIT3);
			tsens6_point = (calib_data[2] &
				TSENS6_OFFSET_PLUTO_REDUN_MASK) >>
				TSENS6_OFFSET_PLUTO_REDUN_SHIFT;
				TSENS6_OFFSET_8994_REDUN_MASK) >>
				TSENS6_OFFSET_8994_REDUN_SHIFT;
			tsens7_point = (calib_data[2] &
				TSENS7_OFFSET_PLUTO_REDUN_MASK) >>
				TSENS7_OFFSET_PLUTO_REDUN_SHIFT;
				TSENS7_OFFSET_8994_REDUN_MASK) >>
				TSENS7_OFFSET_8994_REDUN_SHIFT;
			tsens8_point = (calib_data[3] &
				TSENS8_OFFSET_PLUTO_REDUN_MASK);
				TSENS8_OFFSET_8994_REDUN_MASK);
			tsens9_point = (calib_data[3] &
				TSENS9_OFFSET_PLUTO_REDUN_MASK) >>
				TSENS9_OFFSET_PLUTO_REDUN_SHIFT;
				TSENS9_OFFSET_8994_REDUN_MASK) >>
				TSENS9_OFFSET_8994_REDUN_SHIFT;
			tsens10_point = (calib_data[3] &
				TSENS10_OFFSET_PLUTO_REDUN_MASK) >>
				TSENS10_OFFSET_PLUTO_REDUN_SHIFT;
				TSENS10_OFFSET_8994_REDUN_MASK) >>
				TSENS10_OFFSET_8994_REDUN_SHIFT;
			tsens11_point = (calib_data[3] &
				TSENS11_OFFSET_PLUTO_REDUN_MASK) >>
				TSENS11_OFFSET_PLUTO_REDUN_SHIFT;
				TSENS11_OFFSET_8994_REDUN_MASK) >>
				TSENS11_OFFSET_8994_REDUN_SHIFT;
			tsens12_point = (calib_data[3] &
				TSENS12_OFFSET_PLUTO_REDUN_MASK) >>
				TSENS12_OFFSET_PLUTO_REDUN_SHIFT;
				TSENS12_OFFSET_8994_REDUN_MASK) >>
				TSENS12_OFFSET_8994_REDUN_SHIFT;
			tsens13_point = (calib_data[3] &
				TSENS13_OFFSET_PLUTO_REDUN_MASK) >>
				TSENS13_OFFSET_PLUTO_REDUN_SHIFT;
				TSENS13_OFFSET_8994_REDUN_MASK) >>
				TSENS13_OFFSET_8994_REDUN_SHIFT;
			tsens14_point = (calib_data[3] &
				TSENS14_OFFSET_PLUTO_REDUN_MASK) >>
				TSENS14_OFFSET_PLUTO_REDUN_SHIFT;
				TSENS14_OFFSET_8994_REDUN_MASK) >>
				TSENS14_OFFSET_8994_REDUN_SHIFT;
			tsens15_point = (calib_data[3] &
				TSENS15_OFFSET_PLUTO_REDUN_MASK) >>
				TSENS15_OFFSET_PLUTO_REDUN_SHIFT;
				TSENS15_OFFSET_8994_REDUN_MASK) >>
				TSENS15_OFFSET_8994_REDUN_SHIFT;
			calib_tsens_point_data[0] = tsens0_point;
			calib_tsens_point_data[1] = tsens1_point;
			calib_tsens_point_data[2] = tsens2_point;
@@ -1512,67 +1543,67 @@ static int tsens_calib_pluto_sensors(void)
			goto calibration_less_mode;
	} else {
		calib_data[0] = readl_relaxed(
			TSENS_PLUTO_EEPROM(tmdev->tsens_calib_addr));
			TSENS_8994_EEPROM(tmdev->tsens_calib_addr));
		calib_data[1] = readl_relaxed(
			(TSENS_PLUTO_EEPROM(tmdev->tsens_calib_addr) + 0X4));
			(TSENS_8994_EEPROM(tmdev->tsens_calib_addr) + 0x4));
		calib_data[2] = readl_relaxed(
			(TSENS_PLUTO_EEPROM(tmdev->tsens_calib_addr) + 0x8));
			(TSENS_8994_EEPROM(tmdev->tsens_calib_addr) + 0x8));

		calib_mode = (calib_data[2] & TSENS_PLUTO_CAL_SEL_MASK) >>
				TSENS_PLUTO_CAL_SEL_SHIFT;
		calib_mode = (calib_data[2] & TSENS_8994_CAL_SEL_MASK) >>
				TSENS_8994_CAL_SEL_SHIFT;
		pr_debug("calib mode is %d\n", calib_mode);
		if (calib_mode == TSENS_TWO_POINT_CALIB) {
			tsens_base0_data = (calib_data[0] &
				TSENS_BASE0_PLUTO_MASK);
				TSENS_BASE0_8994_MASK);
			tsens_base1_data = (calib_data[0] &
				TSENS_BASE1_PLUTO_MASK) >>
				TSENS_BASE1_PLUTO_SHIFT;
				TSENS_BASE1_8994_MASK) >>
				TSENS_BASE1_8994_SHIFT;
			tsens0_point = (calib_data[0] &
				TSENS0_OFFSET_PLUTO_MASK) >>
				TSENS0_OFFSET_PLUTO_SHIFT;
				TSENS0_OFFSET_8994_MASK) >>
				TSENS0_OFFSET_8994_SHIFT;
			tsens1_point = (calib_data[0] &
				TSENS1_OFFSET_PLUTO_MASK) >>
				TSENS1_OFFSET_PLUTO_SHIFT;
				TSENS1_OFFSET_8994_MASK) >>
				TSENS1_OFFSET_8994_SHIFT;
			tsens2_point = (calib_data[0] &
				TSENS2_OFFSET_PLUTO_MASK) >>
				TSENS2_OFFSET_PLUTO_SHIFT;
				TSENS2_OFFSET_8994_MASK) >>
				TSENS2_OFFSET_8994_SHIFT;
			tsens3_point = (calib_data[1] &
				TSENS3_OFFSET_PLUTO_MASK);
				TSENS3_OFFSET_8994_MASK);
			tsens4_point = (calib_data[1] &
				TSENS4_OFFSET_PLUTO_MASK) >>
				TSENS4_OFFSET_PLUTO_SHIFT;
				TSENS4_OFFSET_8994_MASK) >>
				TSENS4_OFFSET_8994_SHIFT;
			tsens5_point = (calib_data[1] &
				TSENS5_OFFSET_PLUTO_MASK) >>
				TSENS5_OFFSET_PLUTO_SHIFT;
				TSENS5_OFFSET_8994_MASK) >>
				TSENS5_OFFSET_8994_SHIFT;
			tsens6_point = (calib_data[1] &
				TSENS6_OFFSET_PLUTO_MASK) >>
				TSENS6_OFFSET_PLUTO_SHIFT;
				TSENS6_OFFSET_8994_MASK) >>
				TSENS6_OFFSET_8994_SHIFT;
			tsens7_point = (calib_data[1] &
				TSENS7_OFFSET_PLUTO_MASK) >>
				TSENS7_OFFSET_PLUTO_SHIFT;
				TSENS7_OFFSET_8994_MASK) >>
				TSENS7_OFFSET_8994_SHIFT;
			tsens8_point = (calib_data[1] &
				TSENS8_OFFSET_PLUTO_MASK) >>
				TSENS8_OFFSET_PLUTO_SHIFT;
				TSENS8_OFFSET_8994_MASK) >>
				TSENS8_OFFSET_8994_SHIFT;
			tsens9_point = (calib_data[1] &
				TSENS9_OFFSET_PLUTO_MASK) >>
				TSENS9_OFFSET_PLUTO_SHIFT;
				TSENS9_OFFSET_8994_MASK) >>
				TSENS9_OFFSET_8994_SHIFT;
			tsens10_point = (calib_data[1] &
				TSENS10_OFFSET_PLUTO_MASK) >>
				TSENS10_OFFSET_PLUTO_SHIFT;
				TSENS10_OFFSET_8994_MASK) >>
				TSENS10_OFFSET_8994_SHIFT;
			tsens11_point = (calib_data[2] &
				TSENS11_OFFSET_PLUTO_MASK);
				TSENS11_OFFSET_8994_MASK);
			tsens12_point = (calib_data[2] &
				TSENS12_OFFSET_PLUTO_MASK) >>
				TSENS12_OFFSET_PLUTO_SHIFT;
				TSENS12_OFFSET_8994_MASK) >>
				TSENS12_OFFSET_8994_SHIFT;
			tsens13_point = (calib_data[2] &
				TSENS13_OFFSET_PLUTO_MASK) >>
				TSENS13_OFFSET_PLUTO_SHIFT;
				TSENS13_OFFSET_8994_MASK) >>
				TSENS13_OFFSET_8994_SHIFT;
			tsens14_point = (calib_data[2] &
				TSENS14_OFFSET_PLUTO_MASK) >>
				TSENS14_OFFSET_PLUTO_SHIFT;
				TSENS14_OFFSET_8994_MASK) >>
				TSENS14_OFFSET_8994_SHIFT;
			tsens15_point = (calib_data[2] &
				TSENS15_OFFSET_PLUTO_MASK) >>
				TSENS15_OFFSET_PLUTO_SHIFT;
				TSENS15_OFFSET_8994_MASK) >>
				TSENS15_OFFSET_8994_SHIFT;
			calib_tsens_point_data[0] = tsens0_point;
			calib_tsens_point_data[1] = tsens1_point;
			calib_tsens_point_data[2] = tsens2_point;
@@ -2538,8 +2569,8 @@ static int tsens_calib_sensors(void)
		rc = tsens_calib_8916_sensors();
	else if (tmdev->calib_mode == TSENS_CALIB_FUSE_MAP_8939)
		rc = tsens_calib_8939_sensors();
	else if (tmdev->calib_mode == TSENS_CALIB_FUSE_MAP_PLUTO)
		rc = tsens_calib_pluto_sensors();
	else if (tmdev->calib_mode == TSENS_CALIB_FUSE_MAP_8994)
		rc = tsens_calib_8994_sensors();
	else {
		pr_err("TSENS Calib fuse not found\n");
		rc = -ENODEV;
@@ -2571,7 +2602,7 @@ static struct of_device_id tsens_match[] = {
		.data = (void *)TSENS_CALIB_FUSE_MAP_8939,
	},
	{	.compatible = "qcom,msm8994-tsens",
		.data = (void *)TSENS_CALIB_FUSE_MAP_PLUTO,
		.data = (void *)TSENS_CALIB_FUSE_MAP_8994,
	},
	{}
};
@@ -2659,11 +2690,17 @@ static int get_device_tree_data(struct platform_device *pdev)
		}
	}

	if (!strcmp(id->compatible, "qcom,mdm9630-tsens"))
	if (!strcmp(id->compatible, "qcom,mdm9630-tsens") ||
		(!strcmp(id->compatible, "qcom,msm8994-tsens")))
		tmdev->tsens_type = TSENS_TYPE2;
	else
		tmdev->tsens_type = TSENS_TYPE0;

	if (!strcmp(id->compatible, "qcom,msm8994-tsens"))
		tmdev->tsens_valid_status_check = true;
	else
		tmdev->tsens_valid_status_check = false;

	tmdev->tsens_irq = platform_get_irq(pdev, 0);
	if (tmdev->tsens_irq < 0) {
		pr_err("Invalid get irq\n");