Linux-fslc temperature calibration in kernel driver imx_thermal.c

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Linux-fslc temperature calibration in kernel driver imx_thermal.c

1,894 次查看
ennebi
Contributor II

Hi,

I'm using Linux-fslc with imx6ull.

I observed that the "i.MX 6ULL Applications Processor Reference Manual", at "Chapter 52 Temperature Monitor" specifies that temperature calibration is defined with 2 points:

- (N1, T1) = (ROOM_COUNT, 25.0)

- (N2, T2) = (HOT_COUNT, HOT_TEMP)

While the kernel driver imx_thermal.c (5.15 and 6.12 are the same), in imx_init_calib() considers only one calibration point: the OCOTP_ANA1[ROOM_COUNT] at 25°C as in the following code extract:

 

static int imx_init_calib(struct platform_device *pdev, u32 ocotp_ana1)
{
	struct imx_thermal_data *data = platform_get_drvdata(pdev);
	int n1;
	u64 temp64;

	if (ocotp_ana1 == 0 || ocotp_ana1 == ~0) {
		dev_err(&pdev->dev, "invalid sensor calibration data\n");
		return -EINVAL;
	}

	/*
	 * On i.MX7D, we only use the calibration data at 25C to get the temp,
	 * Tmeas = ( Nmeas - n1) + 25; n1 is the fuse value for 25C.
	 */
	if (data->socdata->version == TEMPMON_IMX7D) {
		data->c1 = (ocotp_ana1 >> 9) & 0x1ff;
		return 0;
	}

	/*
	 * The sensor is calibrated at 25 °C (aka T1) and the value measured
	 * (aka N1) at this temperature is provided in bits [31:20] in the
	 * i.MX's OCOTP value ANA1.
	 * To find the actual temperature T, the following formula has to be used
	 * when reading value n from the sensor:
	 *
	 * T = T1 + (N - N1) / (0.4148468 - 0.0015423 * N1) °C + 3.580661 °C
	 *   = [T1' - N1 / (0.4148468 - 0.0015423 * N1) °C] + N / (0.4148468 - 0.0015423 * N1) °C
	 *   = [T1' + N1 / (0.0015423 * N1 - 0.4148468) °C] - N / (0.0015423 * N1 - 0.4148468) °C
	 *   = c2 - c1 * N
	 *
	 * with
	 *
	 *  T1' = 28.580661 °C
	 *   c1 = 1 / (0.0015423 * N1 - 0.4297157) °C
	 *   c2 = T1' + N1 / (0.0015423 * N1 - 0.4148468) °C
	 *      = T1' + N1 * c1
	 */
	n1 = ocotp_ana1 >> 20;

	temp64 = 10000000; /* use 10^7 as fixed point constant for values in formula */
	temp64 *= 1000; /* to get result in °mC */
	do_div(temp64, 15423 * n1 - 4148468);
	data->c1 = temp64;
	data->c2 = n1 * data->c1 + 28581;

	return 0;
}

 

This line 'n1 = ocotp_ana1 >> 20', drops OCOTP_ANA1[HOT_COUNT] and OCOTP_ANA1[HOT_TEMP] and this leads to temperature inconsistencies.

 

To confirm this, I did some verifications on a board, by reading registers and calculating trip temperatures:

  • Calibration register OCOTP_ANA1=0x50F4A269
    • ROOM_COUNT=0x50F = 1295
    • HOT_COUNT=0x4A2 = 1186
    • HOT_TEMP(°C)=0x69=105
  • TEMPMON_TEMPSENSE0=0x4A551206
    • ALARM_VALUE=0x4A5=1189
  • TEMPMON_TEMPSENSE2= 0x049D0FFF
    • PANIC_ALARM_VALUE=49D=1181

than I converted [ALARM_VALUE] and  [PANIC_ALARM_VALUE] to celsius temperature according to reference manual indication:

  • Tmeas = HOT_TEMP - (Nmeas - HOT_COUNT) * ((HOT_TEMP - 25.0) /
    (ROOM_COUNT – HOT_COUNT))

so I got:

  • Alarm/Passive temperature = 102,8°C
  • Panic temperature = 108.7°C

