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