Commit a516dc3e authored by Jean Delvare's avatar Jean Delvare Committed by Jean Delvare

hwmon: (w83793) 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 c32301b5
...@@ -92,7 +92,7 @@ This driver implements support for Winbond W83793G/W83793R chips. ...@@ -92,7 +92,7 @@ This driver implements support for Winbond W83793G/W83793R chips.
* Chassis * Chassis
If the case open alarm triggers, it will stay in this state unless cleared If the case open alarm triggers, it will stay in this state unless cleared
by any write to the sysfs file "chassis". by writing 0 to the sysfs file "intrusion0_alarm".
* VID and VRM * VID and VRM
The VRM version is detected automatically, don't modify the it unless you The VRM version is detected automatically, don't modify the it unless you
......
...@@ -421,14 +421,17 @@ store_beep_enable(struct device *dev, struct device_attribute *attr, ...@@ -421,14 +421,17 @@ store_beep_enable(struct device *dev, struct device_attribute *attr,
/* Write any value to clear chassis alarm */ /* Write any value to clear chassis alarm */
static ssize_t static ssize_t
store_chassis_clear(struct device *dev, store_chassis_clear_legacy(struct device *dev,
struct device_attribute *attr, const char *buf, struct device_attribute *attr, const char *buf,
size_t count) size_t count)
{ {
struct i2c_client *client = to_i2c_client(dev); struct i2c_client *client = to_i2c_client(dev);
struct w83793_data *data = i2c_get_clientdata(client); struct w83793_data *data = i2c_get_clientdata(client);
u8 val; u8 val;
dev_warn(dev, "Attribute chassis is deprecated, "
"use intrusion0_alarm instead\n");
mutex_lock(&data->update_lock); mutex_lock(&data->update_lock);
val = w83793_read_value(client, W83793_REG_CLR_CHASSIS); val = w83793_read_value(client, W83793_REG_CLR_CHASSIS);
val |= 0x80; val |= 0x80;
...@@ -437,6 +440,28 @@ store_chassis_clear(struct device *dev, ...@@ -437,6 +440,28 @@ store_chassis_clear(struct device *dev,
return count; return count;
} }
/* Write 0 to clear chassis alarm */
static ssize_t
store_chassis_clear(struct device *dev,
struct device_attribute *attr, const char *buf,
size_t count)
{
struct i2c_client *client = to_i2c_client(dev);
struct w83793_data *data = i2c_get_clientdata(client);
unsigned long val;
u8 reg;
if (strict_strtoul(buf, 10, &val) || val != 0)
return -EINVAL;
mutex_lock(&data->update_lock);
reg = w83793_read_value(client, W83793_REG_CLR_CHASSIS);
w83793_write_value(client, W83793_REG_CLR_CHASSIS, reg | 0x80);
data->valid = 0; /* Force cache refresh */
mutex_unlock(&data->update_lock);
return count;
}
#define FAN_INPUT 0 #define FAN_INPUT 0
#define FAN_MIN 1 #define FAN_MIN 1
static ssize_t static ssize_t
...@@ -1102,6 +1127,8 @@ static DEVICE_ATTR(vrm, S_IWUSR | S_IRUGO, show_vrm, store_vrm); ...@@ -1102,6 +1127,8 @@ static DEVICE_ATTR(vrm, S_IWUSR | S_IRUGO, show_vrm, store_vrm);
static struct sensor_device_attribute_2 sda_single_files[] = { static struct sensor_device_attribute_2 sda_single_files[] = {
SENSOR_ATTR_2(chassis, S_IWUSR | S_IRUGO, show_alarm_beep, SENSOR_ATTR_2(chassis, S_IWUSR | S_IRUGO, show_alarm_beep,
store_chassis_clear_legacy, ALARM_STATUS, 30),
SENSOR_ATTR_2(intrusion0_alarm, S_IWUSR | S_IRUGO, show_alarm_beep,
store_chassis_clear, ALARM_STATUS, 30), store_chassis_clear, ALARM_STATUS, 30),
SENSOR_ATTR_2(beep_enable, S_IWUSR | S_IRUGO, show_beep_enable, SENSOR_ATTR_2(beep_enable, S_IWUSR | S_IRUGO, show_beep_enable,
store_beep_enable, NOT_USED, NOT_USED), store_beep_enable, NOT_USED, NOT_USED),
......
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