mirror of
https://github.com/lm-sensors/lm-sensors.git
synced 2026-10-24 12:04:33 +00:00
Prevent fan_min overflow when changing fan_div.
git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@2580 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
1 parent
2130cacf83
commit
fb884933da
1 file changed
+9
-6
@@ -610,26 +610,29 @@ static void adm1031_fan_div(struct i2c_client *client, int operation,
|
||||
*nrels_mag = 2;
|
||||
}
|
||||
} else if (operation == SENSORS_PROC_REAL_WRITE) {
|
||||
int old_div, new_min;
|
||||
if (*nrels_mag >= 1) {
|
||||
int old_div = FAN_DIV_FROM_REG(data->fan_div[0]);
|
||||
old_div = FAN_DIV_FROM_REG(data->fan_div[0]);
|
||||
data->fan_div[0] = FAN_DIV_TO_REG(results[0]);
|
||||
adm1031_write_value(client,
|
||||
ADM1031_REG_FAN_DIV(0),
|
||||
data->fan_div[0]);
|
||||
data->fan_min[0] = data->fan_min[0] * old_div /
|
||||
FAN_DIV_FROM_REG(data->fan_div[0]);
|
||||
new_min = data->fan_min[0] * old_div /
|
||||
FAN_DIV_FROM_REG(data->fan_div[0]);
|
||||
data->fan_min[0] = new_min > 0xff ? 0xff : new_min;
|
||||
adm1031_write_value(client,
|
||||
ADM1031_REG_FAN_MIN(0),
|
||||
data->fan_min[0]);
|
||||
}
|
||||
if (*nrels_mag >= 2) {
|
||||
int old_div = FAN_DIV_FROM_REG(data->fan_div[1]);
|
||||
old_div = FAN_DIV_FROM_REG(data->fan_div[1]);
|
||||
data->fan_div[1] = FAN_DIV_TO_REG(results[1]);
|
||||
adm1031_write_value(client,
|
||||
ADM1031_REG_FAN_DIV(1),
|
||||
data->fan_div[1]);
|
||||
data->fan_min[1] = data->fan_min[1] * old_div /
|
||||
FAN_DIV_FROM_REG(data->fan_div[1]);
|
||||
new_min = data->fan_min[1] * old_div /
|
||||
FAN_DIV_FROM_REG(data->fan_div[1]);
|
||||
data->fan_min[1] = new_min > 0xff ? 0xff : new_min;
|
||||
adm1031_write_value(client,
|
||||
ADM1031_REG_FAN_MIN(1),
|
||||
data->fan_min[1]);
|
||||
|
||||
Reference in new issue
Block a user