switch lookup_mnt()
[linux-2.6.git] / drivers / hwmon / adt7462.c
1 /*
2  * A hwmon driver for the Analog Devices ADT7462
3  * Copyright (C) 2008 IBM
4  *
5  * Author: Darrick J. Wong <djwong@us.ibm.com>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  */
21
22 #include <linux/module.h>
23 #include <linux/jiffies.h>
24 #include <linux/i2c.h>
25 #include <linux/hwmon.h>
26 #include <linux/hwmon-sysfs.h>
27 #include <linux/err.h>
28 #include <linux/mutex.h>
29 #include <linux/delay.h>
30 #include <linux/log2.h>
31
32 /* Addresses to scan */
33 static const unsigned short normal_i2c[] = { 0x58, 0x5C, I2C_CLIENT_END };
34
35 /* Insmod parameters */
36 I2C_CLIENT_INSMOD_1(adt7462);
37
38 /* ADT7462 registers */
39 #define ADT7462_REG_DEVICE                      0x3D
40 #define ADT7462_REG_VENDOR                      0x3E
41 #define ADT7462_REG_REVISION                    0x3F
42
43 #define ADT7462_REG_MIN_TEMP_BASE_ADDR          0x44
44 #define ADT7462_REG_MIN_TEMP_MAX_ADDR           0x47
45 #define ADT7462_REG_MAX_TEMP_BASE_ADDR          0x48
46 #define ADT7462_REG_MAX_TEMP_MAX_ADDR           0x4B
47 #define ADT7462_REG_TEMP_BASE_ADDR              0x88
48 #define ADT7462_REG_TEMP_MAX_ADDR               0x8F
49
50 #define ADT7462_REG_FAN_BASE_ADDR               0x98
51 #define ADT7462_REG_FAN_MAX_ADDR                0x9F
52 #define ADT7462_REG_FAN2_BASE_ADDR              0xA2
53 #define ADT7462_REG_FAN2_MAX_ADDR               0xA9
54 #define ADT7462_REG_FAN_ENABLE                  0x07
55 #define ADT7462_REG_FAN_MIN_BASE_ADDR           0x78
56 #define ADT7462_REG_FAN_MIN_MAX_ADDR            0x7F
57
58 #define ADT7462_REG_CFG2                        0x02
59 #define         ADT7462_FSPD_MASK               0x20
60
61 #define ADT7462_REG_PWM_BASE_ADDR               0xAA
62 #define ADT7462_REG_PWM_MAX_ADDR                0xAD
63 #define ADT7462_REG_PWM_MIN_BASE_ADDR           0x28
64 #define ADT7462_REG_PWM_MIN_MAX_ADDR            0x2B
65 #define ADT7462_REG_PWM_MAX                     0x2C
66 #define ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR      0x5C
67 #define ADT7462_REG_PWM_TEMP_MIN_MAX_ADDR       0x5F
68 #define ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR    0x60
69 #define ADT7462_REG_PWM_TEMP_RANGE_MAX_ADDR     0x63
70 #define         ADT7462_PWM_HYST_MASK           0x0F
71 #define         ADT7462_PWM_RANGE_MASK          0xF0
72 #define         ADT7462_PWM_RANGE_SHIFT         4
73 #define ADT7462_REG_PWM_CFG_BASE_ADDR           0x21
74 #define ADT7462_REG_PWM_CFG_MAX_ADDR            0x24
75 #define         ADT7462_PWM_CHANNEL_MASK        0xE0
76 #define         ADT7462_PWM_CHANNEL_SHIFT       5
77
78 #define ADT7462_REG_PIN_CFG_BASE_ADDR           0x10
79 #define ADT7462_REG_PIN_CFG_MAX_ADDR            0x13
80 #define         ADT7462_PIN7_INPUT              0x01    /* cfg0 */
81 #define         ADT7462_DIODE3_INPUT            0x20
82 #define         ADT7462_DIODE1_INPUT            0x40
83 #define         ADT7462_VID_INPUT               0x80
84 #define         ADT7462_PIN22_INPUT             0x04    /* cfg1 */
85 #define         ADT7462_PIN21_INPUT             0x08
86 #define         ADT7462_PIN19_INPUT             0x10
87 #define         ADT7462_PIN15_INPUT             0x20
88 #define         ADT7462_PIN13_INPUT             0x40
89 #define         ADT7462_PIN8_INPUT              0x80
90 #define         ADT7462_PIN23_MASK              0x03
91 #define         ADT7462_PIN23_SHIFT             0
92 #define         ADT7462_PIN26_MASK              0x0C    /* cfg2 */
93 #define         ADT7462_PIN26_SHIFT             2
94 #define         ADT7462_PIN25_MASK              0x30
95 #define         ADT7462_PIN25_SHIFT             4
96 #define         ADT7462_PIN24_MASK              0xC0
97 #define         ADT7462_PIN24_SHIFT             6
98 #define         ADT7462_PIN26_VOLT_INPUT        0x08
99 #define         ADT7462_PIN25_VOLT_INPUT        0x20
100 #define         ADT7462_PIN28_SHIFT             6       /* cfg3 */
101 #define         ADT7462_PIN28_VOLT              0x5
102
103 #define ADT7462_REG_ALARM1                      0xB8
104 #define         ADT7462_LT_ALARM                0x02
105 #define         ADT7462_R1T_ALARM               0x04
106 #define         ADT7462_R2T_ALARM               0x08
107 #define         ADT7462_R3T_ALARM               0x10
108 #define ADT7462_REG_ALARM2                      0xBB
109 #define         ADT7462_V0_ALARM                0x01
110 #define         ADT7462_V1_ALARM                0x02
111 #define         ADT7462_V2_ALARM                0x04
112 #define         ADT7462_V3_ALARM                0x08
113 #define         ADT7462_V4_ALARM                0x10
114 #define         ADT7462_V5_ALARM                0x20
115 #define         ADT7462_V6_ALARM                0x40
116 #define         ADT7462_V7_ALARM                0x80
117 #define ADT7462_REG_ALARM3                      0xBC
118 #define         ADT7462_V8_ALARM                0x08
119 #define         ADT7462_V9_ALARM                0x10
120 #define         ADT7462_V10_ALARM               0x20
121 #define         ADT7462_V11_ALARM               0x40
122 #define         ADT7462_V12_ALARM               0x80
123 #define ADT7462_REG_ALARM4                      0xBD
124 #define         ADT7462_F0_ALARM                0x01
125 #define         ADT7462_F1_ALARM                0x02
126 #define         ADT7462_F2_ALARM                0x04
127 #define         ADT7462_F3_ALARM                0x08
128 #define         ADT7462_F4_ALARM                0x10
129 #define         ADT7462_F5_ALARM                0x20
130 #define         ADT7462_F6_ALARM                0x40
131 #define         ADT7462_F7_ALARM                0x80
132 #define ADT7462_ALARM1                          0x0000
133 #define ADT7462_ALARM2                          0x0100
134 #define ADT7462_ALARM3                          0x0200
135 #define ADT7462_ALARM4                          0x0300
136 #define ADT7462_ALARM_REG_SHIFT                 8
137 #define ADT7462_ALARM_FLAG_MASK                 0x0F
138
139 #define ADT7462_TEMP_COUNT              4
140 #define ADT7462_TEMP_REG(x)             (ADT7462_REG_TEMP_BASE_ADDR + (x * 2))
141 #define ADT7462_TEMP_MIN_REG(x)         (ADT7462_REG_MIN_TEMP_BASE_ADDR + (x))
142 #define ADT7462_TEMP_MAX_REG(x)         (ADT7462_REG_MAX_TEMP_BASE_ADDR + (x))
143 #define TEMP_FRAC_OFFSET                6
144
145 #define ADT7462_FAN_COUNT               8
146 #define ADT7462_REG_FAN_MIN(x)          (ADT7462_REG_FAN_MIN_BASE_ADDR + (x))
147
148 #define ADT7462_PWM_COUNT               4
149 #define ADT7462_REG_PWM(x)              (ADT7462_REG_PWM_BASE_ADDR + (x))
150 #define ADT7462_REG_PWM_MIN(x)          (ADT7462_REG_PWM_MIN_BASE_ADDR + (x))
151 #define ADT7462_REG_PWM_TMIN(x)         \
152         (ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR + (x))
153 #define ADT7462_REG_PWM_TRANGE(x)       \
154         (ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR + (x))
155
156 #define ADT7462_PIN_CFG_REG_COUNT       4
157 #define ADT7462_REG_PIN_CFG(x)          (ADT7462_REG_PIN_CFG_BASE_ADDR + (x))
158 #define ADT7462_REG_PWM_CFG(x)          (ADT7462_REG_PWM_CFG_BASE_ADDR + (x))
159
160 #define ADT7462_ALARM_REG_COUNT         4
161
162 /*
163  * The chip can measure 13 different voltage sources:
164  *
165  * 1. +12V1 (pin 7)
166  * 2. Vccp1/+2.5V/+1.8V/+1.5V (pin 23)
167  * 3. +12V3 (pin 22)
168  * 4. +5V (pin 21)
169  * 5. +1.25V/+0.9V (pin 19)
170  * 6. +2.5V/+1.8V (pin 15)
171  * 7. +3.3v (pin 13)
172  * 8. +12V2 (pin 8)
173  * 9. Vbatt/FSB_Vtt (pin 26)
174  * A. +3.3V/+1.2V1 (pin 25)
175  * B. Vccp2/+2.5V/+1.8V/+1.5V (pin 24)
176  * C. +1.5V ICH (only if BOTH pin 28/29 are set to +1.5V)
177  * D. +1.5V 3GPIO (only if BOTH pin 28/29 are set to +1.5V)
178  *
179  * Each of these 13 has a factor to convert raw to voltage.  Even better,
180  * the pins can be connected to other sensors (tach/gpio/hot/etc), which
181  * makes the bookkeeping tricky.
182  *
183  * Some, but not all, of these voltages have low/high limits.
184  */
185 #define ADT7462_VOLT_COUNT      12
186
187 #define ADT7462_VENDOR          0x41
188 #define ADT7462_DEVICE          0x62
189 /* datasheet only mentions a revision 4 */
190 #define ADT7462_REVISION        0x04
191
192 /* How often do we reread sensors values? (In jiffies) */
193 #define SENSOR_REFRESH_INTERVAL (2 * HZ)
194
195 /* How often do we reread sensor limit values? (In jiffies) */
196 #define LIMIT_REFRESH_INTERVAL  (60 * HZ)
197
198 /* datasheet says to divide this number by the fan reading to get fan rpm */
199 #define FAN_PERIOD_TO_RPM(x)    ((90000 * 60) / (x))
200 #define FAN_RPM_TO_PERIOD       FAN_PERIOD_TO_RPM
201 #define FAN_PERIOD_INVALID      65535
202 #define FAN_DATA_VALID(x)       ((x) && (x) != FAN_PERIOD_INVALID)
203
204 #define MASK_AND_SHIFT(value, prefix)   \
205         (((value) & prefix##_MASK) >> prefix##_SHIFT)
206
207 struct adt7462_data {
208         struct device           *hwmon_dev;
209         struct attribute_group  attrs;
210         struct mutex            lock;
211         char                    sensors_valid;
212         char                    limits_valid;
213         unsigned long           sensors_last_updated;   /* In jiffies */
214         unsigned long           limits_last_updated;    /* In jiffies */
215
216         u8                      temp[ADT7462_TEMP_COUNT];
217                                 /* bits 6-7 are quarter pieces of temp */
218         u8                      temp_frac[ADT7462_TEMP_COUNT];
219         u8                      temp_min[ADT7462_TEMP_COUNT];
220         u8                      temp_max[ADT7462_TEMP_COUNT];
221         u16                     fan[ADT7462_FAN_COUNT];
222         u8                      fan_enabled;
223         u8                      fan_min[ADT7462_FAN_COUNT];
224         u8                      cfg2;
225         u8                      pwm[ADT7462_PWM_COUNT];
226         u8                      pin_cfg[ADT7462_PIN_CFG_REG_COUNT];
227         u8                      voltages[ADT7462_VOLT_COUNT];
228         u8                      volt_max[ADT7462_VOLT_COUNT];
229         u8                      volt_min[ADT7462_VOLT_COUNT];
230         u8                      pwm_min[ADT7462_PWM_COUNT];
231         u8                      pwm_tmin[ADT7462_PWM_COUNT];
232         u8                      pwm_trange[ADT7462_PWM_COUNT];
233         u8                      pwm_max;        /* only one per chip */
234         u8                      pwm_cfg[ADT7462_PWM_COUNT];
235         u8                      alarms[ADT7462_ALARM_REG_COUNT];
236 };
237
238 static int adt7462_probe(struct i2c_client *client,
239                          const struct i2c_device_id *id);
240 static int adt7462_detect(struct i2c_client *client, int kind,
241                           struct i2c_board_info *info);
242 static int adt7462_remove(struct i2c_client *client);
243
244 static const struct i2c_device_id adt7462_id[] = {
245         { "adt7462", adt7462 },
246         { }
247 };
248 MODULE_DEVICE_TABLE(i2c, adt7462_id);
249
250 static struct i2c_driver adt7462_driver = {
251         .class          = I2C_CLASS_HWMON,
252         .driver = {
253                 .name   = "adt7462",
254         },
255         .probe          = adt7462_probe,
256         .remove         = adt7462_remove,
257         .id_table       = adt7462_id,
258         .detect         = adt7462_detect,
259         .address_data   = &addr_data,
260 };
261
262 /*
263  * 16-bit registers on the ADT7462 are low-byte first.  The data sheet says
264  * that the low byte must be read before the high byte.
265  */
266 static inline int adt7462_read_word_data(struct i2c_client *client, u8 reg)
267 {
268         u16 foo;
269         foo = i2c_smbus_read_byte_data(client, reg);
270         foo |= ((u16)i2c_smbus_read_byte_data(client, reg + 1) << 8);
271         return foo;
272 }
273
274 /* For some reason these registers are not contiguous. */
275 static int ADT7462_REG_FAN(int fan)
276 {
277         if (fan < 4)
278                 return ADT7462_REG_FAN_BASE_ADDR + (2 * fan);
279         return ADT7462_REG_FAN2_BASE_ADDR + (2 * (fan - 4));
280 }
281
282 /* Voltage registers are scattered everywhere */
283 static int ADT7462_REG_VOLT_MAX(struct adt7462_data *data, int which)
284 {
285         switch (which) {
286         case 0:
287                 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
288                         return 0x7C;
289                 break;
290         case 1:
291                 return 0x69;
292         case 2:
293                 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
294                         return 0x7F;
295                 break;
296         case 3:
297                 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
298                         return 0x7E;
299                 break;
300         case 4:
301                 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
302                         return 0x4B;
303                 break;
304         case 5:
305                 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
306                         return 0x49;
307                 break;
308         case 6:
309                 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
310                         return 0x68;
311                 break;
312         case 7:
313                 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
314                         return 0x7D;
315                 break;
316         case 8:
317                 if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
318                         return 0x6C;
319                 break;
320         case 9:
321                 if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
322                         return 0x6B;
323                 break;
324         case 10:
325                 return 0x6A;
326         case 11:
327                 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
328                                         ADT7462_PIN28_VOLT &&
329                     !(data->pin_cfg[0] & ADT7462_VID_INPUT))
330                         return 0x50;
331                 break;
332         case 12:
333                 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
334                                         ADT7462_PIN28_VOLT &&
335                     !(data->pin_cfg[0] & ADT7462_VID_INPUT))
336                         return 0x4C;
337                 break;
338         }
339         return -ENODEV;
340 }
341
342 static int ADT7462_REG_VOLT_MIN(struct adt7462_data *data, int which)
343 {
344         switch (which) {
345         case 0:
346                 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
347                         return 0x6D;
348                 break;
349         case 1:
350                 return 0x72;
351         case 2:
352                 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
353                         return 0x6F;
354                 break;
355         case 3:
356                 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
357                         return 0x71;
358                 break;
359         case 4:
360                 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
361                         return 0x47;
362                 break;
363         case 5:
364                 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
365                         return 0x45;
366                 break;
367         case 6:
368                 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
369                         return 0x70;
370                 break;
371         case 7:
372                 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
373                         return 0x6E;
374                 break;
375         case 8:
376                 if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
377                         return 0x75;
378                 break;
379         case 9:
380                 if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
381                         return 0x74;
382                 break;
383         case 10:
384                 return 0x73;
385         case 11:
386                 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
387                                         ADT7462_PIN28_VOLT &&
388                     !(data->pin_cfg[0] & ADT7462_VID_INPUT))
389                         return 0x76;
390                 break;
391         case 12:
392                 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
393                                         ADT7462_PIN28_VOLT &&
394                     !(data->pin_cfg[0] & ADT7462_VID_INPUT))
395                         return 0x77;
396                 break;
397         }
398         return -ENODEV;
399 }
400
401 static int ADT7462_REG_VOLT(struct adt7462_data *data, int which)
402 {
403         switch (which) {
404         case 0:
405                 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
406                         return 0xA3;
407                 break;
408         case 1:
409                 return 0x90;
410         case 2:
411                 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
412                         return 0xA9;
413                 break;
414         case 3:
415                 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
416                         return 0xA7;
417                 break;
418         case 4:
419                 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
420                         return 0x8F;
421                 break;
422         case 5:
423                 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
424                         return 0x8B;
425                 break;
426         case 6:
427                 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
428                         return 0x96;
429                 break;
430         case 7:
431                 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
432                         return 0xA5;
433                 break;
434         case 8:
435                 if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
436                         return 0x93;
437                 break;
438         case 9:
439                 if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
440                         return 0x92;
441                 break;
442         case 10:
443                 return 0x91;
444         case 11:
445                 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
446                                         ADT7462_PIN28_VOLT &&
447                     !(data->pin_cfg[0] & ADT7462_VID_INPUT))
448                         return 0x94;
449                 break;
450         case 12:
451                 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
452                                         ADT7462_PIN28_VOLT &&
453                     !(data->pin_cfg[0] & ADT7462_VID_INPUT))
454                         return 0x95;
455                 break;
456         }
457         return -ENODEV;
458 }
459
460 /* Provide labels for sysfs */
461 static const char *voltage_label(struct adt7462_data *data, int which)
462 {
463         switch (which) {
464         case 0:
465                 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
466                         return "+12V1";
467                 break;
468         case 1:
469                 switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) {
470                 case 0:
471                         return "Vccp1";
472                 case 1:
473                         return "+2.5V";
474                 case 2:
475                         return "+1.8V";
476                 case 3:
477                         return "+1.5V";
478                 }
479         case 2:
480                 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
481                         return "+12V3";
482                 break;
483         case 3:
484                 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
485                         return "+5V";
486                 break;
487         case 4:
488                 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) {
489                         if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
490                                 return "+0.9V";
491                         return "+1.25V";
492                 }
493                 break;
494         case 5:
495                 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) {
496                         if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
497                                 return "+1.8V";
498                         return "+2.5V";
499                 }
500                 break;
501         case 6:
502                 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
503                         return "+3.3V";
504                 break;
505         case 7:
506                 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
507                         return "+12V2";
508                 break;
509         case 8:
510                 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) {
511                 case 0:
512                         return "Vbatt";
513                 case 1:
514                         return "FSB_Vtt";
515                 }
516                 break;
517         case 9:
518                 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) {
519                 case 0:
520                         return "+3.3V";
521                 case 1:
522                         return "+1.2V1";
523                 }
524                 break;
525         case 10:
526                 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) {
527                 case 0:
528                         return "Vccp2";
529                 case 1:
530                         return "+2.5V";
531                 case 2:
532                         return "+1.8V";
533                 case 3:
534                         return "+1.5";
535                 }
536         case 11:
537                 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
538                                         ADT7462_PIN28_VOLT &&
539                     !(data->pin_cfg[0] & ADT7462_VID_INPUT))
540                         return "+1.5V ICH";
541                 break;
542         case 12:
543                 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
544                                         ADT7462_PIN28_VOLT &&
545                     !(data->pin_cfg[0] & ADT7462_VID_INPUT))
546                         return "+1.5V 3GPIO";
547                 break;
548         }
549         return "N/A";
550 }
551
552 /* Multipliers are actually in uV, not mV. */
553 static int voltage_multiplier(struct adt7462_data *data, int which)
554 {
555         switch (which) {
556         case 0:
557                 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
558                         return 62500;
559                 break;
560         case 1:
561                 switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) {
562                 case 0:
563                         if (data->pin_cfg[0] & ADT7462_VID_INPUT)
564                                 return 12500;
565                         return 6250;
566                 case 1:
567                         return 13000;
568                 case 2:
569                         return 9400;
570                 case 3:
571                         return 7800;
572                 }
573         case 2:
574                 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
575                         return 62500;
576                 break;
577         case 3:
578                 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
579                         return 26000;
580                 break;
581         case 4:
582                 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) {
583                         if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
584                                 return 4690;
585                         return 6500;
586                 }
587                 break;
588         case 5:
589                 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) {
590                         if (data->pin_cfg[1] & ADT7462_PIN15_INPUT)
591                                 return 9400;
592                         return 13000;
593                 }
594                 break;
595         case 6:
596                 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
597                         return 17200;
598                 break;
599         case 7:
600                 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
601                         return 62500;
602                 break;
603         case 8:
604                 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) {
605                 case 0:
606                         return 15600;
607                 case 1:
608                         return 6250;
609                 }
610                 break;
611         case 9:
612                 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) {
613                 case 0:
614                         return 17200;
615                 case 1:
616                         return 6250;
617                 }
618                 break;
619         case 10:
620                 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) {
621                 case 0:
622                         return 6250;
623                 case 1:
624                         return 13000;
625                 case 2:
626                         return 9400;
627                 case 3:
628                         return 7800;
629                 }
630         case 11:
631         case 12:
632                 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
633                                         ADT7462_PIN28_VOLT &&
634                     !(data->pin_cfg[0] & ADT7462_VID_INPUT))
635                         return 7800;
636         }
637         return 0;
638 }
639
640 static int temp_enabled(struct adt7462_data *data, int which)
641 {
642         switch (which) {
643         case 0:
644         case 2:
645                 return 1;
646         case 1:
647                 if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT)
648                         return 1;
649                 break;
650         case 3:
651                 if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT)
652                         return 1;
653                 break;
654         }
655         return 0;
656 }
657
658 static const char *temp_label(struct adt7462_data *data, int which)
659 {
660         switch (which) {
661         case 0:
662                 return "local";
663         case 1:
664                 if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT)
665                         return "remote1";
666                 break;
667         case 2:
668                 return "remote2";
669         case 3:
670                 if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT)
671                         return "remote3";
672                 break;
673         }
674         return "N/A";
675 }
676
677 /* Map Trange register values to mC */
678 #define NUM_TRANGE_VALUES       16
679 static const int trange_values[NUM_TRANGE_VALUES] = {
680         2000,
681         2500,
682         3300,
683         4000,
684         5000,
685         6700,
686         8000,
687         10000,
688         13300,
689         16000,
690         20000,
691         26700,
692         32000,
693         40000,
694         53300,
695         80000
696 };
697
698 static int find_trange_value(int trange)
699 {
700         int i;
701
702         for (i = 0; i < NUM_TRANGE_VALUES; i++)
703                 if (trange_values[i] == trange)
704                         return i;
705
706         return -ENODEV;
707 }
708
709 static struct adt7462_data *adt7462_update_device(struct device *dev)
710 {
711         struct i2c_client *client = to_i2c_client(dev);
712         struct adt7462_data *data = i2c_get_clientdata(client);
713         unsigned long local_jiffies = jiffies;
714         int i;
715
716         mutex_lock(&data->lock);
717         if (time_before(local_jiffies, data->sensors_last_updated +
718                 SENSOR_REFRESH_INTERVAL)
719                 && data->sensors_valid)
720                 goto no_sensor_update;
721
722         for (i = 0; i < ADT7462_TEMP_COUNT; i++) {
723                 /*
724                  * Reading the fractional register locks the integral
725                  * register until both have been read.
726                  */
727                 data->temp_frac[i] = i2c_smbus_read_byte_data(client,
728                                                 ADT7462_TEMP_REG(i));
729                 data->temp[i] = i2c_smbus_read_byte_data(client,
730                                                 ADT7462_TEMP_REG(i) + 1);
731         }
732
733         for (i = 0; i < ADT7462_FAN_COUNT; i++)
734                 data->fan[i] = adt7462_read_word_data(client,
735                                                 ADT7462_REG_FAN(i));
736
737         data->fan_enabled = i2c_smbus_read_byte_data(client,
738                                         ADT7462_REG_FAN_ENABLE);
739
740         for (i = 0; i < ADT7462_PWM_COUNT; i++)
741                 data->pwm[i] = i2c_smbus_read_byte_data(client,
742                                                 ADT7462_REG_PWM(i));
743
744         for (i = 0; i < ADT7462_PIN_CFG_REG_COUNT; i++)
745                 data->pin_cfg[i] = i2c_smbus_read_byte_data(client,
746                                 ADT7462_REG_PIN_CFG(i));
747
748         for (i = 0; i < ADT7462_VOLT_COUNT; i++) {
749                 int reg = ADT7462_REG_VOLT(data, i);
750                 if (!reg)
751                         data->voltages[i] = 0;
752                 else
753                         data->voltages[i] = i2c_smbus_read_byte_data(client,
754                                                                      reg);
755         }
756
757         data->alarms[0] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM1);
758         data->alarms[1] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM2);
759         data->alarms[2] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM3);
760         data->alarms[3] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM4);
761
762         data->sensors_last_updated = local_jiffies;
763         data->sensors_valid = 1;
764
765 no_sensor_update:
766         if (time_before(local_jiffies, data->limits_last_updated +
767                 LIMIT_REFRESH_INTERVAL)
768                 && data->limits_valid)
769                 goto out;
770
771         for (i = 0; i < ADT7462_TEMP_COUNT; i++) {
772                 data->temp_min[i] = i2c_smbus_read_byte_data(client,
773                                                 ADT7462_TEMP_MIN_REG(i));
774                 data->temp_max[i] = i2c_smbus_read_byte_data(client,
775                                                 ADT7462_TEMP_MAX_REG(i));
776         }
777
778         for (i = 0; i < ADT7462_FAN_COUNT; i++)
779                 data->fan_min[i] = i2c_smbus_read_byte_data(client,
780                                                 ADT7462_REG_FAN_MIN(i));
781
782         for (i = 0; i < ADT7462_VOLT_COUNT; i++) {
783                 int reg = ADT7462_REG_VOLT_MAX(data, i);
784                 data->volt_max[i] =
785                         (reg ? i2c_smbus_read_byte_data(client, reg) : 0);
786
787                 reg = ADT7462_REG_VOLT_MIN(data, i);
788                 data->volt_min[i] =
789                         (reg ? i2c_smbus_read_byte_data(client, reg) : 0);
790         }
791
792         for (i = 0; i < ADT7462_PWM_COUNT; i++) {
793                 data->pwm_min[i] = i2c_smbus_read_byte_data(client,
794                                                 ADT7462_REG_PWM_MIN(i));
795                 data->pwm_tmin[i] = i2c_smbus_read_byte_data(client,
796                                                 ADT7462_REG_PWM_TMIN(i));
797                 data->pwm_trange[i] = i2c_smbus_read_byte_data(client,
798                                                 ADT7462_REG_PWM_TRANGE(i));
799                 data->pwm_cfg[i] = i2c_smbus_read_byte_data(client,
800                                                 ADT7462_REG_PWM_CFG(i));
801         }
802
803         data->pwm_max = i2c_smbus_read_byte_data(client, ADT7462_REG_PWM_MAX);
804
805         data->cfg2 = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2);
806
807         data->limits_last_updated = local_jiffies;
808         data->limits_valid = 1;
809
810 out:
811         mutex_unlock(&data->lock);
812         return data;
813 }
814
815 static ssize_t show_temp_min(struct device *dev,
816                              struct device_attribute *devattr,
817                              char *buf)
818 {
819         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
820         struct adt7462_data *data = adt7462_update_device(dev);
821
822         if (!temp_enabled(data, attr->index))
823                 return sprintf(buf, "0\n");
824
825         return sprintf(buf, "%d\n", 1000 * (data->temp_min[attr->index] - 64));
826 }
827
828 static ssize_t set_temp_min(struct device *dev,
829                             struct device_attribute *devattr,
830                             const char *buf,
831                             size_t count)
832 {
833         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
834         struct i2c_client *client = to_i2c_client(dev);
835         struct adt7462_data *data = i2c_get_clientdata(client);
836         long temp;
837
838         if (strict_strtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
839                 return -EINVAL;
840
841         temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
842         temp = SENSORS_LIMIT(temp, 0, 255);
843
844         mutex_lock(&data->lock);
845         data->temp_min[attr->index] = temp;
846         i2c_smbus_write_byte_data(client, ADT7462_TEMP_MIN_REG(attr->index),
847                                   temp);
848         mutex_unlock(&data->lock);
849
850         return count;
851 }
852
853 static ssize_t show_temp_max(struct device *dev,
854                              struct device_attribute *devattr,
855                              char *buf)
856 {
857         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
858         struct adt7462_data *data = adt7462_update_device(dev);
859
860         if (!temp_enabled(data, attr->index))
861                 return sprintf(buf, "0\n");
862
863         return sprintf(buf, "%d\n", 1000 * (data->temp_max[attr->index] - 64));
864 }
865
866 static ssize_t set_temp_max(struct device *dev,
867                             struct device_attribute *devattr,
868                             const char *buf,
869                             size_t count)
870 {
871         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
872         struct i2c_client *client = to_i2c_client(dev);
873         struct adt7462_data *data = i2c_get_clientdata(client);
874         long temp;
875
876         if (strict_strtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
877                 return -EINVAL;
878
879         temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
880         temp = SENSORS_LIMIT(temp, 0, 255);
881
882         mutex_lock(&data->lock);
883         data->temp_max[attr->index] = temp;
884         i2c_smbus_write_byte_data(client, ADT7462_TEMP_MAX_REG(attr->index),
885                                   temp);
886         mutex_unlock(&data->lock);
887
888         return count;
889 }
890
891 static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
892                          char *buf)
893 {
894         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
895         struct adt7462_data *data = adt7462_update_device(dev);
896         u8 frac = data->temp_frac[attr->index] >> TEMP_FRAC_OFFSET;
897
898         if (!temp_enabled(data, attr->index))
899                 return sprintf(buf, "0\n");
900
901         return sprintf(buf, "%d\n", 1000 * (data->temp[attr->index] - 64) +
902                                      250 * frac);
903 }
904
905 static ssize_t show_temp_label(struct device *dev,
906                                struct device_attribute *devattr,
907                                char *buf)
908 {
909         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
910         struct adt7462_data *data = adt7462_update_device(dev);
911
912         return sprintf(buf, "%s\n", temp_label(data, attr->index));
913 }
914
915 static ssize_t show_volt_max(struct device *dev,
916                              struct device_attribute *devattr,
917                              char *buf)
918 {
919         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
920         struct adt7462_data *data = adt7462_update_device(dev);
921         int x = voltage_multiplier(data, attr->index);
922
923         x *= data->volt_max[attr->index];
924         x /= 1000; /* convert from uV to mV */
925
926         return sprintf(buf, "%d\n", x);
927 }
928
929 static ssize_t set_volt_max(struct device *dev,
930                             struct device_attribute *devattr,
931                             const char *buf,
932                             size_t count)
933 {
934         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
935         struct i2c_client *client = to_i2c_client(dev);
936         struct adt7462_data *data = i2c_get_clientdata(client);
937         int x = voltage_multiplier(data, attr->index);
938         long temp;
939
940         if (strict_strtol(buf, 10, &temp) || !x)
941                 return -EINVAL;
942
943         temp *= 1000; /* convert mV to uV */
944         temp = DIV_ROUND_CLOSEST(temp, x);
945         temp = SENSORS_LIMIT(temp, 0, 255);
946
947         mutex_lock(&data->lock);
948         data->volt_max[attr->index] = temp;
949         i2c_smbus_write_byte_data(client,
950                                   ADT7462_REG_VOLT_MAX(data, attr->index),
951                                   temp);
952         mutex_unlock(&data->lock);
953
954         return count;
955 }
956
957 static ssize_t show_volt_min(struct device *dev,
958                              struct device_attribute *devattr,
959                              char *buf)
960 {
961         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
962         struct adt7462_data *data = adt7462_update_device(dev);
963         int x = voltage_multiplier(data, attr->index);
964
965         x *= data->volt_min[attr->index];
966         x /= 1000; /* convert from uV to mV */
967
968         return sprintf(buf, "%d\n", x);
969 }
970
971 static ssize_t set_volt_min(struct device *dev,
972                             struct device_attribute *devattr,
973                             const char *buf,
974                             size_t count)
975 {
976         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
977         struct i2c_client *client = to_i2c_client(dev);
978         struct adt7462_data *data = i2c_get_clientdata(client);
979         int x = voltage_multiplier(data, attr->index);
980         long temp;
981
982         if (strict_strtol(buf, 10, &temp) || !x)
983                 return -EINVAL;
984
985         temp *= 1000; /* convert mV to uV */
986         temp = DIV_ROUND_CLOSEST(temp, x);
987         temp = SENSORS_LIMIT(temp, 0, 255);
988
989         mutex_lock(&data->lock);
990         data->volt_min[attr->index] = temp;
991         i2c_smbus_write_byte_data(client,
992                                   ADT7462_REG_VOLT_MIN(data, attr->index),
993                                   temp);
994         mutex_unlock(&data->lock);
995
996         return count;
997 }
998
999 static ssize_t show_voltage(struct device *dev,
1000                             struct device_attribute *devattr,
1001                             char *buf)
1002 {
1003         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1004         struct adt7462_data *data = adt7462_update_device(dev);
1005         int x = voltage_multiplier(data, attr->index);
1006
1007         x *= data->voltages[attr->index];
1008         x /= 1000; /* convert from uV to mV */
1009
1010         return sprintf(buf, "%d\n", x);
1011 }
1012
1013 static ssize_t show_voltage_label(struct device *dev,
1014                                   struct device_attribute *devattr,
1015                                   char *buf)
1016 {
1017         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1018         struct adt7462_data *data = adt7462_update_device(dev);
1019
1020         return sprintf(buf, "%s\n", voltage_label(data, attr->index));
1021 }
1022
1023 static ssize_t show_alarm(struct device *dev,
1024                           struct device_attribute *devattr,
1025                           char *buf)
1026 {
1027         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1028         struct adt7462_data *data = adt7462_update_device(dev);
1029         int reg = attr->index >> ADT7462_ALARM_REG_SHIFT;
1030         int mask = attr->index & ADT7462_ALARM_FLAG_MASK;
1031
1032         if (data->alarms[reg] & mask)
1033                 return sprintf(buf, "1\n");
1034         else
1035                 return sprintf(buf, "0\n");
1036 }
1037
1038 static int fan_enabled(struct adt7462_data *data, int fan)
1039 {
1040         return data->fan_enabled & (1 << fan);
1041 }
1042
1043 static ssize_t show_fan_min(struct device *dev,
1044                             struct device_attribute *devattr,
1045                             char *buf)
1046 {
1047         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1048         struct adt7462_data *data = adt7462_update_device(dev);
1049         u16 temp;
1050
1051         /* Only the MSB of the min fan period is stored... */
1052         temp = data->fan_min[attr->index];
1053         temp <<= 8;
1054
1055         if (!fan_enabled(data, attr->index) ||
1056             !FAN_DATA_VALID(temp))
1057                 return sprintf(buf, "0\n");
1058
1059         return sprintf(buf, "%d\n", FAN_PERIOD_TO_RPM(temp));
1060 }
1061
1062 static ssize_t set_fan_min(struct device *dev,
1063                            struct device_attribute *devattr,
1064                            const char *buf, size_t count)
1065 {
1066         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1067         struct i2c_client *client = to_i2c_client(dev);
1068         struct adt7462_data *data = i2c_get_clientdata(client);
1069         long temp;
1070
1071         if (strict_strtol(buf, 10, &temp) || !temp ||
1072             !fan_enabled(data, attr->index))
1073                 return -EINVAL;
1074
1075         temp = FAN_RPM_TO_PERIOD(temp);
1076         temp >>= 8;
1077         temp = SENSORS_LIMIT(temp, 1, 255);
1078
1079         mutex_lock(&data->lock);
1080         data->fan_min[attr->index] = temp;
1081         i2c_smbus_write_byte_data(client, ADT7462_REG_FAN_MIN(attr->index),
1082                                   temp);
1083         mutex_unlock(&data->lock);
1084
1085         return count;
1086 }
1087
1088 static ssize_t show_fan(struct device *dev, struct device_attribute *devattr,
1089                         char *buf)
1090 {
1091         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1092         struct adt7462_data *data = adt7462_update_device(dev);
1093
1094         if (!fan_enabled(data, attr->index) ||
1095             !FAN_DATA_VALID(data->fan[attr->index]))
1096                 return sprintf(buf, "0\n");
1097
1098         return sprintf(buf, "%d\n",
1099                        FAN_PERIOD_TO_RPM(data->fan[attr->index]));
1100 }
1101
1102 static ssize_t show_force_pwm_max(struct device *dev,
1103                                   struct device_attribute *devattr,
1104                                   char *buf)
1105 {
1106         struct adt7462_data *data = adt7462_update_device(dev);
1107         return sprintf(buf, "%d\n", (data->cfg2 & ADT7462_FSPD_MASK ? 1 : 0));
1108 }
1109
1110 static ssize_t set_force_pwm_max(struct device *dev,
1111                                  struct device_attribute *devattr,
1112                                  const char *buf,
1113                                  size_t count)
1114 {
1115         struct i2c_client *client = to_i2c_client(dev);
1116         struct adt7462_data *data = i2c_get_clientdata(client);
1117         long temp;
1118         u8 reg;
1119
1120         if (strict_strtol(buf, 10, &temp))
1121                 return -EINVAL;
1122
1123         mutex_lock(&data->lock);
1124         reg = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2);
1125         if (temp)
1126                 reg |= ADT7462_FSPD_MASK;
1127         else
1128                 reg &= ~ADT7462_FSPD_MASK;
1129         data->cfg2 = reg;
1130         i2c_smbus_write_byte_data(client, ADT7462_REG_CFG2, reg);
1131         mutex_unlock(&data->lock);
1132
1133         return count;
1134 }
1135
1136 static ssize_t show_pwm(struct device *dev, struct device_attribute *devattr,
1137                         char *buf)
1138 {
1139         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1140         struct adt7462_data *data = adt7462_update_device(dev);
1141         return sprintf(buf, "%d\n", data->pwm[attr->index]);
1142 }
1143
1144 static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr,
1145                         const char *buf, size_t count)
1146 {
1147         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1148         struct i2c_client *client = to_i2c_client(dev);
1149         struct adt7462_data *data = i2c_get_clientdata(client);
1150         long temp;
1151
1152         if (strict_strtol(buf, 10, &temp))
1153                 return -EINVAL;
1154
1155         temp = SENSORS_LIMIT(temp, 0, 255);
1156
1157         mutex_lock(&data->lock);
1158         data->pwm[attr->index] = temp;
1159         i2c_smbus_write_byte_data(client, ADT7462_REG_PWM(attr->index), temp);
1160         mutex_unlock(&data->lock);
1161
1162         return count;
1163 }
1164
1165 static ssize_t show_pwm_max(struct device *dev,
1166                             struct device_attribute *devattr,
1167                             char *buf)
1168 {
1169         struct adt7462_data *data = adt7462_update_device(dev);
1170         return sprintf(buf, "%d\n", data->pwm_max);
1171 }
1172
1173 static ssize_t set_pwm_max(struct device *dev,
1174                            struct device_attribute *devattr,
1175                            const char *buf,
1176                            size_t count)
1177 {
1178         struct i2c_client *client = to_i2c_client(dev);
1179         struct adt7462_data *data = i2c_get_clientdata(client);
1180         long temp;
1181
1182         if (strict_strtol(buf, 10, &temp))
1183                 return -EINVAL;
1184
1185         temp = SENSORS_LIMIT(temp, 0, 255);
1186
1187         mutex_lock(&data->lock);
1188         data->pwm_max = temp;
1189         i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MAX, temp);
1190         mutex_unlock(&data->lock);
1191
1192         return count;
1193 }
1194
1195 static ssize_t show_pwm_min(struct device *dev,
1196                             struct device_attribute *devattr,
1197                             char *buf)
1198 {
1199         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1200         struct adt7462_data *data = adt7462_update_device(dev);
1201         return sprintf(buf, "%d\n", data->pwm_min[attr->index]);
1202 }
1203
1204 static ssize_t set_pwm_min(struct device *dev,
1205                            struct device_attribute *devattr,
1206                            const char *buf,
1207                            size_t count)
1208 {
1209         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1210         struct i2c_client *client = to_i2c_client(dev);
1211         struct adt7462_data *data = i2c_get_clientdata(client);
1212         long temp;
1213
1214         if (strict_strtol(buf, 10, &temp))
1215                 return -EINVAL;
1216
1217         temp = SENSORS_LIMIT(temp, 0, 255);
1218
1219         mutex_lock(&data->lock);
1220         data->pwm_min[attr->index] = temp;
1221         i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MIN(attr->index),
1222                                   temp);
1223         mutex_unlock(&data->lock);
1224
1225         return count;
1226 }
1227
1228 static ssize_t show_pwm_hyst(struct device *dev,
1229                              struct device_attribute *devattr,
1230                              char *buf)
1231 {
1232         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1233         struct adt7462_data *data = adt7462_update_device(dev);
1234         return sprintf(buf, "%d\n", 1000 *
1235                       (data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK));
1236 }
1237
1238 static ssize_t set_pwm_hyst(struct device *dev,
1239                             struct device_attribute *devattr,
1240                             const char *buf,
1241                             size_t count)
1242 {
1243         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1244         struct i2c_client *client = to_i2c_client(dev);
1245         struct adt7462_data *data = i2c_get_clientdata(client);
1246         long temp;
1247
1248         if (strict_strtol(buf, 10, &temp))
1249                 return -EINVAL;
1250
1251         temp = DIV_ROUND_CLOSEST(temp, 1000);
1252         temp = SENSORS_LIMIT(temp, 0, 15);
1253
1254         /* package things up */
1255         temp &= ADT7462_PWM_HYST_MASK;
1256         temp |= data->pwm_trange[attr->index] & ADT7462_PWM_RANGE_MASK;
1257
1258         mutex_lock(&data->lock);
1259         data->pwm_trange[attr->index] = temp;
1260         i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
1261                                   temp);
1262         mutex_unlock(&data->lock);
1263
1264         return count;
1265 }
1266
1267 static ssize_t show_pwm_tmax(struct device *dev,
1268                              struct device_attribute *devattr,
1269                              char *buf)
1270 {
1271         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1272         struct adt7462_data *data = adt7462_update_device(dev);
1273
1274         /* tmax = tmin + trange */
1275         int trange = trange_values[data->pwm_trange[attr->index] >>
1276                                    ADT7462_PWM_RANGE_SHIFT];
1277         int tmin = (data->pwm_tmin[attr->index] - 64) * 1000;
1278
1279         return sprintf(buf, "%d\n", tmin + trange);
1280 }
1281
1282 static ssize_t set_pwm_tmax(struct device *dev,
1283                             struct device_attribute *devattr,
1284                             const char *buf,
1285                             size_t count)
1286 {
1287         int temp;
1288         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1289         struct i2c_client *client = to_i2c_client(dev);
1290         struct adt7462_data *data = i2c_get_clientdata(client);
1291         int tmin, trange_value;
1292         long trange;
1293
1294         if (strict_strtol(buf, 10, &trange))
1295                 return -EINVAL;
1296
1297         /* trange = tmax - tmin */
1298         tmin = (data->pwm_tmin[attr->index] - 64) * 1000;
1299         trange_value = find_trange_value(trange - tmin);
1300
1301         if (trange_value < 0)
1302                 return -EINVAL;
1303
1304         temp = trange_value << ADT7462_PWM_RANGE_SHIFT;
1305         temp |= data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK;
1306
1307         mutex_lock(&data->lock);
1308         data->pwm_trange[attr->index] = temp;
1309         i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
1310                                   temp);
1311         mutex_unlock(&data->lock);
1312
1313         return count;
1314 }
1315
1316 static ssize_t show_pwm_tmin(struct device *dev,
1317                              struct device_attribute *devattr,
1318                              char *buf)
1319 {
1320         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1321         struct adt7462_data *data = adt7462_update_device(dev);
1322         return sprintf(buf, "%d\n", 1000 * (data->pwm_tmin[attr->index] - 64));
1323 }
1324
1325 static ssize_t set_pwm_tmin(struct device *dev,
1326                             struct device_attribute *devattr,
1327                             const char *buf,
1328                             size_t count)
1329 {
1330         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1331         struct i2c_client *client = to_i2c_client(dev);
1332         struct adt7462_data *data = i2c_get_clientdata(client);
1333         long temp;
1334
1335         if (strict_strtol(buf, 10, &temp))
1336                 return -EINVAL;
1337
1338         temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
1339         temp = SENSORS_LIMIT(temp, 0, 255);
1340
1341         mutex_lock(&data->lock);
1342         data->pwm_tmin[attr->index] = temp;
1343         i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TMIN(attr->index),
1344                                   temp);
1345         mutex_unlock(&data->lock);
1346
1347         return count;
1348 }
1349
1350 static ssize_t show_pwm_auto(struct device *dev,
1351                              struct device_attribute *devattr,
1352                              char *buf)
1353 {
1354         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1355         struct adt7462_data *data = adt7462_update_device(dev);
1356         int cfg = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
1357
1358         switch (cfg) {
1359         case 4: /* off */
1360                 return sprintf(buf, "0\n");
1361         case 7: /* manual */
1362                 return sprintf(buf, "1\n");
1363         default: /* automatic */
1364                 return sprintf(buf, "2\n");
1365         }
1366 }
1367
1368 static void set_pwm_channel(struct i2c_client *client,
1369                             struct adt7462_data *data,
1370                             int which,
1371                             int value)
1372 {
1373         int temp = data->pwm_cfg[which] & ~ADT7462_PWM_CHANNEL_MASK;
1374         temp |= value << ADT7462_PWM_CHANNEL_SHIFT;
1375
1376         mutex_lock(&data->lock);
1377         data->pwm_cfg[which] = temp;
1378         i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_CFG(which), temp);
1379         mutex_unlock(&data->lock);
1380 }
1381
1382 static ssize_t set_pwm_auto(struct device *dev,
1383                             struct device_attribute *devattr,
1384                             const char *buf,
1385                             size_t count)
1386 {
1387         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1388         struct i2c_client *client = to_i2c_client(dev);
1389         struct adt7462_data *data = i2c_get_clientdata(client);
1390         long temp;
1391
1392         if (strict_strtol(buf, 10, &temp))
1393                 return -EINVAL;
1394
1395         switch (temp) {
1396         case 0: /* off */
1397                 set_pwm_channel(client, data, attr->index, 4);
1398                 return count;
1399         case 1: /* manual */
1400                 set_pwm_channel(client, data, attr->index, 7);
1401                 return count;
1402         default:
1403                 return -EINVAL;
1404         }
1405 }
1406
1407 static ssize_t show_pwm_auto_temp(struct device *dev,
1408                                   struct device_attribute *devattr,
1409                                   char *buf)
1410 {
1411         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1412         struct adt7462_data *data = adt7462_update_device(dev);
1413         int channel = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
1414
1415         switch (channel) {
1416         case 0: /* temp[1234] only */
1417         case 1:
1418         case 2:
1419         case 3:
1420                 return sprintf(buf, "%d\n", (1 << channel));
1421         case 5: /* temp1 & temp4  */
1422                 return sprintf(buf, "9\n");
1423         case 6:
1424                 return sprintf(buf, "15\n");
1425         default:
1426                 return sprintf(buf, "0\n");
1427         }
1428 }
1429
1430 static int cvt_auto_temp(int input)
1431 {
1432         if (input == 0xF)
1433                 return 6;
1434         if (input == 0x9)
1435                 return 5;
1436         if (input < 1 || !is_power_of_2(input))
1437                 return -EINVAL;
1438         return ilog2(input);
1439 }
1440
1441 static ssize_t set_pwm_auto_temp(struct device *dev,
1442                                  struct device_attribute *devattr,
1443                                  const char *buf,
1444                                  size_t count)
1445 {
1446         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1447         struct i2c_client *client = to_i2c_client(dev);
1448         struct adt7462_data *data = i2c_get_clientdata(client);
1449         long temp;
1450
1451         if (strict_strtol(buf, 10, &temp))
1452                 return -EINVAL;
1453
1454         temp = cvt_auto_temp(temp);
1455         if (temp < 0)
1456                 return temp;
1457
1458         set_pwm_channel(client, data, attr->index, temp);
1459
1460         return count;
1461 }
1462
1463 static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max,
1464                     set_temp_max, 0);
1465 static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp_max,
1466                     set_temp_max, 1);
1467 static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO, show_temp_max,
1468                     set_temp_max, 2);
1469 static SENSOR_DEVICE_ATTR(temp4_max, S_IWUSR | S_IRUGO, show_temp_max,
1470                     set_temp_max, 3);
1471
1472 static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp_min,
1473                     set_temp_min, 0);
1474 static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp_min,
1475                     set_temp_min, 1);
1476 static SENSOR_DEVICE_ATTR(temp3_min, S_IWUSR | S_IRUGO, show_temp_min,
1477                     set_temp_min, 2);
1478 static SENSOR_DEVICE_ATTR(temp4_min, S_IWUSR | S_IRUGO, show_temp_min,
1479                     set_temp_min, 3);
1480
1481 static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
1482 static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1);
1483 static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2);
1484 static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3);
1485
1486 static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_temp_label, NULL, 0);
1487 static SENSOR_DEVICE_ATTR(temp2_label, S_IRUGO, show_temp_label, NULL, 1);
1488 static SENSOR_DEVICE_ATTR(temp3_label, S_IRUGO, show_temp_label, NULL, 2);
1489 static SENSOR_DEVICE_ATTR(temp4_label, S_IRUGO, show_temp_label, NULL, 3);
1490
1491 static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL,
1492                           ADT7462_ALARM1 | ADT7462_LT_ALARM);
1493 static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL,
1494                           ADT7462_ALARM1 | ADT7462_R1T_ALARM);
1495 static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL,
1496                           ADT7462_ALARM1 | ADT7462_R2T_ALARM);
1497 static SENSOR_DEVICE_ATTR(temp4_alarm, S_IRUGO, show_alarm, NULL,
1498                           ADT7462_ALARM1 | ADT7462_R3T_ALARM);
1499
1500 static SENSOR_DEVICE_ATTR(in1_max, S_IWUSR | S_IRUGO, show_volt_max,
1501                     set_volt_max, 0);
1502 static SENSOR_DEVICE_ATTR(in2_max, S_IWUSR | S_IRUGO, show_volt_max,
1503                     set_volt_max, 1);
1504 static SENSOR_DEVICE_ATTR(in3_max, S_IWUSR | S_IRUGO, show_volt_max,
1505                     set_volt_max, 2);
1506 static SENSOR_DEVICE_ATTR(in4_max, S_IWUSR | S_IRUGO, show_volt_max,
1507                     set_volt_max, 3);
1508 static SENSOR_DEVICE_ATTR(in5_max, S_IWUSR | S_IRUGO, show_volt_max,
1509                     set_volt_max, 4);
1510 static SENSOR_DEVICE_ATTR(in6_max, S_IWUSR | S_IRUGO, show_volt_max,
1511                     set_volt_max, 5);
1512 static SENSOR_DEVICE_ATTR(in7_max, S_IWUSR | S_IRUGO, show_volt_max,
1513                     set_volt_max, 6);
1514 static SENSOR_DEVICE_ATTR(in8_max, S_IWUSR | S_IRUGO, show_volt_max,
1515                     set_volt_max, 7);
1516 static SENSOR_DEVICE_ATTR(in9_max, S_IWUSR | S_IRUGO, show_volt_max,
1517                     set_volt_max, 8);
1518 static SENSOR_DEVICE_ATTR(in10_max, S_IWUSR | S_IRUGO, show_volt_max,
1519                     set_volt_max, 9);
1520 static SENSOR_DEVICE_ATTR(in11_max, S_IWUSR | S_IRUGO, show_volt_max,
1521                     set_volt_max, 10);
1522 static SENSOR_DEVICE_ATTR(in12_max, S_IWUSR | S_IRUGO, show_volt_max,
1523                     set_volt_max, 11);
1524 static SENSOR_DEVICE_ATTR(in13_max, S_IWUSR | S_IRUGO, show_volt_max,
1525                     set_volt_max, 12);
1526
1527 static SENSOR_DEVICE_ATTR(in1_min, S_IWUSR | S_IRUGO, show_volt_min,
1528                     set_volt_min, 0);
1529 static SENSOR_DEVICE_ATTR(in2_min, S_IWUSR | S_IRUGO, show_volt_min,
1530                     set_volt_min, 1);
1531 static SENSOR_DEVICE_ATTR(in3_min, S_IWUSR | S_IRUGO, show_volt_min,
1532                     set_volt_min, 2);
1533 static SENSOR_DEVICE_ATTR(in4_min, S_IWUSR | S_IRUGO, show_volt_min,
1534                     set_volt_min, 3);
1535 static SENSOR_DEVICE_ATTR(in5_min, S_IWUSR | S_IRUGO, show_volt_min,
1536                     set_volt_min, 4);
1537 static SENSOR_DEVICE_ATTR(in6_min, S_IWUSR | S_IRUGO, show_volt_min,
1538                     set_volt_min, 5);
1539 static SENSOR_DEVICE_ATTR(in7_min, S_IWUSR | S_IRUGO, show_volt_min,
1540                     set_volt_min, 6);
1541 static SENSOR_DEVICE_ATTR(in8_min, S_IWUSR | S_IRUGO, show_volt_min,
1542                     set_volt_min, 7);
1543 static SENSOR_DEVICE_ATTR(in9_min, S_IWUSR | S_IRUGO, show_volt_min,
1544                     set_volt_min, 8);
1545 static SENSOR_DEVICE_ATTR(in10_min, S_IWUSR | S_IRUGO, show_volt_min,
1546                     set_volt_min, 9);
1547 static SENSOR_DEVICE_ATTR(in11_min, S_IWUSR | S_IRUGO, show_volt_min,
1548                     set_volt_min, 10);
1549 static SENSOR_DEVICE_ATTR(in12_min, S_IWUSR | S_IRUGO, show_volt_min,
1550                     set_volt_min, 11);
1551 static SENSOR_DEVICE_ATTR(in13_min, S_IWUSR | S_IRUGO, show_volt_min,
1552                     set_volt_min, 12);
1553
1554 static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_voltage, NULL, 0);
1555 static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_voltage, NULL, 1);
1556 static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_voltage, NULL, 2);
1557 static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_voltage, NULL, 3);
1558 static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, show_voltage, NULL, 4);
1559 static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, show_voltage, NULL, 5);
1560 static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, show_voltage, NULL, 6);
1561 static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, show_voltage, NULL, 7);
1562 static SENSOR_DEVICE_ATTR(in9_input, S_IRUGO, show_voltage, NULL, 8);
1563 static SENSOR_DEVICE_ATTR(in10_input, S_IRUGO, show_voltage, NULL, 9);
1564 static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, show_voltage, NULL, 10);
1565 static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, show_voltage, NULL, 11);
1566 static SENSOR_DEVICE_ATTR(in13_input, S_IRUGO, show_voltage, NULL, 12);
1567
1568 static SENSOR_DEVICE_ATTR(in1_label, S_IRUGO, show_voltage_label, NULL, 0);
1569 static SENSOR_DEVICE_ATTR(in2_label, S_IRUGO, show_voltage_label, NULL, 1);
1570 static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, show_voltage_label, NULL, 2);
1571 static SENSOR_DEVICE_ATTR(in4_label, S_IRUGO, show_voltage_label, NULL, 3);
1572 static SENSOR_DEVICE_ATTR(in5_label, S_IRUGO, show_voltage_label, NULL, 4);
1573 static SENSOR_DEVICE_ATTR(in6_label, S_IRUGO, show_voltage_label, NULL, 5);
1574 static SENSOR_DEVICE_ATTR(in7_label, S_IRUGO, show_voltage_label, NULL, 6);
1575 static SENSOR_DEVICE_ATTR(in8_label, S_IRUGO, show_voltage_label, NULL, 7);
1576 static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, show_voltage_label, NULL, 8);
1577 static SENSOR_DEVICE_ATTR(in10_label, S_IRUGO, show_voltage_label, NULL, 9);
1578 static SENSOR_DEVICE_ATTR(in11_label, S_IRUGO, show_voltage_label, NULL, 10);
1579 static SENSOR_DEVICE_ATTR(in12_label, S_IRUGO, show_voltage_label, NULL, 11);
1580 static SENSOR_DEVICE_ATTR(in13_label, S_IRUGO, show_voltage_label, NULL, 12);
1581
1582 static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL,
1583                           ADT7462_ALARM2 | ADT7462_V0_ALARM);
1584 static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL,
1585                           ADT7462_ALARM2 | ADT7462_V7_ALARM);
1586 static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL,
1587                           ADT7462_ALARM2 | ADT7462_V2_ALARM);
1588 static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL,
1589                           ADT7462_ALARM2 | ADT7462_V6_ALARM);
1590 static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL,
1591                           ADT7462_ALARM2 | ADT7462_V5_ALARM);
1592 static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL,
1593                           ADT7462_ALARM2 | ADT7462_V4_ALARM);
1594 static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL,
1595                           ADT7462_ALARM2 | ADT7462_V3_ALARM);
1596 static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL,
1597                           ADT7462_ALARM2 | ADT7462_V1_ALARM);
1598 static SENSOR_DEVICE_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL,
1599                           ADT7462_ALARM3 | ADT7462_V10_ALARM);
1600 static SENSOR_DEVICE_ATTR(in10_alarm, S_IRUGO, show_alarm, NULL,
1601                           ADT7462_ALARM3 | ADT7462_V9_ALARM);
1602 static SENSOR_DEVICE_ATTR(in11_alarm, S_IRUGO, show_alarm, NULL,
1603                           ADT7462_ALARM3 | ADT7462_V8_ALARM);
1604 static SENSOR_DEVICE_ATTR(in12_alarm, S_IRUGO, show_alarm, NULL,
1605                           ADT7462_ALARM3 | ADT7462_V11_ALARM);
1606 static SENSOR_DEVICE_ATTR(in13_alarm, S_IRUGO, show_alarm, NULL,
1607                           ADT7462_ALARM3 | ADT7462_V12_ALARM);
1608
1609 static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
1610                     set_fan_min, 0);
1611 static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
1612                     set_fan_min, 1);
1613 static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
1614                     set_fan_min, 2);
1615 static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
1616                     set_fan_min, 3);
1617 static SENSOR_DEVICE_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min,
1618                     set_fan_min, 4);
1619 static SENSOR_DEVICE_ATTR(fan6_min, S_IWUSR | S_IRUGO, show_fan_min,
1620                     set_fan_min, 5);
1621 static SENSOR_DEVICE_ATTR(fan7_min, S_IWUSR | S_IRUGO, show_fan_min,
1622                     set_fan_min, 6);
1623 static SENSOR_DEVICE_ATTR(fan8_min, S_IWUSR | S_IRUGO, show_fan_min,
1624                     set_fan_min, 7);
1625
1626 static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0);
1627 static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1);
1628 static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2);
1629 static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3);
1630 static SENSOR_DEVICE_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4);
1631 static SENSOR_DEVICE_ATTR(fan6_input, S_IRUGO, show_fan, NULL, 5);
1632 static SENSOR_DEVICE_ATTR(fan7_input, S_IRUGO, show_fan, NULL, 6);
1633 static SENSOR_DEVICE_ATTR(fan8_input, S_IRUGO, show_fan, NULL, 7);
1634
1635 static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL,
1636                           ADT7462_ALARM4 | ADT7462_F0_ALARM);
1637 static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL,
1638                           ADT7462_ALARM4 | ADT7462_F1_ALARM);
1639 static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL,
1640                           ADT7462_ALARM4 | ADT7462_F2_ALARM);
1641 static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL,
1642                           ADT7462_ALARM4 | ADT7462_F3_ALARM);
1643 static SENSOR_DEVICE_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL,
1644                           ADT7462_ALARM4 | ADT7462_F4_ALARM);
1645 static SENSOR_DEVICE_ATTR(fan6_alarm, S_IRUGO, show_alarm, NULL,
1646                           ADT7462_ALARM4 | ADT7462_F5_ALARM);
1647 static SENSOR_DEVICE_ATTR(fan7_alarm, S_IRUGO, show_alarm, NULL,
1648                           ADT7462_ALARM4 | ADT7462_F6_ALARM);
1649 static SENSOR_DEVICE_ATTR(fan8_alarm, S_IRUGO, show_alarm, NULL,
1650                           ADT7462_ALARM4 | ADT7462_F7_ALARM);
1651
1652 static SENSOR_DEVICE_ATTR(force_pwm_max, S_IWUSR | S_IRUGO,
1653                     show_force_pwm_max, set_force_pwm_max, 0);
1654
1655 static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 0);
1656 static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 1);
1657 static SENSOR_DEVICE_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 2);
1658 static SENSOR_DEVICE_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 3);
1659
1660 static SENSOR_DEVICE_ATTR(pwm1_auto_point1_pwm, S_IWUSR | S_IRUGO,
1661                     show_pwm_min, set_pwm_min, 0);
1662 static SENSOR_DEVICE_ATTR(pwm2_auto_point1_pwm, S_IWUSR | S_IRUGO,
1663                     show_pwm_min, set_pwm_min, 1);
1664 static SENSOR_DEVICE_ATTR(pwm3_auto_point1_pwm, S_IWUSR | S_IRUGO,
1665                     show_pwm_min, set_pwm_min, 2);
1666 static SENSOR_DEVICE_ATTR(pwm4_auto_point1_pwm, S_IWUSR | S_IRUGO,
1667                     show_pwm_min, set_pwm_min, 3);
1668
1669 static SENSOR_DEVICE_ATTR(pwm1_auto_point2_pwm, S_IWUSR | S_IRUGO,
1670                     show_pwm_max, set_pwm_max, 0);
1671 static SENSOR_DEVICE_ATTR(pwm2_auto_point2_pwm, S_IWUSR | S_IRUGO,
1672                     show_pwm_max, set_pwm_max, 1);
1673 static SENSOR_DEVICE_ATTR(pwm3_auto_point2_pwm, S_IWUSR | S_IRUGO,
1674                     show_pwm_max, set_pwm_max, 2);
1675 static SENSOR_DEVICE_ATTR(pwm4_auto_point2_pwm, S_IWUSR | S_IRUGO,
1676                     show_pwm_max, set_pwm_max, 3);
1677
1678 static SENSOR_DEVICE_ATTR(temp1_auto_point1_hyst, S_IWUSR | S_IRUGO,
1679                     show_pwm_hyst, set_pwm_hyst, 0);
1680 static SENSOR_DEVICE_ATTR(temp2_auto_point1_hyst, S_IWUSR | S_IRUGO,
1681                     show_pwm_hyst, set_pwm_hyst, 1);
1682 static SENSOR_DEVICE_ATTR(temp3_auto_point1_hyst, S_IWUSR | S_IRUGO,
1683                     show_pwm_hyst, set_pwm_hyst, 2);
1684 static SENSOR_DEVICE_ATTR(temp4_auto_point1_hyst, S_IWUSR | S_IRUGO,
1685                     show_pwm_hyst, set_pwm_hyst, 3);
1686
1687 static SENSOR_DEVICE_ATTR(temp1_auto_point2_hyst, S_IWUSR | S_IRUGO,
1688                     show_pwm_hyst, set_pwm_hyst, 0);
1689 static SENSOR_DEVICE_ATTR(temp2_auto_point2_hyst, S_IWUSR | S_IRUGO,
1690                     show_pwm_hyst, set_pwm_hyst, 1);
1691 static SENSOR_DEVICE_ATTR(temp3_auto_point2_hyst, S_IWUSR | S_IRUGO,
1692                     show_pwm_hyst, set_pwm_hyst, 2);
1693 static SENSOR_DEVICE_ATTR(temp4_auto_point2_hyst, S_IWUSR | S_IRUGO,
1694                     show_pwm_hyst, set_pwm_hyst, 3);
1695
1696 static SENSOR_DEVICE_ATTR(temp1_auto_point1_temp, S_IWUSR | S_IRUGO,
1697                     show_pwm_tmin, set_pwm_tmin, 0);
1698 static SENSOR_DEVICE_ATTR(temp2_auto_point1_temp, S_IWUSR | S_IRUGO,
1699                     show_pwm_tmin, set_pwm_tmin, 1);
1700 static SENSOR_DEVICE_ATTR(temp3_auto_point1_temp, S_IWUSR | S_IRUGO,
1701                     show_pwm_tmin, set_pwm_tmin, 2);
1702 static SENSOR_DEVICE_ATTR(temp4_auto_point1_temp, S_IWUSR | S_IRUGO,
1703                     show_pwm_tmin, set_pwm_tmin, 3);
1704
1705 static SENSOR_DEVICE_ATTR(temp1_auto_point2_temp, S_IWUSR | S_IRUGO,
1706                     show_pwm_tmax, set_pwm_tmax, 0);
1707 static SENSOR_DEVICE_ATTR(temp2_auto_point2_temp, S_IWUSR | S_IRUGO,
1708                     show_pwm_tmax, set_pwm_tmax, 1);
1709 static SENSOR_DEVICE_ATTR(temp3_auto_point2_temp, S_IWUSR | S_IRUGO,
1710                     show_pwm_tmax, set_pwm_tmax, 2);
1711 static SENSOR_DEVICE_ATTR(temp4_auto_point2_temp, S_IWUSR | S_IRUGO,
1712                     show_pwm_tmax, set_pwm_tmax, 3);
1713
1714 static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1715                     set_pwm_auto, 0);
1716 static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1717                     set_pwm_auto, 1);
1718 static SENSOR_DEVICE_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1719                     set_pwm_auto, 2);
1720 static SENSOR_DEVICE_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1721                     set_pwm_auto, 3);
1722
1723 static SENSOR_DEVICE_ATTR(pwm1_auto_channels_temp, S_IWUSR | S_IRUGO,
1724                     show_pwm_auto_temp, set_pwm_auto_temp, 0);
1725 static SENSOR_DEVICE_ATTR(pwm2_auto_channels_temp, S_IWUSR | S_IRUGO,
1726                     show_pwm_auto_temp, set_pwm_auto_temp, 1);
1727 static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO,
1728                     show_pwm_auto_temp, set_pwm_auto_temp, 2);
1729 static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO,
1730                     show_pwm_auto_temp, set_pwm_auto_temp, 3);
1731
1732 static struct attribute *adt7462_attr[] =
1733 {
1734         &sensor_dev_attr_temp1_max.dev_attr.attr,
1735         &sensor_dev_attr_temp2_max.dev_attr.attr,
1736         &sensor_dev_attr_temp3_max.dev_attr.attr,
1737         &sensor_dev_attr_temp4_max.dev_attr.attr,
1738
1739         &sensor_dev_attr_temp1_min.dev_attr.attr,
1740         &sensor_dev_attr_temp2_min.dev_attr.attr,
1741         &sensor_dev_attr_temp3_min.dev_attr.attr,
1742         &sensor_dev_attr_temp4_min.dev_attr.attr,
1743
1744         &sensor_dev_attr_temp1_input.dev_attr.attr,
1745         &sensor_dev_attr_temp2_input.dev_attr.attr,
1746         &sensor_dev_attr_temp3_input.dev_attr.attr,
1747         &sensor_dev_attr_temp4_input.dev_attr.attr,
1748
1749         &sensor_dev_attr_temp1_label.dev_attr.attr,
1750         &sensor_dev_attr_temp2_label.dev_attr.attr,
1751         &sensor_dev_attr_temp3_label.dev_attr.attr,
1752         &sensor_dev_attr_temp4_label.dev_attr.attr,
1753
1754         &sensor_dev_attr_temp1_alarm.dev_attr.attr,
1755         &sensor_dev_attr_temp2_alarm.dev_attr.attr,
1756         &sensor_dev_attr_temp3_alarm.dev_attr.attr,
1757         &sensor_dev_attr_temp4_alarm.dev_attr.attr,
1758
1759         &sensor_dev_attr_in1_max.dev_attr.attr,
1760         &sensor_dev_attr_in2_max.dev_attr.attr,
1761         &sensor_dev_attr_in3_max.dev_attr.attr,
1762         &sensor_dev_attr_in4_max.dev_attr.attr,
1763         &sensor_dev_attr_in5_max.dev_attr.attr,
1764         &sensor_dev_attr_in6_max.dev_attr.attr,
1765         &sensor_dev_attr_in7_max.dev_attr.attr,
1766         &sensor_dev_attr_in8_max.dev_attr.attr,
1767         &sensor_dev_attr_in9_max.dev_attr.attr,
1768         &sensor_dev_attr_in10_max.dev_attr.attr,
1769         &sensor_dev_attr_in11_max.dev_attr.attr,
1770         &sensor_dev_attr_in12_max.dev_attr.attr,
1771         &sensor_dev_attr_in13_max.dev_attr.attr,
1772
1773         &sensor_dev_attr_in1_min.dev_attr.attr,
1774         &sensor_dev_attr_in2_min.dev_attr.attr,
1775         &sensor_dev_attr_in3_min.dev_attr.attr,
1776         &sensor_dev_attr_in4_min.dev_attr.attr,
1777         &sensor_dev_attr_in5_min.dev_attr.attr,
1778         &sensor_dev_attr_in6_min.dev_attr.attr,
1779         &sensor_dev_attr_in7_min.dev_attr.attr,
1780         &sensor_dev_attr_in8_min.dev_attr.attr,
1781         &sensor_dev_attr_in9_min.dev_attr.attr,
1782         &sensor_dev_attr_in10_min.dev_attr.attr,
1783         &sensor_dev_attr_in11_min.dev_attr.attr,
1784         &sensor_dev_attr_in12_min.dev_attr.attr,
1785         &sensor_dev_attr_in13_min.dev_attr.attr,
1786
1787         &sensor_dev_attr_in1_input.dev_attr.attr,
1788         &sensor_dev_attr_in2_input.dev_attr.attr,
1789         &sensor_dev_attr_in3_input.dev_attr.attr,
1790         &sensor_dev_attr_in4_input.dev_attr.attr,
1791         &sensor_dev_attr_in5_input.dev_attr.attr,
1792         &sensor_dev_attr_in6_input.dev_attr.attr,
1793         &sensor_dev_attr_in7_input.dev_attr.attr,
1794         &sensor_dev_attr_in8_input.dev_attr.attr,
1795         &sensor_dev_attr_in9_input.dev_attr.attr,
1796         &sensor_dev_attr_in10_input.dev_attr.attr,
1797         &sensor_dev_attr_in11_input.dev_attr.attr,
1798         &sensor_dev_attr_in12_input.dev_attr.attr,
1799         &sensor_dev_attr_in13_input.dev_attr.attr,
1800
1801         &sensor_dev_attr_in1_label.dev_attr.attr,
1802         &sensor_dev_attr_in2_label.dev_attr.attr,
1803         &sensor_dev_attr_in3_label.dev_attr.attr,
1804         &sensor_dev_attr_in4_label.dev_attr.attr,
1805         &sensor_dev_attr_in5_label.dev_attr.attr,
1806         &sensor_dev_attr_in6_label.dev_attr.attr,
1807         &sensor_dev_attr_in7_label.dev_attr.attr,
1808         &sensor_dev_attr_in8_label.dev_attr.attr,
1809         &sensor_dev_attr_in9_label.dev_attr.attr,
1810         &sensor_dev_attr_in10_label.dev_attr.attr,
1811         &sensor_dev_attr_in11_label.dev_attr.attr,
1812         &sensor_dev_attr_in12_label.dev_attr.attr,
1813         &sensor_dev_attr_in13_label.dev_attr.attr,
1814
1815         &sensor_dev_attr_in1_alarm.dev_attr.attr,
1816         &sensor_dev_attr_in2_alarm.dev_attr.attr,
1817         &sensor_dev_attr_in3_alarm.dev_attr.attr,
1818         &sensor_dev_attr_in4_alarm.dev_attr.attr,
1819         &sensor_dev_attr_in5_alarm.dev_attr.attr,
1820         &sensor_dev_attr_in6_alarm.dev_attr.attr,
1821         &sensor_dev_attr_in7_alarm.dev_attr.attr,
1822         &sensor_dev_attr_in8_alarm.dev_attr.attr,
1823         &sensor_dev_attr_in9_alarm.dev_attr.attr,
1824         &sensor_dev_attr_in10_alarm.dev_attr.attr,
1825         &sensor_dev_attr_in11_alarm.dev_attr.attr,
1826         &sensor_dev_attr_in12_alarm.dev_attr.attr,
1827         &sensor_dev_attr_in13_alarm.dev_attr.attr,
1828
1829         &sensor_dev_attr_fan1_min.dev_attr.attr,
1830         &sensor_dev_attr_fan2_min.dev_attr.attr,
1831         &sensor_dev_attr_fan3_min.dev_attr.attr,
1832         &sensor_dev_attr_fan4_min.dev_attr.attr,
1833         &sensor_dev_attr_fan5_min.dev_attr.attr,
1834         &sensor_dev_attr_fan6_min.dev_attr.attr,
1835         &sensor_dev_attr_fan7_min.dev_attr.attr,
1836         &sensor_dev_attr_fan8_min.dev_attr.attr,
1837
1838         &sensor_dev_attr_fan1_input.dev_attr.attr,
1839         &sensor_dev_attr_fan2_input.dev_attr.attr,
1840         &sensor_dev_attr_fan3_input.dev_attr.attr,
1841         &sensor_dev_attr_fan4_input.dev_attr.attr,
1842         &sensor_dev_attr_fan5_input.dev_attr.attr,
1843         &sensor_dev_attr_fan6_input.dev_attr.attr,
1844         &sensor_dev_attr_fan7_input.dev_attr.attr,
1845         &sensor_dev_attr_fan8_input.dev_attr.attr,
1846
1847         &sensor_dev_attr_fan1_alarm.dev_attr.attr,
1848         &sensor_dev_attr_fan2_alarm.dev_attr.attr,
1849         &sensor_dev_attr_fan3_alarm.dev_attr.attr,
1850         &sensor_dev_attr_fan4_alarm.dev_attr.attr,
1851         &sensor_dev_attr_fan5_alarm.dev_attr.attr,
1852         &sensor_dev_attr_fan6_alarm.dev_attr.attr,
1853         &sensor_dev_attr_fan7_alarm.dev_attr.attr,
1854         &sensor_dev_attr_fan8_alarm.dev_attr.attr,
1855
1856         &sensor_dev_attr_force_pwm_max.dev_attr.attr,
1857         &sensor_dev_attr_pwm1.dev_attr.attr,
1858         &sensor_dev_attr_pwm2.dev_attr.attr,
1859         &sensor_dev_attr_pwm3.dev_attr.attr,
1860         &sensor_dev_attr_pwm4.dev_attr.attr,
1861
1862         &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1863         &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
1864         &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1865         &sensor_dev_attr_pwm4_auto_point1_pwm.dev_attr.attr,
1866
1867         &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1868         &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
1869         &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1870         &sensor_dev_attr_pwm4_auto_point2_pwm.dev_attr.attr,
1871
1872         &sensor_dev_attr_temp1_auto_point1_hyst.dev_attr.attr,
1873         &sensor_dev_attr_temp2_auto_point1_hyst.dev_attr.attr,
1874         &sensor_dev_attr_temp3_auto_point1_hyst.dev_attr.attr,
1875         &sensor_dev_attr_temp4_auto_point1_hyst.dev_attr.attr,
1876
1877         &sensor_dev_attr_temp1_auto_point2_hyst.dev_attr.attr,
1878         &sensor_dev_attr_temp2_auto_point2_hyst.dev_attr.attr,
1879         &sensor_dev_attr_temp3_auto_point2_hyst.dev_attr.attr,
1880         &sensor_dev_attr_temp4_auto_point2_hyst.dev_attr.attr,
1881
1882         &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr,
1883         &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr,
1884         &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr,
1885         &sensor_dev_attr_temp4_auto_point1_temp.dev_attr.attr,
1886
1887         &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr,
1888         &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr,
1889         &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr,
1890         &sensor_dev_attr_temp4_auto_point2_temp.dev_attr.attr,
1891
1892         &sensor_dev_attr_pwm1_enable.dev_attr.attr,
1893         &sensor_dev_attr_pwm2_enable.dev_attr.attr,
1894         &sensor_dev_attr_pwm3_enable.dev_attr.attr,
1895         &sensor_dev_attr_pwm4_enable.dev_attr.attr,
1896
1897         &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1898         &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
1899         &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1900         &sensor_dev_attr_pwm4_auto_channels_temp.dev_attr.attr,
1901         NULL
1902 };
1903
1904 /* Return 0 if detection is successful, -ENODEV otherwise */
1905 static int adt7462_detect(struct i2c_client *client, int kind,
1906                           struct i2c_board_info *info)
1907 {
1908         struct i2c_adapter *adapter = client->adapter;
1909
1910         if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1911                 return -ENODEV;
1912
1913         if (kind <= 0) {
1914                 int vendor, device, revision;
1915
1916                 vendor = i2c_smbus_read_byte_data(client, ADT7462_REG_VENDOR);
1917                 if (vendor != ADT7462_VENDOR)
1918                         return -ENODEV;
1919
1920                 device = i2c_smbus_read_byte_data(client, ADT7462_REG_DEVICE);
1921                 if (device != ADT7462_DEVICE)
1922                         return -ENODEV;
1923
1924                 revision = i2c_smbus_read_byte_data(client,
1925                                                     ADT7462_REG_REVISION);
1926                 if (revision != ADT7462_REVISION)
1927                         return -ENODEV;
1928         } else
1929                 dev_dbg(&adapter->dev, "detection forced\n");
1930
1931         strlcpy(info->type, "adt7462", I2C_NAME_SIZE);
1932
1933         return 0;
1934 }
1935
1936 static int adt7462_probe(struct i2c_client *client,
1937                          const struct i2c_device_id *id)
1938 {
1939         struct adt7462_data *data;
1940         int err;
1941
1942         data = kzalloc(sizeof(struct adt7462_data), GFP_KERNEL);
1943         if (!data) {
1944                 err = -ENOMEM;
1945                 goto exit;
1946         }
1947
1948         i2c_set_clientdata(client, data);
1949         mutex_init(&data->lock);
1950
1951         dev_info(&client->dev, "%s chip found\n", client->name);
1952
1953         /* Register sysfs hooks */
1954         data->attrs.attrs = adt7462_attr;
1955         err = sysfs_create_group(&client->dev.kobj, &data->attrs);
1956         if (err)
1957                 goto exit_free;
1958
1959         data->hwmon_dev = hwmon_device_register(&client->dev);
1960         if (IS_ERR(data->hwmon_dev)) {
1961                 err = PTR_ERR(data->hwmon_dev);
1962                 goto exit_remove;
1963         }
1964
1965         return 0;
1966
1967 exit_remove:
1968         sysfs_remove_group(&client->dev.kobj, &data->attrs);
1969 exit_free:
1970         kfree(data);
1971 exit:
1972         return err;
1973 }
1974
1975 static int adt7462_remove(struct i2c_client *client)
1976 {
1977         struct adt7462_data *data = i2c_get_clientdata(client);
1978
1979         hwmon_device_unregister(data->hwmon_dev);
1980         sysfs_remove_group(&client->dev.kobj, &data->attrs);
1981         kfree(data);
1982         return 0;
1983 }
1984
1985 static int __init adt7462_init(void)
1986 {
1987         return i2c_add_driver(&adt7462_driver);
1988 }
1989
1990 static void __exit adt7462_exit(void)
1991 {
1992         i2c_del_driver(&adt7462_driver);
1993 }
1994
1995 MODULE_AUTHOR("Darrick J. Wong <djwong@us.ibm.com>");
1996 MODULE_DESCRIPTION("ADT7462 driver");
1997 MODULE_LICENSE("GPL");
1998
1999 module_init(adt7462_init);
2000 module_exit(adt7462_exit);