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

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
...@@ -418,7 +418,7 @@ static int __devinit ...@@ -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, ...@@ -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, ...@@ -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
buf[0] = ABIT_UGURU_VOLT_LOW_ALARM_ENABLE; sensor this should always give us an alarm. */
buf[1] = 245; if (val <= 240u) {
buf[2] = 250; buf[0] = ABIT_UGURU_VOLT_LOW_ALARM_ENABLE;
buf[1] = 245;
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, ...@@ -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");
......
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