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

Commit 5072ab51 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "thermal: msm_tsens: Check for valid status bit"

parents 4d325acc 385785c8
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");