hwmon/pc87360: combine sysfs-attr
Subsystems (2)
Jim Cromie
maintainerPATCH RESEND 3/3 hwmon/pc87360: combine sysfs-attr
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(-)
--
drivers/hwmon/pc87360.c +250 -297
@@ -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)