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