Skip to contentSkip to conversation

hwmon: Fix missing it87 fan div init

PATCH New Jean Delvare 1 participant 1 message Nov 21, 2005

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 hwmon: Fix missing it87 fan div init

Hi Greg,

This one is for 2.6.15-rc3.

Thanks.

* * * * *

Fix a bug where setting the low fan speed limits will not work if no data was ever read through the sysfs interface and the fan clock dividers have not been explicitely set yet either. The reason is that data->fan_div[nr] may currently be used before it is initialized from the chip register values. The fix is to explicitely initialize data->fan_div[nr] before using it.

Bug reported, and fix tested, by Nicolas Mailhot.

---

 drivers/hwmon/it87.c |    7 +++++++
 1 file changed, 7 insertions(+)
drivers/hwmon/it87.c +7 -0
@@ -522,8 +522,15 @@
 	struct i2c_client *client = to_i2c_client(dev);
 	struct it87_data *data = i2c_get_clientdata(client);
 	int val = simple_strtol(buf, NULL, 10);
+	u8 reg = it87_read_value(client, IT87_REG_FAN_DIV);
 
 	down(&data->update_lock);
+	switch (nr) {
+	case 0: data->fan_div[nr] = reg & 0x07; break;
+	case 1: data->fan_div[nr] = (reg >> 3) & 0x07; break;
+	case 2: data->fan_div[nr] = (reg & 0x40) ? 3 : 1; break;
+	}
+
 	data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
 	it87_write_value(client, IT87_REG_FAN_MIN(nr), data->fan_min[nr]);
 	up(&data->update_lock);
Signature · 1 line
Jean Delvare