Commit 865c2953 authored by Jim Cromie's avatar Jim Cromie Committed by Linus Torvalds

hwmon/pc87360 separate alarm files: add therm-min/max/crit-alarms

Adds therm-min/max/crit-alarm callbacks, sensor-device-attribute
declarations, and refs to those new decls in the macro used to initialize
the therm_group (of sysfs files)

The thermistors use voltage channels to measure; so they don't have a
fault-alarm, but unlike the other voltages, they do have an overtemp,
which we call crit (by convention).

[akpm@linux-foundation.org: cleanup]
Signed-off-by: default avatarJim Cromie <jim.cromie@gmail.com>
Cc: Jean Delvare <khali@linux-fr.org>
Cc: "Mark M. Hoffman" <mhoffman@lightlink.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 8ca13674
...@@ -714,12 +714,68 @@ static struct sensor_device_attribute therm_crit[] = { ...@@ -714,12 +714,68 @@ static struct sensor_device_attribute therm_crit[] = {
show_therm_crit, set_therm_crit, 2+11), show_therm_crit, set_therm_crit, 2+11),
}; };
/* show_therm_min/max_alarm() reads data from the per-channel voltage
status register (sec 11.5.12) */
static ssize_t show_therm_min_alarm(struct device *dev,
struct device_attribute *devattr, char *buf)
{
struct pc87360_data *data = pc87360_update_device(dev);
unsigned nr = to_sensor_dev_attr(devattr)->index;
return sprintf(buf, "%u\n", !!(data->in_status[nr] & CHAN_ALM_MIN));
}
static ssize_t show_therm_max_alarm(struct device *dev,
struct device_attribute *devattr, char *buf)
{
struct pc87360_data *data = pc87360_update_device(dev);
unsigned nr = to_sensor_dev_attr(devattr)->index;
return sprintf(buf, "%u\n", !!(data->in_status[nr] & CHAN_ALM_MAX));
}
static ssize_t show_therm_crit_alarm(struct device *dev,
struct device_attribute *devattr, char *buf)
{
struct pc87360_data *data = pc87360_update_device(dev);
unsigned nr = to_sensor_dev_attr(devattr)->index;
return sprintf(buf, "%u\n", !!(data->in_status[nr] & TEMP_ALM_CRIT));
}
static struct sensor_device_attribute therm_min_alarm[] = {
SENSOR_ATTR(temp4_min_alarm, S_IRUGO,
show_therm_min_alarm, NULL, 0+11),
SENSOR_ATTR(temp5_min_alarm, S_IRUGO,
show_therm_min_alarm, NULL, 1+11),
SENSOR_ATTR(temp6_min_alarm, S_IRUGO,
show_therm_min_alarm, NULL, 2+11),
};
static struct sensor_device_attribute therm_max_alarm[] = {
SENSOR_ATTR(temp4_max_alarm, S_IRUGO,
show_therm_max_alarm, NULL, 0+11),
SENSOR_ATTR(temp5_max_alarm, S_IRUGO,
show_therm_max_alarm, NULL, 1+11),
SENSOR_ATTR(temp6_max_alarm, S_IRUGO,
show_therm_max_alarm, NULL, 2+11),
};
static struct sensor_device_attribute therm_crit_alarm[] = {
SENSOR_ATTR(temp4_crit_alarm, S_IRUGO,
show_therm_crit_alarm, NULL, 0+11),
SENSOR_ATTR(temp5_crit_alarm, S_IRUGO,
show_therm_crit_alarm, NULL, 1+11),
SENSOR_ATTR(temp6_crit_alarm, S_IRUGO,
show_therm_crit_alarm, NULL, 2+11),
};
#define THERM_UNIT_ATTRS(X) \ #define THERM_UNIT_ATTRS(X) \
&therm_input[X].dev_attr.attr, \ &therm_input[X].dev_attr.attr, \
&therm_status[X].dev_attr.attr, \ &therm_status[X].dev_attr.attr, \
&therm_min[X].dev_attr.attr, \ &therm_min[X].dev_attr.attr, \
&therm_max[X].dev_attr.attr, \ &therm_max[X].dev_attr.attr, \
&therm_crit[X].dev_attr.attr &therm_crit[X].dev_attr.attr, \
&therm_min_alarm[X].dev_attr.attr, \
&therm_max_alarm[X].dev_attr.attr, \
&therm_crit_alarm[X].dev_attr.attr
static struct attribute * pc8736x_therm_attr_array[] = { static struct attribute * pc8736x_therm_attr_array[] = {
THERM_UNIT_ATTRS(0), THERM_UNIT_ATTRS(0),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment