|
@@ -536,11 +536,47 @@ static ssize_t show_pwm_enable(struct device *dev, struct device_attribute
|
|
|
return sprintf(buf, "%d\n", enable);
|
|
|
}
|
|
|
|
|
|
+static ssize_t set_pwm_enable(struct device *dev, struct device_attribute
|
|
|
+ *attr, const char *buf, size_t count)
|
|
|
+{
|
|
|
+ int nr = to_sensor_dev_attr(attr)->index;
|
|
|
+ struct i2c_client *client = to_i2c_client(dev);
|
|
|
+ struct lm85_data *data = i2c_get_clientdata(client);
|
|
|
+ long val = simple_strtol(buf, NULL, 10);
|
|
|
+ u8 config;
|
|
|
+
|
|
|
+ switch (val) {
|
|
|
+ case 0:
|
|
|
+ config = 3;
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ config = 7;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ /* Here we have to choose arbitrarily one of the 5 possible
|
|
|
+ configurations; I go for the safest */
|
|
|
+ config = 6;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ mutex_lock(&data->update_lock);
|
|
|
+ data->autofan[nr].config = lm85_read_value(client,
|
|
|
+ LM85_REG_AFAN_CONFIG(nr));
|
|
|
+ data->autofan[nr].config = (data->autofan[nr].config & ~0xe0)
|
|
|
+ | (config << 5);
|
|
|
+ lm85_write_value(client, LM85_REG_AFAN_CONFIG(nr),
|
|
|
+ data->autofan[nr].config);
|
|
|
+ mutex_unlock(&data->update_lock);
|
|
|
+ return count;
|
|
|
+}
|
|
|
+
|
|
|
#define show_pwm_reg(offset) \
|
|
|
static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \
|
|
|
show_pwm, set_pwm, offset - 1); \
|
|
|
-static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO, \
|
|
|
- show_pwm_enable, NULL, offset - 1)
|
|
|
+static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \
|
|
|
+ show_pwm_enable, set_pwm_enable, offset - 1)
|
|
|
|
|
|
show_pwm_reg(1);
|
|
|
show_pwm_reg(2);
|