those temperatures are greater than default trip temperature:

 

  • Alarm/passive temperature = 95°C (10°c less than max temperature of 105°C)
  • Panic temperature = 100°C (5°C less than max temperature of 105°C)

This looks like a potentially critical issue in the driver where the panic temperature is already above the maximum operating temperature from datasheet.

Can you confirm the issue?

标签 (1)
标记 (2)
0 项奖励
回复
3 回复数

1,810 次查看
JorgeCas
NXP TechSupport
NXP TechSupport

Hello,

Have you encountered any temperature measurement inaccuracies or trip temperature points are incorrect?

I have discussed the code with owner. It's an very old code and he though the algorithm should be okay.

Best regards.

0 项奖励
回复

1,762 次查看
ennebi
Contributor II

Hi Jorge,

as I reported in my initial post, I confirm you that trip temperature points are incorrect:

  • actual Alarm/Passive temperature is 102,8°C instead of 95°C
  • actual Panic temperature is 108.7°C instead of 100°C

This is a potentially critical issue, the panic temperature is above the maximum operating temperature of 105°C.

0 项奖励
回复

1,622 次查看
JorgeCas
NXP TechSupport
NXP TechSupport

Hello,

The coefficients used for single-point calibration and two-point calibration differ significantly. Regarding your question—have you compared the temperature derived from single-point calibration against actual ambient conditions to assess error margins?

On iMX6, single-point calibration is applied with calculations referenced in imx_init_calib, incorporating additional coefficients c1 and c2. Notably, even imx_set_alarm_temp utilizes single-point calibration coefficients when configuring alarm thresholds.

Crucially, attempting to inversely convert single-point calibration results using two-point calibration methodology is fundamentally incorrect—the calibration frameworks are not interchangeable or reversible in this manner.

Best regards.

