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

Commit e432dc81 authored by Hans de Goede's avatar Hans de Goede Committed by Mark M. Hoffman
Browse files

hwmon: fix detection of abituguru volt inputs



This patch fixes the detection of volt inputs with a reading of more then 240
units.

Signed-off-by: default avatarHans de Goede <j.w.r.degoede@hhs.nl>
Signed-off-by: default avatarMark M. Hoffman <mhoffman@lightlink.com>
parent 2dbbdb35
Loading
Loading
Loading
Loading
+18 −8
Original line number Original line Diff line number Diff line
@@ -418,7 +418,7 @@ static int __devinit
abituguru_detect_bank1_sensor_type(struct abituguru_data *data,
abituguru_detect_bank1_sensor_type(struct abituguru_data *data,
				   u8 sensor_addr)
				   u8 sensor_addr)
{
{
	u8 val, buf[3];
	u8 val, test_flag, buf[3];
	int i, ret = -ENODEV; /* error is the most common used retval :| */
	int i, ret = -ENODEV; /* error is the most common used retval :| */


	/* If overriden by the user return the user selected type */
	/* If overriden by the user return the user selected type */
@@ -436,7 +436,7 @@ abituguru_detect_bank1_sensor_type(struct abituguru_data *data,
		return -ENODEV;
		return -ENODEV;


	/* Test val is sane / usable for sensor type detection. */
	/* Test val is sane / usable for sensor type detection. */
	if ((val < 10u) || (val > 240u)) {
	if ((val < 10u) || (val > 250u)) {
		printk(KERN_WARNING ABIT_UGURU_NAME
		printk(KERN_WARNING ABIT_UGURU_NAME
			": bank1-sensor: %d reading (%d) too close to limits, "
			": bank1-sensor: %d reading (%d) too close to limits, "
			"unable to determine sensor type, skipping sensor\n",
			"unable to determine sensor type, skipping sensor\n",
@@ -449,10 +449,20 @@ abituguru_detect_bank1_sensor_type(struct abituguru_data *data,


	ABIT_UGURU_DEBUG(2, "testing bank1 sensor %d\n", (int)sensor_addr);
	ABIT_UGURU_DEBUG(2, "testing bank1 sensor %d\n", (int)sensor_addr);
	/* Volt sensor test, enable volt low alarm, set min value ridicously
	/* Volt sensor test, enable volt low alarm, set min value ridicously
	   high. If its a volt sensor this should always give us an alarm. */
	   high, or vica versa if the reading is very high. If its a volt
	   sensor this should always give us an alarm. */
	if (val <= 240u) {
		buf[0] = ABIT_UGURU_VOLT_LOW_ALARM_ENABLE;
		buf[0] = ABIT_UGURU_VOLT_LOW_ALARM_ENABLE;
		buf[1] = 245;
		buf[1] = 245;
		buf[2] = 250;
		buf[2] = 250;
		test_flag = ABIT_UGURU_VOLT_LOW_ALARM_FLAG;
	} else {
		buf[0] = ABIT_UGURU_VOLT_HIGH_ALARM_ENABLE;
		buf[1] = 5;
		buf[2] = 10;
		test_flag = ABIT_UGURU_VOLT_HIGH_ALARM_FLAG;
	}

	if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, sensor_addr,
	if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, sensor_addr,
			buf, 3) != 3)
			buf, 3) != 3)
		goto abituguru_detect_bank1_sensor_type_exit;
		goto abituguru_detect_bank1_sensor_type_exit;
@@ -469,13 +479,13 @@ abituguru_detect_bank1_sensor_type(struct abituguru_data *data,
				sensor_addr, buf, 3,
				sensor_addr, buf, 3,
				ABIT_UGURU_MAX_RETRIES) != 3)
				ABIT_UGURU_MAX_RETRIES) != 3)
			goto abituguru_detect_bank1_sensor_type_exit;
			goto abituguru_detect_bank1_sensor_type_exit;
		if (buf[0] & ABIT_UGURU_VOLT_LOW_ALARM_FLAG) {
		if (buf[0] & test_flag) {
			ABIT_UGURU_DEBUG(2, "  found volt sensor\n");
			ABIT_UGURU_DEBUG(2, "  found volt sensor\n");
			ret = ABIT_UGURU_IN_SENSOR;
			ret = ABIT_UGURU_IN_SENSOR;
			goto abituguru_detect_bank1_sensor_type_exit;
			goto abituguru_detect_bank1_sensor_type_exit;
		} else
		} else
			ABIT_UGURU_DEBUG(2, "  alarm raised during volt "
			ABIT_UGURU_DEBUG(2, "  alarm raised during volt "
				"sensor test, but volt low flag not set\n");
				"sensor test, but volt range flag not set\n");
	} else
	} else
		ABIT_UGURU_DEBUG(2, "  alarm not raised during volt sensor "
		ABIT_UGURU_DEBUG(2, "  alarm not raised during volt sensor "
			"test\n");
			"test\n");