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