Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs
[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-2007 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       5       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 #define NUMBER_OF_PWM           5
49
50 /* Addresses to scan */
51 static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
52                                                 I2C_CLIENT_END };
53
54 /* Insmod parameters */
55 I2C_CLIENT_INSMOD_1(w83791d);
56 I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: "
57                         "{bus, clientaddr, subclientaddr1, subclientaddr2}");
58
59 static int reset;
60 module_param(reset, bool, 0);
61 MODULE_PARM_DESC(reset, "Set to one to force a hardware chip reset");
62
63 static int init;
64 module_param(init, bool, 0);
65 MODULE_PARM_DESC(init, "Set to one to force extra software initialization");
66
67 /* The W83791D registers */
68 static const u8 W83791D_REG_IN[NUMBER_OF_VIN] = {
69         0x20,                   /* VCOREA in DataSheet */
70         0x21,                   /* VINR0 in DataSheet */
71         0x22,                   /* +3.3VIN in DataSheet */
72         0x23,                   /* VDD5V in DataSheet */
73         0x24,                   /* +12VIN in DataSheet */
74         0x25,                   /* -12VIN in DataSheet */
75         0x26,                   /* -5VIN in DataSheet */
76         0xB0,                   /* 5VSB in DataSheet */
77         0xB1,                   /* VBAT in DataSheet */
78         0xB2                    /* VINR1 in DataSheet */
79 };
80
81 static const u8 W83791D_REG_IN_MAX[NUMBER_OF_VIN] = {
82         0x2B,                   /* VCOREA High Limit in DataSheet */
83         0x2D,                   /* VINR0 High Limit in DataSheet */
84         0x2F,                   /* +3.3VIN High Limit in DataSheet */
85         0x31,                   /* VDD5V High Limit in DataSheet */
86         0x33,                   /* +12VIN High Limit in DataSheet */
87         0x35,                   /* -12VIN High Limit in DataSheet */
88         0x37,                   /* -5VIN High Limit in DataSheet */
89         0xB4,                   /* 5VSB High Limit in DataSheet */
90         0xB6,                   /* VBAT High Limit in DataSheet */
91         0xB8                    /* VINR1 High Limit in DataSheet */
92 };
93 static const u8 W83791D_REG_IN_MIN[NUMBER_OF_VIN] = {
94         0x2C,                   /* VCOREA Low Limit in DataSheet */
95         0x2E,                   /* VINR0 Low Limit in DataSheet */
96         0x30,                   /* +3.3VIN Low Limit in DataSheet */
97         0x32,                   /* VDD5V Low Limit in DataSheet */
98         0x34,                   /* +12VIN Low Limit in DataSheet */
99         0x36,                   /* -12VIN Low Limit in DataSheet */
100         0x38,                   /* -5VIN Low Limit in DataSheet */
101         0xB5,                   /* 5VSB Low Limit in DataSheet */
102         0xB7,                   /* VBAT Low Limit in DataSheet */
103         0xB9                    /* VINR1 Low Limit in DataSheet */
104 };
105 static const u8 W83791D_REG_FAN[NUMBER_OF_FANIN] = {
106         0x28,                   /* FAN 1 Count in DataSheet */
107         0x29,                   /* FAN 2 Count in DataSheet */
108         0x2A,                   /* FAN 3 Count in DataSheet */
109         0xBA,                   /* FAN 4 Count in DataSheet */
110         0xBB,                   /* FAN 5 Count in DataSheet */
111 };
112 static const u8 W83791D_REG_FAN_MIN[NUMBER_OF_FANIN] = {
113         0x3B,                   /* FAN 1 Count Low Limit in DataSheet */
114         0x3C,                   /* FAN 2 Count Low Limit in DataSheet */
115         0x3D,                   /* FAN 3 Count Low Limit in DataSheet */
116         0xBC,                   /* FAN 4 Count Low Limit in DataSheet */
117         0xBD,                   /* FAN 5 Count Low Limit in DataSheet */
118 };
119
120 static const u8 W83791D_REG_PWM[NUMBER_OF_PWM] = {
121         0x81,                   /* PWM 1 duty cycle register in DataSheet */
122         0x83,                   /* PWM 2 duty cycle register in DataSheet */
123         0x94,                   /* PWM 3 duty cycle register in DataSheet */
124         0xA0,                   /* PWM 4 duty cycle register in DataSheet */
125         0xA1,                   /* PWM 5 duty cycle register in DataSheet */
126 };
127
128 static const u8 W83791D_REG_TEMP_TARGET[3] = {
129         0x85,                   /* PWM 1 target temperature for temp 1 */
130         0x86,                   /* PWM 2 target temperature for temp 2 */
131         0x96,                   /* PWM 3 target temperature for temp 3 */
132 };
133
134 static const u8 W83791D_REG_TEMP_TOL[2] = {
135         0x87,                   /* PWM 1/2 temperature tolerance */
136         0x97,                   /* PWM 3 temperature tolerance */
137 };
138
139 static const u8 W83791D_REG_FAN_CFG[2] = {
140         0x84,                   /* FAN 1/2 configuration */
141         0x95,                   /* FAN 3 configuration */
142 };
143
144 static const u8 W83791D_REG_FAN_DIV[3] = {
145         0x47,                   /* contains FAN1 and FAN2 Divisor */
146         0x4b,                   /* contains FAN3 Divisor */
147         0x5C,                   /* contains FAN4 and FAN5 Divisor */
148 };
149
150 #define W83791D_REG_BANK                0x4E
151 #define W83791D_REG_TEMP2_CONFIG        0xC2
152 #define W83791D_REG_TEMP3_CONFIG        0xCA
153
154 static const u8 W83791D_REG_TEMP1[3] = {
155         0x27,                   /* TEMP 1 in DataSheet */
156         0x39,                   /* TEMP 1 Over in DataSheet */
157         0x3A,                   /* TEMP 1 Hyst in DataSheet */
158 };
159
160 static const u8 W83791D_REG_TEMP_ADD[2][6] = {
161         {0xC0,                  /* TEMP 2 in DataSheet */
162          0xC1,                  /* TEMP 2(0.5 deg) in DataSheet */
163          0xC5,                  /* TEMP 2 Over High part in DataSheet */
164          0xC6,                  /* TEMP 2 Over Low part in DataSheet */
165          0xC3,                  /* TEMP 2 Thyst High part in DataSheet */
166          0xC4},                 /* TEMP 2 Thyst Low part in DataSheet */
167         {0xC8,                  /* TEMP 3 in DataSheet */
168          0xC9,                  /* TEMP 3(0.5 deg) in DataSheet */
169          0xCD,                  /* TEMP 3 Over High part in DataSheet */
170          0xCE,                  /* TEMP 3 Over Low part in DataSheet */
171          0xCB,                  /* TEMP 3 Thyst High part in DataSheet */
172          0xCC}                  /* TEMP 3 Thyst Low part in DataSheet */
173 };
174
175 #define W83791D_REG_BEEP_CONFIG         0x4D
176
177 static const u8 W83791D_REG_BEEP_CTRL[3] = {
178         0x56,                   /* BEEP Control Register 1 */
179         0x57,                   /* BEEP Control Register 2 */
180         0xA3,                   /* BEEP Control Register 3 */
181 };
182
183 #define W83791D_REG_GPIO                0x15
184 #define W83791D_REG_CONFIG              0x40
185 #define W83791D_REG_VID_FANDIV          0x47
186 #define W83791D_REG_DID_VID4            0x49
187 #define W83791D_REG_WCHIPID             0x58
188 #define W83791D_REG_CHIPMAN             0x4F
189 #define W83791D_REG_PIN                 0x4B
190 #define W83791D_REG_I2C_SUBADDR         0x4A
191
192 #define W83791D_REG_ALARM1 0xA9 /* realtime status register1 */
193 #define W83791D_REG_ALARM2 0xAA /* realtime status register2 */
194 #define W83791D_REG_ALARM3 0xAB /* realtime status register3 */
195
196 #define W83791D_REG_VBAT                0x5D
197 #define W83791D_REG_I2C_ADDR            0x48
198
199 /* The SMBus locks itself. The Winbond W83791D has a bank select register
200    (index 0x4e), but the driver only accesses registers in bank 0. Since
201    we don't switch banks, we don't need any special code to handle
202    locking access between bank switches */
203 static inline int w83791d_read(struct i2c_client *client, u8 reg)
204 {
205         return i2c_smbus_read_byte_data(client, reg);
206 }
207
208 static inline int w83791d_write(struct i2c_client *client, u8 reg, u8 value)
209 {
210         return i2c_smbus_write_byte_data(client, reg, value);
211 }
212
213 /* The analog voltage inputs have 16mV LSB. Since the sysfs output is
214    in mV as would be measured on the chip input pin, need to just
215    multiply/divide by 16 to translate from/to register values. */
216 #define IN_TO_REG(val)          (SENSORS_LIMIT((((val) + 8) / 16), 0, 255))
217 #define IN_FROM_REG(val)        ((val) * 16)
218
219 static u8 fan_to_reg(long rpm, int div)
220 {
221         if (rpm == 0)
222                 return 255;
223         rpm = SENSORS_LIMIT(rpm, 1, 1000000);
224         return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1, 254);
225 }
226
227 #define FAN_FROM_REG(val,div)   ((val) == 0   ? -1 : \
228                                 ((val) == 255 ? 0 : \
229                                         1350000 / ((val) * (div))))
230
231 /* for temp1 which is 8-bit resolution, LSB = 1 degree Celsius */
232 #define TEMP1_FROM_REG(val)     ((val) * 1000)
233 #define TEMP1_TO_REG(val)       ((val) <= -128000 ? -128 : \
234                                  (val) >= 127000 ? 127 : \
235                                  (val) < 0 ? ((val) - 500) / 1000 : \
236                                  ((val) + 500) / 1000)
237
238 /* for temp2 and temp3 which are 9-bit resolution, LSB = 0.5 degree Celsius
239    Assumes the top 8 bits are the integral amount and the bottom 8 bits
240    are the fractional amount. Since we only have 0.5 degree resolution,
241    the bottom 7 bits will always be zero */
242 #define TEMP23_FROM_REG(val)    ((val) / 128 * 500)
243 #define TEMP23_TO_REG(val)      ((val) <= -128000 ? 0x8000 : \
244                                  (val) >= 127500 ? 0x7F80 : \
245                                  (val) < 0 ? ((val) - 250) / 500 * 128 : \
246                                  ((val) + 250) / 500 * 128)
247
248 /* for thermal cruise target temp, 7-bits, LSB = 1 degree Celsius */
249 #define TARGET_TEMP_TO_REG(val)         ((val) < 0 ? 0 : \
250                                         (val) >= 127000 ? 127 : \
251                                         ((val) + 500) / 1000)
252
253 /* for thermal cruise temp tolerance, 4-bits, LSB = 1 degree Celsius */
254 #define TOL_TEMP_TO_REG(val)            ((val) < 0 ? 0 : \
255                                         (val) >= 15000 ? 15 : \
256                                         ((val) + 500) / 1000)
257
258 #define BEEP_MASK_TO_REG(val)           ((val) & 0xffffff)
259 #define BEEP_MASK_FROM_REG(val)         ((val) & 0xffffff)
260
261 #define DIV_FROM_REG(val)               (1 << (val))
262
263 static u8 div_to_reg(int nr, long val)
264 {
265         int i;
266
267         /* fan divisors max out at 128 */
268         val = SENSORS_LIMIT(val, 1, 128) >> 1;
269         for (i = 0; i < 7; i++) {
270                 if (val == 0)
271                         break;
272                 val >>= 1;
273         }
274         return (u8) i;
275 }
276
277 struct w83791d_data {
278         struct device *hwmon_dev;
279         struct mutex update_lock;
280
281         char valid;                     /* !=0 if following fields are valid */
282         unsigned long last_updated;     /* In jiffies */
283
284         /* array of 2 pointers to subclients */
285         struct i2c_client *lm75[2];
286
287         /* volts */
288         u8 in[NUMBER_OF_VIN];           /* Register value */
289         u8 in_max[NUMBER_OF_VIN];       /* Register value */
290         u8 in_min[NUMBER_OF_VIN];       /* Register value */
291
292         /* fans */
293         u8 fan[NUMBER_OF_FANIN];        /* Register value */
294         u8 fan_min[NUMBER_OF_FANIN];    /* Register value */
295         u8 fan_div[NUMBER_OF_FANIN];    /* Register encoding, shifted right */
296
297         /* Temperature sensors */
298
299         s8 temp1[3];            /* current, over, thyst */
300         s16 temp_add[2][3];     /* fixed point value. Top 8 bits are the
301                                    integral part, bottom 8 bits are the
302                                    fractional part. We only use the top
303                                    9 bits as the resolution is only
304                                    to the 0.5 degree C...
305                                    two sensors with three values
306                                    (cur, over, hyst)  */
307
308         /* PWMs */
309         u8 pwm[5];              /* pwm duty cycle */
310         u8 pwm_enable[3];       /* pwm enable status for fan 1-3
311                                         (fan 4-5 only support manual mode) */
312
313         u8 temp_target[3];      /* pwm 1-3 target temperature */
314         u8 temp_tolerance[3];   /* pwm 1-3 temperature tolerance */
315
316         /* Misc */
317         u32 alarms;             /* realtime status register encoding,combined */
318         u8 beep_enable;         /* Global beep enable */
319         u32 beep_mask;          /* Mask off specific beeps */
320         u8 vid;                 /* Register encoding, combined */
321         u8 vrm;                 /* hwmon-vid */
322 };
323
324 static int w83791d_probe(struct i2c_client *client,
325                          const struct i2c_device_id *id);
326 static int w83791d_detect(struct i2c_client *client, int kind,
327                           struct i2c_board_info *info);
328 static int w83791d_remove(struct i2c_client *client);
329
330 static int w83791d_read(struct i2c_client *client, u8 register);
331 static int w83791d_write(struct i2c_client *client, u8 register, u8 value);
332 static struct w83791d_data *w83791d_update_device(struct device *dev);
333
334 #ifdef DEBUG
335 static void w83791d_print_debug(struct w83791d_data *data, struct device *dev);
336 #endif
337
338 static void w83791d_init_client(struct i2c_client *client);
339
340 static const struct i2c_device_id w83791d_id[] = {
341         { "w83791d", w83791d },
342         { }
343 };
344 MODULE_DEVICE_TABLE(i2c, w83791d_id);
345
346 static struct i2c_driver w83791d_driver = {
347         .class          = I2C_CLASS_HWMON,
348         .driver = {
349                 .name = "w83791d",
350         },
351         .probe          = w83791d_probe,
352         .remove         = w83791d_remove,
353         .id_table       = w83791d_id,
354         .detect         = w83791d_detect,
355         .address_data   = &addr_data,
356 };
357
358 /* following are the sysfs callback functions */
359 #define show_in_reg(reg) \
360 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
361                         char *buf) \
362 { \
363         struct sensor_device_attribute *sensor_attr = \
364                                                 to_sensor_dev_attr(attr); \
365         struct w83791d_data *data = w83791d_update_device(dev); \
366         int nr = sensor_attr->index; \
367         return sprintf(buf,"%d\n", IN_FROM_REG(data->reg[nr])); \
368 }
369
370 show_in_reg(in);
371 show_in_reg(in_min);
372 show_in_reg(in_max);
373
374 #define store_in_reg(REG, reg) \
375 static ssize_t store_in_##reg(struct device *dev, \
376                                 struct device_attribute *attr, \
377                                 const char *buf, size_t count) \
378 { \
379         struct sensor_device_attribute *sensor_attr = \
380                                                 to_sensor_dev_attr(attr); \
381         struct i2c_client *client = to_i2c_client(dev); \
382         struct w83791d_data *data = i2c_get_clientdata(client); \
383         unsigned long val = simple_strtoul(buf, NULL, 10); \
384         int nr = sensor_attr->index; \
385          \
386         mutex_lock(&data->update_lock); \
387         data->in_##reg[nr] = IN_TO_REG(val); \
388         w83791d_write(client, W83791D_REG_IN_##REG[nr], data->in_##reg[nr]); \
389         mutex_unlock(&data->update_lock); \
390          \
391         return count; \
392 }
393 store_in_reg(MIN, min);
394 store_in_reg(MAX, max);
395
396 static struct sensor_device_attribute sda_in_input[] = {
397         SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
398         SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
399         SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
400         SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
401         SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
402         SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
403         SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
404         SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
405         SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
406         SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
407 };
408
409 static struct sensor_device_attribute sda_in_min[] = {
410         SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
411         SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
412         SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
413         SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
414         SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
415         SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
416         SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
417         SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
418         SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
419         SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
420 };
421
422 static struct sensor_device_attribute sda_in_max[] = {
423         SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
424         SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
425         SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
426         SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
427         SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
428         SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
429         SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
430         SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
431         SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
432         SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
433 };
434
435
436 static ssize_t show_beep(struct device *dev, struct device_attribute *attr,
437                         char *buf)
438 {
439         struct sensor_device_attribute *sensor_attr =
440                                                 to_sensor_dev_attr(attr);
441         struct w83791d_data *data = w83791d_update_device(dev);
442         int bitnr = sensor_attr->index;
443
444         return sprintf(buf, "%d\n", (data->beep_mask >> bitnr) & 1);
445 }
446
447 static ssize_t store_beep(struct device *dev, struct device_attribute *attr,
448                         const char *buf, size_t count)
449 {
450         struct sensor_device_attribute *sensor_attr =
451                                                 to_sensor_dev_attr(attr);
452         struct i2c_client *client = to_i2c_client(dev);
453         struct w83791d_data *data = i2c_get_clientdata(client);
454         int bitnr = sensor_attr->index;
455         int bytenr = bitnr / 8;
456         long val = simple_strtol(buf, NULL, 10) ? 1 : 0;
457
458         mutex_lock(&data->update_lock);
459
460         data->beep_mask &= ~(0xff << (bytenr * 8));
461         data->beep_mask |= w83791d_read(client, W83791D_REG_BEEP_CTRL[bytenr])
462                 << (bytenr * 8);
463
464         data->beep_mask &= ~(1 << bitnr);
465         data->beep_mask |= val << bitnr;
466
467         w83791d_write(client, W83791D_REG_BEEP_CTRL[bytenr],
468                 (data->beep_mask >> (bytenr * 8)) & 0xff);
469
470         mutex_unlock(&data->update_lock);
471
472         return count;
473 }
474
475 static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
476                         char *buf)
477 {
478         struct sensor_device_attribute *sensor_attr =
479                                                 to_sensor_dev_attr(attr);
480         struct w83791d_data *data = w83791d_update_device(dev);
481         int bitnr = sensor_attr->index;
482
483         return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
484 }
485
486 /* Note: The bitmask for the beep enable/disable is different than
487    the bitmask for the alarm. */
488 static struct sensor_device_attribute sda_in_beep[] = {
489         SENSOR_ATTR(in0_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 0),
490         SENSOR_ATTR(in1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 13),
491         SENSOR_ATTR(in2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 2),
492         SENSOR_ATTR(in3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 3),
493         SENSOR_ATTR(in4_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 8),
494         SENSOR_ATTR(in5_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 9),
495         SENSOR_ATTR(in6_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 10),
496         SENSOR_ATTR(in7_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 16),
497         SENSOR_ATTR(in8_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 17),
498         SENSOR_ATTR(in9_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 14),
499 };
500
501 static struct sensor_device_attribute sda_in_alarm[] = {
502         SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
503         SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
504         SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
505         SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
506         SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8),
507         SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 9),
508         SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 10),
509         SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 19),
510         SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 20),
511         SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 14),
512 };
513
514 #define show_fan_reg(reg) \
515 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
516                                 char *buf) \
517 { \
518         struct sensor_device_attribute *sensor_attr = \
519                                                 to_sensor_dev_attr(attr); \
520         struct w83791d_data *data = w83791d_update_device(dev); \
521         int nr = sensor_attr->index; \
522         return sprintf(buf,"%d\n", \
523                 FAN_FROM_REG(data->reg[nr], DIV_FROM_REG(data->fan_div[nr]))); \
524 }
525
526 show_fan_reg(fan);
527 show_fan_reg(fan_min);
528
529 static ssize_t store_fan_min(struct device *dev, struct device_attribute *attr,
530                                 const char *buf, size_t count)
531 {
532         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
533         struct i2c_client *client = to_i2c_client(dev);
534         struct w83791d_data *data = i2c_get_clientdata(client);
535         unsigned long val = simple_strtoul(buf, NULL, 10);
536         int nr = sensor_attr->index;
537
538         mutex_lock(&data->update_lock);
539         data->fan_min[nr] = fan_to_reg(val, DIV_FROM_REG(data->fan_div[nr]));
540         w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
541         mutex_unlock(&data->update_lock);
542
543         return count;
544 }
545
546 static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
547                                 char *buf)
548 {
549         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
550         int nr = sensor_attr->index;
551         struct w83791d_data *data = w83791d_update_device(dev);
552         return sprintf(buf, "%u\n", DIV_FROM_REG(data->fan_div[nr]));
553 }
554
555 /* Note: we save and restore the fan minimum here, because its value is
556    determined in part by the fan divisor.  This follows the principle of
557    least suprise; the user doesn't expect the fan minimum to change just
558    because the divisor changed. */
559 static ssize_t store_fan_div(struct device *dev, struct device_attribute *attr,
560                                 const char *buf, size_t count)
561 {
562         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
563         struct i2c_client *client = to_i2c_client(dev);
564         struct w83791d_data *data = i2c_get_clientdata(client);
565         int nr = sensor_attr->index;
566         unsigned long min;
567         u8 tmp_fan_div;
568         u8 fan_div_reg;
569         u8 vbat_reg;
570         int indx = 0;
571         u8 keep_mask = 0;
572         u8 new_shift = 0;
573
574         /* Save fan_min */
575         min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr]));
576
577         mutex_lock(&data->update_lock);
578         data->fan_div[nr] = div_to_reg(nr, simple_strtoul(buf, NULL, 10));
579
580         switch (nr) {
581         case 0:
582                 indx = 0;
583                 keep_mask = 0xcf;
584                 new_shift = 4;
585                 break;
586         case 1:
587                 indx = 0;
588                 keep_mask = 0x3f;
589                 new_shift = 6;
590                 break;
591         case 2:
592                 indx = 1;
593                 keep_mask = 0x3f;
594                 new_shift = 6;
595                 break;
596         case 3:
597                 indx = 2;
598                 keep_mask = 0xf8;
599                 new_shift = 0;
600                 break;
601         case 4:
602                 indx = 2;
603                 keep_mask = 0x8f;
604                 new_shift = 4;
605                 break;
606 #ifdef DEBUG
607         default:
608                 dev_warn(dev, "store_fan_div: Unexpected nr seen: %d\n", nr);
609                 count = -EINVAL;
610                 goto err_exit;
611 #endif
612         }
613
614         fan_div_reg = w83791d_read(client, W83791D_REG_FAN_DIV[indx])
615                         & keep_mask;
616         tmp_fan_div = (data->fan_div[nr] << new_shift) & ~keep_mask;
617
618         w83791d_write(client, W83791D_REG_FAN_DIV[indx],
619                                 fan_div_reg | tmp_fan_div);
620
621         /* Bit 2 of fans 0-2 is stored in the vbat register (bits 5-7) */
622         if (nr < 3) {
623                 keep_mask = ~(1 << (nr + 5));
624                 vbat_reg = w83791d_read(client, W83791D_REG_VBAT)
625                                 & keep_mask;
626                 tmp_fan_div = (data->fan_div[nr] << (3 + nr)) & ~keep_mask;
627                 w83791d_write(client, W83791D_REG_VBAT,
628                                 vbat_reg | tmp_fan_div);
629         }
630
631         /* Restore fan_min */
632         data->fan_min[nr] = fan_to_reg(min, DIV_FROM_REG(data->fan_div[nr]));
633         w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
634
635 #ifdef DEBUG
636 err_exit:
637 #endif
638         mutex_unlock(&data->update_lock);
639
640         return count;
641 }
642
643 static struct sensor_device_attribute sda_fan_input[] = {
644         SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
645         SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
646         SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
647         SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
648         SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
649 };
650
651 static struct sensor_device_attribute sda_fan_min[] = {
652         SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO,
653                         show_fan_min, store_fan_min, 0),
654         SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO,
655                         show_fan_min, store_fan_min, 1),
656         SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO,
657                         show_fan_min, store_fan_min, 2),
658         SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO,
659                         show_fan_min, store_fan_min, 3),
660         SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO,
661                         show_fan_min, store_fan_min, 4),
662 };
663
664 static struct sensor_device_attribute sda_fan_div[] = {
665         SENSOR_ATTR(fan1_div, S_IWUSR | S_IRUGO,
666                         show_fan_div, store_fan_div, 0),
667         SENSOR_ATTR(fan2_div, S_IWUSR | S_IRUGO,
668                         show_fan_div, store_fan_div, 1),
669         SENSOR_ATTR(fan3_div, S_IWUSR | S_IRUGO,
670                         show_fan_div, store_fan_div, 2),
671         SENSOR_ATTR(fan4_div, S_IWUSR | S_IRUGO,
672                         show_fan_div, store_fan_div, 3),
673         SENSOR_ATTR(fan5_div, S_IWUSR | S_IRUGO,
674                         show_fan_div, store_fan_div, 4),
675 };
676
677 static struct sensor_device_attribute sda_fan_beep[] = {
678         SENSOR_ATTR(fan1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 6),
679         SENSOR_ATTR(fan2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 7),
680         SENSOR_ATTR(fan3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 11),
681         SENSOR_ATTR(fan4_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 21),
682         SENSOR_ATTR(fan5_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 22),
683 };
684
685 static struct sensor_device_attribute sda_fan_alarm[] = {
686         SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6),
687         SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7),
688         SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11),
689         SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 21),
690         SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 22),
691 };
692
693 /* read/write PWMs */
694 static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
695                                 char *buf)
696 {
697         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
698         int nr = sensor_attr->index;
699         struct w83791d_data *data = w83791d_update_device(dev);
700         return sprintf(buf, "%u\n", data->pwm[nr]);
701 }
702
703 static ssize_t store_pwm(struct device *dev, struct device_attribute *attr,
704                 const char *buf, size_t count)
705 {
706         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
707         struct i2c_client *client = to_i2c_client(dev);
708         struct w83791d_data *data = i2c_get_clientdata(client);
709         int nr = sensor_attr->index;
710         unsigned long val;
711
712         if (strict_strtoul(buf, 10, &val))
713                 return -EINVAL;
714
715         mutex_lock(&data->update_lock);
716         data->pwm[nr] = SENSORS_LIMIT(val, 0, 255);
717         w83791d_write(client, W83791D_REG_PWM[nr], data->pwm[nr]);
718         mutex_unlock(&data->update_lock);
719         return count;
720 }
721
722 static struct sensor_device_attribute sda_pwm[] = {
723         SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO,
724                         show_pwm, store_pwm, 0),
725         SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO,
726                         show_pwm, store_pwm, 1),
727         SENSOR_ATTR(pwm3, S_IWUSR | S_IRUGO,
728                         show_pwm, store_pwm, 2),
729         SENSOR_ATTR(pwm4, S_IWUSR | S_IRUGO,
730                         show_pwm, store_pwm, 3),
731         SENSOR_ATTR(pwm5, S_IWUSR | S_IRUGO,
732                         show_pwm, store_pwm, 4),
733 };
734
735 static ssize_t show_pwmenable(struct device *dev, struct device_attribute *attr,
736                                 char *buf)
737 {
738         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
739         int nr = sensor_attr->index;
740         struct w83791d_data *data = w83791d_update_device(dev);
741         return sprintf(buf, "%u\n", data->pwm_enable[nr] + 1);
742 }
743
744 static ssize_t store_pwmenable(struct device *dev,
745                 struct device_attribute *attr, const char *buf, size_t count)
746 {
747         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
748         struct i2c_client *client = to_i2c_client(dev);
749         struct w83791d_data *data = i2c_get_clientdata(client);
750         int nr = sensor_attr->index;
751         unsigned long val;
752         u8 reg_cfg_tmp;
753         u8 reg_idx = 0;
754         u8 val_shift = 0;
755         u8 keep_mask = 0;
756
757         int ret = strict_strtoul(buf, 10, &val);
758
759         if (ret || val < 1 || val > 3)
760                 return -EINVAL;
761
762         mutex_lock(&data->update_lock);
763         data->pwm_enable[nr] = val - 1;
764         switch (nr) {
765         case 0:
766                 reg_idx = 0;
767                 val_shift = 2;
768                 keep_mask = 0xf3;
769                 break;
770         case 1:
771                 reg_idx = 0;
772                 val_shift = 4;
773                 keep_mask = 0xcf;
774                 break;
775         case 2:
776                 reg_idx = 1;
777                 val_shift = 2;
778                 keep_mask = 0xf3;
779                 break;
780         }
781
782         reg_cfg_tmp = w83791d_read(client, W83791D_REG_FAN_CFG[reg_idx]);
783         reg_cfg_tmp = (reg_cfg_tmp & keep_mask) |
784                                         data->pwm_enable[nr] << val_shift;
785
786         w83791d_write(client, W83791D_REG_FAN_CFG[reg_idx], reg_cfg_tmp);
787         mutex_unlock(&data->update_lock);
788
789         return count;
790 }
791 static struct sensor_device_attribute sda_pwmenable[] = {
792         SENSOR_ATTR(pwm1_enable, S_IWUSR | S_IRUGO,
793                         show_pwmenable, store_pwmenable, 0),
794         SENSOR_ATTR(pwm2_enable, S_IWUSR | S_IRUGO,
795                         show_pwmenable, store_pwmenable, 1),
796         SENSOR_ATTR(pwm3_enable, S_IWUSR | S_IRUGO,
797                         show_pwmenable, store_pwmenable, 2),
798 };
799
800 /* For Smart Fan I / Thermal Cruise */
801 static ssize_t show_temp_target(struct device *dev,
802                         struct device_attribute *attr, char *buf)
803 {
804         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
805         struct w83791d_data *data = w83791d_update_device(dev);
806         int nr = sensor_attr->index;
807         return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp_target[nr]));
808 }
809
810 static ssize_t store_temp_target(struct device *dev,
811                 struct device_attribute *attr, const char *buf, size_t count)
812 {
813         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
814         struct i2c_client *client = to_i2c_client(dev);
815         struct w83791d_data *data = i2c_get_clientdata(client);
816         int nr = sensor_attr->index;
817         unsigned long val;
818         u8 target_mask;
819
820         if (strict_strtoul(buf, 10, &val))
821                 return -EINVAL;
822
823         mutex_lock(&data->update_lock);
824         data->temp_target[nr] = TARGET_TEMP_TO_REG(val);
825         target_mask = w83791d_read(client,
826                                 W83791D_REG_TEMP_TARGET[nr]) & 0x80;
827         w83791d_write(client, W83791D_REG_TEMP_TARGET[nr],
828                                 data->temp_target[nr] | target_mask);
829         mutex_unlock(&data->update_lock);
830         return count;
831 }
832
833 static struct sensor_device_attribute sda_temp_target[] = {
834         SENSOR_ATTR(temp1_target, S_IWUSR | S_IRUGO,
835                         show_temp_target, store_temp_target, 0),
836         SENSOR_ATTR(temp2_target, S_IWUSR | S_IRUGO,
837                         show_temp_target, store_temp_target, 1),
838         SENSOR_ATTR(temp3_target, S_IWUSR | S_IRUGO,
839                         show_temp_target, store_temp_target, 2),
840 };
841
842 static ssize_t show_temp_tolerance(struct device *dev,
843                         struct device_attribute *attr, char *buf)
844 {
845         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
846         struct w83791d_data *data = w83791d_update_device(dev);
847         int nr = sensor_attr->index;
848         return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp_tolerance[nr]));
849 }
850
851 static ssize_t store_temp_tolerance(struct device *dev,
852                 struct device_attribute *attr, const char *buf, size_t count)
853 {
854         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
855         struct i2c_client *client = to_i2c_client(dev);
856         struct w83791d_data *data = i2c_get_clientdata(client);
857         int nr = sensor_attr->index;
858         unsigned long val;
859         u8 target_mask;
860         u8 reg_idx = 0;
861         u8 val_shift = 0;
862         u8 keep_mask = 0;
863
864         if (strict_strtoul(buf, 10, &val))
865                 return -EINVAL;
866
867         switch (nr) {
868         case 0:
869                 reg_idx = 0;
870                 val_shift = 0;
871                 keep_mask = 0xf0;
872                 break;
873         case 1:
874                 reg_idx = 0;
875                 val_shift = 4;
876                 keep_mask = 0x0f;
877                 break;
878         case 2:
879                 reg_idx = 1;
880                 val_shift = 0;
881                 keep_mask = 0xf0;
882                 break;
883         }
884
885         mutex_lock(&data->update_lock);
886         data->temp_tolerance[nr] = TOL_TEMP_TO_REG(val);
887         target_mask = w83791d_read(client,
888                         W83791D_REG_TEMP_TOL[reg_idx]) & keep_mask;
889         w83791d_write(client, W83791D_REG_TEMP_TOL[reg_idx],
890                         (data->temp_tolerance[nr] << val_shift) | target_mask);
891         mutex_unlock(&data->update_lock);
892         return count;
893 }
894
895 static struct sensor_device_attribute sda_temp_tolerance[] = {
896         SENSOR_ATTR(temp1_tolerance, S_IWUSR | S_IRUGO,
897                         show_temp_tolerance, store_temp_tolerance, 0),
898         SENSOR_ATTR(temp2_tolerance, S_IWUSR | S_IRUGO,
899                         show_temp_tolerance, store_temp_tolerance, 1),
900         SENSOR_ATTR(temp3_tolerance, S_IWUSR | S_IRUGO,
901                         show_temp_tolerance, store_temp_tolerance, 2),
902 };
903
904 /* read/write the temperature1, includes measured value and limits */
905 static ssize_t show_temp1(struct device *dev, struct device_attribute *devattr,
906                                 char *buf)
907 {
908         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
909         struct w83791d_data *data = w83791d_update_device(dev);
910         return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp1[attr->index]));
911 }
912
913 static ssize_t store_temp1(struct device *dev, struct device_attribute *devattr,
914                                 const char *buf, size_t count)
915 {
916         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
917         struct i2c_client *client = to_i2c_client(dev);
918         struct w83791d_data *data = i2c_get_clientdata(client);
919         long val = simple_strtol(buf, NULL, 10);
920         int nr = attr->index;
921
922         mutex_lock(&data->update_lock);
923         data->temp1[nr] = TEMP1_TO_REG(val);
924         w83791d_write(client, W83791D_REG_TEMP1[nr], data->temp1[nr]);
925         mutex_unlock(&data->update_lock);
926         return count;
927 }
928
929 /* read/write temperature2-3, includes measured value and limits */
930 static ssize_t show_temp23(struct device *dev, struct device_attribute *devattr,
931                                 char *buf)
932 {
933         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
934         struct w83791d_data *data = w83791d_update_device(dev);
935         int nr = attr->nr;
936         int index = attr->index;
937         return sprintf(buf, "%d\n", TEMP23_FROM_REG(data->temp_add[nr][index]));
938 }
939
940 static ssize_t store_temp23(struct device *dev,
941                                 struct device_attribute *devattr,
942                                 const char *buf, size_t count)
943 {
944         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
945         struct i2c_client *client = to_i2c_client(dev);
946         struct w83791d_data *data = i2c_get_clientdata(client);
947         long val = simple_strtol(buf, NULL, 10);
948         int nr = attr->nr;
949         int index = attr->index;
950
951         mutex_lock(&data->update_lock);
952         data->temp_add[nr][index] = TEMP23_TO_REG(val);
953         w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2],
954                                 data->temp_add[nr][index] >> 8);
955         w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2 + 1],
956                                 data->temp_add[nr][index] & 0x80);
957         mutex_unlock(&data->update_lock);
958
959         return count;
960 }
961
962 static struct sensor_device_attribute_2 sda_temp_input[] = {
963         SENSOR_ATTR_2(temp1_input, S_IRUGO, show_temp1, NULL, 0, 0),
964         SENSOR_ATTR_2(temp2_input, S_IRUGO, show_temp23, NULL, 0, 0),
965         SENSOR_ATTR_2(temp3_input, S_IRUGO, show_temp23, NULL, 1, 0),
966 };
967
968 static struct sensor_device_attribute_2 sda_temp_max[] = {
969         SENSOR_ATTR_2(temp1_max, S_IRUGO | S_IWUSR,
970                         show_temp1, store_temp1, 0, 1),
971         SENSOR_ATTR_2(temp2_max, S_IRUGO | S_IWUSR,
972                         show_temp23, store_temp23, 0, 1),
973         SENSOR_ATTR_2(temp3_max, S_IRUGO | S_IWUSR,
974                         show_temp23, store_temp23, 1, 1),
975 };
976
977 static struct sensor_device_attribute_2 sda_temp_max_hyst[] = {
978         SENSOR_ATTR_2(temp1_max_hyst, S_IRUGO | S_IWUSR,
979                         show_temp1, store_temp1, 0, 2),
980         SENSOR_ATTR_2(temp2_max_hyst, S_IRUGO | S_IWUSR,
981                         show_temp23, store_temp23, 0, 2),
982         SENSOR_ATTR_2(temp3_max_hyst, S_IRUGO | S_IWUSR,
983                         show_temp23, store_temp23, 1, 2),
984 };
985
986 /* Note: The bitmask for the beep enable/disable is different than
987    the bitmask for the alarm. */
988 static struct sensor_device_attribute sda_temp_beep[] = {
989         SENSOR_ATTR(temp1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 4),
990         SENSOR_ATTR(temp2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 5),
991         SENSOR_ATTR(temp3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 1),
992 };
993
994 static struct sensor_device_attribute sda_temp_alarm[] = {
995         SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4),
996         SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5),
997         SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
998 };
999
1000 /* get reatime status of all sensors items: voltage, temp, fan */
1001 static ssize_t show_alarms_reg(struct device *dev,
1002                                 struct device_attribute *attr, char *buf)
1003 {
1004         struct w83791d_data *data = w83791d_update_device(dev);
1005         return sprintf(buf, "%u\n", data->alarms);
1006 }
1007
1008 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
1009
1010 /* Beep control */
1011
1012 #define GLOBAL_BEEP_ENABLE_SHIFT        15
1013 #define GLOBAL_BEEP_ENABLE_MASK         (1 << GLOBAL_BEEP_ENABLE_SHIFT)
1014
1015 static ssize_t show_beep_enable(struct device *dev,
1016                                 struct device_attribute *attr, char *buf)
1017 {
1018         struct w83791d_data *data = w83791d_update_device(dev);
1019         return sprintf(buf, "%d\n", data->beep_enable);
1020 }
1021
1022 static ssize_t show_beep_mask(struct device *dev,
1023                                 struct device_attribute *attr, char *buf)
1024 {
1025         struct w83791d_data *data = w83791d_update_device(dev);
1026         return sprintf(buf, "%d\n", BEEP_MASK_FROM_REG(data->beep_mask));
1027 }
1028
1029
1030 static ssize_t store_beep_mask(struct device *dev,
1031                                 struct device_attribute *attr,
1032                                 const char *buf, size_t count)
1033 {
1034         struct i2c_client *client = to_i2c_client(dev);
1035         struct w83791d_data *data = i2c_get_clientdata(client);
1036         long val = simple_strtol(buf, NULL, 10);
1037         int i;
1038
1039         mutex_lock(&data->update_lock);
1040
1041         /* The beep_enable state overrides any enabling request from
1042            the masks */
1043         data->beep_mask = BEEP_MASK_TO_REG(val) & ~GLOBAL_BEEP_ENABLE_MASK;
1044         data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
1045
1046         val = data->beep_mask;
1047
1048         for (i = 0; i < 3; i++) {
1049                 w83791d_write(client, W83791D_REG_BEEP_CTRL[i], (val & 0xff));
1050                 val >>= 8;
1051         }
1052
1053         mutex_unlock(&data->update_lock);
1054
1055         return count;
1056 }
1057
1058 static ssize_t store_beep_enable(struct device *dev,
1059                                 struct device_attribute *attr,
1060                                 const char *buf, size_t count)
1061 {
1062         struct i2c_client *client = to_i2c_client(dev);
1063         struct w83791d_data *data = i2c_get_clientdata(client);
1064         long val = simple_strtol(buf, NULL, 10);
1065
1066         mutex_lock(&data->update_lock);
1067
1068         data->beep_enable = val ? 1 : 0;
1069
1070         /* Keep the full mask value in sync with the current enable */
1071         data->beep_mask &= ~GLOBAL_BEEP_ENABLE_MASK;
1072         data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
1073
1074         /* The global control is in the second beep control register
1075            so only need to update that register */
1076         val = (data->beep_mask >> 8) & 0xff;
1077
1078         w83791d_write(client, W83791D_REG_BEEP_CTRL[1], val);
1079
1080         mutex_unlock(&data->update_lock);
1081
1082         return count;
1083 }
1084
1085 static struct sensor_device_attribute sda_beep_ctrl[] = {
1086         SENSOR_ATTR(beep_enable, S_IRUGO | S_IWUSR,
1087                         show_beep_enable, store_beep_enable, 0),
1088         SENSOR_ATTR(beep_mask, S_IRUGO | S_IWUSR,
1089                         show_beep_mask, store_beep_mask, 1)
1090 };
1091
1092 /* cpu voltage regulation information */
1093 static ssize_t show_vid_reg(struct device *dev,
1094                                 struct device_attribute *attr, char *buf)
1095 {
1096         struct w83791d_data *data = w83791d_update_device(dev);
1097         return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
1098 }
1099
1100 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
1101
1102 static ssize_t show_vrm_reg(struct device *dev,
1103                                 struct device_attribute *attr, char *buf)
1104 {
1105         struct w83791d_data *data = dev_get_drvdata(dev);
1106         return sprintf(buf, "%d\n", data->vrm);
1107 }
1108
1109 static ssize_t store_vrm_reg(struct device *dev,
1110                                 struct device_attribute *attr,
1111                                 const char *buf, size_t count)
1112 {
1113         struct w83791d_data *data = dev_get_drvdata(dev);
1114
1115         /* No lock needed as vrm is internal to the driver
1116            (not read from a chip register) and so is not
1117            updated in w83791d_update_device() */
1118         data->vrm = simple_strtoul(buf, NULL, 10);
1119
1120         return count;
1121 }
1122
1123 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
1124
1125 #define IN_UNIT_ATTRS(X) \
1126         &sda_in_input[X].dev_attr.attr, \
1127         &sda_in_min[X].dev_attr.attr,   \
1128         &sda_in_max[X].dev_attr.attr,   \
1129         &sda_in_beep[X].dev_attr.attr,  \
1130         &sda_in_alarm[X].dev_attr.attr
1131
1132 #define FAN_UNIT_ATTRS(X) \
1133         &sda_fan_input[X].dev_attr.attr,        \
1134         &sda_fan_min[X].dev_attr.attr,          \
1135         &sda_fan_div[X].dev_attr.attr,          \
1136         &sda_fan_beep[X].dev_attr.attr,         \
1137         &sda_fan_alarm[X].dev_attr.attr
1138
1139 #define TEMP_UNIT_ATTRS(X) \
1140         &sda_temp_input[X].dev_attr.attr,       \
1141         &sda_temp_max[X].dev_attr.attr,         \
1142         &sda_temp_max_hyst[X].dev_attr.attr,    \
1143         &sda_temp_beep[X].dev_attr.attr,        \
1144         &sda_temp_alarm[X].dev_attr.attr
1145
1146 static struct attribute *w83791d_attributes[] = {
1147         IN_UNIT_ATTRS(0),
1148         IN_UNIT_ATTRS(1),
1149         IN_UNIT_ATTRS(2),
1150         IN_UNIT_ATTRS(3),
1151         IN_UNIT_ATTRS(4),
1152         IN_UNIT_ATTRS(5),
1153         IN_UNIT_ATTRS(6),
1154         IN_UNIT_ATTRS(7),
1155         IN_UNIT_ATTRS(8),
1156         IN_UNIT_ATTRS(9),
1157         FAN_UNIT_ATTRS(0),
1158         FAN_UNIT_ATTRS(1),
1159         FAN_UNIT_ATTRS(2),
1160         TEMP_UNIT_ATTRS(0),
1161         TEMP_UNIT_ATTRS(1),
1162         TEMP_UNIT_ATTRS(2),
1163         &dev_attr_alarms.attr,
1164         &sda_beep_ctrl[0].dev_attr.attr,
1165         &sda_beep_ctrl[1].dev_attr.attr,
1166         &dev_attr_cpu0_vid.attr,
1167         &dev_attr_vrm.attr,
1168         &sda_pwm[0].dev_attr.attr,
1169         &sda_pwm[1].dev_attr.attr,
1170         &sda_pwm[2].dev_attr.attr,
1171         &sda_pwmenable[0].dev_attr.attr,
1172         &sda_pwmenable[1].dev_attr.attr,
1173         &sda_pwmenable[2].dev_attr.attr,
1174         &sda_temp_target[0].dev_attr.attr,
1175         &sda_temp_target[1].dev_attr.attr,
1176         &sda_temp_target[2].dev_attr.attr,
1177         &sda_temp_tolerance[0].dev_attr.attr,
1178         &sda_temp_tolerance[1].dev_attr.attr,
1179         &sda_temp_tolerance[2].dev_attr.attr,
1180         NULL
1181 };
1182
1183 static const struct attribute_group w83791d_group = {
1184         .attrs = w83791d_attributes,
1185 };
1186
1187 /* Separate group of attributes for fan/pwm 4-5. Their pins can also be
1188    in use for GPIO in which case their sysfs-interface should not be made
1189    available */
1190 static struct attribute *w83791d_attributes_fanpwm45[] = {
1191         FAN_UNIT_ATTRS(3),
1192         FAN_UNIT_ATTRS(4),
1193         &sda_pwm[3].dev_attr.attr,
1194         &sda_pwm[4].dev_attr.attr,
1195         NULL
1196 };
1197
1198 static const struct attribute_group w83791d_group_fanpwm45 = {
1199         .attrs = w83791d_attributes_fanpwm45,
1200 };
1201
1202 static int w83791d_detect_subclients(struct i2c_client *client)
1203 {
1204         struct i2c_adapter *adapter = client->adapter;
1205         struct w83791d_data *data = i2c_get_clientdata(client);
1206         int address = client->addr;
1207         int i, id, err;
1208         u8 val;
1209
1210         id = i2c_adapter_id(adapter);
1211         if (force_subclients[0] == id && force_subclients[1] == address) {
1212                 for (i = 2; i <= 3; i++) {
1213                         if (force_subclients[i] < 0x48 ||
1214                             force_subclients[i] > 0x4f) {
1215                                 dev_err(&client->dev,
1216                                         "invalid subclient "
1217                                         "address %d; must be 0x48-0x4f\n",
1218                                         force_subclients[i]);
1219                                 err = -ENODEV;
1220                                 goto error_sc_0;
1221                         }
1222                 }
1223                 w83791d_write(client, W83791D_REG_I2C_SUBADDR,
1224                                         (force_subclients[2] & 0x07) |
1225                                         ((force_subclients[3] & 0x07) << 4));
1226         }
1227
1228         val = w83791d_read(client, W83791D_REG_I2C_SUBADDR);
1229         if (!(val & 0x08)) {
1230                 data->lm75[0] = i2c_new_dummy(adapter, 0x48 + (val & 0x7));
1231         }
1232         if (!(val & 0x80)) {
1233                 if ((data->lm75[0] != NULL) &&
1234                                 ((val & 0x7) == ((val >> 4) & 0x7))) {
1235                         dev_err(&client->dev,
1236                                 "duplicate addresses 0x%x, "
1237                                 "use force_subclient\n",
1238                                 data->lm75[0]->addr);
1239                         err = -ENODEV;
1240                         goto error_sc_1;
1241                 }
1242                 data->lm75[1] = i2c_new_dummy(adapter,
1243                                               0x48 + ((val >> 4) & 0x7));
1244         }
1245
1246         return 0;
1247
1248 /* Undo inits in case of errors */
1249
1250 error_sc_1:
1251         if (data->lm75[0] != NULL)
1252                 i2c_unregister_device(data->lm75[0]);
1253 error_sc_0:
1254         return err;
1255 }
1256
1257
1258 /* Return 0 if detection is successful, -ENODEV otherwise */
1259 static int w83791d_detect(struct i2c_client *client, int kind,
1260                           struct i2c_board_info *info)
1261 {
1262         struct i2c_adapter *adapter = client->adapter;
1263         int val1, val2;
1264         unsigned short address = client->addr;
1265
1266         if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1267                 return -ENODEV;
1268         }
1269
1270         /* The w83791d may be stuck in some other bank than bank 0. This may
1271            make reading other information impossible. Specify a force=...
1272            parameter, and the Winbond will be reset to the right bank. */
1273         if (kind < 0) {
1274                 if (w83791d_read(client, W83791D_REG_CONFIG) & 0x80) {
1275                         return -ENODEV;
1276                 }
1277                 val1 = w83791d_read(client, W83791D_REG_BANK);
1278                 val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
1279                 /* Check for Winbond ID if in bank 0 */
1280                 if (!(val1 & 0x07)) {
1281                         /* yes it is Bank0 */
1282                         if (((!(val1 & 0x80)) && (val2 != 0xa3)) ||
1283                             ((val1 & 0x80) && (val2 != 0x5c))) {
1284                                 return -ENODEV;
1285                         }
1286                 }
1287                 /* If Winbond chip, address of chip and W83791D_REG_I2C_ADDR
1288                    should match */
1289                 if (w83791d_read(client, W83791D_REG_I2C_ADDR) != address) {
1290                         return -ENODEV;
1291                 }
1292         }
1293
1294         /* We either have a force parameter or we have reason to
1295            believe it is a Winbond chip. Either way, we want bank 0 and
1296            Vendor ID high byte */
1297         val1 = w83791d_read(client, W83791D_REG_BANK) & 0x78;
1298         w83791d_write(client, W83791D_REG_BANK, val1 | 0x80);
1299
1300         /* Verify it is a Winbond w83791d */
1301         if (kind <= 0) {
1302                 /* get vendor ID */
1303                 val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
1304                 if (val2 != 0x5c) {     /* the vendor is NOT Winbond */
1305                         return -ENODEV;
1306                 }
1307                 val1 = w83791d_read(client, W83791D_REG_WCHIPID);
1308                 if (val1 == 0x71) {
1309                         kind = w83791d;
1310                 } else {
1311                         if (kind == 0)
1312                                 dev_warn(&adapter->dev,
1313                                         "w83791d: Ignoring 'force' parameter "
1314                                         "for unknown chip at adapter %d, "
1315                                         "address 0x%02x\n",
1316                                         i2c_adapter_id(adapter), address);
1317                         return -ENODEV;
1318                 }
1319         }
1320
1321         strlcpy(info->type, "w83791d", I2C_NAME_SIZE);
1322
1323         return 0;
1324 }
1325
1326 static int w83791d_probe(struct i2c_client *client,
1327                          const struct i2c_device_id *id)
1328 {
1329         struct w83791d_data *data;
1330         struct device *dev = &client->dev;
1331         int i, err;
1332         u8 has_fanpwm45;
1333
1334 #ifdef DEBUG
1335         int val1;
1336         val1 = w83791d_read(client, W83791D_REG_DID_VID4);
1337         dev_dbg(dev, "Device ID version: %d.%d (0x%02x)\n",
1338                         (val1 >> 5) & 0x07, (val1 >> 1) & 0x0f, val1);
1339 #endif
1340
1341         data = kzalloc(sizeof(struct w83791d_data), GFP_KERNEL);
1342         if (!data) {
1343                 err = -ENOMEM;
1344                 goto error0;
1345         }
1346
1347         i2c_set_clientdata(client, data);
1348         mutex_init(&data->update_lock);
1349
1350         err = w83791d_detect_subclients(client);
1351         if (err)
1352                 goto error1;
1353
1354         /* Initialize the chip */
1355         w83791d_init_client(client);
1356
1357         /* If the fan_div is changed, make sure there is a rational
1358            fan_min in place */
1359         for (i = 0; i < NUMBER_OF_FANIN; i++) {
1360                 data->fan_min[i] = w83791d_read(client, W83791D_REG_FAN_MIN[i]);
1361         }
1362
1363         /* Register sysfs hooks */
1364         if ((err = sysfs_create_group(&client->dev.kobj, &w83791d_group)))
1365                 goto error3;
1366
1367         /* Check if pins of fan/pwm 4-5 are in use as GPIO */
1368         has_fanpwm45 = w83791d_read(client, W83791D_REG_GPIO) & 0x10;
1369         if (has_fanpwm45) {
1370                 err = sysfs_create_group(&client->dev.kobj,
1371                                          &w83791d_group_fanpwm45);
1372                 if (err)
1373                         goto error4;
1374         }
1375
1376         /* Everything is ready, now register the working device */
1377         data->hwmon_dev = hwmon_device_register(dev);
1378         if (IS_ERR(data->hwmon_dev)) {
1379                 err = PTR_ERR(data->hwmon_dev);
1380                 goto error5;
1381         }
1382
1383         return 0;
1384
1385 error5:
1386         if (has_fanpwm45)
1387                 sysfs_remove_group(&client->dev.kobj, &w83791d_group_fanpwm45);
1388 error4:
1389         sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1390 error3:
1391         if (data->lm75[0] != NULL)
1392                 i2c_unregister_device(data->lm75[0]);
1393         if (data->lm75[1] != NULL)
1394                 i2c_unregister_device(data->lm75[1]);
1395 error1:
1396         kfree(data);
1397 error0:
1398         return err;
1399 }
1400
1401 static int w83791d_remove(struct i2c_client *client)
1402 {
1403         struct w83791d_data *data = i2c_get_clientdata(client);
1404
1405         hwmon_device_unregister(data->hwmon_dev);
1406         sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1407
1408         if (data->lm75[0] != NULL)
1409                 i2c_unregister_device(data->lm75[0]);
1410         if (data->lm75[1] != NULL)
1411                 i2c_unregister_device(data->lm75[1]);
1412
1413         kfree(data);
1414         return 0;
1415 }
1416
1417 static void w83791d_init_client(struct i2c_client *client)
1418 {
1419         struct w83791d_data *data = i2c_get_clientdata(client);
1420         u8 tmp;
1421         u8 old_beep;
1422
1423         /* The difference between reset and init is that reset
1424            does a hard reset of the chip via index 0x40, bit 7,
1425            but init simply forces certain registers to have "sane"
1426            values. The hope is that the BIOS has done the right
1427            thing (which is why the default is reset=0, init=0),
1428            but if not, reset is the hard hammer and init
1429            is the soft mallet both of which are trying to whack
1430            things into place...
1431            NOTE: The data sheet makes a distinction between
1432            "power on defaults" and "reset by MR". As far as I can tell,
1433            the hard reset puts everything into a power-on state so I'm
1434            not sure what "reset by MR" means or how it can happen.
1435            */
1436         if (reset || init) {
1437                 /* keep some BIOS settings when we... */
1438                 old_beep = w83791d_read(client, W83791D_REG_BEEP_CONFIG);
1439
1440                 if (reset) {
1441                         /* ... reset the chip and ... */
1442                         w83791d_write(client, W83791D_REG_CONFIG, 0x80);
1443                 }
1444
1445                 /* ... disable power-on abnormal beep */
1446                 w83791d_write(client, W83791D_REG_BEEP_CONFIG, old_beep | 0x80);
1447
1448                 /* disable the global beep (not done by hard reset) */
1449                 tmp = w83791d_read(client, W83791D_REG_BEEP_CTRL[1]);
1450                 w83791d_write(client, W83791D_REG_BEEP_CTRL[1], tmp & 0xef);
1451
1452                 if (init) {
1453                         /* Make sure monitoring is turned on for add-ons */
1454                         tmp = w83791d_read(client, W83791D_REG_TEMP2_CONFIG);
1455                         if (tmp & 1) {
1456                                 w83791d_write(client, W83791D_REG_TEMP2_CONFIG,
1457                                         tmp & 0xfe);
1458                         }
1459
1460                         tmp = w83791d_read(client, W83791D_REG_TEMP3_CONFIG);
1461                         if (tmp & 1) {
1462                                 w83791d_write(client, W83791D_REG_TEMP3_CONFIG,
1463                                         tmp & 0xfe);
1464                         }
1465
1466                         /* Start monitoring */
1467                         tmp = w83791d_read(client, W83791D_REG_CONFIG) & 0xf7;
1468                         w83791d_write(client, W83791D_REG_CONFIG, tmp | 0x01);
1469                 }
1470         }
1471
1472         data->vrm = vid_which_vrm();
1473 }
1474
1475 static struct w83791d_data *w83791d_update_device(struct device *dev)
1476 {
1477         struct i2c_client *client = to_i2c_client(dev);
1478         struct w83791d_data *data = i2c_get_clientdata(client);
1479         int i, j;
1480         u8 reg_array_tmp[3];
1481         u8 vbat_reg;
1482
1483         mutex_lock(&data->update_lock);
1484
1485         if (time_after(jiffies, data->last_updated + (HZ * 3))
1486                         || !data->valid) {
1487                 dev_dbg(dev, "Starting w83791d device update\n");
1488
1489                 /* Update the voltages measured value and limits */
1490                 for (i = 0; i < NUMBER_OF_VIN; i++) {
1491                         data->in[i] = w83791d_read(client,
1492                                                 W83791D_REG_IN[i]);
1493                         data->in_max[i] = w83791d_read(client,
1494                                                 W83791D_REG_IN_MAX[i]);
1495                         data->in_min[i] = w83791d_read(client,
1496                                                 W83791D_REG_IN_MIN[i]);
1497                 }
1498
1499                 /* Update the fan counts and limits */
1500                 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1501                         /* Update the Fan measured value and limits */
1502                         data->fan[i] = w83791d_read(client,
1503                                                 W83791D_REG_FAN[i]);
1504                         data->fan_min[i] = w83791d_read(client,
1505                                                 W83791D_REG_FAN_MIN[i]);
1506                 }
1507
1508                 /* Update the fan divisor */
1509                 for (i = 0; i < 3; i++) {
1510                         reg_array_tmp[i] = w83791d_read(client,
1511                                                 W83791D_REG_FAN_DIV[i]);
1512                 }
1513                 data->fan_div[0] = (reg_array_tmp[0] >> 4) & 0x03;
1514                 data->fan_div[1] = (reg_array_tmp[0] >> 6) & 0x03;
1515                 data->fan_div[2] = (reg_array_tmp[1] >> 6) & 0x03;
1516                 data->fan_div[3] = reg_array_tmp[2] & 0x07;
1517                 data->fan_div[4] = (reg_array_tmp[2] >> 4) & 0x07;
1518
1519                 /* The fan divisor for fans 0-2 get bit 2 from
1520                    bits 5-7 respectively of vbat register */
1521                 vbat_reg = w83791d_read(client, W83791D_REG_VBAT);
1522                 for (i = 0; i < 3; i++)
1523                         data->fan_div[i] |= (vbat_reg >> (3 + i)) & 0x04;
1524
1525                 /* Update PWM duty cycle */
1526                 for (i = 0; i < NUMBER_OF_PWM; i++) {
1527                         data->pwm[i] =  w83791d_read(client,
1528                                                 W83791D_REG_PWM[i]);
1529                 }
1530
1531                 /* Update PWM enable status */
1532                 for (i = 0; i < 2; i++) {
1533                         reg_array_tmp[i] = w83791d_read(client,
1534                                                 W83791D_REG_FAN_CFG[i]);
1535                 }
1536                 data->pwm_enable[0] = (reg_array_tmp[0] >> 2) & 0x03;
1537                 data->pwm_enable[1] = (reg_array_tmp[0] >> 4) & 0x03;
1538                 data->pwm_enable[2] = (reg_array_tmp[1] >> 2) & 0x03;
1539
1540                 /* Update PWM target temperature */
1541                 for (i = 0; i < 3; i++) {
1542                         data->temp_target[i] = w83791d_read(client,
1543                                 W83791D_REG_TEMP_TARGET[i]) & 0x7f;
1544                 }
1545
1546                 /* Update PWM temperature tolerance */
1547                 for (i = 0; i < 2; i++) {
1548                         reg_array_tmp[i] = w83791d_read(client,
1549                                         W83791D_REG_TEMP_TOL[i]);
1550                 }
1551                 data->temp_tolerance[0] = reg_array_tmp[0] & 0x0f;
1552                 data->temp_tolerance[1] = (reg_array_tmp[0] >> 4) & 0x0f;
1553                 data->temp_tolerance[2] = reg_array_tmp[1] & 0x0f;
1554
1555                 /* Update the first temperature sensor */
1556                 for (i = 0; i < 3; i++) {
1557                         data->temp1[i] = w83791d_read(client,
1558                                                 W83791D_REG_TEMP1[i]);
1559                 }
1560
1561                 /* Update the rest of the temperature sensors */
1562                 for (i = 0; i < 2; i++) {
1563                         for (j = 0; j < 3; j++) {
1564                                 data->temp_add[i][j] =
1565                                         (w83791d_read(client,
1566                                         W83791D_REG_TEMP_ADD[i][j * 2]) << 8) |
1567                                         w83791d_read(client,
1568                                         W83791D_REG_TEMP_ADD[i][j * 2 + 1]);
1569                         }
1570                 }
1571
1572                 /* Update the realtime status */
1573                 data->alarms =
1574                         w83791d_read(client, W83791D_REG_ALARM1) +
1575                         (w83791d_read(client, W83791D_REG_ALARM2) << 8) +
1576                         (w83791d_read(client, W83791D_REG_ALARM3) << 16);
1577
1578                 /* Update the beep configuration information */
1579                 data->beep_mask =
1580                         w83791d_read(client, W83791D_REG_BEEP_CTRL[0]) +
1581                         (w83791d_read(client, W83791D_REG_BEEP_CTRL[1]) << 8) +
1582                         (w83791d_read(client, W83791D_REG_BEEP_CTRL[2]) << 16);
1583
1584                 /* Extract global beep enable flag */
1585                 data->beep_enable =
1586                         (data->beep_mask >> GLOBAL_BEEP_ENABLE_SHIFT) & 0x01;
1587
1588                 /* Update the cpu voltage information */
1589                 i = w83791d_read(client, W83791D_REG_VID_FANDIV);
1590                 data->vid = i & 0x0f;
1591                 data->vid |= (w83791d_read(client, W83791D_REG_DID_VID4) & 0x01)
1592                                 << 4;
1593
1594                 data->last_updated = jiffies;
1595                 data->valid = 1;
1596         }
1597
1598         mutex_unlock(&data->update_lock);
1599
1600 #ifdef DEBUG
1601         w83791d_print_debug(data, dev);
1602 #endif
1603
1604         return data;
1605 }
1606
1607 #ifdef DEBUG
1608 static void w83791d_print_debug(struct w83791d_data *data, struct device *dev)
1609 {
1610         int i = 0, j = 0;
1611
1612         dev_dbg(dev, "======Start of w83791d debug values======\n");
1613         dev_dbg(dev, "%d set of Voltages: ===>\n", NUMBER_OF_VIN);
1614         for (i = 0; i < NUMBER_OF_VIN; i++) {
1615                 dev_dbg(dev, "vin[%d] is:     0x%02x\n", i, data->in[i]);
1616                 dev_dbg(dev, "vin[%d] min is: 0x%02x\n", i, data->in_min[i]);
1617                 dev_dbg(dev, "vin[%d] max is: 0x%02x\n", i, data->in_max[i]);
1618         }
1619         dev_dbg(dev, "%d set of Fan Counts/Divisors: ===>\n", NUMBER_OF_FANIN);
1620         for (i = 0; i < NUMBER_OF_FANIN; i++) {
1621                 dev_dbg(dev, "fan[%d] is:     0x%02x\n", i, data->fan[i]);
1622                 dev_dbg(dev, "fan[%d] min is: 0x%02x\n", i, data->fan_min[i]);
1623                 dev_dbg(dev, "fan_div[%d] is: 0x%02x\n", i, data->fan_div[i]);
1624         }
1625
1626         /* temperature math is signed, but only print out the
1627            bits that matter */
1628         dev_dbg(dev, "%d set of Temperatures: ===>\n", NUMBER_OF_TEMPIN);
1629         for (i = 0; i < 3; i++) {
1630                 dev_dbg(dev, "temp1[%d] is: 0x%02x\n", i, (u8) data->temp1[i]);
1631         }
1632         for (i = 0; i < 2; i++) {
1633                 for (j = 0; j < 3; j++) {
1634                         dev_dbg(dev, "temp_add[%d][%d] is: 0x%04x\n", i, j,
1635                                 (u16) data->temp_add[i][j]);
1636                 }
1637         }
1638
1639         dev_dbg(dev, "Misc Information: ===>\n");
1640         dev_dbg(dev, "alarm is:     0x%08x\n", data->alarms);
1641         dev_dbg(dev, "beep_mask is: 0x%08x\n", data->beep_mask);
1642         dev_dbg(dev, "beep_enable is: %d\n", data->beep_enable);
1643         dev_dbg(dev, "vid is: 0x%02x\n", data->vid);
1644         dev_dbg(dev, "vrm is: 0x%02x\n", data->vrm);
1645         dev_dbg(dev, "=======End of w83791d debug values========\n");
1646         dev_dbg(dev, "\n");
1647 }
1648 #endif
1649
1650 static int __init sensors_w83791d_init(void)
1651 {
1652         return i2c_add_driver(&w83791d_driver);
1653 }
1654
1655 static void __exit sensors_w83791d_exit(void)
1656 {
1657         i2c_del_driver(&w83791d_driver);
1658 }
1659
1660 MODULE_AUTHOR("Charles Spirakis <bezaur@gmail.com>");
1661 MODULE_DESCRIPTION("W83791D driver");
1662 MODULE_LICENSE("GPL");
1663
1664 module_init(sensors_w83791d_init);
1665 module_exit(sensors_w83791d_exit);