Loading Documentation/devicetree/bindings/thermal/tsens.txt +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ Required properties: should be "qcom,msmzirc-tsens" for zirc TSENS driver. should be "qcom,mdmfermium-tsens" for fermium TSENS driver. should be "qcom,msmtitanium-tsens" for titanium TSENS driver. should be "qcom,msmthorium-tsens" for thorium TSENS driver. The compatible property is used to identify the respective fusemap to use for the corresponding SoC. - reg : offset and length of the TSENS registers. Loading arch/arm/boot/dts/qcom/msmthorium.dtsi +13 −0 Original line number Diff line number Diff line Loading @@ -178,6 +178,19 @@ qcom,pipe-attr-ee; }; tsens: tsens@4a8000 { compatible = "qcom,msmthorium-tsens"; reg = <0x4a8000 0x2000>, <0xa4000 0x1000>; reg-names = "tsens_physical", "tsens_eeprom_physical"; interrupts = <0 184 0>; interrupt-names = "tsens-upper-lower"; qcom,sensors = <11>; qcom,slope = <3200 3200 3200 3200 3200 3200 3200 3200 3200 3200 3200>; qcom,sensor-id = <0 1 2 3 4 5 6 7 8 9 10>; }; blsp1_uart2: serial@78b0000 { compatible = "qcom,msm-lsuart-v14"; reg = <0x78b0000 0x200>; Loading drivers/thermal/msm-tsens.c +312 −103 Original line number Diff line number Diff line Loading @@ -594,59 +594,59 @@ #define TSENS4_OFFSET_ZIRC_MASK 0xf0 #define TSENS4_OFFSET_ZIRC_SHIFT 4 #define TSENS_MSM8952_BASE0_MASK 0x000000ff #define TSENS_MSM8952_BASE1_MASK 0xff000000 #define TSENS0_MSM8952_POINT1_MASK 0x000001f8 #define TSENS1_MSM8952_POINT1_MASK 0x001f8000 #define TSENS2_MSM8952_POINT1_MASK_0_4 0xf8000000 #define TSENS2_MSM8952_POINT1_MASK_5 0x00000001 #define TSENS3_MSM8952_POINT1_MASK 0x00001f80 #define TSENS4_MSM8952_POINT1_MASK 0x01f80000 #define TSENS5_MSM8952_POINT1_MASK 0x00003f00 #define TSENS6_MSM8952_POINT1_MASK 0x03f00000 #define TSENS7_MSM8952_POINT1_MASK 0x0000003f #define TSENS8_MSM8952_POINT1_MASK 0x0003f000 #define TSENS9_MSM8952_POINT1_MASK 0x0000003f #define TSENS10_MSM8952_POINT1_MASK 0x0003f000 #define TSENS0_MSM8952_POINT2_MASK 0x00007e00 #define TSENS1_MSM8952_POINT2_MASK 0x07e00000 #define TSENS2_MSM8952_POINT2_MASK 0x0000007e #define TSENS3_MSM8952_POINT2_MASK 0x0007e000 #define TSENS4_MSM8952_POINT2_MASK 0x7e000000 #define TSENS5_MSM8952_POINT2_MASK 0x000fc000 #define TSENS6_MSM8952_POINT2_MASK 0xfc000000 #define TSENS7_MSM8952_POINT2_MASK 0x00000fc0 #define TSENS8_MSM8952_POINT2_MASK 0x00fc0000 #define TSENS9_MSM8952_POINT2_MASK 0x00000fc0 #define TSENS10_MSM8952_POINT2_MASK 0x00fc0000 #define TSENS_MSM8952_TSENS_CAL_SEL 0x00000007 #define TSENS_MSM8952_BASE1_SHIFT 24 #define TSENS0_MSM8952_POINT1_SHIFT 3 #define TSENS1_MSM8952_POINT1_SHIFT 15 #define TSENS2_MSM8952_POINT1_SHIFT_0_4 27 #define TSENS2_MSM8952_POINT1_SHIFT_5 5 #define TSENS3_MSM8952_POINT1_SHIFT 7 #define TSENS4_MSM8952_POINT1_SHIFT 19 #define TSENS5_MSM8952_POINT1_SHIFT 8 #define TSENS6_MSM8952_POINT1_SHIFT 20 #define TSENS8_MSM8952_POINT1_SHIFT 12 #define TSENS10_MSM8952_POINT1_SHIFT 12 #define TSENS0_MSM8952_POINT2_SHIFT 9 #define TSENS1_MSM8952_POINT2_SHIFT 21 #define TSENS2_MSM8952_POINT2_SHIFT 1 #define TSENS3_MSM8952_POINT2_SHIFT 13 #define TSENS4_MSM8952_POINT2_SHIFT 25 #define TSENS5_MSM8952_POINT2_SHIFT 14 #define TSENS6_MSM8952_POINT2_SHIFT 26 #define TSENS7_MSM8952_POINT2_SHIFT 6 #define TSENS8_MSM8952_POINT2_SHIFT 18 #define TSENS9_MSM8952_POINT2_SHIFT 6 #define TSENS10_MSM8952_POINT2_SHIFT 18 #define TSENS_CONTR_14_BASE0_MASK 0x000000ff #define TSENS_CONTR_14_BASE1_MASK 0xff000000 #define TSENS0_CONTR_14_POINT1_MASK 0x000001f8 #define TSENS1_CONTR_14_POINT1_MASK 0x001f8000 #define TSENS2_CONTR_14_POINT1_MASK_0_4 0xf8000000 #define TSENS2_CONTR_14_POINT1_MASK_5 0x00000001 #define TSENS3_CONTR_14_POINT1_MASK 0x00001f80 #define TSENS4_CONTR_14_POINT1_MASK 0x01f80000 #define TSENS5_CONTR_14_POINT1_MASK 0x00003f00 #define TSENS6_CONTR_14_POINT1_MASK 0x03f00000 #define TSENS7_CONTR_14_POINT1_MASK 0x0000003f #define TSENS8_CONTR_14_POINT1_MASK 0x0003f000 #define TSENS9_CONTR_14_POINT1_MASK 0x0000003f #define TSENS10_CONTR_14_POINT1_MASK 0x0003f000 #define TSENS0_CONTR_14_POINT2_MASK 0x00007e00 #define TSENS1_CONTR_14_POINT2_MASK 0x07e00000 #define TSENS2_CONTR_14_POINT2_MASK 0x0000007e #define TSENS3_CONTR_14_POINT2_MASK 0x0007e000 #define TSENS4_CONTR_14_POINT2_MASK 0x7e000000 #define TSENS5_CONTR_14_POINT2_MASK 0x000fc000 #define TSENS6_CONTR_14_POINT2_MASK 0xfc000000 #define TSENS7_CONTR_14_POINT2_MASK 0x00000fc0 #define TSENS8_CONTR_14_POINT2_MASK 0x00fc0000 #define TSENS9_CONTR_14_POINT2_MASK 0x00000fc0 #define TSENS10_CONTR_14_POINT2_MASK 0x00fc0000 #define TSENS_CONTR_14_TSENS_CAL_SEL 0x00000007 #define TSENS_CONTR_14_BASE1_SHIFT 24 #define TSENS0_CONTR_14_POINT1_SHIFT 3 #define TSENS1_CONTR_14_POINT1_SHIFT 15 #define TSENS2_CONTR_14_POINT1_SHIFT_0_4 27 #define TSENS2_CONTR_14_POINT1_SHIFT_5 5 #define TSENS3_CONTR_14_POINT1_SHIFT 7 #define TSENS4_CONTR_14_POINT1_SHIFT 19 #define TSENS5_CONTR_14_POINT1_SHIFT 8 #define TSENS6_CONTR_14_POINT1_SHIFT 20 #define TSENS8_CONTR_14_POINT1_SHIFT 12 #define TSENS10_CONTR_14_POINT1_SHIFT 12 #define TSENS0_CONTR_14_POINT2_SHIFT 9 #define TSENS1_CONTR_14_POINT2_SHIFT 21 #define TSENS2_CONTR_14_POINT2_SHIFT 1 #define TSENS3_CONTR_14_POINT2_SHIFT 13 #define TSENS4_CONTR_14_POINT2_SHIFT 25 #define TSENS5_CONTR_14_POINT2_SHIFT 14 #define TSENS6_CONTR_14_POINT2_SHIFT 26 #define TSENS7_CONTR_14_POINT2_SHIFT 6 #define TSENS8_CONTR_14_POINT2_SHIFT 18 #define TSENS9_CONTR_14_POINT2_SHIFT 6 #define TSENS10_CONTR_14_POINT2_SHIFT 18 #define TSENS_TWO_POINT_CALIB_N_WA 0x6 #define TSENS_TWO_POINT_CALIB_N_OFFSET_WA 0x7 Loading Loading @@ -736,6 +736,7 @@ enum tsens_calib_fuse_map_type { TSENS_CALIB_FUSE_MAP_8992, TSENS_CALIB_FUSE_MAP_MSM8952, TSENS_CALIB_FUSE_MAP_MDMFERMIUM, TSENS_CALIB_FUSE_MAP_MSMTHORIUM, TSENS_CALIB_FUSE_MAP_NUM, }; Loading Loading @@ -879,6 +880,9 @@ static struct of_device_id tsens_match[] = { { .compatible = "qcom,msmtitanium-tsens", .data = (void *)TSENS_CALIB_FUSE_MAP_NONE, }, { .compatible = "qcom,msmthorium-tsens", .data = (void *)TSENS_CALIB_FUSE_MAP_MSMTHORIUM, }, {} }; Loading Loading @@ -2517,6 +2521,208 @@ static int tsens_hw_init(struct tsens_tm_device *tmdev) return 0; } static int tsens_calib_msmthorium_sensors(struct tsens_tm_device *tmdev) { int i, tsens_base0_data = 0, tsens_base1_data = 0; int tsens0_point1 = 0, tsens0_point2 = 0; int tsens1_point1 = 0, tsens1_point2 = 0; int tsens2_point1 = 0, tsens2_point2 = 0; int tsens3_point1 = 0, tsens3_point2 = 0; int tsens4_point1 = 0, tsens4_point2 = 0; int tsens5_point1 = 0, tsens5_point2 = 0; int tsens6_point1 = 0, tsens6_point2 = 0; int tsens7_point1 = 0, tsens7_point2 = 0; int tsens8_point1 = 0, tsens8_point2 = 0; int tsens9_point1 = 0, tsens9_point2 = 0; int tsens10_point1 = 0, tsens10_point2 = 0; int tsens_calibration_mode = 0, temp = 0; uint32_t calib_data[5] = {0, 0, 0, 0, 0}; uint32_t calib_tsens_point1_data[11], calib_tsens_point2_data[11]; if (!tmdev->calibration_less_mode) { calib_data[0] = readl_relaxed(tmdev->tsens_calib_addr + 0x1D8); calib_data[1] = readl_relaxed(tmdev->tsens_calib_addr + 0x1DC); calib_data[2] = readl_relaxed(tmdev->tsens_calib_addr + 0x210); calib_data[3] = readl_relaxed(tmdev->tsens_calib_addr + 0x214); calib_data[4] = readl_relaxed(tmdev->tsens_calib_addr + 0x230); tsens_calibration_mode = (calib_data[2] & TSENS_CONTR_14_TSENS_CAL_SEL); pr_debug("calib mode is %d\n", tsens_calibration_mode); } if ((tsens_calibration_mode == TSENS_TWO_POINT_CALIB) || (tsens_calibration_mode == TSENS_ONE_POINT_CALIB_OPTION_2)) { tsens_base0_data = (calib_data[0] & TSENS_CONTR_14_BASE0_MASK); tsens0_point1 = (calib_data[2] & TSENS0_CONTR_14_POINT1_MASK) >> TSENS0_CONTR_14_POINT1_SHIFT; tsens1_point1 = (calib_data[2] & TSENS1_CONTR_14_POINT1_MASK) >> TSENS1_CONTR_14_POINT1_SHIFT; tsens2_point1 = (calib_data[2] & TSENS2_CONTR_14_POINT1_MASK_0_4) >> TSENS2_CONTR_14_POINT1_SHIFT_0_4; temp = (calib_data[3] & TSENS2_CONTR_14_POINT1_MASK_5) << TSENS2_CONTR_14_POINT1_SHIFT_5; tsens2_point1 |= temp; tsens3_point1 = (calib_data[3] & TSENS3_CONTR_14_POINT1_MASK) >> TSENS3_CONTR_14_POINT1_SHIFT; tsens4_point1 = (calib_data[3] & TSENS4_CONTR_14_POINT1_MASK) >> TSENS4_CONTR_14_POINT1_SHIFT; tsens5_point1 = (calib_data[0] & TSENS5_CONTR_14_POINT1_MASK) >> TSENS5_CONTR_14_POINT1_SHIFT; tsens6_point1 = (calib_data[0] & TSENS6_CONTR_14_POINT1_MASK) >> TSENS6_CONTR_14_POINT1_SHIFT; tsens7_point1 = (calib_data[1] & TSENS7_CONTR_14_POINT1_MASK); tsens8_point1 = (calib_data[1] & TSENS8_CONTR_14_POINT1_MASK) >> TSENS8_CONTR_14_POINT1_SHIFT; tsens9_point1 = (calib_data[4] & TSENS9_CONTR_14_POINT1_MASK); tsens10_point1 = (calib_data[4] & TSENS10_CONTR_14_POINT1_MASK) >> TSENS10_CONTR_14_POINT1_SHIFT; } if (tsens_calibration_mode == TSENS_TWO_POINT_CALIB) { tsens_base1_data = (calib_data[1] & TSENS_CONTR_14_BASE1_MASK) >> TSENS_CONTR_14_BASE1_SHIFT; tsens0_point2 = (calib_data[2] & TSENS0_CONTR_14_POINT2_MASK) >> TSENS0_CONTR_14_POINT2_SHIFT; tsens1_point2 = (calib_data[2] & TSENS1_CONTR_14_POINT2_MASK) >> TSENS1_CONTR_14_POINT2_SHIFT; tsens2_point2 = (calib_data[3] & TSENS2_CONTR_14_POINT2_MASK) >> TSENS2_CONTR_14_POINT2_SHIFT; tsens3_point2 = (calib_data[3] & TSENS3_CONTR_14_POINT2_MASK) >> TSENS3_CONTR_14_POINT2_SHIFT; tsens4_point2 = (calib_data[3] & TSENS4_CONTR_14_POINT2_MASK) >> TSENS4_CONTR_14_POINT2_SHIFT; tsens5_point2 = (calib_data[0] & TSENS5_CONTR_14_POINT2_MASK) >> TSENS5_CONTR_14_POINT2_SHIFT; tsens6_point2 = (calib_data[0] & TSENS6_CONTR_14_POINT2_MASK) >> TSENS6_CONTR_14_POINT2_SHIFT; tsens7_point2 = (calib_data[1] & TSENS7_CONTR_14_POINT2_MASK) >> TSENS7_CONTR_14_POINT2_SHIFT; tsens8_point2 = (calib_data[1] & TSENS8_CONTR_14_POINT2_MASK) >> TSENS8_CONTR_14_POINT2_SHIFT; tsens9_point2 = (calib_data[4] & TSENS9_CONTR_14_POINT2_MASK) >> TSENS9_CONTR_14_POINT2_SHIFT; tsens10_point2 = (calib_data[4] & TSENS10_CONTR_14_POINT2_MASK) >> TSENS10_CONTR_14_POINT2_SHIFT; } if (tsens_calibration_mode == 0) { pr_debug("TSENS in calibrationless mode\n"); for (i = 0; i < tmdev->tsens_num_sensor; i++) { calib_tsens_point2_data[i] = TSENS_NO_CALIB_POINT2_DATA; calib_tsens_point1_data[i] = TSENS_NO_CALIB_POINT1_DATA; } } if ((tsens_calibration_mode == TSENS_ONE_POINT_CALIB_OPTION_2) || (tsens_calibration_mode == TSENS_TWO_POINT_CALIB)) { calib_tsens_point1_data[0] = (((tsens_base0_data) + tsens0_point1) << 2); calib_tsens_point1_data[1] = (((tsens_base0_data) + tsens1_point1) << 2); calib_tsens_point1_data[2] = (((tsens_base0_data) + tsens2_point1) << 2); calib_tsens_point1_data[3] = (((tsens_base0_data) + tsens3_point1) << 2); calib_tsens_point1_data[4] = (((tsens_base0_data) + tsens4_point1) << 2); calib_tsens_point1_data[5] = (((tsens_base0_data) + tsens5_point1) << 2); calib_tsens_point1_data[6] = (((tsens_base0_data) + tsens6_point1) << 2); calib_tsens_point1_data[7] = (((tsens_base0_data) + tsens7_point1) << 2); calib_tsens_point1_data[8] = (((tsens_base0_data) + tsens8_point1) << 2); calib_tsens_point1_data[9] = (((tsens_base0_data) + tsens9_point1) << 2); calib_tsens_point1_data[10] = (((tsens_base0_data) + tsens10_point1) << 2); } if (tsens_calibration_mode == TSENS_TWO_POINT_CALIB) { pr_debug("two point calibration calculation\n"); calib_tsens_point2_data[0] = ((tsens_base1_data + tsens0_point2) << 2); calib_tsens_point2_data[1] = ((tsens_base1_data + tsens1_point2) << 2); calib_tsens_point2_data[2] = ((tsens_base1_data + tsens2_point2) << 2); calib_tsens_point2_data[3] = ((tsens_base1_data + tsens3_point2) << 2); calib_tsens_point2_data[4] = ((tsens_base1_data + tsens4_point2) << 2); calib_tsens_point2_data[5] = ((tsens_base1_data + tsens5_point2) << 2); calib_tsens_point2_data[6] = ((tsens_base1_data + tsens6_point2) << 2); calib_tsens_point2_data[7] = ((tsens_base1_data + tsens7_point2) << 2); calib_tsens_point2_data[8] = ((tsens_base1_data + tsens8_point2) << 2); calib_tsens_point2_data[9] = ((tsens_base1_data + tsens9_point2) << 2); calib_tsens_point2_data[10] = ((tsens_base1_data + tsens10_point2) << 2); } for (i = 0; i < tmdev->tsens_num_sensor; i++) { int32_t num = 0, den = 0; tmdev->sensor[i].calib_data_point2 = calib_tsens_point2_data[i]; tmdev->sensor[i].calib_data_point1 = calib_tsens_point1_data[i]; pr_debug("sensor:%d - calib_data_point1:0x%x, calib_data_point2:0x%x\n", i, tmdev->sensor[i].calib_data_point1, tmdev->sensor[i].calib_data_point2); if (tsens_calibration_mode == TSENS_TWO_POINT_CALIB) { /* * slope (m) = adc_code2 - adc_code1 (y2 - y1) * temp_120_degc - temp_30_degc (x2 - x1) */ num = tmdev->sensor[i].calib_data_point2 - tmdev->sensor[i].calib_data_point1; num *= tmdev->tsens_factor; den = TSENS_CAL_DEGC_POINT2 - TSENS_CAL_DEGC_POINT1; tmdev->sensor[i].slope_mul_tsens_factor = num/den; } tmdev->sensor[i].offset = (tmdev->sensor[i].calib_data_point1 * tmdev->tsens_factor) - (TSENS_CAL_DEGC_POINT1 * tmdev->sensor[i].slope_mul_tsens_factor); pr_debug("offset:%d and slope:%d\n", tmdev->sensor[i].offset, tmdev->sensor[i].slope_mul_tsens_factor); tmdev->prev_reading_avail = false; } return 0; } static int tsens_calib_mdmfermium_sensors(struct tsens_tm_device *tmdev) { int i, tsens_base0_data = 0, tsens_base1_data = 0; Loading Loading @@ -2674,7 +2880,7 @@ static int tsens_calib_msm8952_sensors(struct tsens_tm_device *tmdev) tsens_calibration_mode = (calib_data[0] & TSENS_MSM8952_TSENS_CAL_SEL); TSENS_CONTR_14_TSENS_CAL_SEL); pr_debug("calib mode is %d\n", tsens_calibration_mode); } Loading @@ -2682,80 +2888,80 @@ static int tsens_calib_msm8952_sensors(struct tsens_tm_device *tmdev) if ((tsens_calibration_mode == TSENS_TWO_POINT_CALIB) || (tsens_calibration_mode == TSENS_ONE_POINT_CALIB_OPTION_2)) { tsens_base0_data = (calib_data[2] & TSENS_MSM8952_BASE0_MASK); TSENS_CONTR_14_BASE0_MASK); tsens0_point1 = (calib_data[0] & TSENS0_MSM8952_POINT1_MASK) >> TSENS0_MSM8952_POINT1_SHIFT; TSENS0_CONTR_14_POINT1_MASK) >> TSENS0_CONTR_14_POINT1_SHIFT; tsens1_point1 = (calib_data[0] & TSENS1_MSM8952_POINT1_MASK) >> TSENS1_MSM8952_POINT1_SHIFT; TSENS1_CONTR_14_POINT1_MASK) >> TSENS1_CONTR_14_POINT1_SHIFT; tsens2_point1 = (calib_data[0] & TSENS2_MSM8952_POINT1_MASK_0_4) >> TSENS2_MSM8952_POINT1_SHIFT_0_4; temp = (calib_data[1] & TSENS2_MSM8952_POINT1_MASK_5) << TSENS2_MSM8952_POINT1_SHIFT_5; TSENS2_CONTR_14_POINT1_MASK_0_4) >> TSENS2_CONTR_14_POINT1_SHIFT_0_4; temp = (calib_data[1] & TSENS2_CONTR_14_POINT1_MASK_5) << TSENS2_CONTR_14_POINT1_SHIFT_5; tsens2_point1 |= temp; tsens3_point1 = (calib_data[1] & TSENS3_MSM8952_POINT1_MASK) >> TSENS3_MSM8952_POINT1_SHIFT; TSENS3_CONTR_14_POINT1_MASK) >> TSENS3_CONTR_14_POINT1_SHIFT; tsens4_point1 = (calib_data[1] & TSENS4_MSM8952_POINT1_MASK) >> TSENS4_MSM8952_POINT1_SHIFT; TSENS4_CONTR_14_POINT1_MASK) >> TSENS4_CONTR_14_POINT1_SHIFT; tsens5_point1 = (calib_data[2] & TSENS5_MSM8952_POINT1_MASK) >> TSENS5_MSM8952_POINT1_SHIFT; TSENS5_CONTR_14_POINT1_MASK) >> TSENS5_CONTR_14_POINT1_SHIFT; tsens6_point1 = (calib_data[2] & TSENS6_MSM8952_POINT1_MASK) >> TSENS6_MSM8952_POINT1_SHIFT; TSENS6_CONTR_14_POINT1_MASK) >> TSENS6_CONTR_14_POINT1_SHIFT; tsens7_point1 = (calib_data[3] & TSENS7_MSM8952_POINT1_MASK); TSENS7_CONTR_14_POINT1_MASK); tsens8_point1 = (calib_data[3] & TSENS8_MSM8952_POINT1_MASK) >> TSENS8_MSM8952_POINT1_SHIFT; TSENS8_CONTR_14_POINT1_MASK) >> TSENS8_CONTR_14_POINT1_SHIFT; tsens9_point1 = (calib_data[4] & TSENS9_MSM8952_POINT1_MASK); TSENS9_CONTR_14_POINT1_MASK); tsens10_point1 = (calib_data[4] & TSENS10_MSM8952_POINT1_MASK) >> TSENS10_MSM8952_POINT1_SHIFT; TSENS10_CONTR_14_POINT1_MASK) >> TSENS10_CONTR_14_POINT1_SHIFT; } if (tsens_calibration_mode == TSENS_TWO_POINT_CALIB) { tsens_base1_data = (calib_data[3] & TSENS_MSM8952_BASE1_MASK) >> TSENS_MSM8952_BASE1_SHIFT; TSENS_CONTR_14_BASE1_MASK) >> TSENS_CONTR_14_BASE1_SHIFT; tsens0_point2 = (calib_data[0] & TSENS0_MSM8952_POINT2_MASK) >> TSENS0_MSM8952_POINT2_SHIFT; TSENS0_CONTR_14_POINT2_MASK) >> TSENS0_CONTR_14_POINT2_SHIFT; tsens1_point2 = (calib_data[0] & TSENS1_MSM8952_POINT2_MASK) >> TSENS1_MSM8952_POINT2_SHIFT; TSENS1_CONTR_14_POINT2_MASK) >> TSENS1_CONTR_14_POINT2_SHIFT; tsens2_point2 = (calib_data[1] & TSENS2_MSM8952_POINT2_MASK) >> TSENS2_MSM8952_POINT2_SHIFT; TSENS2_CONTR_14_POINT2_MASK) >> TSENS2_CONTR_14_POINT2_SHIFT; tsens3_point2 = (calib_data[1] & TSENS3_MSM8952_POINT2_MASK) >> TSENS3_MSM8952_POINT2_SHIFT; TSENS3_CONTR_14_POINT2_MASK) >> TSENS3_CONTR_14_POINT2_SHIFT; tsens4_point2 = (calib_data[1] & TSENS4_MSM8952_POINT2_MASK) >> TSENS4_MSM8952_POINT2_SHIFT; TSENS4_CONTR_14_POINT2_MASK) >> TSENS4_CONTR_14_POINT2_SHIFT; tsens5_point2 = (calib_data[2] & TSENS5_MSM8952_POINT2_MASK) >> TSENS5_MSM8952_POINT2_SHIFT; TSENS5_CONTR_14_POINT2_MASK) >> TSENS5_CONTR_14_POINT2_SHIFT; tsens6_point2 = (calib_data[2] & TSENS6_MSM8952_POINT2_MASK) >> TSENS6_MSM8952_POINT2_SHIFT; TSENS6_CONTR_14_POINT2_MASK) >> TSENS6_CONTR_14_POINT2_SHIFT; tsens7_point2 = (calib_data[3] & TSENS7_MSM8952_POINT2_MASK) >> TSENS7_MSM8952_POINT2_SHIFT; TSENS7_CONTR_14_POINT2_MASK) >> TSENS7_CONTR_14_POINT2_SHIFT; tsens8_point2 = (calib_data[3] & TSENS8_MSM8952_POINT2_MASK) >> TSENS8_MSM8952_POINT2_SHIFT; TSENS8_CONTR_14_POINT2_MASK) >> TSENS8_CONTR_14_POINT2_SHIFT; tsens9_point2 = (calib_data[4] & TSENS9_MSM8952_POINT2_MASK) >> TSENS9_MSM8952_POINT2_SHIFT; TSENS9_CONTR_14_POINT2_MASK) >> TSENS9_CONTR_14_POINT2_SHIFT; tsens10_point2 = (calib_data[4] & TSENS10_MSM8952_POINT2_MASK) >> TSENS10_MSM8952_POINT2_SHIFT; TSENS10_CONTR_14_POINT2_MASK) >> TSENS10_CONTR_14_POINT2_SHIFT; } if (tsens_calibration_mode == 0) { Loading Loading @@ -4904,6 +5110,8 @@ static int tsens_calib_sensors(struct tsens_tm_device *tmdev) rc = tsens_calib_msm8952_sensors(tmdev); else if (tmdev->calib_mode == TSENS_CALIB_FUSE_MAP_MDMFERMIUM) rc = tsens_calib_mdmfermium_sensors(tmdev); else if (tmdev->calib_mode == TSENS_CALIB_FUSE_MAP_MSMTHORIUM) rc = tsens_calib_msmthorium_sensors(tmdev); else if (tmdev->calib_mode == TSENS_CALIB_FUSE_MAP_NONE) { pr_debug("Fuse map info not required\n"); rc = 0; Loading Loading @@ -5017,7 +5225,8 @@ static int get_device_tree_data(struct platform_device *pdev, else if (!strcmp(id->compatible, "qcom,msmtitanium-tsens")) { tmdev->tsens_type = TSENS_TYPE3; tsens_poll_check = 0; } else if (!strcmp(id->compatible, "qcom,msm8952-tsens")) } else if (!strcmp(id->compatible, "qcom,msm8952-tsens") || (!strcmp(id->compatible, "qcom,msmthorium-tsens"))) tmdev->tsens_type = TSENS_TYPE4; else tmdev->tsens_type = TSENS_TYPE0; Loading Loading
Documentation/devicetree/bindings/thermal/tsens.txt +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ Required properties: should be "qcom,msmzirc-tsens" for zirc TSENS driver. should be "qcom,mdmfermium-tsens" for fermium TSENS driver. should be "qcom,msmtitanium-tsens" for titanium TSENS driver. should be "qcom,msmthorium-tsens" for thorium TSENS driver. The compatible property is used to identify the respective fusemap to use for the corresponding SoC. - reg : offset and length of the TSENS registers. Loading
arch/arm/boot/dts/qcom/msmthorium.dtsi +13 −0 Original line number Diff line number Diff line Loading @@ -178,6 +178,19 @@ qcom,pipe-attr-ee; }; tsens: tsens@4a8000 { compatible = "qcom,msmthorium-tsens"; reg = <0x4a8000 0x2000>, <0xa4000 0x1000>; reg-names = "tsens_physical", "tsens_eeprom_physical"; interrupts = <0 184 0>; interrupt-names = "tsens-upper-lower"; qcom,sensors = <11>; qcom,slope = <3200 3200 3200 3200 3200 3200 3200 3200 3200 3200 3200>; qcom,sensor-id = <0 1 2 3 4 5 6 7 8 9 10>; }; blsp1_uart2: serial@78b0000 { compatible = "qcom,msm-lsuart-v14"; reg = <0x78b0000 0x200>; Loading
drivers/thermal/msm-tsens.c +312 −103 Original line number Diff line number Diff line Loading @@ -594,59 +594,59 @@ #define TSENS4_OFFSET_ZIRC_MASK 0xf0 #define TSENS4_OFFSET_ZIRC_SHIFT 4 #define TSENS_MSM8952_BASE0_MASK 0x000000ff #define TSENS_MSM8952_BASE1_MASK 0xff000000 #define TSENS0_MSM8952_POINT1_MASK 0x000001f8 #define TSENS1_MSM8952_POINT1_MASK 0x001f8000 #define TSENS2_MSM8952_POINT1_MASK_0_4 0xf8000000 #define TSENS2_MSM8952_POINT1_MASK_5 0x00000001 #define TSENS3_MSM8952_POINT1_MASK 0x00001f80 #define TSENS4_MSM8952_POINT1_MASK 0x01f80000 #define TSENS5_MSM8952_POINT1_MASK 0x00003f00 #define TSENS6_MSM8952_POINT1_MASK 0x03f00000 #define TSENS7_MSM8952_POINT1_MASK 0x0000003f #define TSENS8_MSM8952_POINT1_MASK 0x0003f000 #define TSENS9_MSM8952_POINT1_MASK 0x0000003f #define TSENS10_MSM8952_POINT1_MASK 0x0003f000 #define TSENS0_MSM8952_POINT2_MASK 0x00007e00 #define TSENS1_MSM8952_POINT2_MASK 0x07e00000 #define TSENS2_MSM8952_POINT2_MASK 0x0000007e #define TSENS3_MSM8952_POINT2_MASK 0x0007e000 #define TSENS4_MSM8952_POINT2_MASK 0x7e000000 #define TSENS5_MSM8952_POINT2_MASK 0x000fc000 #define TSENS6_MSM8952_POINT2_MASK 0xfc000000 #define TSENS7_MSM8952_POINT2_MASK 0x00000fc0 #define TSENS8_MSM8952_POINT2_MASK 0x00fc0000 #define TSENS9_MSM8952_POINT2_MASK 0x00000fc0 #define TSENS10_MSM8952_POINT2_MASK 0x00fc0000 #define TSENS_MSM8952_TSENS_CAL_SEL 0x00000007 #define TSENS_MSM8952_BASE1_SHIFT 24 #define TSENS0_MSM8952_POINT1_SHIFT 3 #define TSENS1_MSM8952_POINT1_SHIFT 15 #define TSENS2_MSM8952_POINT1_SHIFT_0_4 27 #define TSENS2_MSM8952_POINT1_SHIFT_5 5 #define TSENS3_MSM8952_POINT1_SHIFT 7 #define TSENS4_MSM8952_POINT1_SHIFT 19 #define TSENS5_MSM8952_POINT1_SHIFT 8 #define TSENS6_MSM8952_POINT1_SHIFT 20 #define TSENS8_MSM8952_POINT1_SHIFT 12 #define TSENS10_MSM8952_POINT1_SHIFT 12 #define TSENS0_MSM8952_POINT2_SHIFT 9 #define TSENS1_MSM8952_POINT2_SHIFT 21 #define TSENS2_MSM8952_POINT2_SHIFT 1 #define TSENS3_MSM8952_POINT2_SHIFT 13 #define TSENS4_MSM8952_POINT2_SHIFT 25 #define TSENS5_MSM8952_POINT2_SHIFT 14 #define TSENS6_MSM8952_POINT2_SHIFT 26 #define TSENS7_MSM8952_POINT2_SHIFT 6 #define TSENS8_MSM8952_POINT2_SHIFT 18 #define TSENS9_MSM8952_POINT2_SHIFT 6 #define TSENS10_MSM8952_POINT2_SHIFT 18 #define TSENS_CONTR_14_BASE0_MASK 0x000000ff #define TSENS_CONTR_14_BASE1_MASK 0xff000000 #define TSENS0_CONTR_14_POINT1_MASK 0x000001f8 #define TSENS1_CONTR_14_POINT1_MASK 0x001f8000 #define TSENS2_CONTR_14_POINT1_MASK_0_4 0xf8000000 #define TSENS2_CONTR_14_POINT1_MASK_5 0x00000001 #define TSENS3_CONTR_14_POINT1_MASK 0x00001f80 #define TSENS4_CONTR_14_POINT1_MASK 0x01f80000 #define TSENS5_CONTR_14_POINT1_MASK 0x00003f00 #define TSENS6_CONTR_14_POINT1_MASK 0x03f00000 #define TSENS7_CONTR_14_POINT1_MASK 0x0000003f #define TSENS8_CONTR_14_POINT1_MASK 0x0003f000 #define TSENS9_CONTR_14_POINT1_MASK 0x0000003f #define TSENS10_CONTR_14_POINT1_MASK 0x0003f000 #define TSENS0_CONTR_14_POINT2_MASK 0x00007e00 #define TSENS1_CONTR_14_POINT2_MASK 0x07e00000 #define TSENS2_CONTR_14_POINT2_MASK 0x0000007e #define TSENS3_CONTR_14_POINT2_MASK 0x0007e000 #define TSENS4_CONTR_14_POINT2_MASK 0x7e000000 #define TSENS5_CONTR_14_POINT2_MASK 0x000fc000 #define TSENS6_CONTR_14_POINT2_MASK 0xfc000000 #define TSENS7_CONTR_14_POINT2_MASK 0x00000fc0 #define TSENS8_CONTR_14_POINT2_MASK 0x00fc0000 #define TSENS9_CONTR_14_POINT2_MASK 0x00000fc0 #define TSENS10_CONTR_14_POINT2_MASK 0x00fc0000 #define TSENS_CONTR_14_TSENS_CAL_SEL 0x00000007 #define TSENS_CONTR_14_BASE1_SHIFT 24 #define TSENS0_CONTR_14_POINT1_SHIFT 3 #define TSENS1_CONTR_14_POINT1_SHIFT 15 #define TSENS2_CONTR_14_POINT1_SHIFT_0_4 27 #define TSENS2_CONTR_14_POINT1_SHIFT_5 5 #define TSENS3_CONTR_14_POINT1_SHIFT 7 #define TSENS4_CONTR_14_POINT1_SHIFT 19 #define TSENS5_CONTR_14_POINT1_SHIFT 8 #define TSENS6_CONTR_14_POINT1_SHIFT 20 #define TSENS8_CONTR_14_POINT1_SHIFT 12 #define TSENS10_CONTR_14_POINT1_SHIFT 12 #define TSENS0_CONTR_14_POINT2_SHIFT 9 #define TSENS1_CONTR_14_POINT2_SHIFT 21 #define TSENS2_CONTR_14_POINT2_SHIFT 1 #define TSENS3_CONTR_14_POINT2_SHIFT 13 #define TSENS4_CONTR_14_POINT2_SHIFT 25 #define TSENS5_CONTR_14_POINT2_SHIFT 14 #define TSENS6_CONTR_14_POINT2_SHIFT 26 #define TSENS7_CONTR_14_POINT2_SHIFT 6 #define TSENS8_CONTR_14_POINT2_SHIFT 18 #define TSENS9_CONTR_14_POINT2_SHIFT 6 #define TSENS10_CONTR_14_POINT2_SHIFT 18 #define TSENS_TWO_POINT_CALIB_N_WA 0x6 #define TSENS_TWO_POINT_CALIB_N_OFFSET_WA 0x7 Loading Loading @@ -736,6 +736,7 @@ enum tsens_calib_fuse_map_type { TSENS_CALIB_FUSE_MAP_8992, TSENS_CALIB_FUSE_MAP_MSM8952, TSENS_CALIB_FUSE_MAP_MDMFERMIUM, TSENS_CALIB_FUSE_MAP_MSMTHORIUM, TSENS_CALIB_FUSE_MAP_NUM, }; Loading Loading @@ -879,6 +880,9 @@ static struct of_device_id tsens_match[] = { { .compatible = "qcom,msmtitanium-tsens", .data = (void *)TSENS_CALIB_FUSE_MAP_NONE, }, { .compatible = "qcom,msmthorium-tsens", .data = (void *)TSENS_CALIB_FUSE_MAP_MSMTHORIUM, }, {} }; Loading Loading @@ -2517,6 +2521,208 @@ static int tsens_hw_init(struct tsens_tm_device *tmdev) return 0; } static int tsens_calib_msmthorium_sensors(struct tsens_tm_device *tmdev) { int i, tsens_base0_data = 0, tsens_base1_data = 0; int tsens0_point1 = 0, tsens0_point2 = 0; int tsens1_point1 = 0, tsens1_point2 = 0; int tsens2_point1 = 0, tsens2_point2 = 0; int tsens3_point1 = 0, tsens3_point2 = 0; int tsens4_point1 = 0, tsens4_point2 = 0; int tsens5_point1 = 0, tsens5_point2 = 0; int tsens6_point1 = 0, tsens6_point2 = 0; int tsens7_point1 = 0, tsens7_point2 = 0; int tsens8_point1 = 0, tsens8_point2 = 0; int tsens9_point1 = 0, tsens9_point2 = 0; int tsens10_point1 = 0, tsens10_point2 = 0; int tsens_calibration_mode = 0, temp = 0; uint32_t calib_data[5] = {0, 0, 0, 0, 0}; uint32_t calib_tsens_point1_data[11], calib_tsens_point2_data[11]; if (!tmdev->calibration_less_mode) { calib_data[0] = readl_relaxed(tmdev->tsens_calib_addr + 0x1D8); calib_data[1] = readl_relaxed(tmdev->tsens_calib_addr + 0x1DC); calib_data[2] = readl_relaxed(tmdev->tsens_calib_addr + 0x210); calib_data[3] = readl_relaxed(tmdev->tsens_calib_addr + 0x214); calib_data[4] = readl_relaxed(tmdev->tsens_calib_addr + 0x230); tsens_calibration_mode = (calib_data[2] & TSENS_CONTR_14_TSENS_CAL_SEL); pr_debug("calib mode is %d\n", tsens_calibration_mode); } if ((tsens_calibration_mode == TSENS_TWO_POINT_CALIB) || (tsens_calibration_mode == TSENS_ONE_POINT_CALIB_OPTION_2)) { tsens_base0_data = (calib_data[0] & TSENS_CONTR_14_BASE0_MASK); tsens0_point1 = (calib_data[2] & TSENS0_CONTR_14_POINT1_MASK) >> TSENS0_CONTR_14_POINT1_SHIFT; tsens1_point1 = (calib_data[2] & TSENS1_CONTR_14_POINT1_MASK) >> TSENS1_CONTR_14_POINT1_SHIFT; tsens2_point1 = (calib_data[2] & TSENS2_CONTR_14_POINT1_MASK_0_4) >> TSENS2_CONTR_14_POINT1_SHIFT_0_4; temp = (calib_data[3] & TSENS2_CONTR_14_POINT1_MASK_5) << TSENS2_CONTR_14_POINT1_SHIFT_5; tsens2_point1 |= temp; tsens3_point1 = (calib_data[3] & TSENS3_CONTR_14_POINT1_MASK) >> TSENS3_CONTR_14_POINT1_SHIFT; tsens4_point1 = (calib_data[3] & TSENS4_CONTR_14_POINT1_MASK) >> TSENS4_CONTR_14_POINT1_SHIFT; tsens5_point1 = (calib_data[0] & TSENS5_CONTR_14_POINT1_MASK) >> TSENS5_CONTR_14_POINT1_SHIFT; tsens6_point1 = (calib_data[0] & TSENS6_CONTR_14_POINT1_MASK) >> TSENS6_CONTR_14_POINT1_SHIFT; tsens7_point1 = (calib_data[1] & TSENS7_CONTR_14_POINT1_MASK); tsens8_point1 = (calib_data[1] & TSENS8_CONTR_14_POINT1_MASK) >> TSENS8_CONTR_14_POINT1_SHIFT; tsens9_point1 = (calib_data[4] & TSENS9_CONTR_14_POINT1_MASK); tsens10_point1 = (calib_data[4] & TSENS10_CONTR_14_POINT1_MASK) >> TSENS10_CONTR_14_POINT1_SHIFT; } if (tsens_calibration_mode == TSENS_TWO_POINT_CALIB) { tsens_base1_data = (calib_data[1] & TSENS_CONTR_14_BASE1_MASK) >> TSENS_CONTR_14_BASE1_SHIFT; tsens0_point2 = (calib_data[2] & TSENS0_CONTR_14_POINT2_MASK) >> TSENS0_CONTR_14_POINT2_SHIFT; tsens1_point2 = (calib_data[2] & TSENS1_CONTR_14_POINT2_MASK) >> TSENS1_CONTR_14_POINT2_SHIFT; tsens2_point2 = (calib_data[3] & TSENS2_CONTR_14_POINT2_MASK) >> TSENS2_CONTR_14_POINT2_SHIFT; tsens3_point2 = (calib_data[3] & TSENS3_CONTR_14_POINT2_MASK) >> TSENS3_CONTR_14_POINT2_SHIFT; tsens4_point2 = (calib_data[3] & TSENS4_CONTR_14_POINT2_MASK) >> TSENS4_CONTR_14_POINT2_SHIFT; tsens5_point2 = (calib_data[0] & TSENS5_CONTR_14_POINT2_MASK) >> TSENS5_CONTR_14_POINT2_SHIFT; tsens6_point2 = (calib_data[0] & TSENS6_CONTR_14_POINT2_MASK) >> TSENS6_CONTR_14_POINT2_SHIFT; tsens7_point2 = (calib_data[1] & TSENS7_CONTR_14_POINT2_MASK) >> TSENS7_CONTR_14_POINT2_SHIFT; tsens8_point2 = (calib_data[1] & TSENS8_CONTR_14_POINT2_MASK) >> TSENS8_CONTR_14_POINT2_SHIFT; tsens9_point2 = (calib_data[4] & TSENS9_CONTR_14_POINT2_MASK) >> TSENS9_CONTR_14_POINT2_SHIFT; tsens10_point2 = (calib_data[4] & TSENS10_CONTR_14_POINT2_MASK) >> TSENS10_CONTR_14_POINT2_SHIFT; } if (tsens_calibration_mode == 0) { pr_debug("TSENS in calibrationless mode\n"); for (i = 0; i < tmdev->tsens_num_sensor; i++) { calib_tsens_point2_data[i] = TSENS_NO_CALIB_POINT2_DATA; calib_tsens_point1_data[i] = TSENS_NO_CALIB_POINT1_DATA; } } if ((tsens_calibration_mode == TSENS_ONE_POINT_CALIB_OPTION_2) || (tsens_calibration_mode == TSENS_TWO_POINT_CALIB)) { calib_tsens_point1_data[0] = (((tsens_base0_data) + tsens0_point1) << 2); calib_tsens_point1_data[1] = (((tsens_base0_data) + tsens1_point1) << 2); calib_tsens_point1_data[2] = (((tsens_base0_data) + tsens2_point1) << 2); calib_tsens_point1_data[3] = (((tsens_base0_data) + tsens3_point1) << 2); calib_tsens_point1_data[4] = (((tsens_base0_data) + tsens4_point1) << 2); calib_tsens_point1_data[5] = (((tsens_base0_data) + tsens5_point1) << 2); calib_tsens_point1_data[6] = (((tsens_base0_data) + tsens6_point1) << 2); calib_tsens_point1_data[7] = (((tsens_base0_data) + tsens7_point1) << 2); calib_tsens_point1_data[8] = (((tsens_base0_data) + tsens8_point1) << 2); calib_tsens_point1_data[9] = (((tsens_base0_data) + tsens9_point1) << 2); calib_tsens_point1_data[10] = (((tsens_base0_data) + tsens10_point1) << 2); } if (tsens_calibration_mode == TSENS_TWO_POINT_CALIB) { pr_debug("two point calibration calculation\n"); calib_tsens_point2_data[0] = ((tsens_base1_data + tsens0_point2) << 2); calib_tsens_point2_data[1] = ((tsens_base1_data + tsens1_point2) << 2); calib_tsens_point2_data[2] = ((tsens_base1_data + tsens2_point2) << 2); calib_tsens_point2_data[3] = ((tsens_base1_data + tsens3_point2) << 2); calib_tsens_point2_data[4] = ((tsens_base1_data + tsens4_point2) << 2); calib_tsens_point2_data[5] = ((tsens_base1_data + tsens5_point2) << 2); calib_tsens_point2_data[6] = ((tsens_base1_data + tsens6_point2) << 2); calib_tsens_point2_data[7] = ((tsens_base1_data + tsens7_point2) << 2); calib_tsens_point2_data[8] = ((tsens_base1_data + tsens8_point2) << 2); calib_tsens_point2_data[9] = ((tsens_base1_data + tsens9_point2) << 2); calib_tsens_point2_data[10] = ((tsens_base1_data + tsens10_point2) << 2); } for (i = 0; i < tmdev->tsens_num_sensor; i++) { int32_t num = 0, den = 0; tmdev->sensor[i].calib_data_point2 = calib_tsens_point2_data[i]; tmdev->sensor[i].calib_data_point1 = calib_tsens_point1_data[i]; pr_debug("sensor:%d - calib_data_point1:0x%x, calib_data_point2:0x%x\n", i, tmdev->sensor[i].calib_data_point1, tmdev->sensor[i].calib_data_point2); if (tsens_calibration_mode == TSENS_TWO_POINT_CALIB) { /* * slope (m) = adc_code2 - adc_code1 (y2 - y1) * temp_120_degc - temp_30_degc (x2 - x1) */ num = tmdev->sensor[i].calib_data_point2 - tmdev->sensor[i].calib_data_point1; num *= tmdev->tsens_factor; den = TSENS_CAL_DEGC_POINT2 - TSENS_CAL_DEGC_POINT1; tmdev->sensor[i].slope_mul_tsens_factor = num/den; } tmdev->sensor[i].offset = (tmdev->sensor[i].calib_data_point1 * tmdev->tsens_factor) - (TSENS_CAL_DEGC_POINT1 * tmdev->sensor[i].slope_mul_tsens_factor); pr_debug("offset:%d and slope:%d\n", tmdev->sensor[i].offset, tmdev->sensor[i].slope_mul_tsens_factor); tmdev->prev_reading_avail = false; } return 0; } static int tsens_calib_mdmfermium_sensors(struct tsens_tm_device *tmdev) { int i, tsens_base0_data = 0, tsens_base1_data = 0; Loading Loading @@ -2674,7 +2880,7 @@ static int tsens_calib_msm8952_sensors(struct tsens_tm_device *tmdev) tsens_calibration_mode = (calib_data[0] & TSENS_MSM8952_TSENS_CAL_SEL); TSENS_CONTR_14_TSENS_CAL_SEL); pr_debug("calib mode is %d\n", tsens_calibration_mode); } Loading @@ -2682,80 +2888,80 @@ static int tsens_calib_msm8952_sensors(struct tsens_tm_device *tmdev) if ((tsens_calibration_mode == TSENS_TWO_POINT_CALIB) || (tsens_calibration_mode == TSENS_ONE_POINT_CALIB_OPTION_2)) { tsens_base0_data = (calib_data[2] & TSENS_MSM8952_BASE0_MASK); TSENS_CONTR_14_BASE0_MASK); tsens0_point1 = (calib_data[0] & TSENS0_MSM8952_POINT1_MASK) >> TSENS0_MSM8952_POINT1_SHIFT; TSENS0_CONTR_14_POINT1_MASK) >> TSENS0_CONTR_14_POINT1_SHIFT; tsens1_point1 = (calib_data[0] & TSENS1_MSM8952_POINT1_MASK) >> TSENS1_MSM8952_POINT1_SHIFT; TSENS1_CONTR_14_POINT1_MASK) >> TSENS1_CONTR_14_POINT1_SHIFT; tsens2_point1 = (calib_data[0] & TSENS2_MSM8952_POINT1_MASK_0_4) >> TSENS2_MSM8952_POINT1_SHIFT_0_4; temp = (calib_data[1] & TSENS2_MSM8952_POINT1_MASK_5) << TSENS2_MSM8952_POINT1_SHIFT_5; TSENS2_CONTR_14_POINT1_MASK_0_4) >> TSENS2_CONTR_14_POINT1_SHIFT_0_4; temp = (calib_data[1] & TSENS2_CONTR_14_POINT1_MASK_5) << TSENS2_CONTR_14_POINT1_SHIFT_5; tsens2_point1 |= temp; tsens3_point1 = (calib_data[1] & TSENS3_MSM8952_POINT1_MASK) >> TSENS3_MSM8952_POINT1_SHIFT; TSENS3_CONTR_14_POINT1_MASK) >> TSENS3_CONTR_14_POINT1_SHIFT; tsens4_point1 = (calib_data[1] & TSENS4_MSM8952_POINT1_MASK) >> TSENS4_MSM8952_POINT1_SHIFT; TSENS4_CONTR_14_POINT1_MASK) >> TSENS4_CONTR_14_POINT1_SHIFT; tsens5_point1 = (calib_data[2] & TSENS5_MSM8952_POINT1_MASK) >> TSENS5_MSM8952_POINT1_SHIFT; TSENS5_CONTR_14_POINT1_MASK) >> TSENS5_CONTR_14_POINT1_SHIFT; tsens6_point1 = (calib_data[2] & TSENS6_MSM8952_POINT1_MASK) >> TSENS6_MSM8952_POINT1_SHIFT; TSENS6_CONTR_14_POINT1_MASK) >> TSENS6_CONTR_14_POINT1_SHIFT; tsens7_point1 = (calib_data[3] & TSENS7_MSM8952_POINT1_MASK); TSENS7_CONTR_14_POINT1_MASK); tsens8_point1 = (calib_data[3] & TSENS8_MSM8952_POINT1_MASK) >> TSENS8_MSM8952_POINT1_SHIFT; TSENS8_CONTR_14_POINT1_MASK) >> TSENS8_CONTR_14_POINT1_SHIFT; tsens9_point1 = (calib_data[4] & TSENS9_MSM8952_POINT1_MASK); TSENS9_CONTR_14_POINT1_MASK); tsens10_point1 = (calib_data[4] & TSENS10_MSM8952_POINT1_MASK) >> TSENS10_MSM8952_POINT1_SHIFT; TSENS10_CONTR_14_POINT1_MASK) >> TSENS10_CONTR_14_POINT1_SHIFT; } if (tsens_calibration_mode == TSENS_TWO_POINT_CALIB) { tsens_base1_data = (calib_data[3] & TSENS_MSM8952_BASE1_MASK) >> TSENS_MSM8952_BASE1_SHIFT; TSENS_CONTR_14_BASE1_MASK) >> TSENS_CONTR_14_BASE1_SHIFT; tsens0_point2 = (calib_data[0] & TSENS0_MSM8952_POINT2_MASK) >> TSENS0_MSM8952_POINT2_SHIFT; TSENS0_CONTR_14_POINT2_MASK) >> TSENS0_CONTR_14_POINT2_SHIFT; tsens1_point2 = (calib_data[0] & TSENS1_MSM8952_POINT2_MASK) >> TSENS1_MSM8952_POINT2_SHIFT; TSENS1_CONTR_14_POINT2_MASK) >> TSENS1_CONTR_14_POINT2_SHIFT; tsens2_point2 = (calib_data[1] & TSENS2_MSM8952_POINT2_MASK) >> TSENS2_MSM8952_POINT2_SHIFT; TSENS2_CONTR_14_POINT2_MASK) >> TSENS2_CONTR_14_POINT2_SHIFT; tsens3_point2 = (calib_data[1] & TSENS3_MSM8952_POINT2_MASK) >> TSENS3_MSM8952_POINT2_SHIFT; TSENS3_CONTR_14_POINT2_MASK) >> TSENS3_CONTR_14_POINT2_SHIFT; tsens4_point2 = (calib_data[1] & TSENS4_MSM8952_POINT2_MASK) >> TSENS4_MSM8952_POINT2_SHIFT; TSENS4_CONTR_14_POINT2_MASK) >> TSENS4_CONTR_14_POINT2_SHIFT; tsens5_point2 = (calib_data[2] & TSENS5_MSM8952_POINT2_MASK) >> TSENS5_MSM8952_POINT2_SHIFT; TSENS5_CONTR_14_POINT2_MASK) >> TSENS5_CONTR_14_POINT2_SHIFT; tsens6_point2 = (calib_data[2] & TSENS6_MSM8952_POINT2_MASK) >> TSENS6_MSM8952_POINT2_SHIFT; TSENS6_CONTR_14_POINT2_MASK) >> TSENS6_CONTR_14_POINT2_SHIFT; tsens7_point2 = (calib_data[3] & TSENS7_MSM8952_POINT2_MASK) >> TSENS7_MSM8952_POINT2_SHIFT; TSENS7_CONTR_14_POINT2_MASK) >> TSENS7_CONTR_14_POINT2_SHIFT; tsens8_point2 = (calib_data[3] & TSENS8_MSM8952_POINT2_MASK) >> TSENS8_MSM8952_POINT2_SHIFT; TSENS8_CONTR_14_POINT2_MASK) >> TSENS8_CONTR_14_POINT2_SHIFT; tsens9_point2 = (calib_data[4] & TSENS9_MSM8952_POINT2_MASK) >> TSENS9_MSM8952_POINT2_SHIFT; TSENS9_CONTR_14_POINT2_MASK) >> TSENS9_CONTR_14_POINT2_SHIFT; tsens10_point2 = (calib_data[4] & TSENS10_MSM8952_POINT2_MASK) >> TSENS10_MSM8952_POINT2_SHIFT; TSENS10_CONTR_14_POINT2_MASK) >> TSENS10_CONTR_14_POINT2_SHIFT; } if (tsens_calibration_mode == 0) { Loading Loading @@ -4904,6 +5110,8 @@ static int tsens_calib_sensors(struct tsens_tm_device *tmdev) rc = tsens_calib_msm8952_sensors(tmdev); else if (tmdev->calib_mode == TSENS_CALIB_FUSE_MAP_MDMFERMIUM) rc = tsens_calib_mdmfermium_sensors(tmdev); else if (tmdev->calib_mode == TSENS_CALIB_FUSE_MAP_MSMTHORIUM) rc = tsens_calib_msmthorium_sensors(tmdev); else if (tmdev->calib_mode == TSENS_CALIB_FUSE_MAP_NONE) { pr_debug("Fuse map info not required\n"); rc = 0; Loading Loading @@ -5017,7 +5225,8 @@ static int get_device_tree_data(struct platform_device *pdev, else if (!strcmp(id->compatible, "qcom,msmtitanium-tsens")) { tmdev->tsens_type = TSENS_TYPE3; tsens_poll_check = 0; } else if (!strcmp(id->compatible, "qcom,msm8952-tsens")) } else if (!strcmp(id->compatible, "qcom,msm8952-tsens") || (!strcmp(id->compatible, "qcom,msmthorium-tsens"))) tmdev->tsens_type = TSENS_TYPE4; else tmdev->tsens_type = TSENS_TYPE0; Loading