diff options
| -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); |
