diff options
Diffstat (limited to 'drivers/i2c/chips/adm1031.c')
-rw-r--r-- | drivers/i2c/chips/adm1031.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/drivers/i2c/chips/adm1031.c b/drivers/i2c/chips/adm1031.c index fc516c389bb53..d4385a23f79a7 100644 --- a/drivers/i2c/chips/adm1031.c +++ b/drivers/i2c/chips/adm1031.c @@ -254,7 +254,7 @@ set_fan_auto_channel(struct device *dev, const char *buf, size_t count, int nr) { struct i2c_client *client = to_i2c_client(dev); struct adm1031_data *data = i2c_get_clientdata(client); - int val; + int val = simple_strtol(buf, NULL, 10); u8 reg; int ret; u8 old_fan_mode; @@ -262,7 +262,6 @@ set_fan_auto_channel(struct device *dev, const char *buf, size_t count, int nr) old_fan_mode = data->conf1; down(&data->update_lock); - val = simple_strtol(buf, NULL, 10); if ((ret = get_fan_auto_nearest(data, nr, val, data->conf1, ®))) { up(&data->update_lock); @@ -327,10 +326,9 @@ set_auto_temp_min(struct device *dev, const char *buf, size_t count, int nr) { struct i2c_client *client = to_i2c_client(dev); struct adm1031_data *data = i2c_get_clientdata(client); - int val; + int val = simple_strtol(buf, NULL, 10); down(&data->update_lock); - val = simple_strtol(buf, NULL, 10); data->auto_temp[nr] = AUTO_TEMP_MIN_TO_REG(val, data->auto_temp[nr]); adm1031_write_value(client, ADM1031_REG_AUTO_TEMP(nr), data->auto_temp[nr]); @@ -348,10 +346,9 @@ set_auto_temp_max(struct device *dev, const char *buf, size_t count, int nr) { struct i2c_client *client = to_i2c_client(dev); struct adm1031_data *data = i2c_get_clientdata(client); - int val; + int val = simple_strtol(buf, NULL, 10); down(&data->update_lock); - val = simple_strtol(buf, NULL, 10); data->temp_max[nr] = AUTO_TEMP_MAX_TO_REG(val, data->auto_temp[nr], data->pwm[nr]); adm1031_write_value(client, ADM1031_REG_AUTO_TEMP(nr), data->temp_max[nr]); @@ -404,10 +401,10 @@ set_pwm(struct device *dev, const char *buf, size_t count, int nr) { struct i2c_client *client = to_i2c_client(dev); struct adm1031_data *data = i2c_get_clientdata(client); - int val; + int val = simple_strtol(buf, NULL, 10); int reg; + down(&data->update_lock); - val = simple_strtol(buf, NULL, 10); if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) && (((val>>4) & 0xf) != 5)) { /* In automatic mode, the only PWM accepted is 33% */ @@ -511,10 +508,9 @@ set_fan_min(struct device *dev, const char *buf, size_t count, int nr) { struct i2c_client *client = to_i2c_client(dev); struct adm1031_data *data = i2c_get_clientdata(client); - int val; + int val = simple_strtol(buf, NULL, 10); down(&data->update_lock); - val = simple_strtol(buf, NULL, 10); if (val) { data->fan_min[nr] = FAN_TO_REG(val, FAN_DIV_FROM_REG(data->fan_div[nr])); @@ -530,12 +526,11 @@ set_fan_div(struct device *dev, const char *buf, size_t count, int nr) { struct i2c_client *client = to_i2c_client(dev); struct adm1031_data *data = i2c_get_clientdata(client); - int val; + int val = simple_strtol(buf, NULL, 10); u8 tmp; - int old_div = FAN_DIV_FROM_REG(data->fan_div[nr]); + int old_div; int new_min; - val = simple_strtol(buf, NULL, 10); tmp = val == 8 ? 0xc0 : val == 4 ? 0x80 : val == 2 ? 0x40 : @@ -543,7 +538,9 @@ set_fan_div(struct device *dev, const char *buf, size_t count, int nr) 0xff; if (tmp == 0xff) return -EINVAL; + down(&data->update_lock); + old_div = FAN_DIV_FROM_REG(data->fan_div[nr]); data->fan_div[nr] = (tmp & 0xC0) | (0x3f & data->fan_div[nr]); new_min = data->fan_min[nr] * old_div / FAN_DIV_FROM_REG(data->fan_div[nr]); |