Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -92,7 +92,7 @@ This driver implements support for Winbond W83793G/W83793R chips.

* Chassis
  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
  The VRM version is detected automatically, don't modify the it unless you
+30 −3
Original line number Diff line number Diff line
@@ -421,7 +421,7 @@ store_beep_enable(struct device *dev, struct device_attribute *attr,

/* Write any value to clear chassis alarm */
static ssize_t
store_chassis_clear(struct device *dev,
store_chassis_clear_legacy(struct device *dev,
			   struct device_attribute *attr, const char *buf,
			   size_t count)
{
@@ -429,6 +429,9 @@ store_chassis_clear(struct device *dev,
	struct w83793_data *data = i2c_get_clientdata(client);
	u8 val;

	dev_warn(dev, "Attribute chassis is deprecated, "
		 "use intrusion0_alarm instead\n");

	mutex_lock(&data->update_lock);
	val = w83793_read_value(client, W83793_REG_CLR_CHASSIS);
	val |= 0x80;
@@ -437,6 +440,28 @@ store_chassis_clear(struct device *dev,
	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_MIN				1
static ssize_t
@@ -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[] = {
	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),
	SENSOR_ATTR_2(beep_enable, S_IWUSR | S_IRUGO, show_beep_enable,
		      store_beep_enable, NOT_USED, NOT_USED),