diff options
Diffstat (limited to 'drivers/i2c/chips/lm92.c')
-rw-r--r-- | drivers/i2c/chips/lm92.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/i2c/chips/lm92.c b/drivers/i2c/chips/lm92.c index 3c9d0ef8eca79..fe6e83d70a72b 100644 --- a/drivers/i2c/chips/lm92.c +++ b/drivers/i2c/chips/lm92.c @@ -157,8 +157,11 @@ static ssize_t set_##value(struct device *dev, const char *buf, \ struct i2c_client *client = to_i2c_client(dev); \ struct lm92_data *data = i2c_get_clientdata(client); \ long val = simple_strtol(buf, NULL, 10); \ + \ + down(&data->update_lock); \ data->value = TEMP_TO_REG(val); \ i2c_smbus_write_word_data(client, reg, swab16(data->value)); \ + up(&data->update_lock); \ return count; \ } set_temp(temp1_crit, LM92_REG_TEMP_CRIT); @@ -189,10 +192,13 @@ static ssize_t set_temp1_crit_hyst(struct device *dev, const char *buf, { struct i2c_client *client = to_i2c_client(dev); struct lm92_data *data = i2c_get_clientdata(client); - data->temp1_hyst = TEMP_FROM_REG(data->temp1_crit) - - simple_strtol(buf, NULL, 10); + long val = simple_strtol(buf, NULL, 10); + + down(&data->update_lock); + data->temp1_hyst = TEMP_FROM_REG(data->temp1_crit) - val; i2c_smbus_write_word_data(client, LM92_REG_TEMP_HYST, swab16(TEMP_TO_REG(data->temp1_hyst))); + up(&data->update_lock); return count; } |