Commit 0de2b244 authored by Jean Delvare's avatar Jean Delvare Committed by Jean Delvare

hwmon: (adm9240) Implement the standard intrusion detection interface

We have a standard intrusion detection interface now, drivers should
implement it. I've left the old interface in place for the time being,
with a deprecation warning, it will be removed later.
Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
Acked-by: default avatarGuenter Roeck <guenter.roeck@ericsson.com>
parent f790674d
...@@ -155,7 +155,7 @@ connected to a normally open switch. ...@@ -155,7 +155,7 @@ connected to a normally open switch.
The ADM9240 provides an internal open drain on this line, and may output The ADM9240 provides an internal open drain on this line, and may output
a 20 ms active low pulse to reset an external Chassis Intrusion latch. a 20 ms active low pulse to reset an external Chassis Intrusion latch.
Clear the CI latch by writing value 1 to the sysfs chassis_clear file. Clear the CI latch by writing value 0 to the sysfs intrusion0_alarm file.
Alarm flags reported as 16-bit word Alarm flags reported as 16-bit word
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
* Alarms 16-bit map of active alarms * Alarms 16-bit map of active alarms
* Analog Out 0..1250 mV output * Analog Out 0..1250 mV output
* *
* Chassis Intrusion: clear CI latch with 'echo 1 > chassis_clear' * Chassis Intrusion: clear CI latch with 'echo 0 > intrusion0_alarm'
* *
* Test hardware: Intel SE440BX-2 desktop motherboard --Grant * Test hardware: Intel SE440BX-2 desktop motherboard --Grant
* *
...@@ -476,13 +476,16 @@ static ssize_t set_aout(struct device *dev, ...@@ -476,13 +476,16 @@ static ssize_t set_aout(struct device *dev,
static DEVICE_ATTR(aout_output, S_IRUGO | S_IWUSR, show_aout, set_aout); static DEVICE_ATTR(aout_output, S_IRUGO | S_IWUSR, show_aout, set_aout);
/* chassis_clear */ /* chassis_clear */
static ssize_t chassis_clear(struct device *dev, static ssize_t chassis_clear_legacy(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
const char *buf, size_t count) const char *buf, size_t count)
{ {
struct i2c_client *client = to_i2c_client(dev); struct i2c_client *client = to_i2c_client(dev);
unsigned long val = simple_strtol(buf, NULL, 10); unsigned long val = simple_strtol(buf, NULL, 10);
dev_warn(dev, "Attribute chassis_clear is deprecated, "
"use intrusion0_alarm instead\n");
if (val == 1) { if (val == 1) {
i2c_smbus_write_byte_data(client, i2c_smbus_write_byte_data(client,
ADM9240_REG_CHASSIS_CLEAR, 0x80); ADM9240_REG_CHASSIS_CLEAR, 0x80);
...@@ -490,7 +493,29 @@ static ssize_t chassis_clear(struct device *dev, ...@@ -490,7 +493,29 @@ static ssize_t chassis_clear(struct device *dev,
} }
return count; return count;
} }
static DEVICE_ATTR(chassis_clear, S_IWUSR, NULL, chassis_clear); static DEVICE_ATTR(chassis_clear, S_IWUSR, NULL, chassis_clear_legacy);
static ssize_t chassis_clear(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{
struct i2c_client *client = to_i2c_client(dev);
struct adm9240_data *data = i2c_get_clientdata(client);
unsigned long val;
if (strict_strtoul(buf, 10, &val) || val != 0)
return -EINVAL;
mutex_lock(&data->update_lock);
i2c_smbus_write_byte_data(client, ADM9240_REG_CHASSIS_CLEAR, 0x80);
data->valid = 0; /* Force cache refresh */
mutex_unlock(&data->update_lock);
dev_dbg(&client->dev, "chassis intrusion latch cleared\n");
return count;
}
static SENSOR_DEVICE_ATTR(intrusion0_alarm, S_IRUGO | S_IWUSR, show_alarm,
chassis_clear, 12);
static struct attribute *adm9240_attributes[] = { static struct attribute *adm9240_attributes[] = {
&sensor_dev_attr_in0_input.dev_attr.attr, &sensor_dev_attr_in0_input.dev_attr.attr,
...@@ -532,6 +557,7 @@ static struct attribute *adm9240_attributes[] = { ...@@ -532,6 +557,7 @@ static struct attribute *adm9240_attributes[] = {
&dev_attr_alarms.attr, &dev_attr_alarms.attr,
&dev_attr_aout_output.attr, &dev_attr_aout_output.attr,
&dev_attr_chassis_clear.attr, &dev_attr_chassis_clear.attr,
&sensor_dev_attr_intrusion0_alarm.dev_attr.attr,
&dev_attr_cpu0_vid.attr, &dev_attr_cpu0_vid.attr,
NULL NULL
}; };
......
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