[PATCH] hwmon: Fix missing it87 fan div init

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.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Jean Delvare and committed by Linus Torvalds 07eab46d d0d3cd69

+7
+7
drivers/hwmon/it87.c
··· 522 struct i2c_client *client = to_i2c_client(dev); 523 struct it87_data *data = i2c_get_clientdata(client); 524 int val = simple_strtol(buf, NULL, 10); 525 526 down(&data->update_lock); 527 data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr])); 528 it87_write_value(client, IT87_REG_FAN_MIN(nr), data->fan_min[nr]); 529 up(&data->update_lock);
··· 522 struct i2c_client *client = to_i2c_client(dev); 523 struct it87_data *data = i2c_get_clientdata(client); 524 int val = simple_strtol(buf, NULL, 10); 525 + u8 reg = it87_read_value(client, IT87_REG_FAN_DIV); 526 527 down(&data->update_lock); 528 + switch (nr) { 529 + case 0: data->fan_div[nr] = reg & 0x07; break; 530 + case 1: data->fan_div[nr] = (reg >> 3) & 0x07; break; 531 + case 2: data->fan_div[nr] = (reg & 0x40) ? 3 : 1; break; 532 + } 533 + 534 data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr])); 535 it87_write_value(client, IT87_REG_FAN_MIN(nr), data->fan_min[nr]); 536 up(&data->update_lock);