Loading drivers/thermal/msm8974-tsens.c +212 −175 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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) Loading Loading @@ -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) Loading Loading @@ -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 Loading Loading @@ -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, Loading @@ -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, }; Loading Loading @@ -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]; }; Loading Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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); } Loading Loading @@ -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)); Loading @@ -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 * Loading Loading @@ -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; Loading @@ -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( Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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, }, {} }; Loading Loading @@ -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"); Loading Loading
drivers/thermal/msm8974-tsens.c +212 −175 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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) Loading Loading @@ -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) Loading Loading @@ -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 Loading Loading @@ -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, Loading @@ -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, }; Loading Loading @@ -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]; }; Loading Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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); } Loading Loading @@ -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)); Loading @@ -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 * Loading Loading @@ -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; Loading @@ -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( Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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, }, {} }; Loading Loading @@ -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"); Loading