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