diff options
| author | Jean Delvare <khali@linux-fr.org> | 2007-12-03 17:28:42 -0500 |
|---|---|---|
| committer | Mark M. Hoffman <mhoffman@lightlink.com> | 2008-02-07 20:39:43 -0500 |
| commit | 455f791ea3e33a274c098b4a8c2e35d4d1a6d518 (patch) | |
| tree | b715b700c6173cefd46473f8c9670a94415ea117 | |
| parent | 4b4df95dccdd2c6a573c9dedefb747ed663c074d (diff) | |
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>
| -rw-r--r-- | drivers/hwmon/lm85.c | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/drivers/hwmon/lm85.c b/drivers/hwmon/lm85.c index 194b8fb52f0e..9f1c6f1ee035 100644 --- a/drivers/hwmon/lm85.c +++ b/drivers/hwmon/lm85.c | |||
| @@ -536,11 +536,47 @@ static ssize_t show_pwm_enable(struct device *dev, struct device_attribute | |||
| 536 | return sprintf(buf, "%d\n", enable); | 536 | return sprintf(buf, "%d\n", enable); |
| 537 | } | 537 | } |
| 538 | 538 | ||
| 539 | static ssize_t set_pwm_enable(struct device *dev, struct device_attribute | ||
| 540 | *attr, const char *buf, size_t count) | ||
| 541 | { | ||
| 542 | int nr = to_sensor_dev_attr(attr)->index; | ||
| 543 | struct i2c_client *client = to_i2c_client(dev); | ||
| 544 | struct lm85_data *data = i2c_get_clientdata(client); | ||
| 545 | long val = simple_strtol(buf, NULL, 10); | ||
| 546 | u8 config; | ||
| 547 | |||
| 548 | switch (val) { | ||
| 549 | case 0: | ||
| 550 | config = 3; | ||
| 551 | break; | ||
| 552 | case 1: | ||
| 553 | config = 7; | ||
| 554 | break; | ||
| 555 | case 2: | ||
| 556 | /* Here we have to choose arbitrarily one of the 5 possible | ||
| 557 | configurations; I go for the safest */ | ||
| 558 | config = 6; | ||
| 559 | break; | ||
| 560 | default: | ||
| 561 | return -EINVAL; | ||
| 562 | } | ||
| 563 | |||
| 564 | mutex_lock(&data->update_lock); | ||
| 565 | data->autofan[nr].config = lm85_read_value(client, | ||
| 566 | LM85_REG_AFAN_CONFIG(nr)); | ||
| 567 | data->autofan[nr].config = (data->autofan[nr].config & ~0xe0) | ||
| 568 | | (config << 5); | ||
| 569 | lm85_write_value(client, LM85_REG_AFAN_CONFIG(nr), | ||
| 570 | data->autofan[nr].config); | ||
| 571 | mutex_unlock(&data->update_lock); | ||
| 572 | return count; | ||
| 573 | } | ||
| 574 | |||
| 539 | #define show_pwm_reg(offset) \ | 575 | #define show_pwm_reg(offset) \ |
| 540 | static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \ | 576 | static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \ |
| 541 | show_pwm, set_pwm, offset - 1); \ | 577 | show_pwm, set_pwm, offset - 1); \ |
| 542 | static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO, \ | 578 | static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \ |
| 543 | show_pwm_enable, NULL, offset - 1) | 579 | show_pwm_enable, set_pwm_enable, offset - 1) |
| 544 | 580 | ||
| 545 | show_pwm_reg(1); | 581 | show_pwm_reg(1); |
| 546 | show_pwm_reg(2); | 582 | show_pwm_reg(2); |
