[patch 3/3] hwmon/pc87360: combine sysfs-attr callbacks, save 9% size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

previous version of patches saved ~ 9%

Signed-off-by: Jim Cromie <jim.cromie at gmail.com>

--

[jimc at harpo pc-set]$ diffstat hwmon-pc87360-sysfs-combo-callbacks.patch
 pc87360.c |  609 
++++++++++++++++++++++++++++----------------------------------
 1 files changed, 281 insertions(+), 328 deletions(-)

--

diff -ruNp -X dontdiff -X exclude-diffs ae-2/drivers/hwmon/pc87360.c ae-3/drivers/hwmon/pc87360.c
--- ae-2/drivers/hwmon/pc87360.c	2006-08-20 17:20:52.000000000 -0600
+++ ae-3/drivers/hwmon/pc87360.c	2006-08-20 17:53:59.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)
+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);
-	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)
-{
-	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_STATUS_FROM_REG(data->fan_status[attr->index]));
+        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);
+	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)
+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);
-	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)
-{
-	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", data->in_status[attr->index]);
+        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);
+	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);
-	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]);
+        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);
+	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;
+        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,84 +568,68 @@ 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)
+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);
-	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)
-{
-	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", 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;
+        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);
+	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);
-	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]);
-	mutex_unlock(&data->update_lock);
-	return 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);
+	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;
 }
 
 /* the +11 term below reflects the fact that VLM units 11,12,13 are
@@ -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)
+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;
-	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)
-{
-	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", 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;
+        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);
+	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;
-	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]);
-	mutex_unlock(&data->update_lock);
-	return 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);
+	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)







[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux