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

Commit 98f7ba19 authored by Hans de Goede's avatar Hans de Goede Committed by Guenter Roeck
Browse files

hwmon/f71882fg: Only allow negative auto point temps if fan_neg_temp is enabled

parent 44c4dc52
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -84,6 +84,9 @@

#define F71882FG_REG_FAN_HYST(nr)	(0x98 + (nr))

#define F71882FG_REG_FAN_FAULT_T	0x9F
#define F71882FG_FAN_NEG_TEMP_EN	0x20

#define F71882FG_REG_POINT_PWM(pwm, point)	(0xAA + (point) + (16 * (pwm)))
#define F71882FG_REG_POINT_TEMP(pwm, point)	(0xA6 + (point) + (16 * (pwm)))
#define F71882FG_REG_POINT_MAPPING(nr)		(0xAF + 16 * (nr))
@@ -127,6 +130,7 @@ struct f71882fg_data {
	struct mutex update_lock;
	int temp_start;			/* temp numbering start (0 or 1) */
	char valid;			/* !=0 if following fields are valid */
	char auto_point_temp_signed;
	unsigned long last_updated;	/* In jiffies */
	unsigned long last_limits;	/* In jiffies */

@@ -1853,7 +1857,7 @@ static ssize_t store_pwm_auto_point_temp(struct device *dev,

	val /= 1000;

	if (data->type == f71889fg)
	if (data->auto_point_temp_signed)
		val = SENSORS_LIMIT(val, -128, 127);
	else
		val = SENSORS_LIMIT(val, 0, 127);
@@ -1900,7 +1904,7 @@ static int __devinit f71882fg_probe(struct platform_device *pdev)
	struct f71882fg_data *data;
	struct f71882fg_sio_data *sio_data = pdev->dev.platform_data;
	int err, i, nr_fans = (sio_data->type == f71882fg) ? 4 : 3;
	u8 start_reg;
	u8 start_reg, reg;

	data = kzalloc(sizeof(struct f71882fg_data), GFP_KERNEL);
	if (!data)
@@ -1970,6 +1974,16 @@ static int __devinit f71882fg_probe(struct platform_device *pdev)
	}

	if (start_reg & 0x02) {
		switch (data->type) {
		case f71889fg:
			reg = f71882fg_read8(data, F71882FG_REG_FAN_FAULT_T);
			if (reg & F71882FG_FAN_NEG_TEMP_EN)
				data->auto_point_temp_signed = 1;
			break;
		default:
			break;
		}

		data->pwm_enable =
			f71882fg_read8(data, F71882FG_REG_PWM_ENABLE);