]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - drivers/hwmon/w83791d.c
acer-wmi: remove debugfs entries upon unloading
[linux-2.6-omap-h63xx.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       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, val1, err;
1059
1060 #ifdef DEBUG
1061         val1 = w83791d_read(client, W83791D_REG_DID_VID4);
1062         dev_dbg(dev, "Device ID version: %d.%d (0x%02x)\n",
1063                         (val1 >> 5) & 0x07, (val1 >> 1) & 0x0f, val1);
1064 #endif
1065
1066         data = kzalloc(sizeof(struct w83791d_data), GFP_KERNEL);
1067         if (!data) {
1068                 err = -ENOMEM;
1069                 goto error0;
1070         }
1071
1072         i2c_set_clientdata(client, data);
1073         mutex_init(&data->update_lock);
1074
1075         err = w83791d_detect_subclients(client);
1076         if (err)
1077                 goto error1;
1078
1079         /* Initialize the chip */
1080         w83791d_init_client(client);
1081
1082         /* If the fan_div is changed, make sure there is a rational
1083            fan_min in place */
1084         for (i = 0; i < NUMBER_OF_FANIN; i++) {
1085                 data->fan_min[i] = w83791d_read(client, W83791D_REG_FAN_MIN[i]);
1086         }
1087
1088         /* Register sysfs hooks */
1089         if ((err = sysfs_create_group(&client->dev.kobj, &w83791d_group)))
1090                 goto error3;
1091
1092         /* Everything is ready, now register the working device */
1093         data->hwmon_dev = hwmon_device_register(dev);
1094         if (IS_ERR(data->hwmon_dev)) {
1095                 err = PTR_ERR(data->hwmon_dev);
1096                 goto error4;
1097         }
1098
1099         return 0;
1100
1101 error4:
1102         sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1103 error3:
1104         if (data->lm75[0] != NULL)
1105                 i2c_unregister_device(data->lm75[0]);
1106         if (data->lm75[1] != NULL)
1107                 i2c_unregister_device(data->lm75[1]);
1108 error1:
1109         kfree(data);
1110 error0:
1111         return err;
1112 }
1113
1114 static int w83791d_remove(struct i2c_client *client)
1115 {
1116         struct w83791d_data *data = i2c_get_clientdata(client);
1117
1118         hwmon_device_unregister(data->hwmon_dev);
1119         sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1120
1121         if (data->lm75[0] != NULL)
1122                 i2c_unregister_device(data->lm75[0]);
1123         if (data->lm75[1] != NULL)
1124                 i2c_unregister_device(data->lm75[1]);
1125
1126         kfree(data);
1127         return 0;
1128 }
1129
1130 static void w83791d_init_client(struct i2c_client *client)
1131 {
1132         struct w83791d_data *data = i2c_get_clientdata(client);
1133         u8 tmp;
1134         u8 old_beep;
1135
1136         /* The difference between reset and init is that reset
1137            does a hard reset of the chip via index 0x40, bit 7,
1138            but init simply forces certain registers to have "sane"
1139            values. The hope is that the BIOS has done the right
1140            thing (which is why the default is reset=0, init=0),
1141            but if not, reset is the hard hammer and init
1142            is the soft mallet both of which are trying to whack
1143            things into place...
1144            NOTE: The data sheet makes a distinction between
1145            "power on defaults" and "reset by MR". As far as I can tell,
1146            the hard reset puts everything into a power-on state so I'm
1147            not sure what "reset by MR" means or how it can happen.
1148            */
1149         if (reset || init) {
1150                 /* keep some BIOS settings when we... */
1151                 old_beep = w83791d_read(client, W83791D_REG_BEEP_CONFIG);
1152
1153                 if (reset) {
1154                         /* ... reset the chip and ... */
1155                         w83791d_write(client, W83791D_REG_CONFIG, 0x80);
1156                 }
1157
1158                 /* ... disable power-on abnormal beep */
1159                 w83791d_write(client, W83791D_REG_BEEP_CONFIG, old_beep | 0x80);
1160
1161                 /* disable the global beep (not done by hard reset) */
1162                 tmp = w83791d_read(client, W83791D_REG_BEEP_CTRL[1]);
1163                 w83791d_write(client, W83791D_REG_BEEP_CTRL[1], tmp & 0xef);
1164
1165                 if (init) {
1166                         /* Make sure monitoring is turned on for add-ons */
1167                         tmp = w83791d_read(client, W83791D_REG_TEMP2_CONFIG);
1168                         if (tmp & 1) {
1169                                 w83791d_write(client, W83791D_REG_TEMP2_CONFIG,
1170                                         tmp & 0xfe);
1171                         }
1172
1173                         tmp = w83791d_read(client, W83791D_REG_TEMP3_CONFIG);
1174                         if (tmp & 1) {
1175                                 w83791d_write(client, W83791D_REG_TEMP3_CONFIG,
1176                                         tmp & 0xfe);
1177                         }
1178
1179                         /* Start monitoring */
1180                         tmp = w83791d_read(client, W83791D_REG_CONFIG) & 0xf7;
1181                         w83791d_write(client, W83791D_REG_CONFIG, tmp | 0x01);
1182                 }
1183         }
1184
1185         data->vrm = vid_which_vrm();
1186 }
1187
1188 static struct w83791d_data *w83791d_update_device(struct device *dev)
1189 {
1190         struct i2c_client *client = to_i2c_client(dev);
1191         struct w83791d_data *data = i2c_get_clientdata(client);
1192         int i, j;
1193         u8 reg_array_tmp[3];
1194         u8 vbat_reg;
1195
1196         mutex_lock(&data->update_lock);
1197
1198         if (time_after(jiffies, data->last_updated + (HZ * 3))
1199                         || !data->valid) {
1200                 dev_dbg(dev, "Starting w83791d device update\n");
1201
1202                 /* Update the voltages measured value and limits */
1203                 for (i = 0; i < NUMBER_OF_VIN; i++) {
1204                         data->in[i] = w83791d_read(client,
1205                                                 W83791D_REG_IN[i]);
1206                         data->in_max[i] = w83791d_read(client,
1207                                                 W83791D_REG_IN_MAX[i]);
1208                         data->in_min[i] = w83791d_read(client,
1209                                                 W83791D_REG_IN_MIN[i]);
1210                 }
1211
1212                 /* Update the fan counts and limits */
1213                 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1214                         /* Update the Fan measured value and limits */
1215                         data->fan[i] = w83791d_read(client,
1216                                                 W83791D_REG_FAN[i]);
1217                         data->fan_min[i] = w83791d_read(client,
1218                                                 W83791D_REG_FAN_MIN[i]);
1219                 }
1220
1221                 /* Update the fan divisor */
1222                 for (i = 0; i < 3; i++) {
1223                         reg_array_tmp[i] = w83791d_read(client,
1224                                                 W83791D_REG_FAN_DIV[i]);
1225                 }
1226                 data->fan_div[0] = (reg_array_tmp[0] >> 4) & 0x03;
1227                 data->fan_div[1] = (reg_array_tmp[0] >> 6) & 0x03;
1228                 data->fan_div[2] = (reg_array_tmp[1] >> 6) & 0x03;
1229                 data->fan_div[3] = reg_array_tmp[2] & 0x07;
1230                 data->fan_div[4] = (reg_array_tmp[2] >> 4) & 0x07;
1231
1232                 /* The fan divisor for fans 0-2 get bit 2 from
1233                    bits 5-7 respectively of vbat register */
1234                 vbat_reg = w83791d_read(client, W83791D_REG_VBAT);
1235                 for (i = 0; i < 3; i++)
1236                         data->fan_div[i] |= (vbat_reg >> (3 + i)) & 0x04;
1237
1238                 /* Update the first temperature sensor */
1239                 for (i = 0; i < 3; i++) {
1240                         data->temp1[i] = w83791d_read(client,
1241                                                 W83791D_REG_TEMP1[i]);
1242                 }
1243
1244                 /* Update the rest of the temperature sensors */
1245                 for (i = 0; i < 2; i++) {
1246                         for (j = 0; j < 3; j++) {
1247                                 data->temp_add[i][j] =
1248                                         (w83791d_read(client,
1249                                         W83791D_REG_TEMP_ADD[i][j * 2]) << 8) |
1250                                         w83791d_read(client,
1251                                         W83791D_REG_TEMP_ADD[i][j * 2 + 1]);
1252                         }
1253                 }
1254
1255                 /* Update the realtime status */
1256                 data->alarms =
1257                         w83791d_read(client, W83791D_REG_ALARM1) +
1258                         (w83791d_read(client, W83791D_REG_ALARM2) << 8) +
1259                         (w83791d_read(client, W83791D_REG_ALARM3) << 16);
1260
1261                 /* Update the beep configuration information */
1262                 data->beep_mask =
1263                         w83791d_read(client, W83791D_REG_BEEP_CTRL[0]) +
1264                         (w83791d_read(client, W83791D_REG_BEEP_CTRL[1]) << 8) +
1265                         (w83791d_read(client, W83791D_REG_BEEP_CTRL[2]) << 16);
1266
1267                 /* Extract global beep enable flag */
1268                 data->beep_enable =
1269                         (data->beep_mask >> GLOBAL_BEEP_ENABLE_SHIFT) & 0x01;
1270
1271                 /* Update the cpu voltage information */
1272                 i = w83791d_read(client, W83791D_REG_VID_FANDIV);
1273                 data->vid = i & 0x0f;
1274                 data->vid |= (w83791d_read(client, W83791D_REG_DID_VID4) & 0x01)
1275                                 << 4;
1276
1277                 data->last_updated = jiffies;
1278                 data->valid = 1;
1279         }
1280
1281         mutex_unlock(&data->update_lock);
1282
1283 #ifdef DEBUG
1284         w83791d_print_debug(data, dev);
1285 #endif
1286
1287         return data;
1288 }
1289
1290 #ifdef DEBUG
1291 static void w83791d_print_debug(struct w83791d_data *data, struct device *dev)
1292 {
1293         int i = 0, j = 0;
1294
1295         dev_dbg(dev, "======Start of w83791d debug values======\n");
1296         dev_dbg(dev, "%d set of Voltages: ===>\n", NUMBER_OF_VIN);
1297         for (i = 0; i < NUMBER_OF_VIN; i++) {
1298                 dev_dbg(dev, "vin[%d] is:     0x%02x\n", i, data->in[i]);
1299                 dev_dbg(dev, "vin[%d] min is: 0x%02x\n", i, data->in_min[i]);
1300                 dev_dbg(dev, "vin[%d] max is: 0x%02x\n", i, data->in_max[i]);
1301         }
1302         dev_dbg(dev, "%d set of Fan Counts/Divisors: ===>\n", NUMBER_OF_FANIN);
1303         for (i = 0; i < NUMBER_OF_FANIN; i++) {
1304                 dev_dbg(dev, "fan[%d] is:     0x%02x\n", i, data->fan[i]);
1305                 dev_dbg(dev, "fan[%d] min is: 0x%02x\n", i, data->fan_min[i]);
1306                 dev_dbg(dev, "fan_div[%d] is: 0x%02x\n", i, data->fan_div[i]);
1307         }
1308
1309         /* temperature math is signed, but only print out the
1310            bits that matter */
1311         dev_dbg(dev, "%d set of Temperatures: ===>\n", NUMBER_OF_TEMPIN);
1312         for (i = 0; i < 3; i++) {
1313                 dev_dbg(dev, "temp1[%d] is: 0x%02x\n", i, (u8) data->temp1[i]);
1314         }
1315         for (i = 0; i < 2; i++) {
1316                 for (j = 0; j < 3; j++) {
1317                         dev_dbg(dev, "temp_add[%d][%d] is: 0x%04x\n", i, j,
1318                                 (u16) data->temp_add[i][j]);
1319                 }
1320         }
1321
1322         dev_dbg(dev, "Misc Information: ===>\n");
1323         dev_dbg(dev, "alarm is:     0x%08x\n", data->alarms);
1324         dev_dbg(dev, "beep_mask is: 0x%08x\n", data->beep_mask);
1325         dev_dbg(dev, "beep_enable is: %d\n", data->beep_enable);
1326         dev_dbg(dev, "vid is: 0x%02x\n", data->vid);
1327         dev_dbg(dev, "vrm is: 0x%02x\n", data->vrm);
1328         dev_dbg(dev, "=======End of w83791d debug values========\n");
1329         dev_dbg(dev, "\n");
1330 }
1331 #endif
1332
1333 static int __init sensors_w83791d_init(void)
1334 {
1335         return i2c_add_driver(&w83791d_driver);
1336 }
1337
1338 static void __exit sensors_w83791d_exit(void)
1339 {
1340         i2c_del_driver(&w83791d_driver);
1341 }
1342
1343 MODULE_AUTHOR("Charles Spirakis <bezaur@gmail.com>");
1344 MODULE_DESCRIPTION("W83791D driver");
1345 MODULE_LICENSE("GPL");
1346
1347 module_init(sensors_w83791d_init);
1348 module_exit(sensors_w83791d_exit);