Merge branch 'release' of master.kernel.org:/home/ftp/pub/scm/linux/kernel/git/aegl...
[linux-2.6] / drivers / hwmon / w83791d.c
1 /*
2     w83791d.c - Part of lm_sensors, Linux kernel modules for hardware
3                 monitoring
4
5     Copyright (C) 2006 Charles Spirakis <bezaur@gmail.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., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22 /*
23     Supports following chips:
24
25     Chip        #vin    #fanin  #pwm    #temp   wchipid vendid  i2c     ISA
26     w83791d     10      5       3       3       0x71    0x5ca3  yes     no
27
28     The w83791d chip appears to be part way between the 83781d and the
29     83792d. Thus, this file is derived from both the w83792d.c and
30     w83781d.c files.
31
32     The w83791g chip is the same as the w83791d but lead-free.
33 */
34
35 #include <linux/module.h>
36 #include <linux/init.h>
37 #include <linux/slab.h>
38 #include <linux/i2c.h>
39 #include <linux/hwmon.h>
40 #include <linux/hwmon-vid.h>
41 #include <linux/hwmon-sysfs.h>
42 #include <linux/err.h>
43 #include <linux/mutex.h>
44
45 #define NUMBER_OF_VIN           10
46 #define NUMBER_OF_FANIN         5
47 #define NUMBER_OF_TEMPIN        3
48
49 /* Addresses to scan */
50 static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f, I2C_CLIENT_END };
51
52 /* Insmod parameters */
53 I2C_CLIENT_INSMOD_1(w83791d);
54 I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: "
55                         "{bus, clientaddr, subclientaddr1, subclientaddr2}");
56
57 static int reset;
58 module_param(reset, bool, 0);
59 MODULE_PARM_DESC(reset, "Set to one to force a hardware chip reset");
60
61 static int init;
62 module_param(init, bool, 0);
63 MODULE_PARM_DESC(init, "Set to one to force extra software initialization");
64
65 /* The W83791D registers */
66 static const u8 W83791D_REG_IN[NUMBER_OF_VIN] = {
67         0x20,                   /* VCOREA in DataSheet */
68         0x21,                   /* VINR0 in DataSheet */
69         0x22,                   /* +3.3VIN in DataSheet */
70         0x23,                   /* VDD5V in DataSheet */
71         0x24,                   /* +12VIN in DataSheet */
72         0x25,                   /* -12VIN in DataSheet */
73         0x26,                   /* -5VIN in DataSheet */
74         0xB0,                   /* 5VSB in DataSheet */
75         0xB1,                   /* VBAT in DataSheet */
76         0xB2                    /* VINR1 in DataSheet */
77 };
78
79 static const u8 W83791D_REG_IN_MAX[NUMBER_OF_VIN] = {
80         0x2B,                   /* VCOREA High Limit in DataSheet */
81         0x2D,                   /* VINR0 High Limit in DataSheet */
82         0x2F,                   /* +3.3VIN High Limit in DataSheet */
83         0x31,                   /* VDD5V High Limit in DataSheet */
84         0x33,                   /* +12VIN High Limit in DataSheet */
85         0x35,                   /* -12VIN High Limit in DataSheet */
86         0x37,                   /* -5VIN High Limit in DataSheet */
87         0xB4,                   /* 5VSB High Limit in DataSheet */
88         0xB6,                   /* VBAT High Limit in DataSheet */
89         0xB8                    /* VINR1 High Limit in DataSheet */
90 };
91 static const u8 W83791D_REG_IN_MIN[NUMBER_OF_VIN] = {
92         0x2C,                   /* VCOREA Low Limit in DataSheet */
93         0x2E,                   /* VINR0 Low Limit in DataSheet */
94         0x30,                   /* +3.3VIN Low Limit in DataSheet */
95         0x32,                   /* VDD5V Low Limit in DataSheet */
96         0x34,                   /* +12VIN Low Limit in DataSheet */
97         0x36,                   /* -12VIN Low Limit in DataSheet */
98         0x38,                   /* -5VIN Low Limit in DataSheet */
99         0xB5,                   /* 5VSB Low Limit in DataSheet */
100         0xB7,                   /* VBAT Low Limit in DataSheet */
101         0xB9                    /* VINR1 Low Limit in DataSheet */
102 };
103 static const u8 W83791D_REG_FAN[NUMBER_OF_FANIN] = {
104         0x28,                   /* FAN 1 Count in DataSheet */
105         0x29,                   /* FAN 2 Count in DataSheet */
106         0x2A,                   /* FAN 3 Count in DataSheet */
107         0xBA,                   /* FAN 4 Count in DataSheet */
108         0xBB,                   /* FAN 5 Count in DataSheet */
109 };
110 static const u8 W83791D_REG_FAN_MIN[NUMBER_OF_FANIN] = {
111         0x3B,                   /* FAN 1 Count Low Limit in DataSheet */
112         0x3C,                   /* FAN 2 Count Low Limit in DataSheet */
113         0x3D,                   /* FAN 3 Count Low Limit in DataSheet */
114         0xBC,                   /* FAN 4 Count Low Limit in DataSheet */
115         0xBD,                   /* FAN 5 Count Low Limit in DataSheet */
116 };
117
118 static const u8 W83791D_REG_FAN_CFG[2] = {
119         0x84,                   /* FAN 1/2 configuration */
120         0x95,                   /* FAN 3 configuration */
121 };
122
123 static const u8 W83791D_REG_FAN_DIV[3] = {
124         0x47,                   /* contains FAN1 and FAN2 Divisor */
125         0x4b,                   /* contains FAN3 Divisor */
126         0x5C,                   /* contains FAN4 and FAN5 Divisor */
127 };
128
129 #define W83791D_REG_BANK                0x4E
130 #define W83791D_REG_TEMP2_CONFIG        0xC2
131 #define W83791D_REG_TEMP3_CONFIG        0xCA
132
133 static const u8 W83791D_REG_TEMP1[3] = {
134         0x27,                   /* TEMP 1 in DataSheet */
135         0x39,                   /* TEMP 1 Over in DataSheet */
136         0x3A,                   /* TEMP 1 Hyst in DataSheet */
137 };
138
139 static const u8 W83791D_REG_TEMP_ADD[2][6] = {
140         {0xC0,                  /* TEMP 2 in DataSheet */
141          0xC1,                  /* TEMP 2(0.5 deg) in DataSheet */
142          0xC5,                  /* TEMP 2 Over High part in DataSheet */
143          0xC6,                  /* TEMP 2 Over Low part in DataSheet */
144          0xC3,                  /* TEMP 2 Thyst High part in DataSheet */
145          0xC4},                 /* TEMP 2 Thyst Low part in DataSheet */
146         {0xC8,                  /* TEMP 3 in DataSheet */
147          0xC9,                  /* TEMP 3(0.5 deg) in DataSheet */
148          0xCD,                  /* TEMP 3 Over High part in DataSheet */
149          0xCE,                  /* TEMP 3 Over Low part in DataSheet */
150          0xCB,                  /* TEMP 3 Thyst High part in DataSheet */
151          0xCC}                  /* TEMP 3 Thyst Low part in DataSheet */
152 };
153
154 #define W83791D_REG_BEEP_CONFIG         0x4D
155
156 static const u8 W83791D_REG_BEEP_CTRL[3] = {
157         0x56,                   /* BEEP Control Register 1 */
158         0x57,                   /* BEEP Control Register 2 */
159         0xA3,                   /* BEEP Control Register 3 */
160 };
161
162 #define W83791D_REG_CONFIG              0x40
163 #define W83791D_REG_VID_FANDIV          0x47
164 #define W83791D_REG_DID_VID4            0x49
165 #define W83791D_REG_WCHIPID             0x58
166 #define W83791D_REG_CHIPMAN             0x4F
167 #define W83791D_REG_PIN                 0x4B
168 #define W83791D_REG_I2C_SUBADDR         0x4A
169
170 #define W83791D_REG_ALARM1 0xA9 /* realtime status register1 */
171 #define W83791D_REG_ALARM2 0xAA /* realtime status register2 */
172 #define W83791D_REG_ALARM3 0xAB /* realtime status register3 */
173
174 #define W83791D_REG_VBAT                0x5D
175 #define W83791D_REG_I2C_ADDR            0x48
176
177 /* The SMBus locks itself. The Winbond W83791D has a bank select register
178    (index 0x4e), but the driver only accesses registers in bank 0. Since
179    we don't switch banks, we don't need any special code to handle
180    locking access between bank switches */
181 static inline int w83791d_read(struct i2c_client *client, u8 reg)
182 {
183         return i2c_smbus_read_byte_data(client, reg);
184 }
185
186 static inline int w83791d_write(struct i2c_client *client, u8 reg, u8 value)
187 {
188         return i2c_smbus_write_byte_data(client, reg, value);
189 }
190
191 /* The analog voltage inputs have 16mV LSB. Since the sysfs output is
192    in mV as would be measured on the chip input pin, need to just
193    multiply/divide by 16 to translate from/to register values. */
194 #define IN_TO_REG(val)          (SENSORS_LIMIT((((val) + 8) / 16), 0, 255))
195 #define IN_FROM_REG(val)        ((val) * 16)
196
197 static u8 fan_to_reg(long rpm, int div)
198 {
199         if (rpm == 0)
200                 return 255;
201         rpm = SENSORS_LIMIT(rpm, 1, 1000000);
202         return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1, 254);
203 }
204
205 #define FAN_FROM_REG(val,div)   ((val) == 0   ? -1 : \
206                                 ((val) == 255 ? 0 : \
207                                         1350000 / ((val) * (div))))
208
209 /* for temp1 which is 8-bit resolution, LSB = 1 degree Celsius */
210 #define TEMP1_FROM_REG(val)     ((val) * 1000)
211 #define TEMP1_TO_REG(val)       ((val) <= -128000 ? -128 : \
212                                  (val) >= 127000 ? 127 : \
213                                  (val) < 0 ? ((val) - 500) / 1000 : \
214                                  ((val) + 500) / 1000)
215
216 /* for temp2 and temp3 which are 9-bit resolution, LSB = 0.5 degree Celsius
217    Assumes the top 8 bits are the integral amount and the bottom 8 bits
218    are the fractional amount. Since we only have 0.5 degree resolution,
219    the bottom 7 bits will always be zero */
220 #define TEMP23_FROM_REG(val)    ((val) / 128 * 500)
221 #define TEMP23_TO_REG(val)      ((val) <= -128000 ? 0x8000 : \
222                                  (val) >= 127500 ? 0x7F80 : \
223                                  (val) < 0 ? ((val) - 250) / 500 * 128 : \
224                                  ((val) + 250) / 500 * 128)
225
226
227 #define BEEP_MASK_TO_REG(val)           ((val) & 0xffffff)
228 #define BEEP_MASK_FROM_REG(val)         ((val) & 0xffffff)
229
230 #define DIV_FROM_REG(val)               (1 << (val))
231
232 static u8 div_to_reg(int nr, long val)
233 {
234         int i;
235         int max;
236
237         /* first three fan's divisor max out at 8, rest max out at 128 */
238         max = (nr < 3) ? 8 : 128;
239         val = SENSORS_LIMIT(val, 1, max) >> 1;
240         for (i = 0; i < 7; i++) {
241                 if (val == 0)
242                         break;
243                 val >>= 1;
244         }
245         return (u8) i;
246 }
247
248 struct w83791d_data {
249         struct i2c_client client;
250         struct class_device *class_dev;
251         struct mutex update_lock;
252
253         char valid;                     /* !=0 if following fields are valid */
254         unsigned long last_updated;     /* In jiffies */
255
256         /* array of 2 pointers to subclients */
257         struct i2c_client *lm75[2];
258
259         /* volts */
260         u8 in[NUMBER_OF_VIN];           /* Register value */
261         u8 in_max[NUMBER_OF_VIN];       /* Register value */
262         u8 in_min[NUMBER_OF_VIN];       /* Register value */
263
264         /* fans */
265         u8 fan[NUMBER_OF_FANIN];        /* Register value */
266         u8 fan_min[NUMBER_OF_FANIN];    /* Register value */
267         u8 fan_div[NUMBER_OF_FANIN];    /* Register encoding, shifted right */
268
269         /* Temperature sensors */
270
271         s8 temp1[3];            /* current, over, thyst */
272         s16 temp_add[2][3];     /* fixed point value. Top 8 bits are the
273                                    integral part, bottom 8 bits are the
274                                    fractional part. We only use the top
275                                    9 bits as the resolution is only
276                                    to the 0.5 degree C...
277                                    two sensors with three values
278                                    (cur, over, hyst)  */
279
280         /* Misc */
281         u32 alarms;             /* realtime status register encoding,combined */
282         u8 beep_enable;         /* Global beep enable */
283         u32 beep_mask;          /* Mask off specific beeps */
284         u8 vid;                 /* Register encoding, combined */
285         u8 vrm;                 /* hwmon-vid */
286 };
287
288 static int w83791d_attach_adapter(struct i2c_adapter *adapter);
289 static int w83791d_detect(struct i2c_adapter *adapter, int address, int kind);
290 static int w83791d_detach_client(struct i2c_client *client);
291
292 static int w83791d_read(struct i2c_client *client, u8 register);
293 static int w83791d_write(struct i2c_client *client, u8 register, u8 value);
294 static struct w83791d_data *w83791d_update_device(struct device *dev);
295
296 #ifdef DEBUG
297 static void w83791d_print_debug(struct w83791d_data *data, struct device *dev);
298 #endif
299
300 static void w83791d_init_client(struct i2c_client *client);
301
302 static struct i2c_driver w83791d_driver = {
303         .driver = {
304                 .name = "w83791d",
305         },
306         .attach_adapter = w83791d_attach_adapter,
307         .detach_client = w83791d_detach_client,
308 };
309
310 /* following are the sysfs callback functions */
311 #define show_in_reg(reg) \
312 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
313                         char *buf) \
314 { \
315         struct sensor_device_attribute *sensor_attr = \
316                                                 to_sensor_dev_attr(attr); \
317         struct w83791d_data *data = w83791d_update_device(dev); \
318         int nr = sensor_attr->index; \
319         return sprintf(buf,"%d\n", IN_FROM_REG(data->reg[nr])); \
320 }
321
322 show_in_reg(in);
323 show_in_reg(in_min);
324 show_in_reg(in_max);
325
326 #define store_in_reg(REG, reg) \
327 static ssize_t store_in_##reg(struct device *dev, \
328                                 struct device_attribute *attr, \
329                                 const char *buf, size_t count) \
330 { \
331         struct sensor_device_attribute *sensor_attr = \
332                                                 to_sensor_dev_attr(attr); \
333         struct i2c_client *client = to_i2c_client(dev); \
334         struct w83791d_data *data = i2c_get_clientdata(client); \
335         unsigned long val = simple_strtoul(buf, NULL, 10); \
336         int nr = sensor_attr->index; \
337          \
338         mutex_lock(&data->update_lock); \
339         data->in_##reg[nr] = IN_TO_REG(val); \
340         w83791d_write(client, W83791D_REG_IN_##REG[nr], data->in_##reg[nr]); \
341         mutex_unlock(&data->update_lock); \
342          \
343         return count; \
344 }
345 store_in_reg(MIN, min);
346 store_in_reg(MAX, max);
347
348 static struct sensor_device_attribute sda_in_input[] = {
349         SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
350         SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
351         SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
352         SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
353         SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
354         SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
355         SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
356         SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
357         SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
358         SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
359 };
360
361 static struct sensor_device_attribute sda_in_min[] = {
362         SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
363         SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
364         SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
365         SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
366         SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
367         SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
368         SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
369         SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
370         SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
371         SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
372 };
373
374 static struct sensor_device_attribute sda_in_max[] = {
375         SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
376         SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
377         SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
378         SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
379         SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
380         SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
381         SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
382         SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
383         SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
384         SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
385 };
386
387 #define show_fan_reg(reg) \
388 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
389                                 char *buf) \
390 { \
391         struct sensor_device_attribute *sensor_attr = \
392                                                 to_sensor_dev_attr(attr); \
393         struct w83791d_data *data = w83791d_update_device(dev); \
394         int nr = sensor_attr->index; \
395         return sprintf(buf,"%d\n", \
396                 FAN_FROM_REG(data->reg[nr], DIV_FROM_REG(data->fan_div[nr]))); \
397 }
398
399 show_fan_reg(fan);
400 show_fan_reg(fan_min);
401
402 static ssize_t store_fan_min(struct device *dev, struct device_attribute *attr,
403                                 const char *buf, size_t count)
404 {
405         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
406         struct i2c_client *client = to_i2c_client(dev);
407         struct w83791d_data *data = i2c_get_clientdata(client);
408         unsigned long val = simple_strtoul(buf, NULL, 10);
409         int nr = sensor_attr->index;
410
411         mutex_lock(&data->update_lock);
412         data->fan_min[nr] = fan_to_reg(val, DIV_FROM_REG(data->fan_div[nr]));
413         w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
414         mutex_unlock(&data->update_lock);
415
416         return count;
417 }
418
419 static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
420                                 char *buf)
421 {
422         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
423         int nr = sensor_attr->index;
424         struct w83791d_data *data = w83791d_update_device(dev);
425         return sprintf(buf, "%u\n", DIV_FROM_REG(data->fan_div[nr]));
426 }
427
428 /* Note: we save and restore the fan minimum here, because its value is
429    determined in part by the fan divisor.  This follows the principle of
430    least suprise; the user doesn't expect the fan minimum to change just
431    because the divisor changed. */
432 static ssize_t store_fan_div(struct device *dev, struct device_attribute *attr,
433                                 const char *buf, size_t count)
434 {
435         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
436         struct i2c_client *client = to_i2c_client(dev);
437         struct w83791d_data *data = i2c_get_clientdata(client);
438         int nr = sensor_attr->index;
439         unsigned long min;
440         u8 tmp_fan_div;
441         u8 fan_div_reg;
442         int indx = 0;
443         u8 keep_mask = 0;
444         u8 new_shift = 0;
445
446         /* Save fan_min */
447         min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr]));
448
449         mutex_lock(&data->update_lock);
450         data->fan_div[nr] = div_to_reg(nr, simple_strtoul(buf, NULL, 10));
451
452         switch (nr) {
453         case 0:
454                 indx = 0;
455                 keep_mask = 0xcf;
456                 new_shift = 4;
457                 break;
458         case 1:
459                 indx = 0;
460                 keep_mask = 0x3f;
461                 new_shift = 6;
462                 break;
463         case 2:
464                 indx = 1;
465                 keep_mask = 0x3f;
466                 new_shift = 6;
467                 break;
468         case 3:
469                 indx = 2;
470                 keep_mask = 0xf8;
471                 new_shift = 0;
472                 break;
473         case 4:
474                 indx = 2;
475                 keep_mask = 0x8f;
476                 new_shift = 4;
477                 break;
478 #ifdef DEBUG
479         default:
480                 dev_warn(dev, "store_fan_div: Unexpected nr seen: %d\n", nr);
481                 count = -EINVAL;
482                 goto err_exit;
483 #endif
484         }
485
486         fan_div_reg = w83791d_read(client, W83791D_REG_FAN_DIV[indx])
487                         & keep_mask;
488         tmp_fan_div = (data->fan_div[nr] << new_shift) & ~keep_mask;
489
490         w83791d_write(client, W83791D_REG_FAN_DIV[indx],
491                                 fan_div_reg | tmp_fan_div);
492
493         /* Restore fan_min */
494         data->fan_min[nr] = fan_to_reg(min, DIV_FROM_REG(data->fan_div[nr]));
495         w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
496
497 #ifdef DEBUG
498 err_exit:
499 #endif
500         mutex_unlock(&data->update_lock);
501
502         return count;
503 }
504
505 static struct sensor_device_attribute sda_fan_input[] = {
506         SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
507         SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
508         SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
509         SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
510         SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
511 };
512
513 static struct sensor_device_attribute sda_fan_min[] = {
514         SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO,
515                         show_fan_min, store_fan_min, 0),
516         SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO,
517                         show_fan_min, store_fan_min, 1),
518         SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO,
519                         show_fan_min, store_fan_min, 2),
520         SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO,
521                         show_fan_min, store_fan_min, 3),
522         SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO,
523                         show_fan_min, store_fan_min, 4),
524 };
525
526 static struct sensor_device_attribute sda_fan_div[] = {
527         SENSOR_ATTR(fan1_div, S_IWUSR | S_IRUGO,
528                         show_fan_div, store_fan_div, 0),
529         SENSOR_ATTR(fan2_div, S_IWUSR | S_IRUGO,
530                         show_fan_div, store_fan_div, 1),
531         SENSOR_ATTR(fan3_div, S_IWUSR | S_IRUGO,
532                         show_fan_div, store_fan_div, 2),
533         SENSOR_ATTR(fan4_div, S_IWUSR | S_IRUGO,
534                         show_fan_div, store_fan_div, 3),
535         SENSOR_ATTR(fan5_div, S_IWUSR | S_IRUGO,
536                         show_fan_div, store_fan_div, 4),
537 };
538
539 /* read/write the temperature1, includes measured value and limits */
540 static ssize_t show_temp1(struct device *dev, struct device_attribute *devattr,
541                                 char *buf)
542 {
543         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
544         struct w83791d_data *data = w83791d_update_device(dev);
545         return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp1[attr->index]));
546 }
547
548 static ssize_t store_temp1(struct device *dev, struct device_attribute *devattr,
549                                 const char *buf, size_t count)
550 {
551         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
552         struct i2c_client *client = to_i2c_client(dev);
553         struct w83791d_data *data = i2c_get_clientdata(client);
554         long val = simple_strtol(buf, NULL, 10);
555         int nr = attr->index;
556
557         mutex_lock(&data->update_lock);
558         data->temp1[nr] = TEMP1_TO_REG(val);
559         w83791d_write(client, W83791D_REG_TEMP1[nr], data->temp1[nr]);
560         mutex_unlock(&data->update_lock);
561         return count;
562 }
563
564 /* read/write temperature2-3, includes measured value and limits */
565 static ssize_t show_temp23(struct device *dev, struct device_attribute *devattr,
566                                 char *buf)
567 {
568         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
569         struct w83791d_data *data = w83791d_update_device(dev);
570         int nr = attr->nr;
571         int index = attr->index;
572         return sprintf(buf, "%d\n", TEMP23_FROM_REG(data->temp_add[nr][index]));
573 }
574
575 static ssize_t store_temp23(struct device *dev,
576                                 struct device_attribute *devattr,
577                                 const char *buf, size_t count)
578 {
579         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
580         struct i2c_client *client = to_i2c_client(dev);
581         struct w83791d_data *data = i2c_get_clientdata(client);
582         long val = simple_strtol(buf, NULL, 10);
583         int nr = attr->nr;
584         int index = attr->index;
585
586         mutex_lock(&data->update_lock);
587         data->temp_add[nr][index] = TEMP23_TO_REG(val);
588         w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2],
589                                 data->temp_add[nr][index] >> 8);
590         w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2 + 1],
591                                 data->temp_add[nr][index] & 0x80);
592         mutex_unlock(&data->update_lock);
593
594         return count;
595 }
596
597 static struct sensor_device_attribute_2 sda_temp_input[] = {
598         SENSOR_ATTR_2(temp1_input, S_IRUGO, show_temp1, NULL, 0, 0),
599         SENSOR_ATTR_2(temp2_input, S_IRUGO, show_temp23, NULL, 0, 0),
600         SENSOR_ATTR_2(temp3_input, S_IRUGO, show_temp23, NULL, 1, 0),
601 };
602
603 static struct sensor_device_attribute_2 sda_temp_max[] = {
604         SENSOR_ATTR_2(temp1_max, S_IRUGO | S_IWUSR,
605                         show_temp1, store_temp1, 0, 1),
606         SENSOR_ATTR_2(temp2_max, S_IRUGO | S_IWUSR,
607                         show_temp23, store_temp23, 0, 1),
608         SENSOR_ATTR_2(temp3_max, S_IRUGO | S_IWUSR,
609                         show_temp23, store_temp23, 1, 1),
610 };
611
612 static struct sensor_device_attribute_2 sda_temp_max_hyst[] = {
613         SENSOR_ATTR_2(temp1_max_hyst, S_IRUGO | S_IWUSR,
614                         show_temp1, store_temp1, 0, 2),
615         SENSOR_ATTR_2(temp2_max_hyst, S_IRUGO | S_IWUSR,
616                         show_temp23, store_temp23, 0, 2),
617         SENSOR_ATTR_2(temp3_max_hyst, S_IRUGO | S_IWUSR,
618                         show_temp23, store_temp23, 1, 2),
619 };
620
621
622 /* get reatime status of all sensors items: voltage, temp, fan */
623 static ssize_t show_alarms_reg(struct device *dev,
624                                 struct device_attribute *attr, char *buf)
625 {
626         struct w83791d_data *data = w83791d_update_device(dev);
627         return sprintf(buf, "%u\n", data->alarms);
628 }
629
630 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
631
632 /* Beep control */
633
634 #define GLOBAL_BEEP_ENABLE_SHIFT        15
635 #define GLOBAL_BEEP_ENABLE_MASK         (1 << GLOBAL_BEEP_ENABLE_SHIFT)
636
637 static ssize_t show_beep_enable(struct device *dev,
638                                 struct device_attribute *attr, char *buf)
639 {
640         struct w83791d_data *data = w83791d_update_device(dev);
641         return sprintf(buf, "%d\n", data->beep_enable);
642 }
643
644 static ssize_t show_beep_mask(struct device *dev,
645                                 struct device_attribute *attr, char *buf)
646 {
647         struct w83791d_data *data = w83791d_update_device(dev);
648         return sprintf(buf, "%d\n", BEEP_MASK_FROM_REG(data->beep_mask));
649 }
650
651
652 static ssize_t store_beep_mask(struct device *dev,
653                                 struct device_attribute *attr,
654                                 const char *buf, size_t count)
655 {
656         struct i2c_client *client = to_i2c_client(dev);
657         struct w83791d_data *data = i2c_get_clientdata(client);
658         long val = simple_strtol(buf, NULL, 10);
659         int i;
660
661         mutex_lock(&data->update_lock);
662
663         /* The beep_enable state overrides any enabling request from
664            the masks */
665         data->beep_mask = BEEP_MASK_TO_REG(val) & ~GLOBAL_BEEP_ENABLE_MASK;
666         data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
667
668         val = data->beep_mask;
669
670         for (i = 0; i < 3; i++) {
671                 w83791d_write(client, W83791D_REG_BEEP_CTRL[i], (val & 0xff));
672                 val >>= 8;
673         }
674
675         mutex_unlock(&data->update_lock);
676
677         return count;
678 }
679
680 static ssize_t store_beep_enable(struct device *dev,
681                                 struct device_attribute *attr,
682                                 const char *buf, size_t count)
683 {
684         struct i2c_client *client = to_i2c_client(dev);
685         struct w83791d_data *data = i2c_get_clientdata(client);
686         long val = simple_strtol(buf, NULL, 10);
687
688         mutex_lock(&data->update_lock);
689
690         data->beep_enable = val ? 1 : 0;
691
692         /* Keep the full mask value in sync with the current enable */
693         data->beep_mask &= ~GLOBAL_BEEP_ENABLE_MASK;
694         data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
695
696         /* The global control is in the second beep control register
697            so only need to update that register */
698         val = (data->beep_mask >> 8) & 0xff;
699
700         w83791d_write(client, W83791D_REG_BEEP_CTRL[1], val);
701
702         mutex_unlock(&data->update_lock);
703
704         return count;
705 }
706
707 static struct sensor_device_attribute sda_beep_ctrl[] = {
708         SENSOR_ATTR(beep_enable, S_IRUGO | S_IWUSR,
709                         show_beep_enable, store_beep_enable, 0),
710         SENSOR_ATTR(beep_mask, S_IRUGO | S_IWUSR,
711                         show_beep_mask, store_beep_mask, 1)
712 };
713
714 /* cpu voltage regulation information */
715 static ssize_t show_vid_reg(struct device *dev,
716                                 struct device_attribute *attr, char *buf)
717 {
718         struct w83791d_data *data = w83791d_update_device(dev);
719         return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
720 }
721
722 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
723
724 static ssize_t show_vrm_reg(struct device *dev,
725                                 struct device_attribute *attr, char *buf)
726 {
727         struct w83791d_data *data = w83791d_update_device(dev);
728         return sprintf(buf, "%d\n", data->vrm);
729 }
730
731 static ssize_t store_vrm_reg(struct device *dev,
732                                 struct device_attribute *attr,
733                                 const char *buf, size_t count)
734 {
735         struct i2c_client *client = to_i2c_client(dev);
736         struct w83791d_data *data = i2c_get_clientdata(client);
737         unsigned long val = simple_strtoul(buf, NULL, 10);
738
739         /* No lock needed as vrm is internal to the driver
740            (not read from a chip register) and so is not
741            updated in w83791d_update_device() */
742         data->vrm = val;
743
744         return count;
745 }
746
747 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
748
749 #define IN_UNIT_ATTRS(X) \
750         &sda_in_input[X].dev_attr.attr, \
751         &sda_in_min[X].dev_attr.attr,   \
752         &sda_in_max[X].dev_attr.attr
753
754 #define FAN_UNIT_ATTRS(X) \
755         &sda_fan_input[X].dev_attr.attr,        \
756         &sda_fan_min[X].dev_attr.attr,          \
757         &sda_fan_div[X].dev_attr.attr
758
759 #define TEMP_UNIT_ATTRS(X) \
760         &sda_temp_input[X].dev_attr.attr,       \
761         &sda_temp_max[X].dev_attr.attr,         \
762         &sda_temp_max_hyst[X].dev_attr.attr
763
764 static struct attribute *w83791d_attributes[] = {
765         IN_UNIT_ATTRS(0),
766         IN_UNIT_ATTRS(1),
767         IN_UNIT_ATTRS(2),
768         IN_UNIT_ATTRS(3),
769         IN_UNIT_ATTRS(4),
770         IN_UNIT_ATTRS(5),
771         IN_UNIT_ATTRS(6),
772         IN_UNIT_ATTRS(7),
773         IN_UNIT_ATTRS(8),
774         IN_UNIT_ATTRS(9),
775         FAN_UNIT_ATTRS(0),
776         FAN_UNIT_ATTRS(1),
777         FAN_UNIT_ATTRS(2),
778         FAN_UNIT_ATTRS(3),
779         FAN_UNIT_ATTRS(4),
780         TEMP_UNIT_ATTRS(0),
781         TEMP_UNIT_ATTRS(1),
782         TEMP_UNIT_ATTRS(2),
783         &dev_attr_alarms.attr,
784         &sda_beep_ctrl[0].dev_attr.attr,
785         &sda_beep_ctrl[1].dev_attr.attr,
786         &dev_attr_cpu0_vid.attr,
787         &dev_attr_vrm.attr,
788         NULL
789 };
790
791 static const struct attribute_group w83791d_group = {
792         .attrs = w83791d_attributes,
793 };
794
795 /* This function is called when:
796      * w83791d_driver is inserted (when this module is loaded), for each
797        available adapter
798      * when a new adapter is inserted (and w83791d_driver is still present) */
799 static int w83791d_attach_adapter(struct i2c_adapter *adapter)
800 {
801         if (!(adapter->class & I2C_CLASS_HWMON))
802                 return 0;
803         return i2c_probe(adapter, &addr_data, w83791d_detect);
804 }
805
806
807 static int w83791d_create_subclient(struct i2c_adapter *adapter,
808                                 struct i2c_client *client, int addr,
809                                 struct i2c_client **sub_cli)
810 {
811         int err;
812         struct i2c_client *sub_client;
813
814         (*sub_cli) = sub_client =
815                         kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
816         if (!(sub_client)) {
817                 return -ENOMEM;
818         }
819         sub_client->addr = 0x48 + addr;
820         i2c_set_clientdata(sub_client, NULL);
821         sub_client->adapter = adapter;
822         sub_client->driver = &w83791d_driver;
823         strlcpy(sub_client->name, "w83791d subclient", I2C_NAME_SIZE);
824         if ((err = i2c_attach_client(sub_client))) {
825                 dev_err(&client->dev, "subclient registration "
826                         "at address 0x%x failed\n", sub_client->addr);
827                 kfree(sub_client);
828                 return err;
829         }
830         return 0;
831 }
832
833
834 static int w83791d_detect_subclients(struct i2c_adapter *adapter, int address,
835                                 int kind, struct i2c_client *client)
836 {
837         struct w83791d_data *data = i2c_get_clientdata(client);
838         int i, id, err;
839         u8 val;
840
841         id = i2c_adapter_id(adapter);
842         if (force_subclients[0] == id && force_subclients[1] == address) {
843                 for (i = 2; i <= 3; i++) {
844                         if (force_subclients[i] < 0x48 ||
845                             force_subclients[i] > 0x4f) {
846                                 dev_err(&client->dev,
847                                         "invalid subclient "
848                                         "address %d; must be 0x48-0x4f\n",
849                                         force_subclients[i]);
850                                 err = -ENODEV;
851                                 goto error_sc_0;
852                         }
853                 }
854                 w83791d_write(client, W83791D_REG_I2C_SUBADDR,
855                                         (force_subclients[2] & 0x07) |
856                                         ((force_subclients[3] & 0x07) << 4));
857         }
858
859         val = w83791d_read(client, W83791D_REG_I2C_SUBADDR);
860         if (!(val & 0x08)) {
861                 err = w83791d_create_subclient(adapter, client,
862                                                 val & 0x7, &data->lm75[0]);
863                 if (err < 0)
864                         goto error_sc_0;
865         }
866         if (!(val & 0x80)) {
867                 if ((data->lm75[0] != NULL) &&
868                                 ((val & 0x7) == ((val >> 4) & 0x7))) {
869                         dev_err(&client->dev,
870                                 "duplicate addresses 0x%x, "
871                                 "use force_subclient\n",
872                                 data->lm75[0]->addr);
873                         err = -ENODEV;
874                         goto error_sc_1;
875                 }
876                 err = w83791d_create_subclient(adapter, client,
877                                         (val >> 4) & 0x7, &data->lm75[1]);
878                 if (err < 0)
879                         goto error_sc_1;
880         }
881
882         return 0;
883
884 /* Undo inits in case of errors */
885
886 error_sc_1:
887         if (data->lm75[0] != NULL) {
888                 i2c_detach_client(data->lm75[0]);
889                 kfree(data->lm75[0]);
890         }
891 error_sc_0:
892         return err;
893 }
894
895
896 static int w83791d_detect(struct i2c_adapter *adapter, int address, int kind)
897 {
898         struct i2c_client *client;
899         struct device *dev;
900         struct w83791d_data *data;
901         int i, val1, val2;
902         int err = 0;
903         const char *client_name = "";
904
905         if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
906                 goto error0;
907         }
908
909         /* OK. For now, we presume we have a valid client. We now create the
910            client structure, even though we cannot fill it completely yet.
911            But it allows us to access w83791d_{read,write}_value. */
912         if (!(data = kzalloc(sizeof(struct w83791d_data), GFP_KERNEL))) {
913                 err = -ENOMEM;
914                 goto error0;
915         }
916
917         client = &data->client;
918         dev = &client->dev;
919         i2c_set_clientdata(client, data);
920         client->addr = address;
921         client->adapter = adapter;
922         client->driver = &w83791d_driver;
923         mutex_init(&data->update_lock);
924
925         /* Now, we do the remaining detection. */
926
927         /* The w83791d may be stuck in some other bank than bank 0. This may
928            make reading other information impossible. Specify a force=...
929            parameter, and the Winbond will be reset to the right bank. */
930         if (kind < 0) {
931                 if (w83791d_read(client, W83791D_REG_CONFIG) & 0x80) {
932                         dev_dbg(dev, "Detection failed at step 1\n");
933                         goto error1;
934                 }
935                 val1 = w83791d_read(client, W83791D_REG_BANK);
936                 val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
937                 /* Check for Winbond ID if in bank 0 */
938                 if (!(val1 & 0x07)) {
939                         /* yes it is Bank0 */
940                         if (((!(val1 & 0x80)) && (val2 != 0xa3)) ||
941                             ((val1 & 0x80) && (val2 != 0x5c))) {
942                                 dev_dbg(dev, "Detection failed at step 2\n");
943                                 goto error1;
944                         }
945                 }
946                 /* If Winbond chip, address of chip and W83791D_REG_I2C_ADDR
947                    should match */
948                 if (w83791d_read(client, W83791D_REG_I2C_ADDR) != address) {
949                         dev_dbg(dev, "Detection failed at step 3\n");
950                         goto error1;
951                 }
952         }
953
954         /* We either have a force parameter or we have reason to
955            believe it is a Winbond chip. Either way, we want bank 0 and
956            Vendor ID high byte */
957         val1 = w83791d_read(client, W83791D_REG_BANK) & 0x78;
958         w83791d_write(client, W83791D_REG_BANK, val1 | 0x80);
959
960         /* Verify it is a Winbond w83791d */
961         if (kind <= 0) {
962                 /* get vendor ID */
963                 val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
964                 if (val2 != 0x5c) {     /* the vendor is NOT Winbond */
965                         dev_dbg(dev, "Detection failed at step 4\n");
966                         goto error1;
967                 }
968                 val1 = w83791d_read(client, W83791D_REG_WCHIPID);
969                 if (val1 == 0x71) {
970                         kind = w83791d;
971                 } else {
972                         if (kind == 0)
973                                 dev_warn(dev,
974                                         "w83791d: Ignoring 'force' parameter "
975                                         "for unknown chip at adapter %d, "
976                                         "address 0x%02x\n",
977                                         i2c_adapter_id(adapter), address);
978                         goto error1;
979                 }
980         }
981
982         if (kind == w83791d) {
983                 client_name = "w83791d";
984         } else {
985                 dev_err(dev, "w83791d: Internal error: unknown kind (%d)?!?",
986                         kind);
987                 goto error1;
988         }
989
990 #ifdef DEBUG
991         val1 = w83791d_read(client, W83791D_REG_DID_VID4);
992         dev_dbg(dev, "Device ID version: %d.%d (0x%02x)\n",
993                         (val1 >> 5) & 0x07, (val1 >> 1) & 0x0f, val1);
994 #endif
995
996         /* Fill in the remaining client fields and put into the global list */
997         strlcpy(client->name, client_name, I2C_NAME_SIZE);
998
999         /* Tell the I2C layer a new client has arrived */
1000         if ((err = i2c_attach_client(client)))
1001                 goto error1;
1002
1003         if ((err = w83791d_detect_subclients(adapter, address, kind, client)))
1004                 goto error2;
1005
1006         /* Initialize the chip */
1007         w83791d_init_client(client);
1008
1009         /* If the fan_div is changed, make sure there is a rational
1010            fan_min in place */
1011         for (i = 0; i < NUMBER_OF_FANIN; i++) {
1012                 data->fan_min[i] = w83791d_read(client, W83791D_REG_FAN_MIN[i]);
1013         }
1014
1015         /* Register sysfs hooks */
1016         if ((err = sysfs_create_group(&client->dev.kobj, &w83791d_group)))
1017                 goto error3;
1018
1019         /* Everything is ready, now register the working device */
1020         data->class_dev = hwmon_device_register(dev);
1021         if (IS_ERR(data->class_dev)) {
1022                 err = PTR_ERR(data->class_dev);
1023                 goto error4;
1024         }
1025
1026         return 0;
1027
1028 error4:
1029         sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1030 error3:
1031         if (data->lm75[0] != NULL) {
1032                 i2c_detach_client(data->lm75[0]);
1033                 kfree(data->lm75[0]);
1034         }
1035         if (data->lm75[1] != NULL) {
1036                 i2c_detach_client(data->lm75[1]);
1037                 kfree(data->lm75[1]);
1038         }
1039 error2:
1040         i2c_detach_client(client);
1041 error1:
1042         kfree(data);
1043 error0:
1044         return err;
1045 }
1046
1047 static int w83791d_detach_client(struct i2c_client *client)
1048 {
1049         struct w83791d_data *data = i2c_get_clientdata(client);
1050         int err;
1051
1052         /* main client */
1053         if (data) {
1054                 hwmon_device_unregister(data->class_dev);
1055                 sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1056         }
1057
1058         if ((err = i2c_detach_client(client)))
1059                 return err;
1060
1061         /* main client */
1062         if (data)
1063                 kfree(data);
1064         /* subclient */
1065         else
1066                 kfree(client);
1067
1068         return 0;
1069 }
1070
1071 static void w83791d_init_client(struct i2c_client *client)
1072 {
1073         struct w83791d_data *data = i2c_get_clientdata(client);
1074         u8 tmp;
1075         u8 old_beep;
1076
1077         /* The difference between reset and init is that reset
1078            does a hard reset of the chip via index 0x40, bit 7,
1079            but init simply forces certain registers to have "sane"
1080            values. The hope is that the BIOS has done the right
1081            thing (which is why the default is reset=0, init=0),
1082            but if not, reset is the hard hammer and init
1083            is the soft mallet both of which are trying to whack
1084            things into place...
1085            NOTE: The data sheet makes a distinction between
1086            "power on defaults" and "reset by MR". As far as I can tell,
1087            the hard reset puts everything into a power-on state so I'm
1088            not sure what "reset by MR" means or how it can happen.
1089            */
1090         if (reset || init) {
1091                 /* keep some BIOS settings when we... */
1092                 old_beep = w83791d_read(client, W83791D_REG_BEEP_CONFIG);
1093
1094                 if (reset) {
1095                         /* ... reset the chip and ... */
1096                         w83791d_write(client, W83791D_REG_CONFIG, 0x80);
1097                 }
1098
1099                 /* ... disable power-on abnormal beep */
1100                 w83791d_write(client, W83791D_REG_BEEP_CONFIG, old_beep | 0x80);
1101
1102                 /* disable the global beep (not done by hard reset) */
1103                 tmp = w83791d_read(client, W83791D_REG_BEEP_CTRL[1]);
1104                 w83791d_write(client, W83791D_REG_BEEP_CTRL[1], tmp & 0xef);
1105
1106                 if (init) {
1107                         /* Make sure monitoring is turned on for add-ons */
1108                         tmp = w83791d_read(client, W83791D_REG_TEMP2_CONFIG);
1109                         if (tmp & 1) {
1110                                 w83791d_write(client, W83791D_REG_TEMP2_CONFIG,
1111                                         tmp & 0xfe);
1112                         }
1113
1114                         tmp = w83791d_read(client, W83791D_REG_TEMP3_CONFIG);
1115                         if (tmp & 1) {
1116                                 w83791d_write(client, W83791D_REG_TEMP3_CONFIG,
1117                                         tmp & 0xfe);
1118                         }
1119
1120                         /* Start monitoring */
1121                         tmp = w83791d_read(client, W83791D_REG_CONFIG) & 0xf7;
1122                         w83791d_write(client, W83791D_REG_CONFIG, tmp | 0x01);
1123                 }
1124         }
1125
1126         data->vrm = vid_which_vrm();
1127 }
1128
1129 static struct w83791d_data *w83791d_update_device(struct device *dev)
1130 {
1131         struct i2c_client *client = to_i2c_client(dev);
1132         struct w83791d_data *data = i2c_get_clientdata(client);
1133         int i, j;
1134         u8 reg_array_tmp[3];
1135
1136         mutex_lock(&data->update_lock);
1137
1138         if (time_after(jiffies, data->last_updated + (HZ * 3))
1139                         || !data->valid) {
1140                 dev_dbg(dev, "Starting w83791d device update\n");
1141
1142                 /* Update the voltages measured value and limits */
1143                 for (i = 0; i < NUMBER_OF_VIN; i++) {
1144                         data->in[i] = w83791d_read(client,
1145                                                 W83791D_REG_IN[i]);
1146                         data->in_max[i] = w83791d_read(client,
1147                                                 W83791D_REG_IN_MAX[i]);
1148                         data->in_min[i] = w83791d_read(client,
1149                                                 W83791D_REG_IN_MIN[i]);
1150                 }
1151
1152                 /* Update the fan counts and limits */
1153                 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1154                         /* Update the Fan measured value and limits */
1155                         data->fan[i] = w83791d_read(client,
1156                                                 W83791D_REG_FAN[i]);
1157                         data->fan_min[i] = w83791d_read(client,
1158                                                 W83791D_REG_FAN_MIN[i]);
1159                 }
1160
1161                 /* Update the fan divisor */
1162                 for (i = 0; i < 3; i++) {
1163                         reg_array_tmp[i] = w83791d_read(client,
1164                                                 W83791D_REG_FAN_DIV[i]);
1165                 }
1166                 data->fan_div[0] = (reg_array_tmp[0] >> 4) & 0x03;
1167                 data->fan_div[1] = (reg_array_tmp[0] >> 6) & 0x03;
1168                 data->fan_div[2] = (reg_array_tmp[1] >> 6) & 0x03;
1169                 data->fan_div[3] = reg_array_tmp[2] & 0x07;
1170                 data->fan_div[4] = (reg_array_tmp[2] >> 4) & 0x07;
1171
1172                 /* Update the first temperature sensor */
1173                 for (i = 0; i < 3; i++) {
1174                         data->temp1[i] = w83791d_read(client,
1175                                                 W83791D_REG_TEMP1[i]);
1176                 }
1177
1178                 /* Update the rest of the temperature sensors */
1179                 for (i = 0; i < 2; i++) {
1180                         for (j = 0; j < 3; j++) {
1181                                 data->temp_add[i][j] =
1182                                         (w83791d_read(client,
1183                                         W83791D_REG_TEMP_ADD[i][j * 2]) << 8) |
1184                                         w83791d_read(client,
1185                                         W83791D_REG_TEMP_ADD[i][j * 2 + 1]);
1186                         }
1187                 }
1188
1189                 /* Update the realtime status */
1190                 data->alarms =
1191                         w83791d_read(client, W83791D_REG_ALARM1) +
1192                         (w83791d_read(client, W83791D_REG_ALARM2) << 8) +
1193                         (w83791d_read(client, W83791D_REG_ALARM3) << 16);
1194
1195                 /* Update the beep configuration information */
1196                 data->beep_mask =
1197                         w83791d_read(client, W83791D_REG_BEEP_CTRL[0]) +
1198                         (w83791d_read(client, W83791D_REG_BEEP_CTRL[1]) << 8) +
1199                         (w83791d_read(client, W83791D_REG_BEEP_CTRL[2]) << 16);
1200
1201                 /* Extract global beep enable flag */
1202                 data->beep_enable =
1203                         (data->beep_mask >> GLOBAL_BEEP_ENABLE_SHIFT) & 0x01;
1204
1205                 /* Update the cpu voltage information */
1206                 i = w83791d_read(client, W83791D_REG_VID_FANDIV);
1207                 data->vid = i & 0x0f;
1208                 data->vid |= (w83791d_read(client, W83791D_REG_DID_VID4) & 0x01)
1209                                 << 4;
1210
1211                 data->last_updated = jiffies;
1212                 data->valid = 1;
1213         }
1214
1215         mutex_unlock(&data->update_lock);
1216
1217 #ifdef DEBUG
1218         w83791d_print_debug(data, dev);
1219 #endif
1220
1221         return data;
1222 }
1223
1224 #ifdef DEBUG
1225 static void w83791d_print_debug(struct w83791d_data *data, struct device *dev)
1226 {
1227         int i = 0, j = 0;
1228
1229         dev_dbg(dev, "======Start of w83791d debug values======\n");
1230         dev_dbg(dev, "%d set of Voltages: ===>\n", NUMBER_OF_VIN);
1231         for (i = 0; i < NUMBER_OF_VIN; i++) {
1232                 dev_dbg(dev, "vin[%d] is:     0x%02x\n", i, data->in[i]);
1233                 dev_dbg(dev, "vin[%d] min is: 0x%02x\n", i, data->in_min[i]);
1234                 dev_dbg(dev, "vin[%d] max is: 0x%02x\n", i, data->in_max[i]);
1235         }
1236         dev_dbg(dev, "%d set of Fan Counts/Divisors: ===>\n", NUMBER_OF_FANIN);
1237         for (i = 0; i < NUMBER_OF_FANIN; i++) {
1238                 dev_dbg(dev, "fan[%d] is:     0x%02x\n", i, data->fan[i]);
1239                 dev_dbg(dev, "fan[%d] min is: 0x%02x\n", i, data->fan_min[i]);
1240                 dev_dbg(dev, "fan_div[%d] is: 0x%02x\n", i, data->fan_div[i]);
1241         }
1242
1243         /* temperature math is signed, but only print out the
1244            bits that matter */
1245         dev_dbg(dev, "%d set of Temperatures: ===>\n", NUMBER_OF_TEMPIN);
1246         for (i = 0; i < 3; i++) {
1247                 dev_dbg(dev, "temp1[%d] is: 0x%02x\n", i, (u8) data->temp1[i]);
1248         }
1249         for (i = 0; i < 2; i++) {
1250                 for (j = 0; j < 3; j++) {
1251                         dev_dbg(dev, "temp_add[%d][%d] is: 0x%04x\n", i, j,
1252                                 (u16) data->temp_add[i][j]);
1253                 }
1254         }
1255
1256         dev_dbg(dev, "Misc Information: ===>\n");
1257         dev_dbg(dev, "alarm is:     0x%08x\n", data->alarms);
1258         dev_dbg(dev, "beep_mask is: 0x%08x\n", data->beep_mask);
1259         dev_dbg(dev, "beep_enable is: %d\n", data->beep_enable);
1260         dev_dbg(dev, "vid is: 0x%02x\n", data->vid);
1261         dev_dbg(dev, "vrm is: 0x%02x\n", data->vrm);
1262         dev_dbg(dev, "=======End of w83791d debug values========\n");
1263         dev_dbg(dev, "\n");
1264 }
1265 #endif
1266
1267 static int __init sensors_w83791d_init(void)
1268 {
1269         return i2c_add_driver(&w83791d_driver);
1270 }
1271
1272 static void __exit sensors_w83791d_exit(void)
1273 {
1274         i2c_del_driver(&w83791d_driver);
1275 }
1276
1277 MODULE_AUTHOR("Charles Spirakis <bezaur@gmail.com>");
1278 MODULE_DESCRIPTION("W83791D driver");
1279 MODULE_LICENSE("GPL");
1280
1281 module_init(sensors_w83791d_init);
1282 module_exit(sensors_w83791d_exit);