diff options
Diffstat (limited to 'drivers/hwmon/w83793.c')
-rw-r--r-- | drivers/hwmon/w83793.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/hwmon/w83793.c b/drivers/hwmon/w83793.c index c12ac5abc2bb..99e603a6a667 100644 --- a/drivers/hwmon/w83793.c +++ b/drivers/hwmon/w83793.c | |||
@@ -117,6 +117,7 @@ static const u16 W83793_REG_IN[][3] = { | |||
117 | /* Low Bits of Vcore A/B Vtt Read/High/Low */ | 117 | /* Low Bits of Vcore A/B Vtt Read/High/Low */ |
118 | static const u16 W83793_REG_IN_LOW_BITS[] = { 0x1b, 0x68, 0x69 }; | 118 | static const u16 W83793_REG_IN_LOW_BITS[] = { 0x1b, 0x68, 0x69 }; |
119 | static u8 scale_in[] = { 2, 2, 2, 16, 16, 16, 8, 24, 24, 16 }; | 119 | static u8 scale_in[] = { 2, 2, 2, 16, 16, 16, 8, 24, 24, 16 }; |
120 | static u8 scale_in_add[] = { 0, 0, 0, 0, 0, 0, 0, 150, 150, 0 }; | ||
120 | 121 | ||
121 | #define W83793_REG_FAN(index) (0x23 + 2 * (index)) /* High byte */ | 122 | #define W83793_REG_FAN(index) (0x23 + 2 * (index)) /* High byte */ |
122 | #define W83793_REG_FAN_MIN(index) (0x90 + 2 * (index)) /* High byte */ | 123 | #define W83793_REG_FAN_MIN(index) (0x90 + 2 * (index)) /* High byte */ |
@@ -500,7 +501,7 @@ store_temp(struct device *dev, struct device_attribute *attr, | |||
500 | each has 4 mode:(2 bits) | 501 | each has 4 mode:(2 bits) |
501 | 0: Stop monitor | 502 | 0: Stop monitor |
502 | 1: Use internal temp sensor(default) | 503 | 1: Use internal temp sensor(default) |
503 | 2: Use sensor in AMD CPU and get result by AMDSI | 504 | 2: Reserved |
504 | 3: Use sensor in Intel CPU and get result by PECI | 505 | 3: Use sensor in Intel CPU and get result by PECI |
505 | 506 | ||
506 | TR1-TR2 | 507 | TR1-TR2 |
@@ -509,8 +510,8 @@ store_temp(struct device *dev, struct device_attribute *attr, | |||
509 | 1: To enable temp sensors monitor | 510 | 1: To enable temp sensors monitor |
510 | */ | 511 | */ |
511 | 512 | ||
512 | /* 0 disable, 5 AMDSI, 6 PECI */ | 513 | /* 0 disable, 6 PECI */ |
513 | static u8 TO_TEMP_MODE[] = { 0, 0, 5, 6 }; | 514 | static u8 TO_TEMP_MODE[] = { 0, 0, 0, 6 }; |
514 | 515 | ||
515 | static ssize_t | 516 | static ssize_t |
516 | show_temp_mode(struct device *dev, struct device_attribute *attr, char *buf) | 517 | show_temp_mode(struct device *dev, struct device_attribute *attr, char *buf) |
@@ -550,7 +551,7 @@ store_temp_mode(struct device *dev, struct device_attribute *attr, | |||
550 | u8 val = simple_strtoul(buf, NULL, 10); | 551 | u8 val = simple_strtoul(buf, NULL, 10); |
551 | 552 | ||
552 | /* transform the sysfs interface values into table above */ | 553 | /* transform the sysfs interface values into table above */ |
553 | if ((val == 5 || val == 6) && (index < 4)) { | 554 | if ((val == 6) && (index < 4)) { |
554 | val -= 3; | 555 | val -= 3; |
555 | } else if ((val == 3 && index < 4) | 556 | } else if ((val == 3 && index < 4) |
556 | || (val == 4 && index >= 4) | 557 | || (val == 4 && index >= 4) |
@@ -839,7 +840,9 @@ show_in(struct device *dev, struct device_attribute *attr, char *buf) | |||
839 | val <<= 2; | 840 | val <<= 2; |
840 | val += (data->in_low_bits[nr] >> (index * 2)) & 0x3; | 841 | val += (data->in_low_bits[nr] >> (index * 2)) & 0x3; |
841 | } | 842 | } |
842 | return sprintf(buf, "%d\n", val * scale_in[index]); | 843 | /* voltage inputs 5VDD and 5VSB needs 150mV offset */ |
844 | val = val * scale_in[index] + scale_in_add[index]; | ||
845 | return sprintf(buf, "%d\n", val); | ||
843 | } | 846 | } |
844 | 847 | ||
845 | static ssize_t | 848 | static ssize_t |
@@ -859,6 +862,10 @@ store_in(struct device *dev, struct device_attribute *attr, | |||
859 | scale_in[index] / 2) / scale_in[index]; | 862 | scale_in[index] / 2) / scale_in[index]; |
860 | mutex_lock(&data->update_lock); | 863 | mutex_lock(&data->update_lock); |
861 | if (index > 2) { | 864 | if (index > 2) { |
865 | /* fix the limit values of 5VDD and 5VSB to ALARM mechanism */ | ||
866 | if (1 == nr || 2 == nr) { | ||
867 | val -= scale_in_add[index] / scale_in[index]; | ||
868 | } | ||
862 | val = SENSORS_LIMIT(val, 0, 255); | 869 | val = SENSORS_LIMIT(val, 0, 255); |
863 | } else { | 870 | } else { |
864 | val = SENSORS_LIMIT(val, 0, 0x3FF); | 871 | val = SENSORS_LIMIT(val, 0, 0x3FF); |