Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 174315
b: refs/heads/master
c: f99318b
h: refs/heads/master
i:
  174313: a7deedf
  174311: 39d264a
v: v3
  • Loading branch information
Jean Delvare committed Dec 9, 2009
1 parent b0bb2c4 commit bddadff
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f890c6a3b6c3ed06719e696fed9267cc6b40aabd
refs/heads/master: f99318b2540da75e663603e1a0faef30a3bb0c92
42 changes: 42 additions & 0 deletions trunk/drivers/hwmon/adt7475.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@
#define REG_EXTEND1 0x76
#define REG_EXTEND2 0x77
#define REG_CONFIG5 0x7C
#define REG_CONFIG4 0x7D

#define CONFIG4_MAXDUTY 0x08

#define CONFIG5_TWOSCOMP 0x01
#define CONFIG5_TEMPOFFSET 0x02
Expand Down Expand Up @@ -132,6 +135,7 @@ struct adt7475_data {
unsigned long limits_updated;
char valid;

u8 config4;
u8 config5;
u16 alarms;
u16 voltage[3][3];
Expand Down Expand Up @@ -779,6 +783,38 @@ static ssize_t set_pwmfreq(struct device *dev, struct device_attribute *attr,
return count;
}

static ssize_t show_pwm_at_crit(struct device *dev,
struct device_attribute *devattr, char *buf)
{
struct adt7475_data *data = adt7475_update_device(dev);
return sprintf(buf, "%d\n", !!(data->config4 & CONFIG4_MAXDUTY));
}

static ssize_t set_pwm_at_crit(struct device *dev,
struct device_attribute *devattr,
const char *buf, size_t count)
{
struct i2c_client *client = to_i2c_client(dev);
struct adt7475_data *data = i2c_get_clientdata(client);
long val;

if (strict_strtol(buf, 10, &val))
return -EINVAL;
if (val != 0 && val != 1)
return -EINVAL;

mutex_lock(&data->lock);
data->config4 = i2c_smbus_read_byte_data(client, REG_CONFIG4);
if (val)
data->config4 |= CONFIG4_MAXDUTY;
else
data->config4 &= ~CONFIG4_MAXDUTY;
i2c_smbus_write_byte_data(client, REG_CONFIG4, data->config4);
mutex_unlock(&data->lock);

return count;
}

static SENSOR_DEVICE_ATTR_2(in1_input, S_IRUGO, show_voltage, NULL, INPUT, 0);
static SENSOR_DEVICE_ATTR_2(in1_max, S_IRUGO | S_IWUSR, show_voltage,
set_voltage, MAX, 0);
Expand Down Expand Up @@ -894,6 +930,10 @@ static SENSOR_DEVICE_ATTR_2(pwm3_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
static SENSOR_DEVICE_ATTR_2(pwm3_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm,
set_pwm, MAX, 2);

/* Non-standard name, might need revisiting */
static DEVICE_ATTR(pwm_use_point2_pwm_at_crit, S_IWUSR | S_IRUGO,
show_pwm_at_crit, set_pwm_at_crit);

static struct attribute *adt7475_attrs[] = {
&sensor_dev_attr_in1_input.dev_attr.attr,
&sensor_dev_attr_in1_max.dev_attr.attr,
Expand Down Expand Up @@ -962,6 +1002,7 @@ static struct attribute *adt7475_attrs[] = {
&sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
&sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
&sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
&dev_attr_pwm_use_point2_pwm_at_crit.attr,
NULL,
};

Expand Down Expand Up @@ -1160,6 +1201,7 @@ static struct adt7475_data *adt7475_update_device(struct device *dev)
/* Limits and settings, should never change update every 60 seconds */
if (time_after(jiffies, data->limits_updated + HZ * 60) ||
!data->valid) {
data->config4 = adt7475_read(REG_CONFIG4);
data->config5 = adt7475_read(REG_CONFIG5);

for (i = 0; i < ADT7475_VOLTAGE_COUNT; i++) {
Expand Down

0 comments on commit bddadff

Please sign in to comment.