|
@@ -298,7 +298,7 @@ static int i8k_get_temp(int sensor)
|
|
|
int temp;
|
|
|
|
|
|
#ifdef I8K_TEMPERATURE_BUG
|
|
|
- static int prev[4];
|
|
|
+ static int prev[4] = { I8K_MAX_TEMP+1, I8K_MAX_TEMP+1, I8K_MAX_TEMP+1, I8K_MAX_TEMP+1 };
|
|
|
#endif
|
|
|
regs.ebx = sensor & 0xff;
|
|
|
rc = i8k_smm(®s);
|
|
@@ -317,10 +317,12 @@ static int i8k_get_temp(int sensor)
|
|
|
*/
|
|
|
if (temp > I8K_MAX_TEMP) {
|
|
|
temp = prev[sensor];
|
|
|
- prev[sensor] = I8K_MAX_TEMP;
|
|
|
+ prev[sensor] = I8K_MAX_TEMP+1;
|
|
|
} else {
|
|
|
prev[sensor] = temp;
|
|
|
}
|
|
|
+ if (temp > I8K_MAX_TEMP)
|
|
|
+ return -ERANGE;
|
|
|
#endif
|
|
|
|
|
|
return temp;
|
|
@@ -499,6 +501,8 @@ static ssize_t i8k_hwmon_show_temp(struct device *dev,
|
|
|
int temp;
|
|
|
|
|
|
temp = i8k_get_temp(index);
|
|
|
+ if (temp == -ERANGE)
|
|
|
+ return -EINVAL;
|
|
|
if (temp < 0)
|
|
|
return temp;
|
|
|
return sprintf(buf, "%d\n", temp * 1000);
|
|
@@ -610,17 +614,17 @@ static int __init i8k_init_hwmon(void)
|
|
|
|
|
|
/* CPU temperature attributes, if temperature reading is OK */
|
|
|
err = i8k_get_temp(0);
|
|
|
- if (err >= 0)
|
|
|
+ if (err >= 0 || err == -ERANGE)
|
|
|
i8k_hwmon_flags |= I8K_HWMON_HAVE_TEMP1;
|
|
|
/* check for additional temperature sensors */
|
|
|
err = i8k_get_temp(1);
|
|
|
- if (err >= 0)
|
|
|
+ if (err >= 0 || err == -ERANGE)
|
|
|
i8k_hwmon_flags |= I8K_HWMON_HAVE_TEMP2;
|
|
|
err = i8k_get_temp(2);
|
|
|
- if (err >= 0)
|
|
|
+ if (err >= 0 || err == -ERANGE)
|
|
|
i8k_hwmon_flags |= I8K_HWMON_HAVE_TEMP3;
|
|
|
err = i8k_get_temp(3);
|
|
|
- if (err >= 0)
|
|
|
+ if (err >= 0 || err == -ERANGE)
|
|
|
i8k_hwmon_flags |= I8K_HWMON_HAVE_TEMP4;
|
|
|
|
|
|
/* Left fan attributes, if left fan is present */
|