0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2189166%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%86%85%E6%A0%B8%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%20imx_thermal.c%20%E4%B8%AD%E7%9A%84%20Linux-fslc%20%E6%B8%A9%E5%BA%A6%E6%A0%A1%E5%87%86%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2189166%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E6%82%A8%E5%A5%BD%EF%BC%8C%3C%2FP%3E%3CP%3E%E6%88%91%E4%BD%BF%E7%94%A8%E7%9A%84%E6%98%AF%E5%B8%A6%E6%9C%89%20imx6ull%20%E7%9A%84%20Linux-fslc%E3%80%82%3C%2FP%3E%3CP%3E%3CSPAN%3E%E6%88%91%E8%A7%82%E5%AF%9F%E5%88%B0%20%22%20i.MX%206ULL%20%E5%BA%94%E7%94%A8%E5%A4%84%E7%90%86%E5%99%A8%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C%20%22%20%E5%9C%A8%20%22%20%E7%AC%AC%2052%20%E7%AB%A0%E6%B8%A9%E5%BA%A6%E7%9B%91%E6%B5%8B%20%22%20%E4%B8%AD%E8%A7%84%E5%AE%9A%EF%BC%8C%E6%B8%A9%E5%BA%A6%E6%A0%A1%E5%87%86%E7%94%B1%202%20%E4%B8%AA%E7%82%B9%E5%AE%9A%E4%B9%89%EF%BC%9A%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3E-%20(n1%2C%20t1)%20%3D%20(room_count%2C%2025.0)%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3E-%20(n2%2C%20t2)%20%3D%20(hot_count%2C%20hot_temp)%3CBR%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%E8%80%8C%E5%86%85%E6%A0%B8%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%20imx_thermal.c(5.15%20%E5%92%8C%206.12%20%E7%9B%B8%E5%90%8C%EF%BC%89%EF%BC%8C%E5%9C%A8%3CSPAN%3Eimx_init_calib()%3C%2FSPAN%3E%E4%B8%AD%E5%8F%AA%E8%80%83%E8%99%91%E4%B8%80%E4%B8%AA%E6%A0%A1%E5%87%86%E7%82%B9%EF%BC%9A25%C2%B0C%20%E6%97%B6%E7%9A%84%20OCOTP_ANA1%5BROOM_COUNT%5D%EF%BC%8C%E5%A6%82%E4%BB%A5%E4%B8%8B%E4%BB%A3%E7%A0%81%E6%91%98%E5%BD%95%E6%89%80%E7%A4%BA%EF%BC%9A%3C%2FP%3E%3CBR%20%2F%3E%3CPRE%20class%3D%22lia-code-sample%20language-c%22%3E%3CCODE%20translate%3D%22no%22%3Estatic%20int%20imx_init_calib(struct%20platform_device%20*pdev%2C%20u32%20ocotp_ana1)%0A%7B%0A%09struct%20imx_thermal_data%20*data%20%3D%20platform_get_drvdata(pdev)%3B%0A%09int%20n1%3B%0A%09u64%20temp64%3B%0A%0A%09if%20(ocotp_ana1%20%3D%3D%200%20%7C%7C%20ocotp_ana1%20%3D%3D%20~0)%20%7B%0A%09%09dev_err(%26amp%3Bpdev-%26gt%3Bdev%2C%20%22invalid%20sensor%20calibration%20data%5Cn%22)%3B%0A%09%09return%20-EINVAL%3B%0A%09%7D%0A%0A%09%2F*%0A%09%20*%20On%20i.MX7D%2C%20we%20only%20use%20the%20calibration%20data%20at%2025C%20to%20get%20the%20temp%2C%0A%09%20*%20Tmeas%20%3D%20(%20Nmeas%20-%20n1)%20%2B%2025%3B%20n1%20is%20the%20fuse%20value%20for%2025C.%0A%09%20*%2F%0A%09if%20(data-%26gt%3Bsocdata-%26gt%3Bversion%20%3D%3D%20TEMPMON_IMX7D)%20%7B%0A%09%09data-%26gt%3Bc1%20%3D%20(ocotp_ana1%20%26gt%3B%26gt%3B%209)%20%26amp%3B%200x1ff%3B%0A%09%09return%200%3B%0A%09%7D%0A%0A%09%2F*%0A%09%20*%20The%20sensor%20is%20calibrated%20at%2025%20%C2%B0C%20(aka%20T1)%20and%20the%20value%20measured%0A%09%20*%20(aka%20N1)%20at%20this%20temperature%20is%20provided%20in%20bits%20%5B31%3A20%5D%20in%20the%0A%09%20*%20i.MX's%20OCOTP%20value%20ANA1.%0A%09%20*%20To%20find%20the%20actual%20temperature%20T%2C%20the%20following%20formula%20has%20to%20be%20used%0A%09%20*%20when%20reading%20value%20n%20from%20the%20sensor%3A%0A%09%20*%0A%09%20*%20T%20%3D%20T1%20%2B%20(N%20-%20N1)%20%2F%20(0.4148468%20-%200.0015423%20*%20N1)%20%C2%B0C%20%2B%203.580661%20%C2%B0C%0A%09%20*%20%20%20%3D%20%5BT1'%20-%20N1%20%2F%20(0.4148468%20-%200.0015423%20*%20N1)%20%C2%B0C%5D%20%2B%20N%20%2F%20(0.4148468%20-%200.0015423%20*%20N1)%20%C2%B0C%0A%09%20*%20%20%20%3D%20%5BT1'%20%2B%20N1%20%2F%20(0.0015423%20*%20N1%20-%200.4148468)%20%C2%B0C%5D%20-%20N%20%2F%20(0.0015423%20*%20N1%20-%200.4148468)%20%C2%B0C%0A%09%20*%20%20%20%3D%20c2%20-%20c1%20*%20N%0A%09%20*%0A%09%20*%20with%0A%09%20*%0A%09%20*%20%20T1'%20%3D%2028.580661%20%C2%B0C%0A%09%20*%20%20%20c1%20%3D%201%20%2F%20(0.0015423%20*%20N1%20-%200.4297157)%20%C2%B0C%0A%09%20*%20%20%20c2%20%3D%20T1'%20%2B%20N1%20%2F%20(0.0015423%20*%20N1%20-%200.4148468)%20%C2%B0C%0A%09%20*%20%20%20%20%20%20%3D%20T1'%20%2B%20N1%20*%20c1%0A%09%20*%2F%0A%09n1%20%3D%20ocotp_ana1%20%26gt%3B%26gt%3B%2020%3B%0A%0A%09temp64%20%3D%2010000000%3B%20%2F*%20use%2010%5E7%20as%20fixed%20point%20constant%20for%20values%20in%20formula%20*%2F%0A%09temp64%20*%3D%201000%3B%20%2F*%20to%20get%20result%20in%20%C2%B0mC%20*%2F%0A%09do_div(temp64%2C%2015423%20*%20n1%20-%204148468)%3B%0A%09data-%26gt%3Bc1%20%3D%20temp64%3B%0A%09data-%26gt%3Bc2%20%3D%20n1%20*%20data-%26gt%3Bc1%20%2B%2028581%3B%0A%0A%09return%200%3B%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CBR%20%2F%3E%3CP%3E%3CSPAN%3E%E8%BF%99%E4%B8%80%E8%A1%8C%20'%3C%2FSPAN%3E%3CSPAN%3En1%20%3C%2FSPAN%3E%3CSPAN%3E%3D%3C%2FSPAN%3E%3CSPAN%3Eocotp_ana1%20%3C%2FSPAN%3E%3CSPAN%3E%26gt%3B%26gt%3B%3C%2FSPAN%3E%20%3CSPAN%3E20'%EF%BC%8C%E4%B8%A2%E5%BC%83%E4%BA%86%20OCOTP_ANA1%5BHOT_COUNT%5D%E5%92%8C%20OCOTP_ANA1%5BHOT_TEMP%5D%EF%BC%8C%E4%BB%8E%E8%80%8C%E5%AF%BC%E8%87%B4%E6%B8%A9%E5%BA%A6%E4%B8%8D%E4%B8%80%E8%87%B4%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CSPAN%3E%E4%B8%BA%E4%BA%86%E8%AF%81%E5%AE%9E%E8%BF%99%E4%B8%80%E7%82%B9%EF%BC%8C%E6%88%91%E5%9C%A8%E6%9D%BF%E4%B8%8A%E8%BF%9B%E8%A1%8C%E4%BA%86%E4%B8%80%E4%BA%9B%E9%AA%8C%E8%AF%81%EF%BC%8C%E8%AF%BB%E5%8F%96%E4%BA%86%E5%AF%84%E5%AD%98%E5%99%A8%E5%B9%B6%E8%AE%A1%E7%AE%97%E4%BA%86%E8%A1%8C%E7%A8%8B%E6%B8%A9%E5%BA%A6%EF%BC%9A%3C%2FSPAN%3E%3C%2FP%3E%3CUL%3E%3CLI%3E%3CSPAN%3E%E6%A0%A1%E5%87%86%E5%AF%84%E5%AD%98%E5%99%A8%20OCOTP_ANA1%3D0x50F4A269%3CBR%20%2F%3E%3C%2FSPAN%3E%3CUL%3E%3CLI%3E%3CSPAN%3EROOM_COUNT%3D0x50F%20%3D%201295%3C%2FSPAN%3E%3C%2FLI%3E%3CLI%3E%3CSPAN%3EHOT_COUNT%3D0x4A2%20%3D%201186%3C%2FSPAN%3E%3C%2FLI%3E%3CLI%3E%3CSPAN%3EHOT_TEMP(%C2%B0C)%3D0x69%3D105%3C%2FSPAN%3E%3C%2FLI%3E%3C%2FUL%3E%3C%2FLI%3E%3CLI%3E%3CSPAN%3ETEMPMON_TEMPSENSE0%3D0x4A551206%3C%2FSPAN%3E%3CUL%3E%3CLI%3E%3CSPAN%3EALARM_VALUE%3D0x4A5%3D1189%3C%2FSPAN%3E%3C%2FLI%3E%3C%2FUL%3E%3C%2FLI%3E%3CLI%3E%3CSPAN%3ETEMPMON_TEMPSENSE2%3D%200x049D0FFF%3C%2FSPAN%3E%3CUL%3E%3CLI%3E%3CSPAN%3EPANIC_ALARM_VALUE%3D49D%3D1181%3C%2FSPAN%3E%3C%2FLI%3E%3C%2FUL%3E%3C%2FLI%3E%3C%2FUL%3E%3CP%3E%3CSPAN%3E%E7%84%B6%E5%90%8E%E6%88%91%E6%A0%B9%E6%8D%AE%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C%E7%9A%84%E6%8C%87%E7%A4%BA%E5%B0%86%20%5BALARM_VALUE%5D%20%E5%92%8C%20%5BPANIC_ALARM_VALUE%5D%20%E8%BD%AC%E6%8D%A2%E4%B8%BA%E6%91%84%E6%B0%8F%E6%B8%A9%E5%BA%A6%EF%BC%9A%3CBR%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%3CUL%3E%3CLI%3E%3CSPAN%3ETmeas%20%3D%20HOT_TEMP%20-%20(Nmeas%20-%20HOT_COUNT)%20*%20((HOT_TEMP%20-%2025.0)%20%2F%3CBR%20%2F%3E(ROOM_COUNT%20-%20HOT_COUNT))%3C%2FSPAN%3E%3C%2FLI%3E%3C%2FUL%3E%3CP%3E%E6%89%80%E4%BB%A5%E6%88%91%E5%BE%97%E5%88%B0%E4%BA%86%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FP%3E%3CUL%3E%3CLI%3E%E6%8A%A5%E8%AD%A6%2F%E8%A2%AB%E5%8A%A8%E6%B8%A9%E5%BA%A6%20%3D%20102.8%C2%B0C%3C%2FLI%3E%3CLI%3E%E6%81%90%E6%85%8C%E6%B8%A9%E5%BA%A6%20%3D%20108.7%C2%B0C%3C%2FLI%3E%3C%2FUL%3E%3CP%3E%3CSPAN%3E%E8%BF%99%E4%BA%9B%E6%B8%A9%E5%BA%A6%E9%AB%98%E4%BA%8E%E9%BB%98%E8%AE%A4%E8%B7%B3%E9%97%B8%E6%B8%A9%E5%BA%A6%EF%BC%9A%3C%2FSPAN%3E%3C%2FP%3E%3CBR%20%2F%3E%3CUL%3E%3CLI%3E%3CSPAN%3E%E6%8A%A5%E8%AD%A6%2F%E8%A2%AB%E5%8A%A8%E6%B8%A9%E5%BA%A6%20%3D%2095%C2%B0C%20%EF%BC%88%E6%AF%94%E6%9C%80%E9%AB%98%E6%B8%A9%E5%BA%A6%20105%C2%B0C%20%E4%BD%8E%2010%C2%B0C%EF%BC%89%3C%2FSPAN%3E%3C%2FLI%3E%3CLI%3E%3CSPAN%3E%E6%85%8C%E4%B9%B1%E6%B8%A9%E5%BA%A6%20%3D%20100%C2%B0C%EF%BC%88%E6%AF%94%E6%9C%80%E9%AB%98%E6%B8%A9%E5%BA%A6%20105%C2%B0C%20%E4%BD%8E%205%C2%B0C%EF%BC%89%E3%80%82%3C%2FSPAN%3E%3C%2FLI%3E%3C%2FUL%3E%3CP%3E%3CSPAN%3E%E8%BF%99%E7%9C%8B%E8%B5%B7%E6%9D%A5%E5%83%8F%E6%98%AF%E9%A9%B1%E5%8A%A8%E5%99%A8%E4%B8%AD%E4%B8%80%E4%B8%AA%E6%BD%9C%E5%9C%A8%E7%9A%84%E5%85%B3%E9%94%AE%E9%97%AE%E9%A2%98%EF%BC%8C%E5%9B%A0%E4%B8%BA%E6%85%8C%E4%B9%B1%E6%B8%A9%E5%BA%A6%E5%B7%B2%E7%BB%8F%E8%B6%85%E8%BF%87%E4%BA%86%E6%95%B0%E6%8D%AE%E8%A1%A8%E4%B8%AD%E7%9A%84%E6%9C%80%E9%AB%98%E5%B7%A5%E4%BD%9C%E6%B8%A9%E5%BA%A6%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3E%E6%82%A8%E8%83%BD%E7%A1%AE%E8%AE%A4%E8%BF%99%E4%B8%AA%E9%97%AE%E9%A2%98%E5%90%97%EF%BC%9F%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-2189166%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3Ei.MX6%20%E5%85%A8%E9%83%A8%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2207009%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20Linux-fslc%20temperature%20calibration%20in%20kernel%20driver%20imx_thermal.c%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2207009%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3C%2FP%3E%0A%3CP%3E%E7%94%A8%E4%BA%8E%E5%8D%95%E7%82%B9%E6%A0%A1%E5%87%86%E5%92%8C%E4%B8%A4%E7%82%B9%E6%A0%A1%E5%87%86%E7%9A%84%E7%B3%BB%E6%95%B0%E5%B7%AE%E5%88%AB%E5%BE%88%E5%A4%A7%E3%80%82%E5%85%B3%E4%BA%8E%E6%82%A8%E7%9A%84%E9%97%AE%E9%A2%98--%E6%82%A8%E6%98%AF%E5%90%A6%E5%B0%86%E5%8D%95%E7%82%B9%E6%A0%A1%E5%87%86%E5%BE%97%E5%87%BA%E7%9A%84%E6%B8%A9%E5%BA%A6%E4%B8%8E%E5%AE%9E%E9%99%85%E7%8E%AF%E5%A2%83%E6%9D%A1%E4%BB%B6%E8%BF%9B%E8%A1%8C%E8%BF%87%E6%AF%94%E8%BE%83%EF%BC%8C%E4%BB%A5%E8%AF%84%E4%BC%B0%E8%AF%AF%E5%B7%AE%E8%8C%83%E5%9B%B4%EF%BC%9F%3C%2FP%3E%0A%3CP%3E%E5%9C%A8%20iMX6%20%E4%B8%8A%EF%BC%8C%E4%BD%BF%E7%94%A8%20imx_init_calib%20%E4%B8%AD%E5%8F%82%E8%80%83%E7%9A%84%E8%AE%A1%E7%AE%97%E8%BF%9B%E8%A1%8C%E5%8D%95%E7%82%B9%E6%A0%A1%E5%87%86%EF%BC%8C%E5%B9%B6%E7%BB%93%E5%90%88%E4%BA%86%E9%A2%9D%E5%A4%96%E7%9A%84%E7%B3%BB%E6%95%B0%20c1%20%E5%92%8C%20c2%E3%80%82%E5%80%BC%E5%BE%97%E6%B3%A8%E6%84%8F%E7%9A%84%E6%98%AF%EF%BC%8C%E5%8D%B3%E4%BD%BF%E6%98%AF%20imx_set_alarm_temp%EF%BC%8C%E5%9C%A8%E9%85%8D%E7%BD%AE%E8%AD%A6%E6%8A%A5%E9%98%88%E5%80%BC%E6%97%B6%E4%B9%9F%E4%BC%9A%E4%BD%BF%E7%94%A8%E5%8D%95%E7%82%B9%E6%A0%A1%E5%87%86%E7%B3%BB%E6%95%B0%E3%80%82%3C%2FP%3E%0A%3CP%3E%E6%9C%80%E9%87%8D%E8%A6%81%E7%9A%84%E6%98%AF%EF%BC%8C%E8%AF%95%E5%9B%BE%E4%BD%BF%E7%94%A8%E4%B8%A4%E7%82%B9%E6%A0%A1%E5%87%86%E6%96%B9%E6%B3%95%E5%AF%B9%E5%8D%95%E7%82%B9%E6%A0%A1%E5%87%86%E7%BB%93%E6%9E%9C%E8%BF%9B%E8%A1%8C%E5%8F%8D%E5%90%91%E8%BD%AC%E6%8D%A2%E4%BB%8E%E6%A0%B9%E6%9C%AC%E4%B8%8A%E8%AF%B4%E6%98%AF%E4%B8%8D%E6%AD%A3%E7%A1%AE%E7%9A%84--%E6%A0%A1%E5%87%86%E6%A1%86%E6%9E%B6%E4%B8%8D%E8%83%BD%E4%BB%A5%E8%BF%99%E7%A7%8D%E6%96%B9%E5%BC%8F%E4%BA%92%E6%8D%A2%E6%88%96%E9%80%86%E8%BD%AC%E3%80%82%3C%2FP%3E%0A%3CP%3E%E9%A1%BA%E7%A5%9D%E5%95%86%E7%A5%BA%EF%BC%81%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2195167%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20Linux-fslc%20temperature%20calibration%20in%20kernel%20driver%20imx_thermal.c%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2195167%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%EF%BC%8C%E8%B1%AA%E5%B0%94%E8%B5%AB%E3%80%81%3C%2FP%3E%3CP%3E%E6%AD%A3%E5%A6%82%E6%88%91%E5%9C%A8%E6%9C%80%E5%88%9D%E7%9A%84%E5%B8%96%E5%AD%90%E4%B8%AD%E6%89%80%E6%8A%A5%E5%91%8A%E7%9A%84%EF%BC%8C%E6%88%91%E5%90%91%E6%82%A8%E7%A1%AE%E8%AE%A4%EF%BC%8C%3CSPAN%3E%E8%B7%B3%E9%97%B8%E6%B8%A9%E5%BA%A6%E7%82%B9%E6%98%AF%E4%B8%8D%E6%AD%A3%E7%A1%AE%E7%9A%84%EF%BC%9A%3C%2FSPAN%3E%3C%2FP%3E%3CUL%3E%3CLI%3E%E5%AE%9E%E9%99%85%E6%8A%A5%E8%AD%A6%2F%E8%A2%AB%E5%8A%A8%E6%B8%A9%E5%BA%A6%E4%B8%BA%20102.8%C2%B0C%20%E8%80%8C%E4%B8%8D%E6%98%AF%2095%C2%B0C%3C%2FLI%3E%3CLI%3E%E5%AE%9E%E9%99%85%E6%81%90%E6%85%8C%E6%B8%A9%E5%BA%A6%E4%B8%BA%20108.7%C2%B0C%E8%80%8C%E4%B8%8D%E6%98%AF%20100%C2%B0C%3C%2FLI%3E%3C%2FUL%3E%3CP%3E%3CSPAN%3E%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%BD%9C%E5%9C%A8%E7%9A%84%E5%85%B3%E9%94%AE%E9%97%AE%E9%A2%98%EF%BC%8C%E5%9B%A0%E4%B8%BA%E6%81%90%E6%85%8C%E6%B8%A9%E5%BA%A6%E9%AB%98%E4%BA%8E%20105%C2%B0C%20%E7%9A%84%E6%9C%80%E9%AB%98%E5%B7%A5%E4%BD%9C%E6%B8%A9%E5%BA%A6%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2193655%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20Linux-fslc%20temperature%20calibration%20in%20kernel%20driver%20imx_thermal.c%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2193655%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3C%2FP%3E%0A%3CP%3E%E6%82%A8%E6%98%AF%E5%90%A6%E9%81%87%E5%88%B0%E8%BF%87%E6%B8%A9%E5%BA%A6%E6%B5%8B%E9%87%8F%E4%B8%8D%E5%87%86%E7%A1%AE%E6%88%96%E8%B7%B3%E9%97%B8%E6%B8%A9%E5%BA%A6%E7%82%B9%E4%B8%8D%E6%AD%A3%E7%A1%AE%E7%9A%84%E6%83%85%E5%86%B5%EF%BC%9F%3C%2FP%3E%0A%3CP%3E%E6%88%91%E5%B7%B2%E4%B8%8E%E4%B8%9A%E4%B8%BB%E8%AE%A8%E8%AE%BA%E8%BF%87%E4%BB%A3%E7%A0%81%E9%97%AE%E9%A2%98%E3%80%82%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E9%9D%9E%E5%B8%B8%E5%8F%A4%E8%80%81%E7%9A%84%E4%BB%A3%E7%A0%81%EF%BC%8C%E4%BB%96%E8%AE%A4%E4%B8%BA%E7%AE%97%E6%B3%95%E5%BA%94%E8%AF%A5%E6%B2%A1%E9%97%AE%E9%A2%98%E3%80%82%3C%2FP%3E%0A%3CP%3E%E9%A1%BA%E7%A5%9D%E5%95%86%E7%A5%BA%EF%BC%81%3C%2FP%3E%3C%2FLINGO-BODY%3E