* [lm-sensors] [patch 3/3 resend] hwmon/pc87360: combine sysfs-attr
@ 2006-08-21 4:39 Jim Cromie
0 siblings, 0 replies; only message in thread
From: Jim Cromie @ 2006-08-21 4:39 UTC (permalink / raw)
To: lm-sensors
resend to fix whitespace junk
3. hwmon-pc87360-sysfs-combo-callbacks.patch
This combines individual (show|set)_Sensor_Attr callbacks into
(show|set)_Sensor callbacks that handle all that Sensor's Attrs.
The callback routines use the .nr field to determine what attribute
they were called for.
$> size ac-*/drivers/hwmon/pc87360.o
text data bss dec hex filename
12427 3432 29 15888 3e10 ac-1/drivers/hwmon/pc87360.o
10960 3432 29 14421 3855 ac-2/drivers/hwmon/pc87360.o
Signed-off-by: Jim Cromie <jim.cromie at gmail.com>
[jimc at harpo hwmon-stuff]$ diffstat hwmon-pc87360-sysfs-combo-callbacks.patch
pc87360.c | 547
++++++++++++++++++++++++++++----------------------------------
1 files changed, 250 insertions(+), 297 deletions(-)
--
diff -ruNp -X dontdiff -X exclude-diffs ac-1/drivers/hwmon/pc87360.c ac-2/drivers/hwmon/pc87360.c
--- ac-1/drivers/hwmon/pc87360.c 2006-08-20 21:51:49.000000000 -0600
+++ ac-2/drivers/hwmon/pc87360.c 2006-08-20 22:22:30.000000000 -0600
@@ -257,34 +257,35 @@ static struct i2c_driver pc87360_driver
#define FN_FAN_STATUS 2
#define FN_FAN_DIV 3
-static ssize_t show_fan_input(struct device *dev, struct device_attribute *devattr, char *buf)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%u\n", FAN_FROM_REG(data->fan[attr->index],
- FAN_DIV_FROM_REG(data->fan_status[attr->index])));
-}
-static ssize_t show_fan_min(struct device *dev, struct device_attribute *devattr, char *buf)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%u\n", FAN_FROM_REG(data->fan_min[attr->index],
- FAN_DIV_FROM_REG(data->fan_status[attr->index])));
-}
-static ssize_t show_fan_div(struct device *dev, struct device_attribute *devattr, char *buf)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%u\n",
- FAN_DIV_FROM_REG(data->fan_status[attr->index]));
-}
-static ssize_t show_fan_status(struct device *dev, struct device_attribute *devattr, char *buf)
+static ssize_t show_fan(struct device *dev, struct device_attribute *devattr, char *buf)
{
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
+ int idx = attr->index;
+ int func = attr->nr;
struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%u\n",
- FAN_STATUS_FROM_REG(data->fan_status[attr->index]));
+ unsigned res = -1;
+
+ switch(func) {
+ case FN_FAN_INPUT:
+ res = FAN_FROM_REG(data->fan[idx],
+ FAN_DIV_FROM_REG(data->fan_status[idx]));
+ break;
+ case FN_FAN_MIN:
+ res = FAN_FROM_REG(data->fan_min[idx],
+ FAN_DIV_FROM_REG(data->fan_status[idx]));
+ break;
+ case FN_FAN_STATUS:
+ res = FAN_STATUS_FROM_REG(data->fan_status[idx]);
+ break;
+ case FN_FAN_DIV:
+ res = FAN_DIV_FROM_REG(data->fan_status[idx]);
+ break;
+ default:
+ printk(KERN_ERR "unknown attr fetch\n");
+ }
+ return sprintf(buf, "%u\n", res);
}
+
static ssize_t set_fan_min(struct device *dev, struct device_attribute *devattr, const char *buf,
size_t count)
{
@@ -316,31 +317,27 @@ static ssize_t set_fan_min(struct device
}
static struct sensor_device_attribute_2 fan_input[] = {
- SENSOR_ATTR_2(fan1_input, S_IRUGO, show_fan_input, NULL, FN_FAN_INPUT, 0),
- SENSOR_ATTR_2(fan2_input, S_IRUGO, show_fan_input, NULL, FN_FAN_INPUT, 1),
- SENSOR_ATTR_2(fan3_input, S_IRUGO, show_fan_input, NULL, FN_FAN_INPUT, 2),
+ SENSOR_ATTR_2(fan1_input, S_IRUGO, show_fan, NULL, FN_FAN_INPUT, 0),
+ SENSOR_ATTR_2(fan2_input, S_IRUGO, show_fan, NULL, FN_FAN_INPUT, 1),
+ SENSOR_ATTR_2(fan3_input, S_IRUGO, show_fan, NULL, FN_FAN_INPUT, 2),
};
static struct sensor_device_attribute_2 fan_status[] = {
- SENSOR_ATTR_2(fan1_status, S_IRUGO, show_fan_status, NULL, FN_FAN_STATUS, 0),
- SENSOR_ATTR_2(fan2_status, S_IRUGO, show_fan_status, NULL, FN_FAN_STATUS, 1),
- SENSOR_ATTR_2(fan3_status, S_IRUGO, show_fan_status, NULL, FN_FAN_STATUS, 2),
-
+ SENSOR_ATTR_2(fan1_status, S_IRUGO, show_fan, NULL, FN_FAN_STATUS, 0),
+ SENSOR_ATTR_2(fan2_status, S_IRUGO, show_fan, NULL, FN_FAN_STATUS, 1),
+ SENSOR_ATTR_2(fan3_status, S_IRUGO, show_fan, NULL, FN_FAN_STATUS, 2),
};
static struct sensor_device_attribute_2 fan_div[] = {
- SENSOR_ATTR_2(fan1_div, S_IRUGO,
- show_fan_div, NULL, FN_FAN_DIV, 0),
- SENSOR_ATTR_2(fan2_div, S_IRUGO,
- show_fan_div, NULL, FN_FAN_DIV, 1),
- SENSOR_ATTR_2(fan3_div, S_IRUGO,
- show_fan_div, NULL, FN_FAN_DIV, 2),
+ SENSOR_ATTR_2(fan1_div, S_IRUGO, show_fan, NULL, FN_FAN_DIV, 0),
+ SENSOR_ATTR_2(fan2_div, S_IRUGO, show_fan, NULL, FN_FAN_DIV, 1),
+ SENSOR_ATTR_2(fan3_div, S_IRUGO, show_fan, NULL, FN_FAN_DIV, 2),
};
static struct sensor_device_attribute_2 fan_min[] = {
SENSOR_ATTR_2(fan1_min, S_IWUSR | S_IRUGO,
- show_fan_min, set_fan_min, FN_FAN_MIN, 0),
+ show_fan, set_fan_min, FN_FAN_MIN, 0),
SENSOR_ATTR_2(fan2_min, S_IWUSR | S_IRUGO,
- show_fan_min, set_fan_min, FN_FAN_MIN, 1),
+ show_fan, set_fan_min, FN_FAN_MIN, 1),
SENSOR_ATTR_2(fan3_min, S_IWUSR | S_IRUGO,
- show_fan_min, set_fan_min, FN_FAN_MIN, 2),
+ show_fan, set_fan_min, FN_FAN_MIN, 2),
};
#define FAN_UNIT_ATTRS(X) \
@@ -401,116 +398,113 @@ static const struct attribute_group pc87
#define FN_IN_MAX 7
#define FN_IN_STATUS 8
-static ssize_t show_in_input(struct device *dev, struct device_attribute *devattr, char *buf)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%u\n", IN_FROM_REG(data->in[attr->index],
- data->in_vref));
-}
-static ssize_t show_in_min(struct device *dev, struct device_attribute *devattr, char *buf)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%u\n", IN_FROM_REG(data->in_min[attr->index],
- data->in_vref));
-}
-static ssize_t show_in_max(struct device *dev, struct device_attribute *devattr, char *buf)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%u\n", IN_FROM_REG(data->in_max[attr->index],
- data->in_vref));
-}
-static ssize_t show_in_status(struct device *dev, struct device_attribute *devattr, char *buf)
+static ssize_t show_vin(struct device *dev, struct device_attribute *devattr, char *buf)
{
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
+ int idx = attr->index;
+ int func = attr->nr;
struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%u\n", data->in_status[attr->index]);
+ unsigned res = -1;
+
+ switch (func) {
+ case FN_IN_INPUT:
+ res = IN_FROM_REG(data->in[idx], data->in_vref);
+ break;
+ case FN_IN_MIN:
+ res = IN_FROM_REG(data->in_min[idx], data->in_vref);
+ break;
+ case FN_IN_MAX:
+ res = IN_FROM_REG(data->in_max[idx], data->in_vref);
+ break;
+ case FN_IN_STATUS:
+ res = data->in_status[idx];
+ break;
+ default:
+ printk(KERN_ERR "unknown attr fetch\n");
+ }
+ return sprintf(buf, "%u\n", res);
}
-static ssize_t set_in_min(struct device *dev, struct device_attribute *devattr, const char *buf,
- size_t count)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- struct i2c_client *client = to_i2c_client(dev);
- struct pc87360_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
- mutex_lock(&data->update_lock);
- data->in_min[attr->index] = IN_TO_REG(val, data->in_vref);
- pc87360_write_value(data, LD_IN, attr->index, PC87365_REG_IN_MIN,
- data->in_min[attr->index]);
- mutex_unlock(&data->update_lock);
- return count;
-}
-static ssize_t set_in_max(struct device *dev, struct device_attribute *devattr, const char *buf,
- size_t count)
+static ssize_t set_in(struct device *dev, struct device_attribute *devattr, const char *buf,
+ size_t count)
{
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
+ int idx = attr->index;
+ int func = attr->nr;
struct i2c_client *client = to_i2c_client(dev);
struct pc87360_data *data = i2c_get_clientdata(client);
long val = simple_strtol(buf, NULL, 10);
mutex_lock(&data->update_lock);
- data->in_max[attr->index] = IN_TO_REG(val,
- data->in_vref);
- pc87360_write_value(data, LD_IN, attr->index, PC87365_REG_IN_MAX,
- data->in_max[attr->index]);
+ switch (func) {
+ case FN_IN_MIN:
+ data->in_min[idx] = IN_TO_REG(val, data->in_vref);
+ pc87360_write_value(data, LD_IN, idx, PC87365_REG_IN_MIN,
+ data->in_min[idx]);
+ break;
+ case FN_IN_MAX:
+ data->in_max[idx] = IN_TO_REG(val, data->in_vref);
+ pc87360_write_value(data, LD_IN, idx, PC87365_REG_IN_MAX,
+ data->in_max[idx]);
+ break;
+ default:
+ printk(KERN_ERR "unknown attr fetch\n");
+ }
mutex_unlock(&data->update_lock);
return count;
}
static struct sensor_device_attribute_2 in_input[] = {
- SENSOR_ATTR_2(in0_input, S_IRUGO, show_in_input, NULL, FN_IN_INPUT, 0),
- SENSOR_ATTR_2(in1_input, S_IRUGO, show_in_input, NULL, FN_IN_INPUT, 1),
- SENSOR_ATTR_2(in2_input, S_IRUGO, show_in_input, NULL, FN_IN_INPUT, 2),
- SENSOR_ATTR_2(in3_input, S_IRUGO, show_in_input, NULL, FN_IN_INPUT, 3),
- SENSOR_ATTR_2(in4_input, S_IRUGO, show_in_input, NULL, FN_IN_INPUT, 4),
- SENSOR_ATTR_2(in5_input, S_IRUGO, show_in_input, NULL, FN_IN_INPUT, 5),
- SENSOR_ATTR_2(in6_input, S_IRUGO, show_in_input, NULL, FN_IN_INPUT, 6),
- SENSOR_ATTR_2(in7_input, S_IRUGO, show_in_input, NULL, FN_IN_INPUT, 7),
- SENSOR_ATTR_2(in8_input, S_IRUGO, show_in_input, NULL, FN_IN_INPUT, 8),
- SENSOR_ATTR_2(in9_input, S_IRUGO, show_in_input, NULL, FN_IN_INPUT, 9),
- SENSOR_ATTR_2(in10_input, S_IRUGO, show_in_input, NULL, FN_IN_INPUT, 10),
+ SENSOR_ATTR_2(in0_input, S_IRUGO, show_vin, NULL, FN_IN_INPUT, 0),
+ SENSOR_ATTR_2(in1_input, S_IRUGO, show_vin, NULL, FN_IN_INPUT, 1),
+ SENSOR_ATTR_2(in2_input, S_IRUGO, show_vin, NULL, FN_IN_INPUT, 2),
+ SENSOR_ATTR_2(in3_input, S_IRUGO, show_vin, NULL, FN_IN_INPUT, 3),
+ SENSOR_ATTR_2(in4_input, S_IRUGO, show_vin, NULL, FN_IN_INPUT, 4),
+ SENSOR_ATTR_2(in5_input, S_IRUGO, show_vin, NULL, FN_IN_INPUT, 5),
+ SENSOR_ATTR_2(in6_input, S_IRUGO, show_vin, NULL, FN_IN_INPUT, 6),
+ SENSOR_ATTR_2(in7_input, S_IRUGO, show_vin, NULL, FN_IN_INPUT, 7),
+ SENSOR_ATTR_2(in8_input, S_IRUGO, show_vin, NULL, FN_IN_INPUT, 8),
+ SENSOR_ATTR_2(in9_input, S_IRUGO, show_vin, NULL, FN_IN_INPUT, 9),
+ SENSOR_ATTR_2(in10_input, S_IRUGO, show_vin, NULL, FN_IN_INPUT, 10),
};
static struct sensor_device_attribute_2 in_status[] = {
- SENSOR_ATTR_2(in0_status, S_IRUGO, show_in_status, NULL, FN_IN_STATUS, 0),
- SENSOR_ATTR_2(in1_status, S_IRUGO, show_in_status, NULL, FN_IN_STATUS, 1),
- SENSOR_ATTR_2(in2_status, S_IRUGO, show_in_status, NULL, FN_IN_STATUS, 2),
- SENSOR_ATTR_2(in3_status, S_IRUGO, show_in_status, NULL, FN_IN_STATUS, 3),
- SENSOR_ATTR_2(in4_status, S_IRUGO, show_in_status, NULL, FN_IN_STATUS, 4),
- SENSOR_ATTR_2(in5_status, S_IRUGO, show_in_status, NULL, FN_IN_STATUS, 5),
- SENSOR_ATTR_2(in6_status, S_IRUGO, show_in_status, NULL, FN_IN_STATUS, 6),
- SENSOR_ATTR_2(in7_status, S_IRUGO, show_in_status, NULL, FN_IN_STATUS, 7),
- SENSOR_ATTR_2(in8_status, S_IRUGO, show_in_status, NULL, FN_IN_STATUS, 8),
- SENSOR_ATTR_2(in9_status, S_IRUGO, show_in_status, NULL, FN_IN_STATUS, 9),
- SENSOR_ATTR_2(in10_status, S_IRUGO, show_in_status, NULL, FN_IN_STATUS, 10),
+ SENSOR_ATTR_2(in0_status, S_IRUGO, show_vin, NULL, FN_IN_STATUS, 0),
+ SENSOR_ATTR_2(in1_status, S_IRUGO, show_vin, NULL, FN_IN_STATUS, 1),
+ SENSOR_ATTR_2(in2_status, S_IRUGO, show_vin, NULL, FN_IN_STATUS, 2),
+ SENSOR_ATTR_2(in3_status, S_IRUGO, show_vin, NULL, FN_IN_STATUS, 3),
+ SENSOR_ATTR_2(in4_status, S_IRUGO, show_vin, NULL, FN_IN_STATUS, 4),
+ SENSOR_ATTR_2(in5_status, S_IRUGO, show_vin, NULL, FN_IN_STATUS, 5),
+ SENSOR_ATTR_2(in6_status, S_IRUGO, show_vin, NULL, FN_IN_STATUS, 6),
+ SENSOR_ATTR_2(in7_status, S_IRUGO, show_vin, NULL, FN_IN_STATUS, 7),
+ SENSOR_ATTR_2(in8_status, S_IRUGO, show_vin, NULL, FN_IN_STATUS, 8),
+ SENSOR_ATTR_2(in9_status, S_IRUGO, show_vin, NULL, FN_IN_STATUS, 9),
+ SENSOR_ATTR_2(in10_status, S_IRUGO, show_vin, NULL, FN_IN_STATUS, 10),
};
static struct sensor_device_attribute_2 in_min[] = {
- SENSOR_ATTR_2(in0_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, FN_IN_MIN, 0),
- SENSOR_ATTR_2(in1_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, FN_IN_MIN, 1),
- SENSOR_ATTR_2(in2_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, FN_IN_MIN, 2),
- SENSOR_ATTR_2(in3_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, FN_IN_MIN, 3),
- SENSOR_ATTR_2(in4_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, FN_IN_MIN, 4),
- SENSOR_ATTR_2(in5_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, FN_IN_MIN, 5),
- SENSOR_ATTR_2(in6_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, FN_IN_MIN, 6),
- SENSOR_ATTR_2(in7_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, FN_IN_MIN, 7),
- SENSOR_ATTR_2(in8_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, FN_IN_MIN, 8),
- SENSOR_ATTR_2(in9_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, FN_IN_MIN, 9),
- SENSOR_ATTR_2(in10_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, FN_IN_MIN, 10),
+ SENSOR_ATTR_2(in0_min, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MIN, 0),
+ SENSOR_ATTR_2(in1_min, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MIN, 1),
+ SENSOR_ATTR_2(in2_min, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MIN, 2),
+ SENSOR_ATTR_2(in3_min, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MIN, 3),
+ SENSOR_ATTR_2(in4_min, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MIN, 4),
+ SENSOR_ATTR_2(in5_min, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MIN, 5),
+ SENSOR_ATTR_2(in6_min, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MIN, 6),
+ SENSOR_ATTR_2(in7_min, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MIN, 7),
+ SENSOR_ATTR_2(in8_min, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MIN, 8),
+ SENSOR_ATTR_2(in9_min, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MIN, 9),
+ SENSOR_ATTR_2(in10_min, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MIN, 10),
};
static struct sensor_device_attribute_2 in_max[] = {
- SENSOR_ATTR_2(in0_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, FN_IN_MAX, 0),
- SENSOR_ATTR_2(in1_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, FN_IN_MAX, 1),
- SENSOR_ATTR_2(in2_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, FN_IN_MAX, 2),
- SENSOR_ATTR_2(in3_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, FN_IN_MAX, 3),
- SENSOR_ATTR_2(in4_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, FN_IN_MAX, 4),
- SENSOR_ATTR_2(in5_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, FN_IN_MAX, 5),
- SENSOR_ATTR_2(in6_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, FN_IN_MAX, 6),
- SENSOR_ATTR_2(in7_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, FN_IN_MAX, 7),
- SENSOR_ATTR_2(in8_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, FN_IN_MAX, 8),
- SENSOR_ATTR_2(in9_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, FN_IN_MAX, 9),
- SENSOR_ATTR_2(in10_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, FN_IN_MAX, 10),
+ SENSOR_ATTR_2(in0_max, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MAX, 0),
+ SENSOR_ATTR_2(in1_max, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MAX, 1),
+ SENSOR_ATTR_2(in2_max, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MAX, 2),
+ SENSOR_ATTR_2(in3_max, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MAX, 3),
+ SENSOR_ATTR_2(in4_max, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MAX, 4),
+ SENSOR_ATTR_2(in5_max, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MAX, 5),
+ SENSOR_ATTR_2(in6_max, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MAX, 6),
+ SENSOR_ATTR_2(in7_max, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MAX, 7),
+ SENSOR_ATTR_2(in8_max, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MAX, 8),
+ SENSOR_ATTR_2(in9_max, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MAX, 9),
+ SENSOR_ATTR_2(in10_max, S_IWUSR | S_IRUGO, show_vin, set_in, FN_IN_MAX, 10),
};
#define VIN_UNIT_ATTRS(X) \
@@ -540,12 +534,12 @@ static ssize_t set_vrm(struct device *de
}
static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm, set_vrm);
-static ssize_t show_in_alarms(struct device *dev, struct device_attribute *attr, char *buf)
+static ssize_t show_vin_alarms(struct device *dev, struct device_attribute *attr, char *buf)
{
struct pc87360_data *data = pc87360_update_device(dev);
return sprintf(buf, "%u\n", data->in_alarms);
}
-static DEVICE_ATTR(alarms_in, S_IRUGO, show_in_alarms, NULL);
+static DEVICE_ATTR(alarms_in, S_IRUGO, show_vin_alarms, NULL);
static struct attribute *pc8736x_vin_attr_array[] = {
VIN_UNIT_ATTRS(0),
@@ -574,82 +568,66 @@ static const struct attribute_group pc87
#define FN_THERM_STATUS 12
#define FN_THERM_CRIT 13
-static ssize_t show_therm_input(struct device *dev, struct device_attribute *devattr, char *buf)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%u\n", IN_FROM_REG(data->in[attr->index],
- data->in_vref));
-}
-static ssize_t show_therm_min(struct device *dev, struct device_attribute *devattr, char *buf)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%u\n", IN_FROM_REG(data->in_min[attr->index],
- data->in_vref));
-}
-static ssize_t show_therm_max(struct device *dev, struct device_attribute *devattr, char *buf)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%u\n", IN_FROM_REG(data->in_max[attr->index],
- data->in_vref));
-}
-static ssize_t show_therm_crit(struct device *dev, struct device_attribute *devattr, char *buf)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%u\n", IN_FROM_REG(data->in_crit[attr->index-11],
- data->in_vref));
-}
-static ssize_t show_therm_status(struct device *dev, struct device_attribute *devattr, char *buf)
+static ssize_t show_therm(struct device *dev, struct device_attribute *devattr, char *buf)
{
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
+ int idx = attr->index;
+ int func = attr->nr;
struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%u\n", data->in_status[attr->index]);
-}
-static ssize_t set_therm_min(struct device *dev, struct device_attribute *devattr, const char *buf,
- size_t count)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- struct i2c_client *client = to_i2c_client(dev);
- struct pc87360_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
- mutex_lock(&data->update_lock);
- data->in_min[attr->index] = IN_TO_REG(val, data->in_vref);
- pc87360_write_value(data, LD_IN, attr->index, PC87365_REG_TEMP_MIN,
- data->in_min[attr->index]);
- mutex_unlock(&data->update_lock);
- return count;
+ unsigned res = -1;
+
+ switch (func) {
+ case FN_THERM_INPUT:
+ res = IN_FROM_REG(data->in[idx], data->in_vref);
+ break;
+ case FN_THERM_MIN:
+ res = IN_FROM_REG(data->in_min[idx], data->in_vref);
+ break;
+ case FN_THERM_MAX:
+ res = IN_FROM_REG(data->in_max[idx], data->in_vref);
+ break;
+ case FN_THERM_STATUS:
+ res = data->in_status[idx];
+ break;
+ case FN_THERM_CRIT:
+ res = IN_FROM_REG(data->in_crit[idx-11], data->in_vref);
+ break;
+ default:
+ printk(KERN_ERR "unknown attr fetch\n");
+ }
+ return sprintf(buf, "%u\n", res);
}
-static ssize_t set_therm_max(struct device *dev, struct device_attribute *devattr, const char *buf,
- size_t count)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- struct i2c_client *client = to_i2c_client(dev);
- struct pc87360_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
- mutex_lock(&data->update_lock);
- data->in_max[attr->index] = IN_TO_REG(val, data->in_vref);
- pc87360_write_value(data, LD_IN, attr->index, PC87365_REG_TEMP_MAX,
- data->in_max[attr->index]);
- mutex_unlock(&data->update_lock);
- return count;
-}
-static ssize_t set_therm_crit(struct device *dev, struct device_attribute *devattr, const char *buf,
- size_t count)
+static ssize_t set_therm(struct device *dev, struct device_attribute *devattr, const char *buf,
+ size_t count)
{
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
+ int idx = attr->index;
+ int func = attr->nr;
struct i2c_client *client = to_i2c_client(dev);
struct pc87360_data *data = i2c_get_clientdata(client);
long val = simple_strtol(buf, NULL, 10);
-
+
mutex_lock(&data->update_lock);
- data->in_crit[attr->index-11] = IN_TO_REG(val, data->in_vref);
- pc87360_write_value(data, LD_IN, attr->index, PC87365_REG_TEMP_CRIT,
- data->in_crit[attr->index-11]);
+ switch (func) {
+ case FN_THERM_MIN:
+ data->in_min[idx] = IN_TO_REG(val, data->in_vref);
+ pc87360_write_value(data, LD_IN, idx, PC87365_REG_TEMP_MIN,
+ data->in_min[idx]);
+ break;
+ case FN_THERM_MAX:
+ data->in_max[idx] = IN_TO_REG(val, data->in_vref);
+ pc87360_write_value(data, LD_IN, idx, PC87365_REG_TEMP_MAX,
+ data->in_max[idx]);
+ break;
+ case FN_THERM_CRIT:
+ data->in_crit[idx-11] = IN_TO_REG(val, data->in_vref);
+ pc87360_write_value(data, LD_IN, idx, PC87365_REG_TEMP_CRIT,
+ data->in_crit[idx-11]);
+ break;
+ default:
+ printk(KERN_ERR "unknown attr fetch\n");
+ }
mutex_unlock(&data->update_lock);
return count;
}
@@ -659,39 +637,39 @@ static ssize_t set_therm_crit(struct dev
*/
static struct sensor_device_attribute_2 therm_input[] = {
- SENSOR_ATTR_2(temp4_input, S_IRUGO, show_therm_input, NULL, FN_THERM_INPUT, 0+11),
- SENSOR_ATTR_2(temp5_input, S_IRUGO, show_therm_input, NULL, FN_THERM_INPUT, 1+11),
- SENSOR_ATTR_2(temp6_input, S_IRUGO, show_therm_input, NULL, FN_THERM_INPUT, 2+11),
+ SENSOR_ATTR_2(temp4_input, S_IRUGO, show_therm, NULL, FN_THERM_INPUT, 0+11),
+ SENSOR_ATTR_2(temp5_input, S_IRUGO, show_therm, NULL, FN_THERM_INPUT, 1+11),
+ SENSOR_ATTR_2(temp6_input, S_IRUGO, show_therm, NULL, FN_THERM_INPUT, 2+11),
};
static struct sensor_device_attribute_2 therm_status[] = {
- SENSOR_ATTR_2(temp4_status, S_IRUGO, show_therm_status, NULL, FN_THERM_STATUS, 0+11),
- SENSOR_ATTR_2(temp5_status, S_IRUGO, show_therm_status, NULL, FN_THERM_STATUS, 1+11),
- SENSOR_ATTR_2(temp6_status, S_IRUGO, show_therm_status, NULL, FN_THERM_STATUS, 2+11),
+ SENSOR_ATTR_2(temp4_status, S_IRUGO, show_therm, NULL, FN_THERM_STATUS, 0+11),
+ SENSOR_ATTR_2(temp5_status, S_IRUGO, show_therm, NULL, FN_THERM_STATUS, 1+11),
+ SENSOR_ATTR_2(temp6_status, S_IRUGO, show_therm, NULL, FN_THERM_STATUS, 2+11),
};
static struct sensor_device_attribute_2 therm_min[] = {
SENSOR_ATTR_2(temp4_min, S_IRUGO | S_IWUSR,
- show_therm_min, set_therm_min, FN_THERM_MIN, 0+11),
+ show_therm, set_therm, FN_THERM_MIN, 0+11),
SENSOR_ATTR_2(temp5_min, S_IRUGO | S_IWUSR,
- show_therm_min, set_therm_min, FN_THERM_MIN, 1+11),
+ show_therm, set_therm, FN_THERM_MIN, 1+11),
SENSOR_ATTR_2(temp6_min, S_IRUGO | S_IWUSR,
- show_therm_min, set_therm_min, FN_THERM_MIN, 2+11),
+ show_therm, set_therm, FN_THERM_MIN, 2+11),
};
static struct sensor_device_attribute_2 therm_max[] = {
SENSOR_ATTR_2(temp4_max, S_IRUGO | S_IWUSR,
- show_therm_max, set_therm_max, FN_THERM_MAX, 0+11),
+ show_therm, set_therm, FN_THERM_MAX, 0+11),
SENSOR_ATTR_2(temp5_max, S_IRUGO | S_IWUSR,
- show_therm_max, set_therm_max, FN_THERM_MAX, 1+11),
+ show_therm, set_therm, FN_THERM_MAX, 1+11),
SENSOR_ATTR_2(temp6_max, S_IRUGO | S_IWUSR,
- show_therm_max, set_therm_max, FN_THERM_MAX, 2+11),
+ show_therm, set_therm, FN_THERM_MAX, 2+11),
};
static struct sensor_device_attribute_2 therm_crit[] = {
SENSOR_ATTR_2(temp4_crit, S_IRUGO | S_IWUSR,
- show_therm_crit, set_therm_crit, FN_THERM_CRIT, 0+11),
+ show_therm, set_therm, FN_THERM_CRIT, 0+11),
SENSOR_ATTR_2(temp5_crit, S_IRUGO | S_IWUSR,
- show_therm_crit, set_therm_crit, FN_THERM_CRIT, 1+11),
+ show_therm, set_therm, FN_THERM_CRIT, 1+11),
SENSOR_ATTR_2(temp6_crit, S_IRUGO | S_IWUSR,
- show_therm_crit, set_therm_crit, FN_THERM_CRIT, 2+11),
+ show_therm, set_therm, FN_THERM_CRIT, 2+11),
};
#define THERM_UNIT_ATTRS(X) \
@@ -717,129 +695,104 @@ static const struct attribute_group pc87
#define FN_TEMP_STATUS 17
#define FN_TEMP_CRIT 18
-static ssize_t show_temp_input(struct device *dev, struct device_attribute *devattr, char *buf)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- int idx = attr->index;
- struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[idx]));
-}
-static ssize_t show_temp_min(struct device *dev, struct device_attribute *devattr, char *buf)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- int idx = attr->index;
- struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[idx]));
-}
-static ssize_t show_temp_max(struct device *dev, struct device_attribute *devattr, char *buf)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- int idx = attr->index;
- struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[idx]));
-}
-static ssize_t show_temp_crit(struct device *dev, struct device_attribute *devattr, char *buf)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- int idx = attr->index;
- struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit[idx]));
-}
-static ssize_t show_temp_status(struct device *dev, struct device_attribute *devattr, char *buf)
+static ssize_t show_temp(struct device *dev, struct device_attribute *devattr, char *buf)
{
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
int idx = attr->index;
+ int func = attr->nr;
struct pc87360_data *data = pc87360_update_device(dev);
- return sprintf(buf, "%d\n", data->temp_status[idx]);
-}
-static ssize_t set_temp_min(struct device *dev, struct device_attribute *devattr, const char *buf,
- size_t count)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- int idx = attr->index;
- struct i2c_client *client = to_i2c_client(dev);
- struct pc87360_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
- mutex_lock(&data->update_lock);
- data->temp_min[idx] = TEMP_TO_REG(val);
- pc87360_write_value(data, LD_TEMP, idx, PC87365_REG_TEMP_MIN,
- data->temp_min[idx]);
- mutex_unlock(&data->update_lock);
- return count;
+ unsigned res = -1;
+
+ switch (func) {
+ case FN_TEMP_INPUT:
+ res = TEMP_FROM_REG(data->temp[idx]);
+ break;
+ case FN_TEMP_MIN:
+ res = TEMP_FROM_REG(data->temp_min[idx]);
+ break;
+ case FN_TEMP_MAX:
+ res = TEMP_FROM_REG(data->temp_max[idx]);
+ break;
+ case FN_TEMP_STATUS:
+ res = data->temp_status[idx];
+ break;
+ case FN_TEMP_CRIT:
+ res = TEMP_FROM_REG(data->temp_crit[idx]);
+ break;
+ default:
+ printk(KERN_ERR "unknown attr fetch\n");
+ }
+ return sprintf(buf, "%u\n", res);
}
-static ssize_t set_temp_max(struct device *dev, struct device_attribute *devattr, const char *buf,
- size_t count)
-{
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
- int idx = attr->index;
- struct i2c_client *client = to_i2c_client(dev);
- struct pc87360_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
- mutex_lock(&data->update_lock);
- data->temp_max[idx] = TEMP_TO_REG(val);
- pc87360_write_value(data, LD_TEMP, idx, PC87365_REG_TEMP_MAX,
- data->temp_max[idx]);
- mutex_unlock(&data->update_lock);
- return count;
-}
-static ssize_t set_temp_crit(struct device *dev, struct device_attribute *devattr, const char *buf,
- size_t count)
+static ssize_t set_temp(struct device *dev, struct device_attribute *devattr, const char *buf,
+ size_t count)
{
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
int idx = attr->index;
+ int func = attr->nr;
struct i2c_client *client = to_i2c_client(dev);
struct pc87360_data *data = i2c_get_clientdata(client);
long val = simple_strtol(buf, NULL, 10);
-
+
mutex_lock(&data->update_lock);
- data->temp_crit[idx] = TEMP_TO_REG(val);
- pc87360_write_value(data, LD_TEMP, idx, PC87365_REG_TEMP_CRIT,
- data->temp_crit[idx]);
+ switch (func) {
+ case FN_TEMP_MIN:
+ data->temp_min[idx] = TEMP_TO_REG(val);
+ pc87360_write_value(data, LD_TEMP, idx, PC87365_REG_TEMP_MIN,
+ data->temp_min[idx]);
+ break;
+ case FN_TEMP_MAX:
+ data->temp_max[idx] = TEMP_TO_REG(val);
+ pc87360_write_value(data, LD_TEMP, idx, PC87365_REG_TEMP_MAX,
+ data->temp_max[idx]);
+ break;
+ case FN_TEMP_CRIT:
+ data->temp_crit[idx] = TEMP_TO_REG(val);
+ pc87360_write_value(data, LD_TEMP, idx, PC87365_REG_TEMP_CRIT,
+ data->temp_crit[idx]);
+ break;
+ default:
+ printk(KERN_ERR "unknown attr fetch\n");
+ }
mutex_unlock(&data->update_lock);
return count;
}
static struct sensor_device_attribute_2 temp_input[] = {
- SENSOR_ATTR_2(temp1_input, S_IRUGO,
- show_temp_input, NULL, FN_TEMP_INPUT, 0),
- SENSOR_ATTR_2(temp2_input, S_IRUGO,
- show_temp_input, NULL, FN_TEMP_INPUT, 1),
- SENSOR_ATTR_2(temp3_input, S_IRUGO,
- show_temp_input, NULL, FN_TEMP_INPUT, 2),
+ SENSOR_ATTR_2(temp1_input, S_IRUGO, show_temp, NULL, FN_TEMP_INPUT, 0),
+ SENSOR_ATTR_2(temp2_input, S_IRUGO, show_temp, NULL, FN_TEMP_INPUT, 1),
+ SENSOR_ATTR_2(temp3_input, S_IRUGO, show_temp, NULL, FN_TEMP_INPUT, 2),
};
static struct sensor_device_attribute_2 temp_status[] = {
- SENSOR_ATTR_2(temp1_status, S_IRUGO,
- show_temp_status, NULL, FN_TEMP_STATUS, 0),
- SENSOR_ATTR_2(temp2_status, S_IRUGO,
- show_temp_status, NULL, FN_TEMP_STATUS, 1),
- SENSOR_ATTR_2(temp3_status, S_IRUGO,
- show_temp_status, NULL, FN_TEMP_STATUS, 2),
+ SENSOR_ATTR_2(temp1_status, S_IRUGO, show_temp, NULL, FN_TEMP_STATUS, 0),
+ SENSOR_ATTR_2(temp2_status, S_IRUGO, show_temp, NULL, FN_TEMP_STATUS, 1),
+ SENSOR_ATTR_2(temp3_status, S_IRUGO, show_temp, NULL, FN_TEMP_STATUS, 2),
+
};
static struct sensor_device_attribute_2 temp_min[] = {
SENSOR_ATTR_2(temp1_min, S_IRUGO | S_IWUSR,
- show_temp_min, set_temp_min, FN_TEMP_MIN, 0),
+ show_temp, set_temp, FN_TEMP_MIN, 0),
SENSOR_ATTR_2(temp2_min, S_IRUGO | S_IWUSR,
- show_temp_min, set_temp_min, FN_TEMP_MIN, 1),
+ show_temp, set_temp, FN_TEMP_MIN, 1),
SENSOR_ATTR_2(temp3_min, S_IRUGO | S_IWUSR,
- show_temp_min, set_temp_min, FN_TEMP_MIN, 2),
+ show_temp, set_temp, FN_TEMP_MIN, 2),
};
static struct sensor_device_attribute_2 temp_max[] = {
SENSOR_ATTR_2(temp1_max, S_IRUGO | S_IWUSR,
- show_temp_max, set_temp_max, FN_TEMP_MAX, 0),
+ show_temp, set_temp, FN_TEMP_MAX, 0),
SENSOR_ATTR_2(temp2_max, S_IRUGO | S_IWUSR,
- show_temp_max, set_temp_max, FN_TEMP_MAX, 1),
+ show_temp, set_temp, FN_TEMP_MAX, 1),
SENSOR_ATTR_2(temp3_max, S_IRUGO | S_IWUSR,
- show_temp_max, set_temp_max, FN_TEMP_MAX, 2),
+ show_temp, set_temp, FN_TEMP_MAX, 2),
};
static struct sensor_device_attribute_2 temp_crit[] = {
SENSOR_ATTR_2(temp1_crit, S_IRUGO | S_IWUSR,
- show_temp_crit, set_temp_crit, FN_TEMP_CRIT, 0),
+ show_temp, set_temp, FN_TEMP_CRIT, 0),
SENSOR_ATTR_2(temp2_crit, S_IRUGO | S_IWUSR,
- show_temp_crit, set_temp_crit, FN_TEMP_CRIT, 1),
+ show_temp, set_temp, FN_TEMP_CRIT, 1),
SENSOR_ATTR_2(temp3_crit, S_IRUGO | S_IWUSR,
- show_temp_crit, set_temp_crit, FN_TEMP_CRIT, 2),
+ show_temp, set_temp, FN_TEMP_CRIT, 2),
};
static ssize_t show_temp_alarms(struct device *dev, struct device_attribute *attr, char *buf)
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2006-08-21 4:39 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-21 4:39 [lm-sensors] [patch 3/3 resend] hwmon/pc87360: combine sysfs-attr Jim Cromie
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.