Changeset 3194
- Timestamp:
- 11/19/05 15:55:30 (8 years ago)
- Location:
- lm-sensors/trunk
- Files:
-
- 6 modified
-
doc/chips/vt8231 (modified) (11 diffs)
-
etc/sensors.conf.eg (modified) (3 diffs)
-
kernel/chips/vt8231.c (modified) (17 diffs)
-
lib/chips.c (modified) (1 diff)
-
lib/chips.h (modified) (4 diffs)
-
prog/sensors/chips.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lm-sensors/trunk/doc/chips/vt8231
r3007 r3194 5 5 6 6 Supported chips: 7 * V iaVT8231 South Bridge7 * VIA VT8231 South Bridge 8 8 Prefix: 'vt8231' 9 9 Addresses scanned: none, address read from PCI space … … 37 37 ----------- 38 38 39 The V iaVT8231 South Bridge contains voltage/temperature monitoring and39 The VIA VT8231 South Bridge contains voltage/temperature monitoring and 40 40 PWM control circuitry for two fans. 41 41 42 We define the sensors as follows. Somewhat convoluted to minimize 43 changes from via686a. Temp1 and in6 are unimplemented in the vt8231 44 chip but are included in the driver. 42 We define the sensors as follows. 45 43 46 44 Sensor Voltage Mode Temp Mode uch_config bit 47 45 ------ ------------ --------- -------------- 48 Reading 1 temp3 49 Reading 3 temp1 50 UCH1/Reading 2 in0 temp2 0x04 (4) 51 UCH2 in1 temp4 0x08 (8) 52 UCH3 in2 temp5 0x10 (16) 53 UCH4 in3 temp6 0x20 (32) 54 UCH5 in4 temp7 0x40 (64) 46 Reading 1 temp1 47 UCH1 in0 temp2 0x04 (4) 48 UCH2 in1 temp3 0x08 (8) 49 UCH3 in2 temp4 0x10 (16) 50 UCH4 in3 temp5 0x20 (32) 51 UCH5 in4 temp6 0x40 (64) 55 52 3.3V in5 56 -12V in657 53 58 54 As noted above, 5 of the sensors are "universal channels" and can … … 92 88 in4 - - R- 2 93 89 in5 - - R- 2 94 in6 - - R- 295 90 in0_min in0 in0 RW 2 96 91 in1_min in1 in1 RW 2 … … 99 94 in4_min in4 in4 RW 2 100 95 in5_min in5 in5 RW 2 101 in6_min in6 in6 RW 2102 96 in0_max in0 in0 RW 2 103 97 in1_max in1 in1 RW 2 … … 106 100 in4_max in4 in4 RW 2 107 101 in5_max in5 in5 RW 2 108 in6_max in6 in6 RW 2109 102 fan1 - - R- 0 110 103 fan2 - - R- 0 … … 114 107 temp1_hyst temp1 temp1 RW 1 115 108 temp1_over temp1 temp1 RW 1 116 temp2 - - R- 1 117 temp2_hyst temp2 temp2 RW 1 118 temp2_over temp2 temp2 RW 1 119 temp3 - - R- 1 120 temp3_hyst temp3 temp3 RW 1 121 temp3_over temp3 temp3 RW 1 122 temp4 - - R- 1 123 temp4_hyst temp4 temp4 RW 1 124 temp4_over temp4 temp4 RW 1 125 temp5 - - R- 1 126 temp5_hyst temp5 temp5 RW 1 127 temp5_over temp5 temp5 RW 1 128 temp6 - - R- 1 129 temp6_hyst temp6 temp6 RW 1 130 temp6_over temp6 temp6 RW 1 131 temp7 - - R- 1 132 temp7_hyst temp7 temp7 RW 1 133 temp7_over temp7 temp7 RW 1 109 temp2 - - R- 2 110 temp2_hyst temp2 temp2 RW 2 111 temp2_over temp2 temp2 RW 2 112 temp3 - - R- 2 113 temp3_hyst temp3 temp3 RW 2 114 temp3_over temp3 temp3 RW 2 115 temp4 - - R- 2 116 temp4_hyst temp4 temp4 RW 2 117 temp4_over temp4 temp4 RW 2 118 temp5 - - R- 2 119 temp5_hyst temp5 temp5 RW 2 120 temp5_over temp5 temp5 RW 2 121 temp6 - - R- 2 122 temp6_hyst temp6 temp6 RW 2 123 temp6_over temp6 temp6 RW 2 134 124 fan1_div fan1 - RW 0 135 125 fan2_div fan2 - RW 0 … … 146 136 in4 SENSORS_VT8231_IN4 in4:3 147 137 in5 SENSORS_VT8231_IN5 in5:3 148 in6 SENSORS_VT8231_IN6 in6:3149 138 in0_min SENSORS_VT8231_IN0_MIN in0:1 150 139 in1_min SENSORS_VT8231_IN1_MIN in1:1 … … 153 142 in4_min SENSORS_VT8231_IN4_MIN in4:1 154 143 in5_min SENSORS_VT8231_IN5_MIN in5:1 155 in6_min SENSORS_VT8231_IN6_MIN in6:1156 144 in0_max SENSORS_VT8231_IN0_MAX in0:2 157 145 in1_max SENSORS_VT8231_IN1_MAX in1:2 … … 160 148 in4_max SENSORS_VT8231_IN4_MAX in4:2 161 149 in5_max SENSORS_VT8231_IN5_MAX in5:2 162 in6_max SENSORS_VT8231_IN6_MAX in6:2163 150 fan1 SENSORS_VT8231_FAN1 fan1:2 164 151 fan2 SENSORS_VT8231_FAN2 fan2:2 … … 183 170 temp6_hyst SENSORS_VT8231_TEMP6_HYST temp6:2 184 171 temp6_over SENSORS_VT8231_TEMP6_OVER temp6:1 185 temp7 SENSORS_VT8231_TEMP7 temp7:3186 temp7_hyst SENSORS_VT8231_TEMP7_HYST temp7:2187 temp7_over SENSORS_VT8231_TEMP7_OVER temp7:1188 172 fan1_div SENSORS_VT8231_FAN1_DIV fan_div:1 189 173 fan2_div SENSORS_VT8231_FAN2_DIV fan_div:2 … … 197 181 ----- 198 182 199 The lm_sensors project gratefully acknowledges the support of V iain the183 The lm_sensors project gratefully acknowledges the support of VIA in the 200 184 development of this driver. -
lm-sensors/trunk/etc/sensors.conf.eg
r3193 r3194 1919 1919 1920 1920 1921 chip "vt1211-*" "vt8231-*"1922 # 1923 # temp1 and in6 are not implemented in vt1211 / vt82311921 chip "vt1211-*" 1922 # 1923 # temp1 and in6 are not implemented in vt1211 1924 1924 # 1925 1925 # 1 for temp, 0 for volt. … … 1936 1936 # set uch1-2 to temp mode, uch3-5 to voltage mode 1937 1937 # 1938 set config 121938 # set config 12 1939 1939 ignore in0 1940 1940 ignore in1 … … 2027 2027 set fan1_min 3000 2028 2028 set fan2_min 3000 2029 2030 chip "vt8231-*" 2031 # 2032 # 1 for temp, 0 for volt. 2033 # Sensor Voltage Mode Temp Mode config bit 2034 # -------- ------------ --------- -------------- 2035 # Reading 1 temp1 2036 # UCH1 in0 temp2 0x04 (4) 2037 # UCH2 in1 temp3 0x08 (8) 2038 # UCH3 in2 temp4 0x10 (16) 2039 # UCH4 in3 temp5 0x20 (32) 2040 # UCH5 in4 temp6 0x40 (64) 2041 # 3.3V in5 2042 # 2043 # Hardware default is UCH1 in temp mode, UCH2-5 in voltage mode 2044 # Note that the Linux 2.6 driver will not let you change the channel 2045 # configuration. In theory, the BIOS should have done it properly. 2046 # set config 4 2047 2048 # ignore in0 2049 # ignore temp3 2050 # ignore temp4 2051 # ignore temp5 2052 # ignore temp6 2053 2054 label in1 "+2.5V" 2055 label in2 "VCore" 2056 label in3 "+5V" 2057 label in4 "+12V" 2058 label in5 "+3.3V" 2059 2060 label temp1 "CPU Temp" 2061 label temp2 "M/B Temp" 2062 2063 # Here are the resistor values as recommended by VIA: 2064 # Voltage R1 R2 2065 # VCore no scaling 2066 # 2.5 2k 10k 2067 # 3.5 (3.3V ext.) 6.8k 10k 2068 # 5.0 14k 10k 2069 # 12.0 47k 10k 2070 2071 # compute in0 @ * (1 + 6.8 / 10), @ / (1 + 6.8 / 10) 2072 compute in1 @ * (1 + 2 / 10), @ / (1 + 2 / 10) 2073 compute in3 @ * (1 + 14 / 10), @ / (1 + 14 / 10) 2074 compute in4 @ * (1 + 47 / 10), @ / (1 + 47 / 10) 2075 # in5 is scaled internally so scaling is done by the driver. 2076 2077 # set in0_min 2.5 * 0.95 2078 # set in0_max 2.5 * 1.05 2079 # set in1_min 2.5 * 0.95 2080 # set in1_max 2.5 * 1.05 2081 # Replace "2.0" with your nominal CPU voltage for in2. 2082 # set in2_min 2.0 * 0.95 2083 # set in2_max 2.0 * 1.05 2084 # set in3_min 5.0 * 0.95 2085 set in3_max 5.0 * 1.05 2086 set in4_min 12.0 * 0.95 2087 set in4_max 12.0 * 1.05 2088 set in5_min 3.3 * 0.95 2089 set in5_max 3.3 * 1.05 2090 2091 # For Intel CPU: 2092 compute temp1 (@ - 65) / 0.9686, (@ * 0.9686) + 65 2093 2094 # For VIA EPIA CPU (provided by Roger Lucas): 2095 # compute temp1 (@ - 45) / 0.7809, (@ * 0.7809) + 45 2096 2097 # Thermistor calculations 2098 # 3435 is the thermistor beta, 2.2 is the reference voltage. 2099 # '^' is the e**x operator; '`' is the ln(x) operator 2100 # (valid in library version 1.4.0 / lm_sensors 2.7.1 or higher) 2101 # This assumes that the thermistor forms a resistor divider with a resistor 2102 # equal to its nominal value @ 25C. 2103 2104 compute temp2 3435 / (` (1 / (1 - @ / 2.2) - 1) + 3435 / 298.15) - 273.15, \ 2105 2.2 * (1 - 1 / (1 + (^ (3435 / (273.15 + @) - 3435 / 298.15)))) 2106 compute temp3 3435 / (` (1 / (1 - @ / 2.2) - 1) + 3435 / 298.15) - 273.15, \ 2107 2.2 * (1 - 1 / (1 + (^ (3435 / (273.15 + @) - 3435 / 298.15)))) 2108 2109 # set temp2_hyst 40 2110 # set temp2_over 45 2111 # set temp3_hyst 60 2112 # set temp3_over 65 2113 2114 # set fan1_min 3000 2115 # set fan2_min 3000 2029 2116 2030 2117 chip "bmc-*" -
lm-sensors/trunk/kernel/chips/vt8231.c
r3190 r3194 55 55 56 56 /* The VT8231 registers */ 57 /* We define the sensors as follows. Somewhat convoluted to minimize 58 changes from via686a. 57 /* We define the sensors as follows. 59 58 Sensor Voltage Mode Temp Mode 60 59 -------- ------------ --------- 61 Reading 1 temp3 62 Reading 3 temp1 not in vt8231 63 UCH1/Reading2 in0 temp2 64 UCH2 in1 temp4 65 UCH3 in2 temp5 66 UCH4 in3 temp6 67 UCH5 in4 temp7 60 Reading 1 temp1 61 UCH1 in0 temp2 62 UCH2 in1 temp3 63 UCH3 in2 temp4 64 UCH4 in3 temp5 65 UCH5 in4 temp6 68 66 3.3V in5 69 -12V in6 not in vt823170 67 */ 71 68 72 /* ins numbered 0- 6*/69 /* ins numbered 0-5 */ 73 70 #define VT8231_REG_IN_MAX(nr) ((nr)==0 ? 0x3d : 0x29 + ((nr) * 2)) 74 71 #define VT8231_REG_IN_MIN(nr) ((nr)==0 ? 0x3e : 0x2a + ((nr) * 2)) … … 79 76 #define VT8231_REG_FAN(nr) (0x28 + (nr)) 80 77 81 static const u8 regtemp[] = { 0x 20, 0x21, 0x1f, 0x22, 0x23, 0x24, 0x25 };82 static const u8 regover[] = { 0x39, 0x3d, 0x 1d, 0x2b, 0x2d, 0x2f, 0x31 };83 static const u8 reghyst[] = { 0x3a, 0x3e, 0x 1e, 0x2c, 0x2e, 0x30, 0x32 };84 85 /* temps numbered 1- 7*/78 static const u8 regtemp[] = { 0x1f, 0x21, 0x22, 0x23, 0x24, 0x25 }; 79 static const u8 regover[] = { 0x39, 0x3d, 0x2b, 0x2d, 0x2f, 0x31 }; 80 static const u8 reghyst[] = { 0x3a, 0x3e, 0x2c, 0x2e, 0x30, 0x32 }; 81 82 /* temps numbered 1-6 */ 86 83 #define VT8231_REG_TEMP(nr) (regtemp[(nr) - 1]) 87 84 #define VT8231_REG_TEMP_OVER(nr) (regover[(nr) - 1]) 88 85 #define VT8231_REG_TEMP_HYST(nr) (reghyst[(nr) - 1]) 89 #define VT8231_REG_TEMP_LOW3 0x4b /* bits 7-6 */ 90 #define VT8231_REG_TEMP_LOW2 0x49 /* bits 5-4 */ 91 #define VT8231_REG_TEMP_LOW47 0x4d 86 #define VT8231_REG_TEMP_LOW12 0x49 87 #define VT8231_REG_TEMP_LOW36 0x4d 92 88 93 89 #define VT8231_REG_CONFIG 0x40 … … 100 96 #define VT8231_REG_TEMP2_CONFIG 0x4c 101 97 102 /* temps 1- 7; voltages 0-6*/98 /* temps 1-6; voltages 0-5 */ 103 99 #define ISTEMP(i, ch_config) ((i) == 1 ? 1 : \ 104 (i) == 3 ? 1 : \ 105 (i) == 2 ? ((ch_config) >> 1) & 0x01 : \ 106 ((ch_config) >> ((i)-1)) & 0x01) 107 #define ISVOLT(i, ch_config) ((i) > 4 ? 1 : !(((ch_config) >> ((i)+2)) & 0x01)) 100 ((ch_config) >> (i)) & 0x01) 101 #define ISVOLT(i, ch_config) ((i) == 5 ? 1 : \ 102 !(((ch_config) >> ((i)+2)) & 0x01)) 108 103 109 104 #define DIV_FROM_REG(val) (1 << (val)) … … 112 107 #define PWM_TO_REG(val) SENSORS_LIMIT((val), 0, 255) 113 108 109 /* Used for temp1 (diode) */ 114 110 #define TEMP_FROM_REG(val) ((val)*10) 115 111 #define TEMP_FROM_REG10(val) (((val)*10)/4) 116 112 #define TEMP_TO_REG(val) (SENSORS_LIMIT(((val)<0?(((val)-5)/10):\ 117 113 ((val)+5)/10),0,255)) 118 #define IN_FROM_REG(val) /*(((val)*10+5)/10)*/ (val) 119 #define IN_TO_REG(val) (SENSORS_LIMIT((((val) * 10 + 5)/10),0,255)) 114 115 /* Used for temp2-temp6 (thermistor) */ 116 #define THERM_FROM_REG(reg) (((253 * 4 - (reg)) * 55 + 105) / 210) 117 #define THERM_TO_REG(val) (253 - ((val) * 210 + 110) / 220) 118 119 /* Used for in0-in4 */ 120 #define IN_FROM_REG(val) ((((val) - 3) * 1000 + 479) / 958) 121 #define IN_TO_REG(val) SENSORS_LIMIT(((val) * 958 + 500) \ 122 / 1000 + 3, 0, 255) 123 /* Used for in5 (scaled internally) */ 124 #define IN5_FROM_REG(val) ((((val) - 3) * 54000 + 16286) / 32572) 125 #define IN5_TO_REG(val) SENSORS_LIMIT(((val) * 32572 + 27000) \ 126 / 54000 + 3, 0, 255) 120 127 121 128 … … 143 150 unsigned long last_updated; /* In jiffies */ 144 151 145 u8 in[ 7]; /* Register value */146 u8 in_max[ 7]; /* Register value */147 u8 in_min[ 7]; /* Register value */148 u16 temp[ 7]; /* Register value 10 bit */149 u8 temp_over[ 7]; /* Register value */150 u8 temp_hyst[ 7]; /* Register value */152 u8 in[6]; /* Register value */ 153 u8 in_max[6]; /* Register value */ 154 u8 in_min[6]; /* Register value */ 155 u16 temp[6]; /* Register value 10 bit */ 156 u8 temp_over[6]; /* Register value */ 157 u8 temp_hyst[6]; /* Register value */ 151 158 u8 fan[2]; /* Register value */ 152 159 u8 fan_min[2]; /* Register value */ … … 179 186 int ctl_name, int *nrels_mag, long *results); 180 187 static void vt8231_in(struct i2c_client *client, int operation, 188 int ctl_name, int *nrels_mag, long *results); 189 static void vt8231_in5(struct i2c_client *client, int operation, 181 190 int ctl_name, int *nrels_mag, long *results); 182 191 static void vt8231_pwm(struct i2c_client *client, int operation, … … 190 199 static void vt8231_temp(struct i2c_client *client, int operation, 191 200 int ctl_name, int *nrels_mag, long *results); 201 static void vt8231_therm(struct i2c_client *client, int operation, 202 int ctl_name, int *nrels_mag, long *results); 192 203 193 204 static struct i2c_driver vt8231_driver = { … … 206 217 #define VT8231_SYSCTL_IN4 1004 207 218 #define VT8231_SYSCTL_IN5 1005 208 #define VT8231_SYSCTL_IN6 1006209 219 #define VT8231_SYSCTL_FAN1 1101 210 220 #define VT8231_SYSCTL_FAN2 1102 … … 215 225 #define VT8231_SYSCTL_TEMP5 1204 216 226 #define VT8231_SYSCTL_TEMP6 1205 217 #define VT8231_SYSCTL_TEMP7 1206218 227 #define VT8231_SYSCTL_VID 1300 219 228 #define VT8231_SYSCTL_PWM1 1401 … … 232 241 #define VT8231_ALARM_FAN2 0x80 233 242 #define VT8231_ALARM_IN4 0x100 234 #define VT8231_ALARM_IN6 0x200235 243 #define VT8231_ALARM_TEMP2 0x800 236 244 #define VT8231_ALARM_CHAS 0x1000 237 #define VT8231_ALARM_TEMP3 0x8000238 245 /* duplicates */ 239 #define VT8231_ALARM_IN0 VT8231_ALARM_TEMP 240 #define VT8231_ALARM_TEMP 4VT8231_ALARM_IN1241 #define VT8231_ALARM_TEMP 5VT8231_ALARM_IN2242 #define VT8231_ALARM_TEMP 6VT8231_ALARM_IN3243 #define VT8231_ALARM_TEMP 7VT8231_ALARM_IN4246 #define VT8231_ALARM_IN0 VT8231_ALARM_TEMP2 247 #define VT8231_ALARM_TEMP3 VT8231_ALARM_IN1 248 #define VT8231_ALARM_TEMP4 VT8231_ALARM_IN2 249 #define VT8231_ALARM_TEMP5 VT8231_ALARM_IN3 250 #define VT8231_ALARM_TEMP6 VT8231_ALARM_IN4 244 251 245 252 /* -- SENSORS SYSCTL END -- */ … … 257 264 &i2c_sysctl_real, NULL, &vt8231_in}, 258 265 {VT8231_SYSCTL_IN5, "in5", NULL, 0, 0644, NULL, &i2c_proc_real, 259 &i2c_sysctl_real, NULL, &vt8231_in}, 260 /* 261 not in 8231 262 {VT8231_SYSCTL_IN6, "in6", NULL, 0, 0644, NULL, &i2c_proc_real, 263 &i2c_sysctl_real, NULL, &vt8231_in}, 264 {VT8231_SYSCTL_TEMP, "temp1", NULL, 0, 0644, NULL, &i2c_proc_real, 265 &i2c_sysctl_real, NULL, &vt8231_temp}, 266 */ 266 &i2c_sysctl_real, NULL, &vt8231_in5}, 267 {VT8231_SYSCTL_TEMP, "temp1", NULL, 0, 0644, NULL, 268 &i2c_proc_real, &i2c_sysctl_real, NULL, &vt8231_temp}, 267 269 {VT8231_SYSCTL_TEMP2, "temp2", NULL, 0, 0644, NULL, 268 &i2c_proc_real, &i2c_sysctl_real, NULL, &vt8231_t emp},270 &i2c_proc_real, &i2c_sysctl_real, NULL, &vt8231_therm}, 269 271 {VT8231_SYSCTL_TEMP3, "temp3", NULL, 0, 0644, NULL, 270 &i2c_proc_real, &i2c_sysctl_real, NULL, &vt8231_t emp},272 &i2c_proc_real, &i2c_sysctl_real, NULL, &vt8231_therm}, 271 273 {VT8231_SYSCTL_TEMP4, "temp4", NULL, 0, 0644, NULL, 272 &i2c_proc_real, &i2c_sysctl_real, NULL, &vt8231_t emp},274 &i2c_proc_real, &i2c_sysctl_real, NULL, &vt8231_therm}, 273 275 {VT8231_SYSCTL_TEMP5, "temp5", NULL, 0, 0644, NULL, 274 &i2c_proc_real, &i2c_sysctl_real, NULL, &vt8231_t emp},276 &i2c_proc_real, &i2c_sysctl_real, NULL, &vt8231_therm}, 275 277 {VT8231_SYSCTL_TEMP6, "temp6", NULL, 0, 0644, NULL, 276 &i2c_proc_real, &i2c_sysctl_real, NULL, &vt8231_temp}, 277 {VT8231_SYSCTL_TEMP7, "temp7", NULL, 0, 0644, NULL, 278 &i2c_proc_real, &i2c_sysctl_real, NULL, &vt8231_temp}, 278 &i2c_proc_real, &i2c_sysctl_real, NULL, &vt8231_therm}, 279 279 {VT8231_SYSCTL_FAN1, "fan1", NULL, 0, 0644, NULL, &i2c_proc_real, 280 280 &i2c_sysctl_real, NULL, &vt8231_fan}, … … 486 486 VT8231_REG_FAN_MIN(i)); 487 487 } 488 for (i = 2; i <= 7; i++) {488 for (i = 1; i <= 6; i++) { 489 489 if(ISTEMP(i, data->uch_config)) { 490 490 data->temp[i - 1] = vt_rdval(client, … … 492 492 switch(i) { 493 493 case 1: 494 /* ? */ 495 j = 0; 494 j = (vt_rdval(client, 495 VT8231_REG_TEMP_LOW12) & 496 0xc0) >> 6; 496 497 break; 497 498 case 2: 498 499 j = (vt_rdval(client, 499 VT8231_REG_TEMP_LOW 2) &500 VT8231_REG_TEMP_LOW12) & 500 501 0x30) >> 4; 501 502 break; 502 case 3:503 j = (vt_rdval(client,504 VT8231_REG_TEMP_LOW3) &505 0xc0) >> 6;506 break;507 case 4:508 case 5:509 case 6:510 case 7:511 503 default: 512 504 j = (vt_rdval(client, 513 VT8231_REG_TEMP_LOW 47) >>514 ((i- 4)*2)) & 0x03;505 VT8231_REG_TEMP_LOW36) >> 506 ((i-3)*2)) & 0x03; 515 507 break; 516 508 … … 574 566 vt8231_write_value(client, VT8231_REG_IN_MAX(nr), 575 567 data->in_max[nr]); 568 } 569 } 570 } 571 572 void vt8231_in5(struct i2c_client *client, int operation, int ctl_name, 573 int *nrels_mag, long *results) 574 { 575 struct vt8231_data *data = client->data; 576 577 if (operation == SENSORS_PROC_REAL_INFO) 578 *nrels_mag = 2; 579 else if (operation == SENSORS_PROC_REAL_READ) { 580 vt8231_update_client(client); 581 results[0] = IN5_FROM_REG(data->in_min[5]); 582 results[1] = IN5_FROM_REG(data->in_max[5]); 583 results[2] = IN5_FROM_REG(data->in[5]); 584 *nrels_mag = 3; 585 } else if (operation == SENSORS_PROC_REAL_WRITE) { 586 if (*nrels_mag >= 1) { 587 data->in_min[5] = IN5_TO_REG(results[0]); 588 vt8231_write_value(client, VT8231_REG_IN_MIN(5), 589 data->in_min[5]); 590 } 591 if (*nrels_mag >= 2) { 592 data->in_max[5] = IN5_TO_REG(results[1]); 593 vt8231_write_value(client, VT8231_REG_IN_MAX(5), 594 data->in_max[5]); 576 595 } 577 596 } … … 611 630 { 612 631 struct vt8231_data *data = client->data; 613 int nr = ctl_name - VT8231_SYSCTL_TEMP;614 632 615 633 if (operation == SENSORS_PROC_REAL_INFO) … … 617 635 else if (operation == SENSORS_PROC_REAL_READ) { 618 636 vt8231_update_client(client); 619 results[0] = TEMP_FROM_REG(data->temp_over[ nr]);620 results[1] = TEMP_FROM_REG(data->temp_hyst[ nr]);621 results[2] = TEMP_FROM_REG10(data->temp[ nr]);637 results[0] = TEMP_FROM_REG(data->temp_over[0]); 638 results[1] = TEMP_FROM_REG(data->temp_hyst[0]); 639 results[2] = TEMP_FROM_REG10(data->temp[0]); 622 640 *nrels_mag = 3; 623 641 } else if (operation == SENSORS_PROC_REAL_WRITE) { 624 642 if (*nrels_mag >= 1) { 625 data->temp_over[nr] = TEMP_TO_REG(results[0]); 643 data->temp_over[0] = TEMP_TO_REG(results[0]); 644 vt8231_write_value(client, 645 VT8231_REG_TEMP_OVER(1), 646 data->temp_over[0]); 647 } 648 if (*nrels_mag >= 2) { 649 data->temp_hyst[0] = TEMP_TO_REG(results[1]); 650 vt8231_write_value(client, 651 VT8231_REG_TEMP_HYST(1), 652 data->temp_hyst[0]); 653 } 654 } 655 } 656 657 void vt8231_therm(struct i2c_client *client, int operation, int ctl_name, 658 int *nrels_mag, long *results) 659 { 660 struct vt8231_data *data = client->data; 661 int nr = ctl_name - VT8231_SYSCTL_TEMP; 662 663 if (operation == SENSORS_PROC_REAL_INFO) 664 *nrels_mag = 2; 665 else if (operation == SENSORS_PROC_REAL_READ) { 666 vt8231_update_client(client); 667 results[0] = THERM_FROM_REG(data->temp_over[nr] * 4); 668 results[1] = THERM_FROM_REG(data->temp_hyst[nr] * 4); 669 results[2] = THERM_FROM_REG(data->temp[nr]); 670 *nrels_mag = 3; 671 } else if (operation == SENSORS_PROC_REAL_WRITE) { 672 if (*nrels_mag >= 1) { 673 data->temp_over[nr] = THERM_TO_REG(results[0]); 626 674 vt8231_write_value(client, 627 675 VT8231_REG_TEMP_OVER(nr + 1), … … 629 677 } 630 678 if (*nrels_mag >= 2) { 631 data->temp_hyst[nr] = T EMP_TO_REG(results[1]);679 data->temp_hyst[nr] = THERM_TO_REG(results[1]); 632 680 vt8231_write_value(client, 633 681 VT8231_REG_TEMP_HYST(nr + 1), -
lm-sensors/trunk/lib/chips.c
r3170 r3194 4967 4967 SENSORS_VT8231_FAN2, 4968 4968 RW, VT8231_SYSCTL_FAN2, VALUE(1), 0 }, 4969 /* no temp1 */ 4969 { SENSORS_VT8231_TEMP, "temp1", NOMAP, NOMAP, 4970 R, VT8231_SYSCTL_TEMP, VALUE(3), 1 }, 4971 { SENSORS_VT8231_TEMP_HYST, "temp1_hyst", SENSORS_VT8231_TEMP, 4972 SENSORS_VT8231_TEMP, RW, 4973 VT8231_SYSCTL_TEMP, VALUE(2), 1 }, 4974 { SENSORS_VT8231_TEMP_OVER, "temp1_over", SENSORS_VT8231_TEMP, 4975 SENSORS_VT8231_TEMP, RW, 4976 VT8231_SYSCTL_TEMP, VALUE(1), 1 }, 4970 4977 { SENSORS_VT8231_TEMP2, "temp2", NOMAP, NOMAP, 4971 R, VT8231_SYSCTL_TEMP2, VALUE(3), 1},4978 R, VT8231_SYSCTL_TEMP2, VALUE(3), 2 }, 4972 4979 { SENSORS_VT8231_TEMP2_HYST, "temp2_hyst", SENSORS_VT8231_TEMP2, 4973 4980 SENSORS_VT8231_TEMP2, RW, 4974 VT8231_SYSCTL_TEMP2, VALUE(2), 1},4981 VT8231_SYSCTL_TEMP2, VALUE(2), 2 }, 4975 4982 { SENSORS_VT8231_TEMP2_OVER, "temp2_over", SENSORS_VT8231_TEMP2, 4976 4983 SENSORS_VT8231_TEMP2, RW, 4977 VT8231_SYSCTL_TEMP2, VALUE(1), 1},4984 VT8231_SYSCTL_TEMP2, VALUE(1), 2 }, 4978 4985 { SENSORS_VT8231_TEMP3, "temp3", NOMAP, NOMAP, 4979 R, VT8231_SYSCTL_TEMP3, VALUE(3), 1},4986 R, VT8231_SYSCTL_TEMP3, VALUE(3), 2 }, 4980 4987 { SENSORS_VT8231_TEMP3_HYST, "temp3_hyst", SENSORS_VT8231_TEMP3, 4981 4988 SENSORS_VT8231_TEMP3, RW, 4982 VT8231_SYSCTL_TEMP3, VALUE(2), 1},4989 VT8231_SYSCTL_TEMP3, VALUE(2), 2 }, 4983 4990 { SENSORS_VT8231_TEMP3_OVER, "temp3_over", SENSORS_VT8231_TEMP3, 4984 4991 SENSORS_VT8231_TEMP3, RW, 4985 VT8231_SYSCTL_TEMP3, VALUE(1), 1},4992 VT8231_SYSCTL_TEMP3, VALUE(1), 2 }, 4986 4993 { SENSORS_VT8231_TEMP4, "temp4", NOMAP, NOMAP, 4987 R, VT8231_SYSCTL_TEMP4, VALUE(3), 1},4994 R, VT8231_SYSCTL_TEMP4, VALUE(3), 2 }, 4988 4995 { SENSORS_VT8231_TEMP4_HYST, "temp4_hyst", SENSORS_VT8231_TEMP4, 4989 4996 SENSORS_VT8231_TEMP4, RW, 4990 VT8231_SYSCTL_TEMP4, VALUE(2), 1},4997 VT8231_SYSCTL_TEMP4, VALUE(2), 2 }, 4991 4998 { SENSORS_VT8231_TEMP4_OVER, "temp4_over", SENSORS_VT8231_TEMP4, 4992 4999 SENSORS_VT8231_TEMP4, RW, 4993 VT8231_SYSCTL_TEMP4, VALUE(1), 1},5000 VT8231_SYSCTL_TEMP4, VALUE(1), 2 }, 4994 5001 { SENSORS_VT8231_TEMP5, "temp5", NOMAP, NOMAP, 4995 R, VT8231_SYSCTL_TEMP5, VALUE(3), 1},5002 R, VT8231_SYSCTL_TEMP5, VALUE(3), 2 }, 4996 5003 { SENSORS_VT8231_TEMP5_HYST, "temp5_hyst", SENSORS_VT8231_TEMP5, 4997 5004 SENSORS_VT8231_TEMP5, RW, 4998 VT8231_SYSCTL_TEMP5, VALUE(2), 1},5005 VT8231_SYSCTL_TEMP5, VALUE(2), 2 }, 4999 5006 { SENSORS_VT8231_TEMP5_OVER, "temp5_over", SENSORS_VT8231_TEMP5, 5000 5007 SENSORS_VT8231_TEMP5, RW, 5001 VT8231_SYSCTL_TEMP5, VALUE(1), 1},5008 VT8231_SYSCTL_TEMP5, VALUE(1), 2 }, 5002 5009 { SENSORS_VT8231_TEMP6, "temp6", NOMAP, NOMAP, 5003 R, VT8231_SYSCTL_TEMP6, VALUE(3), 1},5010 R, VT8231_SYSCTL_TEMP6, VALUE(3), 2 }, 5004 5011 { SENSORS_VT8231_TEMP6_HYST, "temp6_hyst", SENSORS_VT8231_TEMP6, 5005 5012 SENSORS_VT8231_TEMP6, RW, 5006 VT8231_SYSCTL_TEMP6, VALUE(2), 1},5013 VT8231_SYSCTL_TEMP6, VALUE(2), 2 }, 5007 5014 { SENSORS_VT8231_TEMP6_OVER, "temp6_over", SENSORS_VT8231_TEMP6, 5008 5015 SENSORS_VT8231_TEMP6, RW, 5009 VT8231_SYSCTL_TEMP6, VALUE(1), 1 }, 5010 { SENSORS_VT8231_TEMP7, "temp7", NOMAP, NOMAP, 5011 R, VT8231_SYSCTL_TEMP7, VALUE(3), 1 }, 5012 { SENSORS_VT8231_TEMP7_HYST, "temp7_hyst", SENSORS_VT8231_TEMP7, 5013 SENSORS_VT8231_TEMP7, RW, 5014 VT8231_SYSCTL_TEMP7, VALUE(2), 1 }, 5015 { SENSORS_VT8231_TEMP7_OVER, "temp7_over", SENSORS_VT8231_TEMP7, 5016 SENSORS_VT8231_TEMP7, RW, 5017 VT8231_SYSCTL_TEMP7, VALUE(1), 1 }, 5016 VT8231_SYSCTL_TEMP6, VALUE(1), 2 }, 5018 5017 { SENSORS_VT8231_FAN1_DIV, "fan1_div", SENSORS_VT8231_FAN1, 5019 5018 NOMAP, -
lm-sensors/trunk/lib/chips.h
r3169 r3194 1865 1865 #define SENSORS_VT8231_IN4 5 /* R */ 1866 1866 #define SENSORS_VT8231_IN5 6 /* R */ 1867 #define SENSORS_VT8231_IN6 7 /* R */1868 1867 #define SENSORS_VT8231_IN0_MIN 11 /* RW */ 1869 1868 #define SENSORS_VT8231_IN1_MIN 12 /* RW */ … … 1872 1871 #define SENSORS_VT8231_IN4_MIN 15 /* RW */ 1873 1872 #define SENSORS_VT8231_IN5_MIN 16 /* RW */ 1874 #define SENSORS_VT8231_IN6_MIN 17 /* RW */1875 1873 #define SENSORS_VT8231_IN0_MAX 21 /* RW */ 1876 1874 #define SENSORS_VT8231_IN1_MAX 22 /* RW */ … … 1879 1877 #define SENSORS_VT8231_IN4_MAX 25 /* RW */ 1880 1878 #define SENSORS_VT8231_IN5_MAX 26 /* RW */ 1881 #define SENSORS_VT8231_IN6_MAX 27 /* RW */1882 1879 #define SENSORS_VT8231_FAN1 31 /* R */ 1883 1880 #define SENSORS_VT8231_FAN2 32 /* R */ … … 1902 1899 #define SENSORS_VT8231_TEMP6_HYST 67 /* RW */ 1903 1900 #define SENSORS_VT8231_TEMP6_OVER 68 /* RW */ 1904 #define SENSORS_VT8231_TEMP7 69 /* R */1905 #define SENSORS_VT8231_TEMP7_HYST 70 /* RW */1906 #define SENSORS_VT8231_TEMP7_OVER 71 /* RW */1907 1901 #define SENSORS_VT8231_FAN1_DIV 75 /* RW */ 1908 1902 #define SENSORS_VT8231_FAN2_DIV 76 /* RW */ -
lm-sensors/trunk/prog/sensors/chips.c
r3169 r3194 4650 4650 cur,min,max,alarms&VT8231_ALARM_IN0?"ALARM":""); 4651 4651 } 4652 } else 4653 printf("ERROR: Can't get IN0 data!\n"); 4652 } 4654 4653 free(label); 4655 4654 if (!sensors_get_label_and_valid(*name,SENSORS_VT8231_IN1,&label,&valid) && … … 4662 4661 cur,min,max,alarms&VT8231_ALARM_IN1?"ALARM":""); 4663 4662 } 4664 } else 4665 printf("ERROR: Can't get IN1 data!\n"); 4663 } 4666 4664 free(label); 4667 4665 if (!sensors_get_label_and_valid(*name,SENSORS_VT8231_IN2,&label,&valid) && … … 4674 4672 cur,min,max,alarms&VT8231_ALARM_IN2?"ALARM":""); 4675 4673 } 4676 } else 4677 printf("ERROR: Can't get IN2 data!\n"); 4674 } 4678 4675 free(label); 4679 4676 if (!sensors_get_label_and_valid(*name,SENSORS_VT8231_IN3,&label,&valid) && … … 4686 4683 cur,min,max,alarms&VT8231_ALARM_IN3?"ALARM":""); 4687 4684 } 4688 } else 4689 printf("ERROR: Can't get IN3 data!\n"); 4685 } 4690 4686 free(label); 4691 4687 if (!sensors_get_label_and_valid(*name,SENSORS_VT8231_IN4,&label,&valid) && … … 4698 4694 cur,min,max,alarms&VT8231_ALARM_IN4?"ALARM":""); 4699 4695 } 4700 } else 4701 printf("ERROR: Can't get IN4 data!\n"); 4696 } 4702 4697 free(label); 4703 4698 if (!sensors_get_label_and_valid(*name,SENSORS_VT8231_IN5,&label,&valid) && … … 4739 4734 free(label); 4740 4735 4741 /* no temp 1 */ 4736 if (!sensors_get_label_and_valid(*name, SENSORS_VT8231_TEMP, 4737 &label, &valid) && 4738 !sensors_get_feature(*name, SENSORS_VT8231_TEMP, &cur) && 4739 !sensors_get_feature(*name, SENSORS_VT8231_TEMP_HYST, &min) && 4740 !sensors_get_feature(*name, SENSORS_VT8231_TEMP_OVER, &max)) { 4741 if (valid) { 4742 print_label(label, 10); 4743 print_temp_info(cur, max, min, HYST, 1, 0); 4744 printf(" %s\n", alarms & VT8231_ALARM_TEMP ? "ALARM" : ""); 4745 } 4746 } else 4747 printf("ERROR: Can't get TEMP1 data!\n"); 4748 free(label); 4742 4749 if (!sensors_get_label_and_valid(*name,SENSORS_VT8231_TEMP2,&label,&valid) && 4743 4750 !sensors_get_feature(*name,SENSORS_VT8231_TEMP2,&cur) && … … 4749 4756 printf(" %s\n", alarms & VT8231_ALARM_TEMP2 ? "ALARM" : "" ); 4750 4757 } 4751 } else 4752 printf("ERROR: Can't get TEMP2 data!\n"); 4758 } 4753 4759 free(label); 4754 4760 if (!sensors_get_label_and_valid(*name,SENSORS_VT8231_TEMP3,&label,&valid) && … … 4761 4767 printf(" %s\n", alarms & VT8231_ALARM_TEMP3 ? "ALARM" : "" ); 4762 4768 } 4763 } else 4764 printf("ERROR: Can't get TEMP3 data!\n"); 4769 } 4765 4770 free(label); 4766 4771 if (!sensors_get_label_and_valid(*name,SENSORS_VT8231_TEMP4,&label,&valid) && … … 4773 4778 printf(" %s\n", alarms & VT8231_ALARM_TEMP4 ? "ALARM" : "" ); 4774 4779 } 4775 } else 4776 printf("ERROR: Can't get TEMP4 data!\n"); 4780 } 4777 4781 free(label); 4778 4782 if (!sensors_get_label_and_valid(*name,SENSORS_VT8231_TEMP5,&label,&valid) && … … 4785 4789 printf(" %s\n", alarms & VT8231_ALARM_TEMP5 ? "ALARM" : "" ); 4786 4790 } 4787 } else 4788 printf("ERROR: Can't get TEMP5 data!\n"); 4791 } 4789 4792 free(label); 4790 4793 if (!sensors_get_label_and_valid(*name,SENSORS_VT8231_TEMP6,&label,&valid) && … … 4797 4800 printf(" %s\n", alarms & VT8231_ALARM_TEMP6 ? "ALARM" : "" ); 4798 4801 } 4799 } else 4800 printf("ERROR: Can't get TEMP6 data!\n"); 4801 free(label); 4802 if (!sensors_get_label_and_valid(*name,SENSORS_VT8231_TEMP7,&label,&valid) && 4803 !sensors_get_feature(*name,SENSORS_VT8231_TEMP7,&cur) && 4804 !sensors_get_feature(*name,SENSORS_VT8231_TEMP7_HYST,&min) && 4805 !sensors_get_feature(*name,SENSORS_VT8231_TEMP7_OVER,&max)) { 4806 if (valid) { 4807 print_label(label,10); 4808 print_temp_info( cur, max, min, HYST, 1, 0); 4809 printf(" %s\n", alarms & VT8231_ALARM_TEMP7 ? "ALARM" : "" ); 4810 } 4811 } else 4812 printf("ERROR: Can't get TEMP7 data!\n"); 4802 } 4813 4803 free(label); 4814 4804
