hwmon: (lm85) Make the pwmN_enable files writable
Make the pwmN_enable files writable. This makes it possible to use standard fan speed control tools (pwmconfig, fancontrol) with the lm85 driver. I left the non-standard pwmN_auto_channels files in place, as they give additional control for the automatic mode, and some users might be used to them by now. Signed-off-by: Jean Delvare <khali@linux-fr.org> Signed-off-by: Mark M. Hoffman <mhoffman@lightlink.com>
This commit is contained in:
committed by
Mark M. Hoffman
parent
4b4df95dcc
commit
455f791ea3
@@ -536,11 +536,47 @@ static ssize_t show_pwm_enable(struct device *dev, struct device_attribute
|
|||||||
return sprintf(buf, "%d\n", enable);
|
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) \
|
#define show_pwm_reg(offset) \
|
||||||
static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \
|
static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \
|
||||||
show_pwm, set_pwm, offset - 1); \
|
show_pwm, set_pwm, offset - 1); \
|
||||||
static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO, \
|
static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \
|
||||||
show_pwm_enable, NULL, offset - 1)
|
show_pwm_enable, set_pwm_enable, offset - 1)
|
||||||
|
|
||||||
show_pwm_reg(1);
|
show_pwm_reg(1);
|
||||||
show_pwm_reg(2);
|
show_pwm_reg(2);
|
||||||
|
Reference in New Issue
Block a user