diff options
Diffstat (limited to 'drivers/hwmon')
-rw-r--r-- | drivers/hwmon/lm85.c | 505 |
1 files changed, 255 insertions, 250 deletions
diff --git a/drivers/hwmon/lm85.c b/drivers/hwmon/lm85.c index ee5eca1c1921..0c0fede8dde9 100644 --- a/drivers/hwmon/lm85.c +++ b/drivers/hwmon/lm85.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | lm85.c - Part of lm_sensors, Linux kernel modules for hardware | 2 | lm85.c - Part of lm_sensors, Linux kernel modules for hardware |
3 | monitoring | 3 | monitoring |
4 | Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl> | 4 | Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl> |
5 | Copyright (c) 2002, 2003 Philip Pokorny <ppokorny@penguincomputing.com> | 5 | Copyright (c) 2002, 2003 Philip Pokorny <ppokorny@penguincomputing.com> |
6 | Copyright (c) 2003 Margit Schubert-While <margitsw@t-online.de> | 6 | Copyright (c) 2003 Margit Schubert-While <margitsw@t-online.de> |
7 | Copyright (c) 2004 Justin Thiessen <jthiessen@penguincomputing.com> | 7 | Copyright (c) 2004 Justin Thiessen <jthiessen@penguincomputing.com> |
@@ -51,8 +51,8 @@ I2C_CLIENT_INSMOD_6(lm85b, lm85c, adm1027, adt7463, emc6d100, emc6d102); | |||
51 | #define LM85_REG_TEMP_MAX(nr) (0x4f + (nr) * 2) | 51 | #define LM85_REG_TEMP_MAX(nr) (0x4f + (nr) * 2) |
52 | 52 | ||
53 | /* Fan speeds are LSB, MSB (2 bytes) */ | 53 | /* Fan speeds are LSB, MSB (2 bytes) */ |
54 | #define LM85_REG_FAN(nr) (0x28 + (nr) *2) | 54 | #define LM85_REG_FAN(nr) (0x28 + (nr) * 2) |
55 | #define LM85_REG_FAN_MIN(nr) (0x54 + (nr) *2) | 55 | #define LM85_REG_FAN_MIN(nr) (0x54 + (nr) * 2) |
56 | 56 | ||
57 | #define LM85_REG_PWM(nr) (0x30 + (nr)) | 57 | #define LM85_REG_PWM(nr) (0x30 + (nr)) |
58 | 58 | ||
@@ -68,7 +68,7 @@ I2C_CLIENT_INSMOD_6(lm85b, lm85c, adm1027, adt7463, emc6d100, emc6d102); | |||
68 | #define LM85_DEVICE_ADX 0x27 | 68 | #define LM85_DEVICE_ADX 0x27 |
69 | #define LM85_COMPANY_NATIONAL 0x01 | 69 | #define LM85_COMPANY_NATIONAL 0x01 |
70 | #define LM85_COMPANY_ANALOG_DEV 0x41 | 70 | #define LM85_COMPANY_ANALOG_DEV 0x41 |
71 | #define LM85_COMPANY_SMSC 0x5c | 71 | #define LM85_COMPANY_SMSC 0x5c |
72 | #define LM85_VERSTEP_VMASK 0xf0 | 72 | #define LM85_VERSTEP_VMASK 0xf0 |
73 | #define LM85_VERSTEP_GENERIC 0x60 | 73 | #define LM85_VERSTEP_GENERIC 0x60 |
74 | #define LM85_VERSTEP_LM85C 0x60 | 74 | #define LM85_VERSTEP_LM85C 0x60 |
@@ -115,34 +115,34 @@ I2C_CLIENT_INSMOD_6(lm85b, lm85c, adm1027, adt7463, emc6d100, emc6d102); | |||
115 | 115 | ||
116 | #define EMC6D100_REG_ALARM3 0x7d | 116 | #define EMC6D100_REG_ALARM3 0x7d |
117 | /* IN5, IN6 and IN7 */ | 117 | /* IN5, IN6 and IN7 */ |
118 | #define EMC6D100_REG_IN(nr) (0x70 + ((nr)-5)) | 118 | #define EMC6D100_REG_IN(nr) (0x70 + ((nr) - 5)) |
119 | #define EMC6D100_REG_IN_MIN(nr) (0x73 + ((nr)-5) * 2) | 119 | #define EMC6D100_REG_IN_MIN(nr) (0x73 + ((nr) - 5) * 2) |
120 | #define EMC6D100_REG_IN_MAX(nr) (0x74 + ((nr)-5) * 2) | 120 | #define EMC6D100_REG_IN_MAX(nr) (0x74 + ((nr) - 5) * 2) |
121 | #define EMC6D102_REG_EXTEND_ADC1 0x85 | 121 | #define EMC6D102_REG_EXTEND_ADC1 0x85 |
122 | #define EMC6D102_REG_EXTEND_ADC2 0x86 | 122 | #define EMC6D102_REG_EXTEND_ADC2 0x86 |
123 | #define EMC6D102_REG_EXTEND_ADC3 0x87 | 123 | #define EMC6D102_REG_EXTEND_ADC3 0x87 |
124 | #define EMC6D102_REG_EXTEND_ADC4 0x88 | 124 | #define EMC6D102_REG_EXTEND_ADC4 0x88 |
125 | 125 | ||
126 | 126 | ||
127 | /* Conversions. Rounding and limit checking is only done on the TO_REG | 127 | /* Conversions. Rounding and limit checking is only done on the TO_REG |
128 | variants. Note that you should be a bit careful with which arguments | 128 | variants. Note that you should be a bit careful with which arguments |
129 | these macros are called: arguments may be evaluated more than once. | 129 | these macros are called: arguments may be evaluated more than once. |
130 | */ | 130 | */ |
131 | 131 | ||
132 | /* IN are scaled acording to built-in resistors */ | 132 | /* IN are scaled acording to built-in resistors */ |
133 | static int lm85_scaling[] = { /* .001 Volts */ | 133 | static int lm85_scaling[] = { /* .001 Volts */ |
134 | 2500, 2250, 3300, 5000, 12000, | 134 | 2500, 2250, 3300, 5000, 12000, |
135 | 3300, 1500, 1800 /*EMC6D100*/ | 135 | 3300, 1500, 1800 /*EMC6D100*/ |
136 | }; | 136 | }; |
137 | #define SCALE(val,from,to) (((val)*(to) + ((from)/2))/(from)) | 137 | #define SCALE(val, from, to) (((val) * (to) + ((from) / 2)) / (from)) |
138 | 138 | ||
139 | #define INS_TO_REG(n,val) \ | 139 | #define INS_TO_REG(n, val) \ |
140 | SENSORS_LIMIT(SCALE(val,lm85_scaling[n],192),0,255) | 140 | SENSORS_LIMIT(SCALE(val, lm85_scaling[n], 192), 0, 255) |
141 | 141 | ||
142 | #define INSEXT_FROM_REG(n,val,ext) \ | 142 | #define INSEXT_FROM_REG(n, val, ext) \ |
143 | SCALE(((val) << 4) + (ext), 192 << 4, lm85_scaling[n]) | 143 | SCALE(((val) << 4) + (ext), 192 << 4, lm85_scaling[n]) |
144 | 144 | ||
145 | #define INS_FROM_REG(n,val) SCALE((val), 192, lm85_scaling[n]) | 145 | #define INS_FROM_REG(n, val) SCALE((val), 192, lm85_scaling[n]) |
146 | 146 | ||
147 | /* FAN speed is measured using 90kHz clock */ | 147 | /* FAN speed is measured using 90kHz clock */ |
148 | static inline u16 FAN_TO_REG(unsigned long val) | 148 | static inline u16 FAN_TO_REG(unsigned long val) |
@@ -151,16 +151,17 @@ static inline u16 FAN_TO_REG(unsigned long val) | |||
151 | return 0xffff; | 151 | return 0xffff; |
152 | return SENSORS_LIMIT(5400000 / val, 1, 0xfffe); | 152 | return SENSORS_LIMIT(5400000 / val, 1, 0xfffe); |
153 | } | 153 | } |
154 | #define FAN_FROM_REG(val) ((val)==0?-1:(val)==0xffff?0:5400000/(val)) | 154 | #define FAN_FROM_REG(val) ((val) == 0 ? -1 : (val) == 0xffff ? 0 : \ |
155 | 5400000 / (val)) | ||
155 | 156 | ||
156 | /* Temperature is reported in .001 degC increments */ | 157 | /* Temperature is reported in .001 degC increments */ |
157 | #define TEMP_TO_REG(val) \ | 158 | #define TEMP_TO_REG(val) \ |
158 | SENSORS_LIMIT(SCALE(val,1000,1),-127,127) | 159 | SENSORS_LIMIT(SCALE(val, 1000, 1), -127, 127) |
159 | #define TEMPEXT_FROM_REG(val,ext) \ | 160 | #define TEMPEXT_FROM_REG(val, ext) \ |
160 | SCALE(((val) << 4) + (ext), 16, 1000) | 161 | SCALE(((val) << 4) + (ext), 16, 1000) |
161 | #define TEMP_FROM_REG(val) ((val) * 1000) | 162 | #define TEMP_FROM_REG(val) ((val) * 1000) |
162 | 163 | ||
163 | #define PWM_TO_REG(val) (SENSORS_LIMIT(val,0,255)) | 164 | #define PWM_TO_REG(val) SENSORS_LIMIT(val, 0, 255) |
164 | #define PWM_FROM_REG(val) (val) | 165 | #define PWM_FROM_REG(val) (val) |
165 | 166 | ||
166 | 167 | ||
@@ -183,17 +184,17 @@ static inline u16 FAN_TO_REG(unsigned long val) | |||
183 | */ | 184 | */ |
184 | 185 | ||
185 | /* These are the zone temperature range encodings in .001 degree C */ | 186 | /* These are the zone temperature range encodings in .001 degree C */ |
186 | static int lm85_range_map[] = { | 187 | static int lm85_range_map[] = { |
187 | 2000, 2500, 3300, 4000, 5000, 6600, | 188 | 2000, 2500, 3300, 4000, 5000, 6600, 8000, 10000, |
188 | 8000, 10000, 13300, 16000, 20000, 26600, | 189 | 13300, 16000, 20000, 26600, 32000, 40000, 53300, 80000 |
189 | 32000, 40000, 53300, 80000 | 190 | }; |
190 | }; | 191 | |
191 | static int RANGE_TO_REG( int range ) | 192 | static int RANGE_TO_REG(int range) |
192 | { | 193 | { |
193 | int i; | 194 | int i; |
194 | 195 | ||
195 | if (range >= lm85_range_map[15]) | 196 | if (range >= lm85_range_map[15]) |
196 | return 15 ; | 197 | return 15; |
197 | 198 | ||
198 | /* Find the closest match */ | 199 | /* Find the closest match */ |
199 | for (i = 14; i >= 0; --i) { | 200 | for (i = 14; i >= 0; --i) { |
@@ -207,7 +208,7 @@ static int RANGE_TO_REG( int range ) | |||
207 | 208 | ||
208 | return 0; | 209 | return 0; |
209 | } | 210 | } |
210 | #define RANGE_FROM_REG(val) (lm85_range_map[(val)&0x0f]) | 211 | #define RANGE_FROM_REG(val) lm85_range_map[(val) & 0x0f] |
211 | 212 | ||
212 | /* These are the Acoustic Enhancement, or Temperature smoothing encodings | 213 | /* These are the Acoustic Enhancement, or Temperature smoothing encodings |
213 | * NOTE: The enable/disable bit is INCLUDED in these encodings as the | 214 | * NOTE: The enable/disable bit is INCLUDED in these encodings as the |
@@ -216,19 +217,21 @@ static int RANGE_TO_REG( int range ) | |||
216 | */ | 217 | */ |
217 | /* These are the PWM frequency encodings */ | 218 | /* These are the PWM frequency encodings */ |
218 | static int lm85_freq_map[] = { /* .1 Hz */ | 219 | static int lm85_freq_map[] = { /* .1 Hz */ |
219 | 100, 150, 230, 300, 380, 470, 620, 940 | 220 | 100, 150, 230, 300, 380, 470, 620, 940 |
220 | }; | 221 | }; |
221 | static int FREQ_TO_REG( int freq ) | 222 | |
223 | static int FREQ_TO_REG(int freq) | ||
222 | { | 224 | { |
223 | int i; | 225 | int i; |
224 | 226 | ||
225 | if( freq >= lm85_freq_map[7] ) { return 7 ; } | 227 | if (freq >= lm85_freq_map[7]) |
226 | for( i = 0 ; i < 7 ; ++i ) | 228 | return 7; |
227 | if( freq <= lm85_freq_map[i] ) | 229 | for (i = 0; i < 7; ++i) |
228 | break ; | 230 | if (freq <= lm85_freq_map[i]) |
229 | return( i & 0x07 ); | 231 | break; |
232 | return i & 0x07; | ||
230 | } | 233 | } |
231 | #define FREQ_FROM_REG(val) (lm85_freq_map[(val)&0x07]) | 234 | #define FREQ_FROM_REG(val) lm85_freq_map[(val) & 0x07] |
232 | 235 | ||
233 | /* Since we can't use strings, I'm abusing these numbers | 236 | /* Since we can't use strings, I'm abusing these numbers |
234 | * to stand in for the following meanings: | 237 | * to stand in for the following meanings: |
@@ -243,29 +246,29 @@ static int FREQ_TO_REG( int freq ) | |||
243 | */ | 246 | */ |
244 | 247 | ||
245 | static int lm85_zone_map[] = { 1, 2, 3, -1, 0, 23, 123, -2 }; | 248 | static int lm85_zone_map[] = { 1, 2, 3, -1, 0, 23, 123, -2 }; |
246 | #define ZONE_FROM_REG(val) (lm85_zone_map[((val)>>5)&0x07]) | 249 | #define ZONE_FROM_REG(val) lm85_zone_map[((val) >> 5) & 0x07] |
247 | 250 | ||
248 | static int ZONE_TO_REG( int zone ) | 251 | static int ZONE_TO_REG(int zone) |
249 | { | 252 | { |
250 | int i; | 253 | int i; |
251 | 254 | ||
252 | for( i = 0 ; i <= 7 ; ++i ) | 255 | for (i = 0; i <= 7; ++i) |
253 | if( zone == lm85_zone_map[i] ) | 256 | if (zone == lm85_zone_map[i]) |
254 | break ; | 257 | break; |
255 | if( i > 7 ) /* Not found. */ | 258 | if (i > 7) /* Not found. */ |
256 | i = 3; /* Always 100% */ | 259 | i = 3; /* Always 100% */ |
257 | return( (i & 0x07)<<5 ); | 260 | return (i & 0x07) << 5; |
258 | } | 261 | } |
259 | 262 | ||
260 | #define HYST_TO_REG(val) (SENSORS_LIMIT(((val)+500)/1000,0,15)) | 263 | #define HYST_TO_REG(val) SENSORS_LIMIT(((val) + 500) / 1000, 0, 15) |
261 | #define HYST_FROM_REG(val) ((val)*1000) | 264 | #define HYST_FROM_REG(val) ((val) * 1000) |
262 | 265 | ||
263 | #define OFFSET_TO_REG(val) (SENSORS_LIMIT((val)/25,-127,127)) | 266 | #define OFFSET_TO_REG(val) SENSORS_LIMIT((val) / 25, -127, 127) |
264 | #define OFFSET_FROM_REG(val) ((val)*25) | 267 | #define OFFSET_FROM_REG(val) ((val) * 25) |
265 | 268 | ||
266 | #define PPR_MASK(fan) (0x03<<(fan *2)) | 269 | #define PPR_MASK(fan) (0x03 << ((fan) * 2)) |
267 | #define PPR_TO_REG(val,fan) (SENSORS_LIMIT((val)-1,0,3)<<(fan *2)) | 270 | #define PPR_TO_REG(val, fan) (SENSORS_LIMIT((val) - 1, 0, 3) << ((fan) * 2)) |
268 | #define PPR_FROM_REG(val,fan) ((((val)>>(fan * 2))&0x03)+1) | 271 | #define PPR_FROM_REG(val, fan) ((((val) >> ((fan) * 2)) & 0x03) + 1) |
269 | 272 | ||
270 | /* Chip sampling rates | 273 | /* Chip sampling rates |
271 | * | 274 | * |
@@ -292,11 +295,11 @@ struct lm85_zone { | |||
292 | u8 hyst; /* Low limit hysteresis. (0-15) */ | 295 | u8 hyst; /* Low limit hysteresis. (0-15) */ |
293 | u8 range; /* Temp range, encoded */ | 296 | u8 range; /* Temp range, encoded */ |
294 | s8 critical; /* "All fans ON" temp limit */ | 297 | s8 critical; /* "All fans ON" temp limit */ |
295 | u8 off_desired; /* Actual "off" temperature specified. Preserved | 298 | u8 off_desired; /* Actual "off" temperature specified. Preserved |
296 | * to prevent "drift" as other autofan control | 299 | * to prevent "drift" as other autofan control |
297 | * values change. | 300 | * values change. |
298 | */ | 301 | */ |
299 | u8 max_desired; /* Actual "max" temperature specified. Preserved | 302 | u8 max_desired; /* Actual "max" temperature specified. Preserved |
300 | * to prevent "drift" as other autofan control | 303 | * to prevent "drift" as other autofan control |
301 | * values change. | 304 | * values change. |
302 | */ | 305 | */ |
@@ -375,7 +378,7 @@ static ssize_t show_fan(struct device *dev, struct device_attribute *attr, | |||
375 | { | 378 | { |
376 | int nr = to_sensor_dev_attr(attr)->index; | 379 | int nr = to_sensor_dev_attr(attr)->index; |
377 | struct lm85_data *data = lm85_update_device(dev); | 380 | struct lm85_data *data = lm85_update_device(dev); |
378 | return sprintf(buf,"%d\n", FAN_FROM_REG(data->fan[nr]) ); | 381 | return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr])); |
379 | } | 382 | } |
380 | 383 | ||
381 | static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr, | 384 | static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr, |
@@ -383,7 +386,7 @@ static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr, | |||
383 | { | 386 | { |
384 | int nr = to_sensor_dev_attr(attr)->index; | 387 | int nr = to_sensor_dev_attr(attr)->index; |
385 | struct lm85_data *data = lm85_update_device(dev); | 388 | struct lm85_data *data = lm85_update_device(dev); |
386 | return sprintf(buf,"%d\n", FAN_FROM_REG(data->fan_min[nr]) ); | 389 | return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr])); |
387 | } | 390 | } |
388 | 391 | ||
389 | static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, | 392 | static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, |
@@ -414,7 +417,8 @@ show_fan_offset(4); | |||
414 | 417 | ||
415 | /* vid, vrm, alarms */ | 418 | /* vid, vrm, alarms */ |
416 | 419 | ||
417 | static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr, char *buf) | 420 | static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr, |
421 | char *buf) | ||
418 | { | 422 | { |
419 | struct lm85_data *data = lm85_update_device(dev); | 423 | struct lm85_data *data = lm85_update_device(dev); |
420 | int vid; | 424 | int vid; |
@@ -432,13 +436,15 @@ static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr, c | |||
432 | 436 | ||
433 | static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL); | 437 | static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL); |
434 | 438 | ||
435 | static ssize_t show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf) | 439 | static ssize_t show_vrm_reg(struct device *dev, struct device_attribute *attr, |
440 | char *buf) | ||
436 | { | 441 | { |
437 | struct lm85_data *data = dev_get_drvdata(dev); | 442 | struct lm85_data *data = dev_get_drvdata(dev); |
438 | return sprintf(buf, "%ld\n", (long) data->vrm); | 443 | return sprintf(buf, "%ld\n", (long) data->vrm); |
439 | } | 444 | } |
440 | 445 | ||
441 | static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) | 446 | static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr, |
447 | const char *buf, size_t count) | ||
442 | { | 448 | { |
443 | struct lm85_data *data = dev_get_drvdata(dev); | 449 | struct lm85_data *data = dev_get_drvdata(dev); |
444 | data->vrm = simple_strtoul(buf, NULL, 10); | 450 | data->vrm = simple_strtoul(buf, NULL, 10); |
@@ -447,7 +453,8 @@ static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr, | |||
447 | 453 | ||
448 | static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg); | 454 | static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg); |
449 | 455 | ||
450 | static ssize_t show_alarms_reg(struct device *dev, struct device_attribute *attr, char *buf) | 456 | static ssize_t show_alarms_reg(struct device *dev, struct device_attribute |
457 | *attr, char *buf) | ||
451 | { | 458 | { |
452 | struct lm85_data *data = lm85_update_device(dev); | 459 | struct lm85_data *data = lm85_update_device(dev); |
453 | return sprintf(buf, "%u\n", data->alarms); | 460 | return sprintf(buf, "%u\n", data->alarms); |
@@ -488,7 +495,7 @@ static ssize_t show_pwm(struct device *dev, struct device_attribute *attr, | |||
488 | { | 495 | { |
489 | int nr = to_sensor_dev_attr(attr)->index; | 496 | int nr = to_sensor_dev_attr(attr)->index; |
490 | struct lm85_data *data = lm85_update_device(dev); | 497 | struct lm85_data *data = lm85_update_device(dev); |
491 | return sprintf(buf,"%d\n", PWM_FROM_REG(data->pwm[nr]) ); | 498 | return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm[nr])); |
492 | } | 499 | } |
493 | 500 | ||
494 | static ssize_t set_pwm(struct device *dev, struct device_attribute *attr, | 501 | static ssize_t set_pwm(struct device *dev, struct device_attribute *attr, |
@@ -581,17 +588,16 @@ static ssize_t show_in(struct device *dev, struct device_attribute *attr, | |||
581 | { | 588 | { |
582 | int nr = to_sensor_dev_attr(attr)->index; | 589 | int nr = to_sensor_dev_attr(attr)->index; |
583 | struct lm85_data *data = lm85_update_device(dev); | 590 | struct lm85_data *data = lm85_update_device(dev); |
584 | return sprintf( buf, "%d\n", INSEXT_FROM_REG(nr, | 591 | return sprintf(buf, "%d\n", INSEXT_FROM_REG(nr, data->in[nr], |
585 | data->in[nr], | 592 | data->in_ext[nr])); |
586 | data->in_ext[nr])); | ||
587 | } | 593 | } |
588 | 594 | ||
589 | static ssize_t show_in_min(struct device *dev, struct device_attribute *attr, | 595 | static ssize_t show_in_min(struct device *dev, struct device_attribute *attr, |
590 | char *buf) | 596 | char *buf) |
591 | { | 597 | { |
592 | int nr = to_sensor_dev_attr(attr)->index; | 598 | int nr = to_sensor_dev_attr(attr)->index; |
593 | struct lm85_data *data = lm85_update_device(dev); | 599 | struct lm85_data *data = lm85_update_device(dev); |
594 | return sprintf(buf,"%d\n", INS_FROM_REG(nr, data->in_min[nr]) ); | 600 | return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_min[nr])); |
595 | } | 601 | } |
596 | 602 | ||
597 | static ssize_t set_in_min(struct device *dev, struct device_attribute *attr, | 603 | static ssize_t set_in_min(struct device *dev, struct device_attribute *attr, |
@@ -614,7 +620,7 @@ static ssize_t show_in_max(struct device *dev, struct device_attribute *attr, | |||
614 | { | 620 | { |
615 | int nr = to_sensor_dev_attr(attr)->index; | 621 | int nr = to_sensor_dev_attr(attr)->index; |
616 | struct lm85_data *data = lm85_update_device(dev); | 622 | struct lm85_data *data = lm85_update_device(dev); |
617 | return sprintf(buf,"%d\n", INS_FROM_REG(nr, data->in_max[nr]) ); | 623 | return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_max[nr])); |
618 | } | 624 | } |
619 | 625 | ||
620 | static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, | 626 | static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, |
@@ -656,8 +662,8 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *attr, | |||
656 | { | 662 | { |
657 | int nr = to_sensor_dev_attr(attr)->index; | 663 | int nr = to_sensor_dev_attr(attr)->index; |
658 | struct lm85_data *data = lm85_update_device(dev); | 664 | struct lm85_data *data = lm85_update_device(dev); |
659 | return sprintf(buf,"%d\n", TEMPEXT_FROM_REG(data->temp[nr], | 665 | return sprintf(buf, "%d\n", TEMPEXT_FROM_REG(data->temp[nr], |
660 | data->temp_ext[nr])); | 666 | data->temp_ext[nr])); |
661 | } | 667 | } |
662 | 668 | ||
663 | static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr, | 669 | static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr, |
@@ -665,7 +671,7 @@ static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr, | |||
665 | { | 671 | { |
666 | int nr = to_sensor_dev_attr(attr)->index; | 672 | int nr = to_sensor_dev_attr(attr)->index; |
667 | struct lm85_data *data = lm85_update_device(dev); | 673 | struct lm85_data *data = lm85_update_device(dev); |
668 | return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_min[nr]) ); | 674 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr])); |
669 | } | 675 | } |
670 | 676 | ||
671 | static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr, | 677 | static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr, |
@@ -688,7 +694,7 @@ static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr, | |||
688 | { | 694 | { |
689 | int nr = to_sensor_dev_attr(attr)->index; | 695 | int nr = to_sensor_dev_attr(attr)->index; |
690 | struct lm85_data *data = lm85_update_device(dev); | 696 | struct lm85_data *data = lm85_update_device(dev); |
691 | return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_max[nr]) ); | 697 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr])); |
692 | } | 698 | } |
693 | 699 | ||
694 | static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, | 700 | static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, |
@@ -697,7 +703,7 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, | |||
697 | int nr = to_sensor_dev_attr(attr)->index; | 703 | int nr = to_sensor_dev_attr(attr)->index; |
698 | struct i2c_client *client = to_i2c_client(dev); | 704 | struct i2c_client *client = to_i2c_client(dev); |
699 | struct lm85_data *data = i2c_get_clientdata(client); | 705 | struct lm85_data *data = i2c_get_clientdata(client); |
700 | long val = simple_strtol(buf, NULL, 10); | 706 | long val = simple_strtol(buf, NULL, 10); |
701 | 707 | ||
702 | mutex_lock(&data->update_lock); | 708 | mutex_lock(&data->update_lock); |
703 | data->temp_max[nr] = TEMP_TO_REG(val); | 709 | data->temp_max[nr] = TEMP_TO_REG(val); |
@@ -726,7 +732,7 @@ static ssize_t show_pwm_auto_channels(struct device *dev, | |||
726 | { | 732 | { |
727 | int nr = to_sensor_dev_attr(attr)->index; | 733 | int nr = to_sensor_dev_attr(attr)->index; |
728 | struct lm85_data *data = lm85_update_device(dev); | 734 | struct lm85_data *data = lm85_update_device(dev); |
729 | return sprintf(buf,"%d\n", ZONE_FROM_REG(data->autofan[nr].config)); | 735 | return sprintf(buf, "%d\n", ZONE_FROM_REG(data->autofan[nr].config)); |
730 | } | 736 | } |
731 | 737 | ||
732 | static ssize_t set_pwm_auto_channels(struct device *dev, | 738 | static ssize_t set_pwm_auto_channels(struct device *dev, |
@@ -735,11 +741,11 @@ static ssize_t set_pwm_auto_channels(struct device *dev, | |||
735 | int nr = to_sensor_dev_attr(attr)->index; | 741 | int nr = to_sensor_dev_attr(attr)->index; |
736 | struct i2c_client *client = to_i2c_client(dev); | 742 | struct i2c_client *client = to_i2c_client(dev); |
737 | struct lm85_data *data = i2c_get_clientdata(client); | 743 | struct lm85_data *data = i2c_get_clientdata(client); |
738 | long val = simple_strtol(buf, NULL, 10); | 744 | long val = simple_strtol(buf, NULL, 10); |
739 | 745 | ||
740 | mutex_lock(&data->update_lock); | 746 | mutex_lock(&data->update_lock); |
741 | data->autofan[nr].config = (data->autofan[nr].config & (~0xe0)) | 747 | data->autofan[nr].config = (data->autofan[nr].config & (~0xe0)) |
742 | | ZONE_TO_REG(val) ; | 748 | | ZONE_TO_REG(val); |
743 | lm85_write_value(client, LM85_REG_AFAN_CONFIG(nr), | 749 | lm85_write_value(client, LM85_REG_AFAN_CONFIG(nr), |
744 | data->autofan[nr].config); | 750 | data->autofan[nr].config); |
745 | mutex_unlock(&data->update_lock); | 751 | mutex_unlock(&data->update_lock); |
@@ -751,7 +757,7 @@ static ssize_t show_pwm_auto_pwm_min(struct device *dev, | |||
751 | { | 757 | { |
752 | int nr = to_sensor_dev_attr(attr)->index; | 758 | int nr = to_sensor_dev_attr(attr)->index; |
753 | struct lm85_data *data = lm85_update_device(dev); | 759 | struct lm85_data *data = lm85_update_device(dev); |
754 | return sprintf(buf,"%d\n", PWM_FROM_REG(data->autofan[nr].min_pwm)); | 760 | return sprintf(buf, "%d\n", PWM_FROM_REG(data->autofan[nr].min_pwm)); |
755 | } | 761 | } |
756 | 762 | ||
757 | static ssize_t set_pwm_auto_pwm_min(struct device *dev, | 763 | static ssize_t set_pwm_auto_pwm_min(struct device *dev, |
@@ -775,7 +781,7 @@ static ssize_t show_pwm_auto_pwm_minctl(struct device *dev, | |||
775 | { | 781 | { |
776 | int nr = to_sensor_dev_attr(attr)->index; | 782 | int nr = to_sensor_dev_attr(attr)->index; |
777 | struct lm85_data *data = lm85_update_device(dev); | 783 | struct lm85_data *data = lm85_update_device(dev); |
778 | return sprintf(buf,"%d\n", data->autofan[nr].min_off); | 784 | return sprintf(buf, "%d\n", data->autofan[nr].min_off); |
779 | } | 785 | } |
780 | 786 | ||
781 | static ssize_t set_pwm_auto_pwm_minctl(struct device *dev, | 787 | static ssize_t set_pwm_auto_pwm_minctl(struct device *dev, |
@@ -792,8 +798,7 @@ static ssize_t set_pwm_auto_pwm_minctl(struct device *dev, | |||
792 | | data->syncpwm3 | 798 | | data->syncpwm3 |
793 | | (data->autofan[0].min_off ? 0x20 : 0) | 799 | | (data->autofan[0].min_off ? 0x20 : 0) |
794 | | (data->autofan[1].min_off ? 0x40 : 0) | 800 | | (data->autofan[1].min_off ? 0x40 : 0) |
795 | | (data->autofan[2].min_off ? 0x80 : 0) | 801 | | (data->autofan[2].min_off ? 0x80 : 0)); |
796 | ); | ||
797 | mutex_unlock(&data->update_lock); | 802 | mutex_unlock(&data->update_lock); |
798 | return count; | 803 | return count; |
799 | } | 804 | } |
@@ -803,7 +808,7 @@ static ssize_t show_pwm_auto_pwm_freq(struct device *dev, | |||
803 | { | 808 | { |
804 | int nr = to_sensor_dev_attr(attr)->index; | 809 | int nr = to_sensor_dev_attr(attr)->index; |
805 | struct lm85_data *data = lm85_update_device(dev); | 810 | struct lm85_data *data = lm85_update_device(dev); |
806 | return sprintf(buf,"%d\n", FREQ_FROM_REG(data->autofan[nr].freq)); | 811 | return sprintf(buf, "%d\n", FREQ_FROM_REG(data->autofan[nr].freq)); |
807 | } | 812 | } |
808 | 813 | ||
809 | static ssize_t set_pwm_auto_pwm_freq(struct device *dev, | 814 | static ssize_t set_pwm_auto_pwm_freq(struct device *dev, |
@@ -818,8 +823,7 @@ static ssize_t set_pwm_auto_pwm_freq(struct device *dev, | |||
818 | data->autofan[nr].freq = FREQ_TO_REG(val); | 823 | data->autofan[nr].freq = FREQ_TO_REG(val); |
819 | lm85_write_value(client, LM85_REG_AFAN_RANGE(nr), | 824 | lm85_write_value(client, LM85_REG_AFAN_RANGE(nr), |
820 | (data->zone[nr].range << 4) | 825 | (data->zone[nr].range << 4) |
821 | | data->autofan[nr].freq | 826 | | data->autofan[nr].freq); |
822 | ); | ||
823 | mutex_unlock(&data->update_lock); | 827 | mutex_unlock(&data->update_lock); |
824 | return count; | 828 | return count; |
825 | } | 829 | } |
@@ -849,7 +853,7 @@ static ssize_t show_temp_auto_temp_off(struct device *dev, | |||
849 | { | 853 | { |
850 | int nr = to_sensor_dev_attr(attr)->index; | 854 | int nr = to_sensor_dev_attr(attr)->index; |
851 | struct lm85_data *data = lm85_update_device(dev); | 855 | struct lm85_data *data = lm85_update_device(dev); |
852 | return sprintf(buf,"%d\n", TEMP_FROM_REG(data->zone[nr].limit) - | 856 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit) - |
853 | HYST_FROM_REG(data->zone[nr].hyst)); | 857 | HYST_FROM_REG(data->zone[nr].hyst)); |
854 | } | 858 | } |
855 | 859 | ||
@@ -866,15 +870,13 @@ static ssize_t set_temp_auto_temp_off(struct device *dev, | |||
866 | min = TEMP_FROM_REG(data->zone[nr].limit); | 870 | min = TEMP_FROM_REG(data->zone[nr].limit); |
867 | data->zone[nr].off_desired = TEMP_TO_REG(val); | 871 | data->zone[nr].off_desired = TEMP_TO_REG(val); |
868 | data->zone[nr].hyst = HYST_TO_REG(min - val); | 872 | data->zone[nr].hyst = HYST_TO_REG(min - val); |
869 | if ( nr == 0 || nr == 1 ) { | 873 | if (nr == 0 || nr == 1) { |
870 | lm85_write_value(client, LM85_REG_AFAN_HYST1, | 874 | lm85_write_value(client, LM85_REG_AFAN_HYST1, |
871 | (data->zone[0].hyst << 4) | 875 | (data->zone[0].hyst << 4) |
872 | | data->zone[1].hyst | 876 | | data->zone[1].hyst); |
873 | ); | ||
874 | } else { | 877 | } else { |
875 | lm85_write_value(client, LM85_REG_AFAN_HYST2, | 878 | lm85_write_value(client, LM85_REG_AFAN_HYST2, |
876 | (data->zone[2].hyst << 4) | 879 | (data->zone[2].hyst << 4)); |
877 | ); | ||
878 | } | 880 | } |
879 | mutex_unlock(&data->update_lock); | 881 | mutex_unlock(&data->update_lock); |
880 | return count; | 882 | return count; |
@@ -885,7 +887,7 @@ static ssize_t show_temp_auto_temp_min(struct device *dev, | |||
885 | { | 887 | { |
886 | int nr = to_sensor_dev_attr(attr)->index; | 888 | int nr = to_sensor_dev_attr(attr)->index; |
887 | struct lm85_data *data = lm85_update_device(dev); | 889 | struct lm85_data *data = lm85_update_device(dev); |
888 | return sprintf(buf,"%d\n", TEMP_FROM_REG(data->zone[nr].limit) ); | 890 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit)); |
889 | } | 891 | } |
890 | 892 | ||
891 | static ssize_t set_temp_auto_temp_min(struct device *dev, | 893 | static ssize_t set_temp_auto_temp_min(struct device *dev, |
@@ -913,15 +915,13 @@ static ssize_t set_temp_auto_temp_min(struct device *dev, | |||
913 | data->zone[nr].hyst = HYST_TO_REG(TEMP_FROM_REG( | 915 | data->zone[nr].hyst = HYST_TO_REG(TEMP_FROM_REG( |
914 | data->zone[nr].limit) - TEMP_FROM_REG( | 916 | data->zone[nr].limit) - TEMP_FROM_REG( |
915 | data->zone[nr].off_desired)); | 917 | data->zone[nr].off_desired)); |
916 | if ( nr == 0 || nr == 1 ) { | 918 | if (nr == 0 || nr == 1) { |
917 | lm85_write_value(client, LM85_REG_AFAN_HYST1, | 919 | lm85_write_value(client, LM85_REG_AFAN_HYST1, |
918 | (data->zone[0].hyst << 4) | 920 | (data->zone[0].hyst << 4) |
919 | | data->zone[1].hyst | 921 | | data->zone[1].hyst); |
920 | ); | ||
921 | } else { | 922 | } else { |
922 | lm85_write_value(client, LM85_REG_AFAN_HYST2, | 923 | lm85_write_value(client, LM85_REG_AFAN_HYST2, |
923 | (data->zone[2].hyst << 4) | 924 | (data->zone[2].hyst << 4)); |
924 | ); | ||
925 | } | 925 | } |
926 | mutex_unlock(&data->update_lock); | 926 | mutex_unlock(&data->update_lock); |
927 | return count; | 927 | return count; |
@@ -932,7 +932,7 @@ static ssize_t show_temp_auto_temp_max(struct device *dev, | |||
932 | { | 932 | { |
933 | int nr = to_sensor_dev_attr(attr)->index; | 933 | int nr = to_sensor_dev_attr(attr)->index; |
934 | struct lm85_data *data = lm85_update_device(dev); | 934 | struct lm85_data *data = lm85_update_device(dev); |
935 | return sprintf(buf,"%d\n", TEMP_FROM_REG(data->zone[nr].limit) + | 935 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit) + |
936 | RANGE_FROM_REG(data->zone[nr].range)); | 936 | RANGE_FROM_REG(data->zone[nr].range)); |
937 | } | 937 | } |
938 | 938 | ||
@@ -962,11 +962,11 @@ static ssize_t show_temp_auto_temp_crit(struct device *dev, | |||
962 | { | 962 | { |
963 | int nr = to_sensor_dev_attr(attr)->index; | 963 | int nr = to_sensor_dev_attr(attr)->index; |
964 | struct lm85_data *data = lm85_update_device(dev); | 964 | struct lm85_data *data = lm85_update_device(dev); |
965 | return sprintf(buf,"%d\n", TEMP_FROM_REG(data->zone[nr].critical)); | 965 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].critical)); |
966 | } | 966 | } |
967 | 967 | ||
968 | static ssize_t set_temp_auto_temp_crit(struct device *dev, | 968 | static ssize_t set_temp_auto_temp_crit(struct device *dev, |
969 | struct device_attribute *attr,const char *buf, size_t count) | 969 | struct device_attribute *attr, const char *buf, size_t count) |
970 | { | 970 | { |
971 | int nr = to_sensor_dev_attr(attr)->index; | 971 | int nr = to_sensor_dev_attr(attr)->index; |
972 | struct i2c_client *client = to_i2c_client(dev); | 972 | struct i2c_client *client = to_i2c_client(dev); |
@@ -1130,7 +1130,7 @@ static const struct attribute_group lm85_group_in567 = { | |||
1130 | static int lm85_detect(struct i2c_adapter *adapter, int address, | 1130 | static int lm85_detect(struct i2c_adapter *adapter, int address, |
1131 | int kind) | 1131 | int kind) |
1132 | { | 1132 | { |
1133 | int company, verstep ; | 1133 | int company, verstep; |
1134 | struct i2c_client *new_client = NULL; | 1134 | struct i2c_client *new_client = NULL; |
1135 | struct lm85_data *data; | 1135 | struct lm85_data *data; |
1136 | int err = 0; | 1136 | int err = 0; |
@@ -1139,8 +1139,8 @@ static int lm85_detect(struct i2c_adapter *adapter, int address, | |||
1139 | if (!i2c_check_functionality(adapter, | 1139 | if (!i2c_check_functionality(adapter, |
1140 | I2C_FUNC_SMBUS_BYTE_DATA)) { | 1140 | I2C_FUNC_SMBUS_BYTE_DATA)) { |
1141 | /* We need to be able to do byte I/O */ | 1141 | /* We need to be able to do byte I/O */ |
1142 | goto ERROR0 ; | 1142 | goto ERROR0; |
1143 | }; | 1143 | } |
1144 | 1144 | ||
1145 | /* OK. For now, we presume we have a valid client. We now create the | 1145 | /* OK. For now, we presume we have a valid client. We now create the |
1146 | client structure, even though we cannot fill it completely yet. | 1146 | client structure, even though we cannot fill it completely yet. |
@@ -1171,82 +1171,81 @@ static int lm85_detect(struct i2c_adapter *adapter, int address, | |||
1171 | /* If auto-detecting, Determine the chip type. */ | 1171 | /* If auto-detecting, Determine the chip type. */ |
1172 | if (kind <= 0) { | 1172 | if (kind <= 0) { |
1173 | dev_dbg(&adapter->dev, "Autodetecting device at %d,0x%02x ...\n", | 1173 | dev_dbg(&adapter->dev, "Autodetecting device at %d,0x%02x ...\n", |
1174 | i2c_adapter_id(adapter), address ); | 1174 | i2c_adapter_id(adapter), address); |
1175 | if( company == LM85_COMPANY_NATIONAL | 1175 | if (company == LM85_COMPANY_NATIONAL |
1176 | && verstep == LM85_VERSTEP_LM85C ) { | 1176 | && verstep == LM85_VERSTEP_LM85C) { |
1177 | kind = lm85c ; | 1177 | kind = lm85c; |
1178 | } else if( company == LM85_COMPANY_NATIONAL | 1178 | } else if (company == LM85_COMPANY_NATIONAL |
1179 | && verstep == LM85_VERSTEP_LM85B ) { | 1179 | && verstep == LM85_VERSTEP_LM85B) { |
1180 | kind = lm85b ; | 1180 | kind = lm85b; |
1181 | } else if( company == LM85_COMPANY_NATIONAL | 1181 | } else if (company == LM85_COMPANY_NATIONAL |
1182 | && (verstep & LM85_VERSTEP_VMASK) == LM85_VERSTEP_GENERIC ) { | 1182 | && (verstep & LM85_VERSTEP_VMASK) == LM85_VERSTEP_GENERIC) { |
1183 | dev_err(&adapter->dev, "Unrecognized version/stepping 0x%02x" | 1183 | dev_err(&adapter->dev, "Unrecognized version/stepping 0x%02x" |
1184 | " Defaulting to LM85.\n", verstep); | 1184 | " Defaulting to LM85.\n", verstep); |
1185 | kind = any_chip ; | 1185 | kind = any_chip; |
1186 | } else if( company == LM85_COMPANY_ANALOG_DEV | 1186 | } else if (company == LM85_COMPANY_ANALOG_DEV |
1187 | && verstep == LM85_VERSTEP_ADM1027 ) { | 1187 | && verstep == LM85_VERSTEP_ADM1027) { |
1188 | kind = adm1027 ; | 1188 | kind = adm1027; |
1189 | } else if( company == LM85_COMPANY_ANALOG_DEV | 1189 | } else if (company == LM85_COMPANY_ANALOG_DEV |
1190 | && (verstep == LM85_VERSTEP_ADT7463 | 1190 | && (verstep == LM85_VERSTEP_ADT7463 |
1191 | || verstep == LM85_VERSTEP_ADT7463C) ) { | 1191 | || verstep == LM85_VERSTEP_ADT7463C)) { |
1192 | kind = adt7463 ; | 1192 | kind = adt7463; |
1193 | } else if( company == LM85_COMPANY_ANALOG_DEV | 1193 | } else if (company == LM85_COMPANY_ANALOG_DEV |
1194 | && (verstep & LM85_VERSTEP_VMASK) == LM85_VERSTEP_GENERIC ) { | 1194 | && (verstep & LM85_VERSTEP_VMASK) == LM85_VERSTEP_GENERIC) { |
1195 | dev_err(&adapter->dev, "Unrecognized version/stepping 0x%02x" | 1195 | dev_err(&adapter->dev, "Unrecognized version/stepping 0x%02x" |
1196 | " Defaulting to Generic LM85.\n", verstep ); | 1196 | " Defaulting to Generic LM85.\n", verstep); |
1197 | kind = any_chip ; | 1197 | kind = any_chip; |
1198 | } else if( company == LM85_COMPANY_SMSC | 1198 | } else if (company == LM85_COMPANY_SMSC |
1199 | && (verstep == LM85_VERSTEP_EMC6D100_A0 | 1199 | && (verstep == LM85_VERSTEP_EMC6D100_A0 |
1200 | || verstep == LM85_VERSTEP_EMC6D100_A1) ) { | 1200 | || verstep == LM85_VERSTEP_EMC6D100_A1)) { |
1201 | /* Unfortunately, we can't tell a '100 from a '101 | 1201 | /* Unfortunately, we can't tell a '100 from a '101 |
1202 | * from the registers. Since a '101 is a '100 | 1202 | * from the registers. Since a '101 is a '100 |
1203 | * in a package with fewer pins and therefore no | 1203 | * in a package with fewer pins and therefore no |
1204 | * 3.3V, 1.5V or 1.8V inputs, perhaps if those | 1204 | * 3.3V, 1.5V or 1.8V inputs, perhaps if those |
1205 | * inputs read 0, then it's a '101. | 1205 | * inputs read 0, then it's a '101. |
1206 | */ | 1206 | */ |
1207 | kind = emc6d100 ; | 1207 | kind = emc6d100; |
1208 | } else if( company == LM85_COMPANY_SMSC | 1208 | } else if (company == LM85_COMPANY_SMSC |
1209 | && verstep == LM85_VERSTEP_EMC6D102) { | 1209 | && verstep == LM85_VERSTEP_EMC6D102) { |
1210 | kind = emc6d102 ; | 1210 | kind = emc6d102; |
1211 | } else if( company == LM85_COMPANY_SMSC | 1211 | } else if (company == LM85_COMPANY_SMSC |
1212 | && (verstep & LM85_VERSTEP_VMASK) == LM85_VERSTEP_GENERIC) { | 1212 | && (verstep & LM85_VERSTEP_VMASK) == LM85_VERSTEP_GENERIC) { |
1213 | dev_err(&adapter->dev, "lm85: Detected SMSC chip\n"); | 1213 | dev_err(&adapter->dev, "lm85: Detected SMSC chip\n"); |
1214 | dev_err(&adapter->dev, "lm85: Unrecognized version/stepping 0x%02x" | 1214 | dev_err(&adapter->dev, "lm85: Unrecognized version/stepping 0x%02x" |
1215 | " Defaulting to Generic LM85.\n", verstep ); | 1215 | " Defaulting to Generic LM85.\n", verstep); |
1216 | kind = any_chip ; | 1216 | kind = any_chip; |
1217 | } else if( kind == any_chip | 1217 | } else if (kind == any_chip |
1218 | && (verstep & LM85_VERSTEP_VMASK) == LM85_VERSTEP_GENERIC) { | 1218 | && (verstep & LM85_VERSTEP_VMASK) == LM85_VERSTEP_GENERIC) { |
1219 | dev_err(&adapter->dev, "Generic LM85 Version 6 detected\n"); | 1219 | dev_err(&adapter->dev, "Generic LM85 Version 6 detected\n"); |
1220 | /* Leave kind as "any_chip" */ | 1220 | /* Leave kind as "any_chip" */ |
1221 | } else { | 1221 | } else { |
1222 | dev_dbg(&adapter->dev, "Autodetection failed\n"); | 1222 | dev_dbg(&adapter->dev, "Autodetection failed\n"); |
1223 | /* Not an LM85 ... */ | 1223 | /* Not an LM85... */ |
1224 | if( kind == any_chip ) { /* User used force=x,y */ | 1224 | if (kind == any_chip) { /* User used force=x,y */ |
1225 | dev_err(&adapter->dev, "Generic LM85 Version 6 not" | 1225 | dev_err(&adapter->dev, "Generic LM85 Version 6 not" |
1226 | " found at %d,0x%02x. Try force_lm85c.\n", | 1226 | " found at %d,0x%02x. Try force_lm85c.\n", |
1227 | i2c_adapter_id(adapter), address ); | 1227 | i2c_adapter_id(adapter), address); |
1228 | } | 1228 | } |
1229 | err = 0 ; | 1229 | err = 0; |
1230 | goto ERROR1; | 1230 | goto ERROR1; |
1231 | } | 1231 | } |
1232 | } | 1232 | } |
1233 | 1233 | ||
1234 | /* Fill in the chip specific driver values */ | 1234 | /* Fill in the chip specific driver values */ |
1235 | if ( kind == any_chip ) { | 1235 | if (kind == any_chip) |
1236 | type_name = "lm85"; | 1236 | type_name = "lm85"; |
1237 | } else if ( kind == lm85b ) { | 1237 | else if (kind == lm85b) |
1238 | type_name = "lm85b"; | 1238 | type_name = "lm85b"; |
1239 | } else if ( kind == lm85c ) { | 1239 | else if (kind == lm85c) |
1240 | type_name = "lm85c"; | 1240 | type_name = "lm85c"; |
1241 | } else if ( kind == adm1027 ) { | 1241 | else if (kind == adm1027) |
1242 | type_name = "adm1027"; | 1242 | type_name = "adm1027"; |
1243 | } else if ( kind == adt7463 ) { | 1243 | else if (kind == adt7463) |
1244 | type_name = "adt7463"; | 1244 | type_name = "adt7463"; |
1245 | } else if ( kind == emc6d100){ | 1245 | else if (kind == emc6d100) |
1246 | type_name = "emc6d100"; | 1246 | type_name = "emc6d100"; |
1247 | } else if ( kind == emc6d102 ) { | 1247 | else if (kind == emc6d102) |
1248 | type_name = "emc6d102"; | 1248 | type_name = "emc6d102"; |
1249 | } | ||
1250 | strlcpy(new_client->name, type_name, I2C_NAME_SIZE); | 1249 | strlcpy(new_client->name, type_name, I2C_NAME_SIZE); |
1251 | 1250 | ||
1252 | /* Fill in the remaining client fields */ | 1251 | /* Fill in the remaining client fields */ |
@@ -1291,16 +1290,16 @@ static int lm85_detect(struct i2c_adapter *adapter, int address, | |||
1291 | return 0; | 1290 | return 0; |
1292 | 1291 | ||
1293 | /* Error out and cleanup code */ | 1292 | /* Error out and cleanup code */ |
1294 | ERROR3: | 1293 | ERROR3: |
1295 | sysfs_remove_group(&new_client->dev.kobj, &lm85_group); | 1294 | sysfs_remove_group(&new_client->dev.kobj, &lm85_group); |
1296 | sysfs_remove_group(&new_client->dev.kobj, &lm85_group_in4); | 1295 | sysfs_remove_group(&new_client->dev.kobj, &lm85_group_in4); |
1297 | if (kind == emc6d100) | 1296 | if (kind == emc6d100) |
1298 | sysfs_remove_group(&new_client->dev.kobj, &lm85_group_in567); | 1297 | sysfs_remove_group(&new_client->dev.kobj, &lm85_group_in567); |
1299 | ERROR2: | 1298 | ERROR2: |
1300 | i2c_detach_client(new_client); | 1299 | i2c_detach_client(new_client); |
1301 | ERROR1: | 1300 | ERROR1: |
1302 | kfree(data); | 1301 | kfree(data); |
1303 | ERROR0: | 1302 | ERROR0: |
1304 | return err; | 1303 | return err; |
1305 | } | 1304 | } |
1306 | 1305 | ||
@@ -1323,58 +1322,60 @@ static int lm85_read_value(struct i2c_client *client, u8 reg) | |||
1323 | int res; | 1322 | int res; |
1324 | 1323 | ||
1325 | /* What size location is it? */ | 1324 | /* What size location is it? */ |
1326 | switch( reg ) { | 1325 | switch (reg) { |
1327 | case LM85_REG_FAN(0) : /* Read WORD data */ | 1326 | case LM85_REG_FAN(0): /* Read WORD data */ |
1328 | case LM85_REG_FAN(1) : | 1327 | case LM85_REG_FAN(1): |
1329 | case LM85_REG_FAN(2) : | 1328 | case LM85_REG_FAN(2): |
1330 | case LM85_REG_FAN(3) : | 1329 | case LM85_REG_FAN(3): |
1331 | case LM85_REG_FAN_MIN(0) : | 1330 | case LM85_REG_FAN_MIN(0): |
1332 | case LM85_REG_FAN_MIN(1) : | 1331 | case LM85_REG_FAN_MIN(1): |
1333 | case LM85_REG_FAN_MIN(2) : | 1332 | case LM85_REG_FAN_MIN(2): |
1334 | case LM85_REG_FAN_MIN(3) : | 1333 | case LM85_REG_FAN_MIN(3): |
1335 | case LM85_REG_ALARM1 : /* Read both bytes at once */ | 1334 | case LM85_REG_ALARM1: /* Read both bytes at once */ |
1336 | res = i2c_smbus_read_byte_data(client, reg) & 0xff ; | 1335 | res = i2c_smbus_read_byte_data(client, reg) & 0xff; |
1337 | res |= i2c_smbus_read_byte_data(client, reg+1) << 8 ; | 1336 | res |= i2c_smbus_read_byte_data(client, reg + 1) << 8; |
1338 | break ; | 1337 | break; |
1339 | case ADT7463_REG_TMIN_CTL1 : /* Read WORD MSB, LSB */ | 1338 | case ADT7463_REG_TMIN_CTL1: /* Read WORD MSB, LSB */ |
1340 | res = i2c_smbus_read_byte_data(client, reg) << 8 ; | 1339 | res = i2c_smbus_read_byte_data(client, reg) << 8; |
1341 | res |= i2c_smbus_read_byte_data(client, reg+1) & 0xff ; | 1340 | res |= i2c_smbus_read_byte_data(client, reg + 1) & 0xff; |
1342 | break ; | 1341 | break; |
1343 | default: /* Read BYTE data */ | 1342 | default: /* Read BYTE data */ |
1344 | res = i2c_smbus_read_byte_data(client, reg); | 1343 | res = i2c_smbus_read_byte_data(client, reg); |
1345 | break ; | 1344 | break; |
1346 | } | 1345 | } |
1347 | 1346 | ||
1348 | return res ; | 1347 | return res; |
1349 | } | 1348 | } |
1350 | 1349 | ||
1351 | static int lm85_write_value(struct i2c_client *client, u8 reg, int value) | 1350 | static int lm85_write_value(struct i2c_client *client, u8 reg, int value) |
1352 | { | 1351 | { |
1353 | int res ; | 1352 | int res; |
1354 | 1353 | ||
1355 | switch( reg ) { | 1354 | switch (reg) { |
1356 | case LM85_REG_FAN(0) : /* Write WORD data */ | 1355 | case LM85_REG_FAN(0): /* Write WORD data */ |
1357 | case LM85_REG_FAN(1) : | 1356 | case LM85_REG_FAN(1): |
1358 | case LM85_REG_FAN(2) : | 1357 | case LM85_REG_FAN(2): |
1359 | case LM85_REG_FAN(3) : | 1358 | case LM85_REG_FAN(3): |
1360 | case LM85_REG_FAN_MIN(0) : | 1359 | case LM85_REG_FAN_MIN(0): |
1361 | case LM85_REG_FAN_MIN(1) : | 1360 | case LM85_REG_FAN_MIN(1): |
1362 | case LM85_REG_FAN_MIN(2) : | 1361 | case LM85_REG_FAN_MIN(2): |
1363 | case LM85_REG_FAN_MIN(3) : | 1362 | case LM85_REG_FAN_MIN(3): |
1364 | /* NOTE: ALARM is read only, so not included here */ | 1363 | /* NOTE: ALARM is read only, so not included here */ |
1365 | res = i2c_smbus_write_byte_data(client, reg, value & 0xff) ; | 1364 | res = i2c_smbus_write_byte_data(client, reg, value & 0xff); |
1366 | res |= i2c_smbus_write_byte_data(client, reg+1, (value>>8) & 0xff) ; | 1365 | res |= i2c_smbus_write_byte_data(client, reg + 1, |
1367 | break ; | 1366 | (value >> 8) & 0xff); |
1368 | case ADT7463_REG_TMIN_CTL1 : /* Write WORD MSB, LSB */ | 1367 | break; |
1369 | res = i2c_smbus_write_byte_data(client, reg, (value>>8) & 0xff); | 1368 | case ADT7463_REG_TMIN_CTL1: /* Write WORD MSB, LSB */ |
1370 | res |= i2c_smbus_write_byte_data(client, reg+1, value & 0xff) ; | 1369 | res = i2c_smbus_write_byte_data(client, reg, |
1371 | break ; | 1370 | (value >> 8) & 0xff); |
1371 | res |= i2c_smbus_write_byte_data(client, reg + 1, value & 0xff); | ||
1372 | break; | ||
1372 | default: /* Write BYTE data */ | 1373 | default: /* Write BYTE data */ |
1373 | res = i2c_smbus_write_byte_data(client, reg, value); | 1374 | res = i2c_smbus_write_byte_data(client, reg, value); |
1374 | break ; | 1375 | break; |
1375 | } | 1376 | } |
1376 | 1377 | ||
1377 | return res ; | 1378 | return res; |
1378 | } | 1379 | } |
1379 | 1380 | ||
1380 | static void lm85_init_client(struct i2c_client *client) | 1381 | static void lm85_init_client(struct i2c_client *client) |
@@ -1387,21 +1388,21 @@ static void lm85_init_client(struct i2c_client *client) | |||
1387 | /* Warn if part was not "READY" */ | 1388 | /* Warn if part was not "READY" */ |
1388 | value = lm85_read_value(client, LM85_REG_CONFIG); | 1389 | value = lm85_read_value(client, LM85_REG_CONFIG); |
1389 | dev_dbg(&client->dev, "LM85_REG_CONFIG is: 0x%02x\n", value); | 1390 | dev_dbg(&client->dev, "LM85_REG_CONFIG is: 0x%02x\n", value); |
1390 | if( value & 0x02 ) { | 1391 | if (value & 0x02) { |
1391 | dev_err(&client->dev, "Client (%d,0x%02x) config is locked.\n", | 1392 | dev_err(&client->dev, "Client (%d,0x%02x) config is locked.\n", |
1392 | i2c_adapter_id(client->adapter), client->addr ); | 1393 | i2c_adapter_id(client->adapter), client->addr); |
1393 | }; | 1394 | } |
1394 | if( ! (value & 0x04) ) { | 1395 | if (!(value & 0x04)) { |
1395 | dev_err(&client->dev, "Client (%d,0x%02x) is not ready.\n", | 1396 | dev_err(&client->dev, "Client (%d,0x%02x) is not ready.\n", |
1396 | i2c_adapter_id(client->adapter), client->addr ); | 1397 | i2c_adapter_id(client->adapter), client->addr); |
1397 | }; | 1398 | } |
1398 | if( value & 0x10 | 1399 | if (value & 0x10 |
1399 | && ( data->type == adm1027 | 1400 | && (data->type == adm1027 |
1400 | || data->type == adt7463 ) ) { | 1401 | || data->type == adt7463)) { |
1401 | dev_err(&client->dev, "Client (%d,0x%02x) VxI mode is set. " | 1402 | dev_err(&client->dev, "Client (%d,0x%02x) VxI mode is set. " |
1402 | "Please report this to the lm85 maintainer.\n", | 1403 | "Please report this to the lm85 maintainer.\n", |
1403 | i2c_adapter_id(client->adapter), client->addr ); | 1404 | i2c_adapter_id(client->adapter), client->addr); |
1404 | }; | 1405 | } |
1405 | 1406 | ||
1406 | /* WE INTENTIONALLY make no changes to the limits, | 1407 | /* WE INTENTIONALLY make no changes to the limits, |
1407 | * offsets, pwms, fans and zones. If they were | 1408 | * offsets, pwms, fans and zones. If they were |
@@ -1414,7 +1415,7 @@ static void lm85_init_client(struct i2c_client *client) | |||
1414 | /* Start monitoring */ | 1415 | /* Start monitoring */ |
1415 | value = lm85_read_value(client, LM85_REG_CONFIG); | 1416 | value = lm85_read_value(client, LM85_REG_CONFIG); |
1416 | /* Try to clear LOCK, Set START, save everything else */ | 1417 | /* Try to clear LOCK, Set START, save everything else */ |
1417 | value = (value & ~ 0x02) | 0x01 ; | 1418 | value = (value & ~0x02) | 0x01; |
1418 | dev_dbg(&client->dev, "Setting CONFIG to: 0x%02x\n", value); | 1419 | dev_dbg(&client->dev, "Setting CONFIG to: 0x%02x\n", value); |
1419 | lm85_write_value(client, LM85_REG_CONFIG, value); | 1420 | lm85_write_value(client, LM85_REG_CONFIG, value); |
1420 | } | 1421 | } |
@@ -1427,28 +1428,30 @@ static struct lm85_data *lm85_update_device(struct device *dev) | |||
1427 | 1428 | ||
1428 | mutex_lock(&data->update_lock); | 1429 | mutex_lock(&data->update_lock); |
1429 | 1430 | ||
1430 | if ( !data->valid || | 1431 | if (!data->valid || |
1431 | time_after(jiffies, data->last_reading + LM85_DATA_INTERVAL) ) { | 1432 | time_after(jiffies, data->last_reading + LM85_DATA_INTERVAL)) { |
1432 | /* Things that change quickly */ | 1433 | /* Things that change quickly */ |
1433 | dev_dbg(&client->dev, "Reading sensor values\n"); | 1434 | dev_dbg(&client->dev, "Reading sensor values\n"); |
1434 | 1435 | ||
1435 | /* Have to read extended bits first to "freeze" the | 1436 | /* Have to read extended bits first to "freeze" the |
1436 | * more significant bits that are read later. | 1437 | * more significant bits that are read later. |
1437 | * There are 2 additional resolution bits per channel and we | 1438 | * There are 2 additional resolution bits per channel and we |
1438 | * have room for 4, so we shift them to the left. | 1439 | * have room for 4, so we shift them to the left. |
1439 | */ | 1440 | */ |
1440 | if ( (data->type == adm1027) || (data->type == adt7463) ) { | 1441 | if (data->type == adm1027 || data->type == adt7463) { |
1441 | int ext1 = lm85_read_value(client, | 1442 | int ext1 = lm85_read_value(client, |
1442 | ADM1027_REG_EXTEND_ADC1); | 1443 | ADM1027_REG_EXTEND_ADC1); |
1443 | int ext2 = lm85_read_value(client, | 1444 | int ext2 = lm85_read_value(client, |
1444 | ADM1027_REG_EXTEND_ADC2); | 1445 | ADM1027_REG_EXTEND_ADC2); |
1445 | int val = (ext1 << 8) + ext2; | 1446 | int val = (ext1 << 8) + ext2; |
1446 | 1447 | ||
1447 | for(i = 0; i <= 4; i++) | 1448 | for (i = 0; i <= 4; i++) |
1448 | data->in_ext[i] = ((val>>(i * 2))&0x03) << 2; | 1449 | data->in_ext[i] = |
1450 | ((val >> (i * 2)) & 0x03) << 2; | ||
1449 | 1451 | ||
1450 | for(i = 0; i <= 2; i++) | 1452 | for (i = 0; i <= 2; i++) |
1451 | data->temp_ext[i] = (val>>((i + 4) * 2))&0x0c; | 1453 | data->temp_ext[i] = |
1454 | (val >> ((i + 4) * 2)) & 0x0c; | ||
1452 | } | 1455 | } |
1453 | 1456 | ||
1454 | data->vid = lm85_read_value(client, LM85_REG_VID); | 1457 | data->vid = lm85_read_value(client, LM85_REG_VID); |
@@ -1480,21 +1483,21 @@ static struct lm85_data *lm85_update_device(struct device *dev) | |||
1480 | 1483 | ||
1481 | data->alarms = lm85_read_value(client, LM85_REG_ALARM1); | 1484 | data->alarms = lm85_read_value(client, LM85_REG_ALARM1); |
1482 | 1485 | ||
1483 | if ( data->type == adt7463 ) { | 1486 | if (data->type == adt7463) { |
1484 | if( data->therm_total < ULONG_MAX - 256 ) { | 1487 | if (data->therm_total < ULONG_MAX - 256) { |
1485 | data->therm_total += | 1488 | data->therm_total += |
1486 | lm85_read_value(client, ADT7463_REG_THERM ); | 1489 | lm85_read_value(client, ADT7463_REG_THERM); |
1487 | } | 1490 | } |
1488 | } else if ( data->type == emc6d100 ) { | 1491 | } else if (data->type == emc6d100) { |
1489 | /* Three more voltage sensors */ | 1492 | /* Three more voltage sensors */ |
1490 | for (i = 5; i <= 7; ++i) { | 1493 | for (i = 5; i <= 7; ++i) { |
1491 | data->in[i] = | 1494 | data->in[i] = lm85_read_value(client, |
1492 | lm85_read_value(client, EMC6D100_REG_IN(i)); | 1495 | EMC6D100_REG_IN(i)); |
1493 | } | 1496 | } |
1494 | /* More alarm bits */ | 1497 | /* More alarm bits */ |
1495 | data->alarms |= | 1498 | data->alarms |= lm85_read_value(client, |
1496 | lm85_read_value(client, EMC6D100_REG_ALARM3) << 16; | 1499 | EMC6D100_REG_ALARM3) << 16; |
1497 | } else if (data->type == emc6d102 ) { | 1500 | } else if (data->type == emc6d102) { |
1498 | /* Have to read LSB bits after the MSB ones because | 1501 | /* Have to read LSB bits after the MSB ones because |
1499 | the reading of the MSB bits has frozen the | 1502 | the reading of the MSB bits has frozen the |
1500 | LSBs (backward from the ADM1027). | 1503 | LSBs (backward from the ADM1027). |
@@ -1518,11 +1521,11 @@ static struct lm85_data *lm85_update_device(struct device *dev) | |||
1518 | data->temp_ext[2] = (ext1 >> 4) & 0x0f; | 1521 | data->temp_ext[2] = (ext1 >> 4) & 0x0f; |
1519 | } | 1522 | } |
1520 | 1523 | ||
1521 | data->last_reading = jiffies ; | 1524 | data->last_reading = jiffies; |
1522 | }; /* last_reading */ | 1525 | } /* last_reading */ |
1523 | 1526 | ||
1524 | if ( !data->valid || | 1527 | if (!data->valid || |
1525 | time_after(jiffies, data->last_config + LM85_CONFIG_INTERVAL) ) { | 1528 | time_after(jiffies, data->last_config + LM85_CONFIG_INTERVAL)) { |
1526 | /* Things that don't change often */ | 1529 | /* Things that don't change often */ |
1527 | dev_dbg(&client->dev, "Reading config values\n"); | 1530 | dev_dbg(&client->dev, "Reading config values\n"); |
1528 | 1531 | ||
@@ -1540,12 +1543,12 @@ static struct lm85_data *lm85_update_device(struct device *dev) | |||
1540 | LM85_REG_IN_MAX(4)); | 1543 | LM85_REG_IN_MAX(4)); |
1541 | } | 1544 | } |
1542 | 1545 | ||
1543 | if ( data->type == emc6d100 ) { | 1546 | if (data->type == emc6d100) { |
1544 | for (i = 5; i <= 7; ++i) { | 1547 | for (i = 5; i <= 7; ++i) { |
1545 | data->in_min[i] = | 1548 | data->in_min[i] = lm85_read_value(client, |
1546 | lm85_read_value(client, EMC6D100_REG_IN_MIN(i)); | 1549 | EMC6D100_REG_IN_MIN(i)); |
1547 | data->in_max[i] = | 1550 | data->in_max[i] = lm85_read_value(client, |
1548 | lm85_read_value(client, EMC6D100_REG_IN_MAX(i)); | 1551 | EMC6D100_REG_IN_MAX(i)); |
1549 | } | 1552 | } |
1550 | } | 1553 | } |
1551 | 1554 | ||
@@ -1562,12 +1565,12 @@ static struct lm85_data *lm85_update_device(struct device *dev) | |||
1562 | } | 1565 | } |
1563 | 1566 | ||
1564 | for (i = 0; i <= 2; ++i) { | 1567 | for (i = 0; i <= 2; ++i) { |
1565 | int val ; | 1568 | int val; |
1566 | data->autofan[i].config = | 1569 | data->autofan[i].config = |
1567 | lm85_read_value(client, LM85_REG_AFAN_CONFIG(i)); | 1570 | lm85_read_value(client, LM85_REG_AFAN_CONFIG(i)); |
1568 | val = lm85_read_value(client, LM85_REG_AFAN_RANGE(i)); | 1571 | val = lm85_read_value(client, LM85_REG_AFAN_RANGE(i)); |
1569 | data->autofan[i].freq = val & 0x07 ; | 1572 | data->autofan[i].freq = val & 0x07; |
1570 | data->zone[i].range = (val >> 4) & 0x0f ; | 1573 | data->zone[i].range = (val >> 4) & 0x0f; |
1571 | data->autofan[i].min_pwm = | 1574 | data->autofan[i].min_pwm = |
1572 | lm85_read_value(client, LM85_REG_AFAN_MINPWM(i)); | 1575 | lm85_read_value(client, LM85_REG_AFAN_MINPWM(i)); |
1573 | data->zone[i].limit = | 1576 | data->zone[i].limit = |
@@ -1577,50 +1580,50 @@ static struct lm85_data *lm85_update_device(struct device *dev) | |||
1577 | } | 1580 | } |
1578 | 1581 | ||
1579 | i = lm85_read_value(client, LM85_REG_AFAN_SPIKE1); | 1582 | i = lm85_read_value(client, LM85_REG_AFAN_SPIKE1); |
1580 | data->smooth[0] = i & 0x0f ; | 1583 | data->smooth[0] = i & 0x0f; |
1581 | data->syncpwm3 = i & 0x10 ; /* Save PWM3 config */ | 1584 | data->syncpwm3 = i & 0x10; /* Save PWM3 config */ |
1582 | data->autofan[0].min_off = (i & 0x20) != 0 ; | 1585 | data->autofan[0].min_off = (i & 0x20) != 0; |
1583 | data->autofan[1].min_off = (i & 0x40) != 0 ; | 1586 | data->autofan[1].min_off = (i & 0x40) != 0; |
1584 | data->autofan[2].min_off = (i & 0x80) != 0 ; | 1587 | data->autofan[2].min_off = (i & 0x80) != 0; |
1585 | i = lm85_read_value(client, LM85_REG_AFAN_SPIKE2); | 1588 | i = lm85_read_value(client, LM85_REG_AFAN_SPIKE2); |
1586 | data->smooth[1] = (i>>4) & 0x0f ; | 1589 | data->smooth[1] = (i >> 4) & 0x0f; |
1587 | data->smooth[2] = i & 0x0f ; | 1590 | data->smooth[2] = i & 0x0f; |
1588 | 1591 | ||
1589 | i = lm85_read_value(client, LM85_REG_AFAN_HYST1); | 1592 | i = lm85_read_value(client, LM85_REG_AFAN_HYST1); |
1590 | data->zone[0].hyst = (i>>4) & 0x0f ; | 1593 | data->zone[0].hyst = (i >> 4) & 0x0f; |
1591 | data->zone[1].hyst = i & 0x0f ; | 1594 | data->zone[1].hyst = i & 0x0f; |
1592 | 1595 | ||
1593 | i = lm85_read_value(client, LM85_REG_AFAN_HYST2); | 1596 | i = lm85_read_value(client, LM85_REG_AFAN_HYST2); |
1594 | data->zone[2].hyst = (i>>4) & 0x0f ; | 1597 | data->zone[2].hyst = (i >> 4) & 0x0f; |
1595 | 1598 | ||
1596 | if ( (data->type == lm85b) || (data->type == lm85c) ) { | 1599 | if (data->type == lm85b || data->type == lm85c) { |
1597 | data->tach_mode = lm85_read_value(client, | 1600 | data->tach_mode = lm85_read_value(client, |
1598 | LM85_REG_TACH_MODE ); | 1601 | LM85_REG_TACH_MODE); |
1599 | data->spinup_ctl = lm85_read_value(client, | 1602 | data->spinup_ctl = lm85_read_value(client, |
1600 | LM85_REG_SPINUP_CTL ); | 1603 | LM85_REG_SPINUP_CTL); |
1601 | } else if ( (data->type == adt7463) || (data->type == adm1027) ) { | 1604 | } else if (data->type == adt7463 || data->type == adm1027) { |
1602 | if ( data->type == adt7463 ) { | 1605 | if (data->type == adt7463) { |
1603 | for (i = 0; i <= 2; ++i) { | 1606 | for (i = 0; i <= 2; ++i) { |
1604 | data->oppoint[i] = lm85_read_value(client, | 1607 | data->oppoint[i] = lm85_read_value(client, |
1605 | ADT7463_REG_OPPOINT(i) ); | 1608 | ADT7463_REG_OPPOINT(i)); |
1606 | } | 1609 | } |
1607 | data->tmin_ctl = lm85_read_value(client, | 1610 | data->tmin_ctl = lm85_read_value(client, |
1608 | ADT7463_REG_TMIN_CTL1 ); | 1611 | ADT7463_REG_TMIN_CTL1); |
1609 | data->therm_limit = lm85_read_value(client, | 1612 | data->therm_limit = lm85_read_value(client, |
1610 | ADT7463_REG_THERM_LIMIT ); | 1613 | ADT7463_REG_THERM_LIMIT); |
1611 | } | 1614 | } |
1612 | for (i = 0; i <= 2; ++i) { | 1615 | for (i = 0; i <= 2; ++i) { |
1613 | data->temp_offset[i] = lm85_read_value(client, | 1616 | data->temp_offset[i] = lm85_read_value(client, |
1614 | ADM1027_REG_TEMP_OFFSET(i) ); | 1617 | ADM1027_REG_TEMP_OFFSET(i)); |
1615 | } | 1618 | } |
1616 | data->tach_mode = lm85_read_value(client, | 1619 | data->tach_mode = lm85_read_value(client, |
1617 | ADM1027_REG_CONFIG3 ); | 1620 | ADM1027_REG_CONFIG3); |
1618 | data->fan_ppr = lm85_read_value(client, | 1621 | data->fan_ppr = lm85_read_value(client, |
1619 | ADM1027_REG_FAN_PPR ); | 1622 | ADM1027_REG_FAN_PPR); |
1620 | } | 1623 | } |
1621 | 1624 | ||
1622 | data->last_config = jiffies; | 1625 | data->last_config = jiffies; |
1623 | }; /* last_config */ | 1626 | } /* last_config */ |
1624 | 1627 | ||
1625 | data->valid = 1; | 1628 | data->valid = 1; |
1626 | 1629 | ||
@@ -1635,7 +1638,7 @@ static int __init sm_lm85_init(void) | |||
1635 | return i2c_add_driver(&lm85_driver); | 1638 | return i2c_add_driver(&lm85_driver); |
1636 | } | 1639 | } |
1637 | 1640 | ||
1638 | static void __exit sm_lm85_exit(void) | 1641 | static void __exit sm_lm85_exit(void) |
1639 | { | 1642 | { |
1640 | i2c_del_driver(&lm85_driver); | 1643 | i2c_del_driver(&lm85_driver); |
1641 | } | 1644 | } |
@@ -1645,7 +1648,9 @@ static void __exit sm_lm85_exit(void) | |||
1645 | * post 2.7.0 CVS changes. | 1648 | * post 2.7.0 CVS changes. |
1646 | */ | 1649 | */ |
1647 | MODULE_LICENSE("GPL"); | 1650 | MODULE_LICENSE("GPL"); |
1648 | MODULE_AUTHOR("Philip Pokorny <ppokorny@penguincomputing.com>, Margit Schubert-While <margitsw@t-online.de>, Justin Thiessen <jthiessen@penguincomputing.com"); | 1651 | MODULE_AUTHOR("Philip Pokorny <ppokorny@penguincomputing.com>, " |
1652 | "Margit Schubert-While <margitsw@t-online.de>, " | ||
1653 | "Justin Thiessen <jthiessen@penguincomputing.com"); | ||
1649 | MODULE_DESCRIPTION("LM85-B, LM85-C driver"); | 1654 | MODULE_DESCRIPTION("LM85-B, LM85-C driver"); |
1650 | 1655 | ||
1651 | module_init(sm_lm85_init); | 1656 | module_init(sm_lm85_init); |