mxcmmc : Reset the SDHC hardware if software timeout occurs.
[linux-2.6] / drivers / hwmon / w83781d.c
1 /*
2     w83781d.c - Part of lm_sensors, Linux kernel modules for hardware
3                 monitoring
4     Copyright (c) 1998 - 2001  Frodo Looijaard <frodol@dds.nl>,
5                                Philip Edelbrock <phil@netroedge.com>,
6                                and Mark Studebaker <mdsxyz123@yahoo.com>
7     Copyright (c) 2007 - 2008  Jean Delvare <khali@linux-fr.org>
8
9     This program is free software; you can redistribute it and/or modify
10     it under the terms of the GNU General Public License as published by
11     the Free Software Foundation; either version 2 of the License, or
12     (at your option) any later version.
13
14     This program is distributed in the hope that it will be useful,
15     but WITHOUT ANY WARRANTY; without even the implied warranty of
16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17     GNU General Public License for more details.
18
19     You should have received a copy of the GNU General Public License
20     along with this program; if not, write to the Free Software
21     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24 /*
25     Supports following chips:
26
27     Chip        #vin    #fanin  #pwm    #temp   wchipid vendid  i2c     ISA
28     as99127f    7       3       0       3       0x31    0x12c3  yes     no
29     as99127f rev.2 (type_name = as99127f)       0x31    0x5ca3  yes     no
30     w83781d     7       3       0       3       0x10-1  0x5ca3  yes     yes
31     w83782d     9       3       2-4     3       0x30    0x5ca3  yes     yes
32     w83783s     5-6     3       2       1-2     0x40    0x5ca3  yes     no
33
34 */
35
36 #include <linux/module.h>
37 #include <linux/init.h>
38 #include <linux/slab.h>
39 #include <linux/jiffies.h>
40 #include <linux/i2c.h>
41 #include <linux/hwmon.h>
42 #include <linux/hwmon-vid.h>
43 #include <linux/hwmon-sysfs.h>
44 #include <linux/sysfs.h>
45 #include <linux/err.h>
46 #include <linux/mutex.h>
47
48 #ifdef CONFIG_ISA
49 #include <linux/platform_device.h>
50 #include <linux/ioport.h>
51 #include <asm/io.h>
52 #endif
53
54 #include "lm75.h"
55
56 /* Addresses to scan */
57 static const unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
58                                                 0x2e, 0x2f, I2C_CLIENT_END };
59 /* Insmod parameters */
60 I2C_CLIENT_INSMOD_4(w83781d, w83782d, w83783s, as99127f);
61
62 static unsigned short force_subclients[4];
63 module_param_array(force_subclients, short, NULL, 0);
64 MODULE_PARM_DESC(force_subclients, "List of subclient addresses: "
65                     "{bus, clientaddr, subclientaddr1, subclientaddr2}");
66
67 static int reset;
68 module_param(reset, bool, 0);
69 MODULE_PARM_DESC(reset, "Set to one to reset chip on load");
70
71 static int init = 1;
72 module_param(init, bool, 0);
73 MODULE_PARM_DESC(init, "Set to zero to bypass chip initialization");
74
75 /* Constants specified below */
76
77 /* Length of ISA address segment */
78 #define W83781D_EXTENT                  8
79
80 /* Where are the ISA address/data registers relative to the base address */
81 #define W83781D_ADDR_REG_OFFSET         5
82 #define W83781D_DATA_REG_OFFSET         6
83
84 /* The device registers */
85 /* in nr from 0 to 8 */
86 #define W83781D_REG_IN_MAX(nr)          ((nr < 7) ? (0x2b + (nr) * 2) : \
87                                                     (0x554 + (((nr) - 7) * 2)))
88 #define W83781D_REG_IN_MIN(nr)          ((nr < 7) ? (0x2c + (nr) * 2) : \
89                                                     (0x555 + (((nr) - 7) * 2)))
90 #define W83781D_REG_IN(nr)              ((nr < 7) ? (0x20 + (nr)) : \
91                                                     (0x550 + (nr) - 7))
92
93 /* fan nr from 0 to 2 */
94 #define W83781D_REG_FAN_MIN(nr)         (0x3b + (nr))
95 #define W83781D_REG_FAN(nr)             (0x28 + (nr))
96
97 #define W83781D_REG_BANK                0x4E
98 #define W83781D_REG_TEMP2_CONFIG        0x152
99 #define W83781D_REG_TEMP3_CONFIG        0x252
100 /* temp nr from 1 to 3 */
101 #define W83781D_REG_TEMP(nr)            ((nr == 3) ? (0x0250) : \
102                                         ((nr == 2) ? (0x0150) : \
103                                                      (0x27)))
104 #define W83781D_REG_TEMP_HYST(nr)       ((nr == 3) ? (0x253) : \
105                                         ((nr == 2) ? (0x153) : \
106                                                      (0x3A)))
107 #define W83781D_REG_TEMP_OVER(nr)       ((nr == 3) ? (0x255) : \
108                                         ((nr == 2) ? (0x155) : \
109                                                      (0x39)))
110
111 #define W83781D_REG_CONFIG              0x40
112
113 /* Interrupt status (W83781D, AS99127F) */
114 #define W83781D_REG_ALARM1              0x41
115 #define W83781D_REG_ALARM2              0x42
116
117 /* Real-time status (W83782D, W83783S) */
118 #define W83782D_REG_ALARM1              0x459
119 #define W83782D_REG_ALARM2              0x45A
120 #define W83782D_REG_ALARM3              0x45B
121
122 #define W83781D_REG_BEEP_CONFIG         0x4D
123 #define W83781D_REG_BEEP_INTS1          0x56
124 #define W83781D_REG_BEEP_INTS2          0x57
125 #define W83781D_REG_BEEP_INTS3          0x453   /* not on W83781D */
126
127 #define W83781D_REG_VID_FANDIV          0x47
128
129 #define W83781D_REG_CHIPID              0x49
130 #define W83781D_REG_WCHIPID             0x58
131 #define W83781D_REG_CHIPMAN             0x4F
132 #define W83781D_REG_PIN                 0x4B
133
134 /* 782D/783S only */
135 #define W83781D_REG_VBAT                0x5D
136
137 /* PWM 782D (1-4) and 783S (1-2) only */
138 static const u8 W83781D_REG_PWM[] = { 0x5B, 0x5A, 0x5E, 0x5F };
139 #define W83781D_REG_PWMCLK12            0x5C
140 #define W83781D_REG_PWMCLK34            0x45C
141
142 #define W83781D_REG_I2C_ADDR            0x48
143 #define W83781D_REG_I2C_SUBADDR         0x4A
144
145 /* The following are undocumented in the data sheets however we
146    received the information in an email from Winbond tech support */
147 /* Sensor selection - not on 781d */
148 #define W83781D_REG_SCFG1               0x5D
149 static const u8 BIT_SCFG1[] = { 0x02, 0x04, 0x08 };
150
151 #define W83781D_REG_SCFG2               0x59
152 static const u8 BIT_SCFG2[] = { 0x10, 0x20, 0x40 };
153
154 #define W83781D_DEFAULT_BETA            3435
155
156 /* Conversions */
157 #define IN_TO_REG(val)                  SENSORS_LIMIT(((val) + 8) / 16, 0, 255)
158 #define IN_FROM_REG(val)                ((val) * 16)
159
160 static inline u8
161 FAN_TO_REG(long rpm, int div)
162 {
163         if (rpm == 0)
164                 return 255;
165         rpm = SENSORS_LIMIT(rpm, 1, 1000000);
166         return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1, 254);
167 }
168
169 static inline long
170 FAN_FROM_REG(u8 val, int div)
171 {
172         if (val == 0)
173                 return -1;
174         if (val == 255)
175                 return 0;
176         return 1350000 / (val * div);
177 }
178
179 #define TEMP_TO_REG(val)                SENSORS_LIMIT((val) / 1000, -127, 128)
180 #define TEMP_FROM_REG(val)              ((val) * 1000)
181
182 #define BEEP_MASK_FROM_REG(val,type)    ((type) == as99127f ? \
183                                          (~(val)) & 0x7fff : (val) & 0xff7fff)
184 #define BEEP_MASK_TO_REG(val,type)      ((type) == as99127f ? \
185                                          (~(val)) & 0x7fff : (val) & 0xff7fff)
186
187 #define DIV_FROM_REG(val)               (1 << (val))
188
189 static inline u8
190 DIV_TO_REG(long val, enum chips type)
191 {
192         int i;
193         val = SENSORS_LIMIT(val, 1,
194                             ((type == w83781d
195                               || type == as99127f) ? 8 : 128)) >> 1;
196         for (i = 0; i < 7; i++) {
197                 if (val == 0)
198                         break;
199                 val >>= 1;
200         }
201         return i;
202 }
203
204 struct w83781d_data {
205         struct i2c_client *client;
206         struct device *hwmon_dev;
207         struct mutex lock;
208         enum chips type;
209
210         /* For ISA device only */
211         const char *name;
212         int isa_addr;
213
214         struct mutex update_lock;
215         char valid;             /* !=0 if following fields are valid */
216         unsigned long last_updated;     /* In jiffies */
217
218         struct i2c_client *lm75[2];     /* for secondary I2C addresses */
219         /* array of 2 pointers to subclients */
220
221         u8 in[9];               /* Register value - 8 & 9 for 782D only */
222         u8 in_max[9];           /* Register value - 8 & 9 for 782D only */
223         u8 in_min[9];           /* Register value - 8 & 9 for 782D only */
224         u8 fan[3];              /* Register value */
225         u8 fan_min[3];          /* Register value */
226         s8 temp;                /* Register value */
227         s8 temp_max;            /* Register value */
228         s8 temp_max_hyst;       /* Register value */
229         u16 temp_add[2];        /* Register value */
230         u16 temp_max_add[2];    /* Register value */
231         u16 temp_max_hyst_add[2];       /* Register value */
232         u8 fan_div[3];          /* Register encoding, shifted right */
233         u8 vid;                 /* Register encoding, combined */
234         u32 alarms;             /* Register encoding, combined */
235         u32 beep_mask;          /* Register encoding, combined */
236         u8 pwm[4];              /* Register value */
237         u8 pwm2_enable;         /* Boolean */
238         u16 sens[3];            /* 782D/783S only.
239                                    1 = pentium diode; 2 = 3904 diode;
240                                    4 = thermistor */
241         u8 vrm;
242 };
243
244 static struct w83781d_data *w83781d_data_if_isa(void);
245 static int w83781d_alias_detect(struct i2c_client *client, u8 chipid);
246
247 static int w83781d_read_value(struct w83781d_data *data, u16 reg);
248 static int w83781d_write_value(struct w83781d_data *data, u16 reg, u16 value);
249 static struct w83781d_data *w83781d_update_device(struct device *dev);
250 static void w83781d_init_device(struct device *dev);
251
252 /* following are the sysfs callback functions */
253 #define show_in_reg(reg) \
254 static ssize_t show_##reg (struct device *dev, struct device_attribute *da, \
255                 char *buf) \
256 { \
257         struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \
258         struct w83781d_data *data = w83781d_update_device(dev); \
259         return sprintf(buf, "%ld\n", \
260                        (long)IN_FROM_REG(data->reg[attr->index])); \
261 }
262 show_in_reg(in);
263 show_in_reg(in_min);
264 show_in_reg(in_max);
265
266 #define store_in_reg(REG, reg) \
267 static ssize_t store_in_##reg (struct device *dev, struct device_attribute \
268                 *da, const char *buf, size_t count) \
269 { \
270         struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \
271         struct w83781d_data *data = dev_get_drvdata(dev); \
272         int nr = attr->index; \
273         u32 val; \
274          \
275         val = simple_strtoul(buf, NULL, 10); \
276          \
277         mutex_lock(&data->update_lock); \
278         data->in_##reg[nr] = IN_TO_REG(val); \
279         w83781d_write_value(data, W83781D_REG_IN_##REG(nr), data->in_##reg[nr]); \
280          \
281         mutex_unlock(&data->update_lock); \
282         return count; \
283 }
284 store_in_reg(MIN, min);
285 store_in_reg(MAX, max);
286
287 #define sysfs_in_offsets(offset) \
288 static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \
289                 show_in, NULL, offset); \
290 static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
291                 show_in_min, store_in_min, offset); \
292 static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
293                 show_in_max, store_in_max, offset)
294
295 sysfs_in_offsets(0);
296 sysfs_in_offsets(1);
297 sysfs_in_offsets(2);
298 sysfs_in_offsets(3);
299 sysfs_in_offsets(4);
300 sysfs_in_offsets(5);
301 sysfs_in_offsets(6);
302 sysfs_in_offsets(7);
303 sysfs_in_offsets(8);
304
305 #define show_fan_reg(reg) \
306 static ssize_t show_##reg (struct device *dev, struct device_attribute *da, \
307                 char *buf) \
308 { \
309         struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \
310         struct w83781d_data *data = w83781d_update_device(dev); \
311         return sprintf(buf,"%ld\n", \
312                 FAN_FROM_REG(data->reg[attr->index], \
313                         DIV_FROM_REG(data->fan_div[attr->index]))); \
314 }
315 show_fan_reg(fan);
316 show_fan_reg(fan_min);
317
318 static ssize_t
319 store_fan_min(struct device *dev, struct device_attribute *da,
320                 const char *buf, size_t count)
321 {
322         struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
323         struct w83781d_data *data = dev_get_drvdata(dev);
324         int nr = attr->index;
325         u32 val;
326
327         val = simple_strtoul(buf, NULL, 10);
328
329         mutex_lock(&data->update_lock);
330         data->fan_min[nr] =
331             FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
332         w83781d_write_value(data, W83781D_REG_FAN_MIN(nr),
333                             data->fan_min[nr]);
334
335         mutex_unlock(&data->update_lock);
336         return count;
337 }
338
339 static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0);
340 static SENSOR_DEVICE_ATTR(fan1_min, S_IRUGO | S_IWUSR,
341                 show_fan_min, store_fan_min, 0);
342 static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1);
343 static SENSOR_DEVICE_ATTR(fan2_min, S_IRUGO | S_IWUSR,
344                 show_fan_min, store_fan_min, 1);
345 static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2);
346 static SENSOR_DEVICE_ATTR(fan3_min, S_IRUGO | S_IWUSR,
347                 show_fan_min, store_fan_min, 2);
348
349 #define show_temp_reg(reg) \
350 static ssize_t show_##reg (struct device *dev, struct device_attribute *da, \
351                 char *buf) \
352 { \
353         struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \
354         struct w83781d_data *data = w83781d_update_device(dev); \
355         int nr = attr->index; \
356         if (nr >= 2) {  /* TEMP2 and TEMP3 */ \
357                 return sprintf(buf,"%d\n", \
358                         LM75_TEMP_FROM_REG(data->reg##_add[nr-2])); \
359         } else {        /* TEMP1 */ \
360                 return sprintf(buf,"%ld\n", (long)TEMP_FROM_REG(data->reg)); \
361         } \
362 }
363 show_temp_reg(temp);
364 show_temp_reg(temp_max);
365 show_temp_reg(temp_max_hyst);
366
367 #define store_temp_reg(REG, reg) \
368 static ssize_t store_temp_##reg (struct device *dev, \
369                 struct device_attribute *da, const char *buf, size_t count) \
370 { \
371         struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \
372         struct w83781d_data *data = dev_get_drvdata(dev); \
373         int nr = attr->index; \
374         long val; \
375          \
376         val = simple_strtol(buf, NULL, 10); \
377          \
378         mutex_lock(&data->update_lock); \
379          \
380         if (nr >= 2) {  /* TEMP2 and TEMP3 */ \
381                 data->temp_##reg##_add[nr-2] = LM75_TEMP_TO_REG(val); \
382                 w83781d_write_value(data, W83781D_REG_TEMP_##REG(nr), \
383                                 data->temp_##reg##_add[nr-2]); \
384         } else {        /* TEMP1 */ \
385                 data->temp_##reg = TEMP_TO_REG(val); \
386                 w83781d_write_value(data, W83781D_REG_TEMP_##REG(nr), \
387                         data->temp_##reg); \
388         } \
389          \
390         mutex_unlock(&data->update_lock); \
391         return count; \
392 }
393 store_temp_reg(OVER, max);
394 store_temp_reg(HYST, max_hyst);
395
396 #define sysfs_temp_offsets(offset) \
397 static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \
398                 show_temp, NULL, offset); \
399 static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \
400                 show_temp_max, store_temp_max, offset); \
401 static SENSOR_DEVICE_ATTR(temp##offset##_max_hyst, S_IRUGO | S_IWUSR, \
402                 show_temp_max_hyst, store_temp_max_hyst, offset);
403
404 sysfs_temp_offsets(1);
405 sysfs_temp_offsets(2);
406 sysfs_temp_offsets(3);
407
408 static ssize_t
409 show_vid_reg(struct device *dev, struct device_attribute *attr, char *buf)
410 {
411         struct w83781d_data *data = w83781d_update_device(dev);
412         return sprintf(buf, "%ld\n", (long) vid_from_reg(data->vid, data->vrm));
413 }
414
415 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
416
417 static ssize_t
418 show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf)
419 {
420         struct w83781d_data *data = dev_get_drvdata(dev);
421         return sprintf(buf, "%ld\n", (long) data->vrm);
422 }
423
424 static ssize_t
425 store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
426 {
427         struct w83781d_data *data = dev_get_drvdata(dev);
428         u32 val;
429
430         val = simple_strtoul(buf, NULL, 10);
431         data->vrm = val;
432
433         return count;
434 }
435
436 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
437
438 static ssize_t
439 show_alarms_reg(struct device *dev, struct device_attribute *attr, char *buf)
440 {
441         struct w83781d_data *data = w83781d_update_device(dev);
442         return sprintf(buf, "%u\n", data->alarms);
443 }
444
445 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
446
447 static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
448                 char *buf)
449 {
450         struct w83781d_data *data = w83781d_update_device(dev);
451         int bitnr = to_sensor_dev_attr(attr)->index;
452         return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1);
453 }
454
455 /* The W83781D has a single alarm bit for temp2 and temp3 */
456 static ssize_t show_temp3_alarm(struct device *dev,
457                 struct device_attribute *attr, char *buf)
458 {
459         struct w83781d_data *data = w83781d_update_device(dev);
460         int bitnr = (data->type == w83781d) ? 5 : 13;
461         return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1);
462 }
463
464 static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0);
465 static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1);
466 static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2);
467 static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3);
468 static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8);
469 static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 9);
470 static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 10);
471 static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 16);
472 static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 17);
473 static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6);
474 static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7);
475 static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11);
476 static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4);
477 static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5);
478 static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_temp3_alarm, NULL, 0);
479
480 static ssize_t show_beep_mask (struct device *dev, struct device_attribute *attr, char *buf)
481 {
482         struct w83781d_data *data = w83781d_update_device(dev);
483         return sprintf(buf, "%ld\n",
484                        (long)BEEP_MASK_FROM_REG(data->beep_mask, data->type));
485 }
486
487 static ssize_t
488 store_beep_mask(struct device *dev, struct device_attribute *attr,
489                 const char *buf, size_t count)
490 {
491         struct w83781d_data *data = dev_get_drvdata(dev);
492         u32 val;
493
494         val = simple_strtoul(buf, NULL, 10);
495
496         mutex_lock(&data->update_lock);
497         data->beep_mask &= 0x8000; /* preserve beep enable */
498         data->beep_mask |= BEEP_MASK_TO_REG(val, data->type);
499         w83781d_write_value(data, W83781D_REG_BEEP_INTS1,
500                             data->beep_mask & 0xff);
501         w83781d_write_value(data, W83781D_REG_BEEP_INTS2,
502                             (data->beep_mask >> 8) & 0xff);
503         if (data->type != w83781d && data->type != as99127f) {
504                 w83781d_write_value(data, W83781D_REG_BEEP_INTS3,
505                                     ((data->beep_mask) >> 16) & 0xff);
506         }
507         mutex_unlock(&data->update_lock);
508
509         return count;
510 }
511
512 static DEVICE_ATTR(beep_mask, S_IRUGO | S_IWUSR,
513                 show_beep_mask, store_beep_mask);
514
515 static ssize_t show_beep(struct device *dev, struct device_attribute *attr,
516                 char *buf)
517 {
518         struct w83781d_data *data = w83781d_update_device(dev);
519         int bitnr = to_sensor_dev_attr(attr)->index;
520         return sprintf(buf, "%u\n", (data->beep_mask >> bitnr) & 1);
521 }
522
523 static ssize_t
524 store_beep(struct device *dev, struct device_attribute *attr,
525                 const char *buf, size_t count)
526 {
527         struct w83781d_data *data = dev_get_drvdata(dev);
528         int bitnr = to_sensor_dev_attr(attr)->index;
529         unsigned long bit;
530         u8 reg;
531
532         bit = simple_strtoul(buf, NULL, 10);
533         if (bit & ~1)
534                 return -EINVAL;
535
536         mutex_lock(&data->update_lock);
537         if (bit)
538                 data->beep_mask |= (1 << bitnr);
539         else
540                 data->beep_mask &= ~(1 << bitnr);
541
542         if (bitnr < 8) {
543                 reg = w83781d_read_value(data, W83781D_REG_BEEP_INTS1);
544                 if (bit)
545                         reg |= (1 << bitnr);
546                 else
547                         reg &= ~(1 << bitnr);
548                 w83781d_write_value(data, W83781D_REG_BEEP_INTS1, reg);
549         } else if (bitnr < 16) {
550                 reg = w83781d_read_value(data, W83781D_REG_BEEP_INTS2);
551                 if (bit)
552                         reg |= (1 << (bitnr - 8));
553                 else
554                         reg &= ~(1 << (bitnr - 8));
555                 w83781d_write_value(data, W83781D_REG_BEEP_INTS2, reg);
556         } else {
557                 reg = w83781d_read_value(data, W83781D_REG_BEEP_INTS3);
558                 if (bit)
559                         reg |= (1 << (bitnr - 16));
560                 else
561                         reg &= ~(1 << (bitnr - 16));
562                 w83781d_write_value(data, W83781D_REG_BEEP_INTS3, reg);
563         }
564         mutex_unlock(&data->update_lock);
565
566         return count;
567 }
568
569 /* The W83781D has a single beep bit for temp2 and temp3 */
570 static ssize_t show_temp3_beep(struct device *dev,
571                 struct device_attribute *attr, char *buf)
572 {
573         struct w83781d_data *data = w83781d_update_device(dev);
574         int bitnr = (data->type == w83781d) ? 5 : 13;
575         return sprintf(buf, "%u\n", (data->beep_mask >> bitnr) & 1);
576 }
577
578 static SENSOR_DEVICE_ATTR(in0_beep, S_IRUGO | S_IWUSR,
579                         show_beep, store_beep, 0);
580 static SENSOR_DEVICE_ATTR(in1_beep, S_IRUGO | S_IWUSR,
581                         show_beep, store_beep, 1);
582 static SENSOR_DEVICE_ATTR(in2_beep, S_IRUGO | S_IWUSR,
583                         show_beep, store_beep, 2);
584 static SENSOR_DEVICE_ATTR(in3_beep, S_IRUGO | S_IWUSR,
585                         show_beep, store_beep, 3);
586 static SENSOR_DEVICE_ATTR(in4_beep, S_IRUGO | S_IWUSR,
587                         show_beep, store_beep, 8);
588 static SENSOR_DEVICE_ATTR(in5_beep, S_IRUGO | S_IWUSR,
589                         show_beep, store_beep, 9);
590 static SENSOR_DEVICE_ATTR(in6_beep, S_IRUGO | S_IWUSR,
591                         show_beep, store_beep, 10);
592 static SENSOR_DEVICE_ATTR(in7_beep, S_IRUGO | S_IWUSR,
593                         show_beep, store_beep, 16);
594 static SENSOR_DEVICE_ATTR(in8_beep, S_IRUGO | S_IWUSR,
595                         show_beep, store_beep, 17);
596 static SENSOR_DEVICE_ATTR(fan1_beep, S_IRUGO | S_IWUSR,
597                         show_beep, store_beep, 6);
598 static SENSOR_DEVICE_ATTR(fan2_beep, S_IRUGO | S_IWUSR,
599                         show_beep, store_beep, 7);
600 static SENSOR_DEVICE_ATTR(fan3_beep, S_IRUGO | S_IWUSR,
601                         show_beep, store_beep, 11);
602 static SENSOR_DEVICE_ATTR(temp1_beep, S_IRUGO | S_IWUSR,
603                         show_beep, store_beep, 4);
604 static SENSOR_DEVICE_ATTR(temp2_beep, S_IRUGO | S_IWUSR,
605                         show_beep, store_beep, 5);
606 static SENSOR_DEVICE_ATTR(temp3_beep, S_IRUGO,
607                         show_temp3_beep, store_beep, 13);
608 static SENSOR_DEVICE_ATTR(beep_enable, S_IRUGO | S_IWUSR,
609                         show_beep, store_beep, 15);
610
611 static ssize_t
612 show_fan_div(struct device *dev, struct device_attribute *da, char *buf)
613 {
614         struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
615         struct w83781d_data *data = w83781d_update_device(dev);
616         return sprintf(buf, "%ld\n",
617                        (long) DIV_FROM_REG(data->fan_div[attr->index]));
618 }
619
620 /* Note: we save and restore the fan minimum here, because its value is
621    determined in part by the fan divisor.  This follows the principle of
622    least surprise; the user doesn't expect the fan minimum to change just
623    because the divisor changed. */
624 static ssize_t
625 store_fan_div(struct device *dev, struct device_attribute *da,
626                 const char *buf, size_t count)
627 {
628         struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
629         struct w83781d_data *data = dev_get_drvdata(dev);
630         unsigned long min;
631         int nr = attr->index;
632         u8 reg;
633         unsigned long val = simple_strtoul(buf, NULL, 10);
634
635         mutex_lock(&data->update_lock);
636
637         /* Save fan_min */
638         min = FAN_FROM_REG(data->fan_min[nr],
639                            DIV_FROM_REG(data->fan_div[nr]));
640
641         data->fan_div[nr] = DIV_TO_REG(val, data->type);
642
643         reg = (w83781d_read_value(data, nr==2 ? W83781D_REG_PIN : W83781D_REG_VID_FANDIV)
644                & (nr==0 ? 0xcf : 0x3f))
645             | ((data->fan_div[nr] & 0x03) << (nr==0 ? 4 : 6));
646         w83781d_write_value(data, nr==2 ? W83781D_REG_PIN : W83781D_REG_VID_FANDIV, reg);
647
648         /* w83781d and as99127f don't have extended divisor bits */
649         if (data->type != w83781d && data->type != as99127f) {
650                 reg = (w83781d_read_value(data, W83781D_REG_VBAT)
651                        & ~(1 << (5 + nr)))
652                     | ((data->fan_div[nr] & 0x04) << (3 + nr));
653                 w83781d_write_value(data, W83781D_REG_VBAT, reg);
654         }
655
656         /* Restore fan_min */
657         data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
658         w83781d_write_value(data, W83781D_REG_FAN_MIN(nr), data->fan_min[nr]);
659
660         mutex_unlock(&data->update_lock);
661         return count;
662 }
663
664 static SENSOR_DEVICE_ATTR(fan1_div, S_IRUGO | S_IWUSR,
665                 show_fan_div, store_fan_div, 0);
666 static SENSOR_DEVICE_ATTR(fan2_div, S_IRUGO | S_IWUSR,
667                 show_fan_div, store_fan_div, 1);
668 static SENSOR_DEVICE_ATTR(fan3_div, S_IRUGO | S_IWUSR,
669                 show_fan_div, store_fan_div, 2);
670
671 static ssize_t
672 show_pwm(struct device *dev, struct device_attribute *da, char *buf)
673 {
674         struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
675         struct w83781d_data *data = w83781d_update_device(dev);
676         return sprintf(buf, "%d\n", (int)data->pwm[attr->index]);
677 }
678
679 static ssize_t
680 show_pwm2_enable(struct device *dev, struct device_attribute *da, char *buf)
681 {
682         struct w83781d_data *data = w83781d_update_device(dev);
683         return sprintf(buf, "%d\n", (int)data->pwm2_enable);
684 }
685
686 static ssize_t
687 store_pwm(struct device *dev, struct device_attribute *da, const char *buf,
688                 size_t count)
689 {
690         struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
691         struct w83781d_data *data = dev_get_drvdata(dev);
692         int nr = attr->index;
693         u32 val;
694
695         val = simple_strtoul(buf, NULL, 10);
696
697         mutex_lock(&data->update_lock);
698         data->pwm[nr] = SENSORS_LIMIT(val, 0, 255);
699         w83781d_write_value(data, W83781D_REG_PWM[nr], data->pwm[nr]);
700         mutex_unlock(&data->update_lock);
701         return count;
702 }
703
704 static ssize_t
705 store_pwm2_enable(struct device *dev, struct device_attribute *da,
706                 const char *buf, size_t count)
707 {
708         struct w83781d_data *data = dev_get_drvdata(dev);
709         u32 val, reg;
710
711         val = simple_strtoul(buf, NULL, 10);
712
713         mutex_lock(&data->update_lock);
714
715         switch (val) {
716         case 0:
717         case 1:
718                 reg = w83781d_read_value(data, W83781D_REG_PWMCLK12);
719                 w83781d_write_value(data, W83781D_REG_PWMCLK12,
720                                     (reg & 0xf7) | (val << 3));
721
722                 reg = w83781d_read_value(data, W83781D_REG_BEEP_CONFIG);
723                 w83781d_write_value(data, W83781D_REG_BEEP_CONFIG,
724                                     (reg & 0xef) | (!val << 4));
725
726                 data->pwm2_enable = val;
727                 break;
728
729         default:
730                 mutex_unlock(&data->update_lock);
731                 return -EINVAL;
732         }
733
734         mutex_unlock(&data->update_lock);
735         return count;
736 }
737
738 static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, show_pwm, store_pwm, 0);
739 static SENSOR_DEVICE_ATTR(pwm2, S_IRUGO | S_IWUSR, show_pwm, store_pwm, 1);
740 static SENSOR_DEVICE_ATTR(pwm3, S_IRUGO | S_IWUSR, show_pwm, store_pwm, 2);
741 static SENSOR_DEVICE_ATTR(pwm4, S_IRUGO | S_IWUSR, show_pwm, store_pwm, 3);
742 /* only PWM2 can be enabled/disabled */
743 static DEVICE_ATTR(pwm2_enable, S_IRUGO | S_IWUSR,
744                 show_pwm2_enable, store_pwm2_enable);
745
746 static ssize_t
747 show_sensor(struct device *dev, struct device_attribute *da, char *buf)
748 {
749         struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
750         struct w83781d_data *data = w83781d_update_device(dev);
751         return sprintf(buf, "%d\n", (int)data->sens[attr->index]);
752 }
753
754 static ssize_t
755 store_sensor(struct device *dev, struct device_attribute *da,
756                 const char *buf, size_t count)
757 {
758         struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
759         struct w83781d_data *data = dev_get_drvdata(dev);
760         int nr = attr->index;
761         u32 val, tmp;
762
763         val = simple_strtoul(buf, NULL, 10);
764
765         mutex_lock(&data->update_lock);
766
767         switch (val) {
768         case 1:         /* PII/Celeron diode */
769                 tmp = w83781d_read_value(data, W83781D_REG_SCFG1);
770                 w83781d_write_value(data, W83781D_REG_SCFG1,
771                                     tmp | BIT_SCFG1[nr]);
772                 tmp = w83781d_read_value(data, W83781D_REG_SCFG2);
773                 w83781d_write_value(data, W83781D_REG_SCFG2,
774                                     tmp | BIT_SCFG2[nr]);
775                 data->sens[nr] = val;
776                 break;
777         case 2:         /* 3904 */
778                 tmp = w83781d_read_value(data, W83781D_REG_SCFG1);
779                 w83781d_write_value(data, W83781D_REG_SCFG1,
780                                     tmp | BIT_SCFG1[nr]);
781                 tmp = w83781d_read_value(data, W83781D_REG_SCFG2);
782                 w83781d_write_value(data, W83781D_REG_SCFG2,
783                                     tmp & ~BIT_SCFG2[nr]);
784                 data->sens[nr] = val;
785                 break;
786         case W83781D_DEFAULT_BETA:
787                 dev_warn(dev, "Sensor type %d is deprecated, please use 4 "
788                          "instead\n", W83781D_DEFAULT_BETA);
789                 /* fall through */
790         case 4:         /* thermistor */
791                 tmp = w83781d_read_value(data, W83781D_REG_SCFG1);
792                 w83781d_write_value(data, W83781D_REG_SCFG1,
793                                     tmp & ~BIT_SCFG1[nr]);
794                 data->sens[nr] = val;
795                 break;
796         default:
797                 dev_err(dev, "Invalid sensor type %ld; must be 1, 2, or 4\n",
798                        (long) val);
799                 break;
800         }
801
802         mutex_unlock(&data->update_lock);
803         return count;
804 }
805
806 static SENSOR_DEVICE_ATTR(temp1_type, S_IRUGO | S_IWUSR,
807         show_sensor, store_sensor, 0);
808 static SENSOR_DEVICE_ATTR(temp2_type, S_IRUGO | S_IWUSR,
809         show_sensor, store_sensor, 1);
810 static SENSOR_DEVICE_ATTR(temp3_type, S_IRUGO | S_IWUSR,
811         show_sensor, store_sensor, 2);
812
813 /* Assumes that adapter is of I2C, not ISA variety.
814  * OTHERWISE DON'T CALL THIS
815  */
816 static int
817 w83781d_detect_subclients(struct i2c_client *new_client)
818 {
819         int i, val1 = 0, id;
820         int err;
821         int address = new_client->addr;
822         unsigned short sc_addr[2];
823         struct i2c_adapter *adapter = new_client->adapter;
824         struct w83781d_data *data = i2c_get_clientdata(new_client);
825         enum chips kind = data->type;
826
827         id = i2c_adapter_id(adapter);
828
829         if (force_subclients[0] == id && force_subclients[1] == address) {
830                 for (i = 2; i <= 3; i++) {
831                         if (force_subclients[i] < 0x48 ||
832                             force_subclients[i] > 0x4f) {
833                                 dev_err(&new_client->dev, "Invalid subclient "
834                                         "address %d; must be 0x48-0x4f\n",
835                                         force_subclients[i]);
836                                 err = -EINVAL;
837                                 goto ERROR_SC_1;
838                         }
839                 }
840                 w83781d_write_value(data, W83781D_REG_I2C_SUBADDR,
841                                 (force_subclients[2] & 0x07) |
842                                 ((force_subclients[3] & 0x07) << 4));
843                 sc_addr[0] = force_subclients[2];
844         } else {
845                 val1 = w83781d_read_value(data, W83781D_REG_I2C_SUBADDR);
846                 sc_addr[0] = 0x48 + (val1 & 0x07);
847         }
848
849         if (kind != w83783s) {
850                 if (force_subclients[0] == id &&
851                     force_subclients[1] == address) {
852                         sc_addr[1] = force_subclients[3];
853                 } else {
854                         sc_addr[1] = 0x48 + ((val1 >> 4) & 0x07);
855                 }
856                 if (sc_addr[0] == sc_addr[1]) {
857                         dev_err(&new_client->dev,
858                                "Duplicate addresses 0x%x for subclients.\n",
859                                sc_addr[0]);
860                         err = -EBUSY;
861                         goto ERROR_SC_2;
862                 }
863         }
864
865         for (i = 0; i <= 1; i++) {
866                 data->lm75[i] = i2c_new_dummy(adapter, sc_addr[i]);
867                 if (!data->lm75[i]) {
868                         dev_err(&new_client->dev, "Subclient %d "
869                                 "registration at address 0x%x "
870                                 "failed.\n", i, sc_addr[i]);
871                         err = -ENOMEM;
872                         if (i == 1)
873                                 goto ERROR_SC_3;
874                         goto ERROR_SC_2;
875                 }
876                 if (kind == w83783s)
877                         break;
878         }
879
880         return 0;
881
882 /* Undo inits in case of errors */
883 ERROR_SC_3:
884         i2c_unregister_device(data->lm75[0]);
885 ERROR_SC_2:
886 ERROR_SC_1:
887         return err;
888 }
889
890 #define IN_UNIT_ATTRS(X)                                        \
891         &sensor_dev_attr_in##X##_input.dev_attr.attr,           \
892         &sensor_dev_attr_in##X##_min.dev_attr.attr,             \
893         &sensor_dev_attr_in##X##_max.dev_attr.attr,             \
894         &sensor_dev_attr_in##X##_alarm.dev_attr.attr,           \
895         &sensor_dev_attr_in##X##_beep.dev_attr.attr
896
897 #define FAN_UNIT_ATTRS(X)                                       \
898         &sensor_dev_attr_fan##X##_input.dev_attr.attr,          \
899         &sensor_dev_attr_fan##X##_min.dev_attr.attr,            \
900         &sensor_dev_attr_fan##X##_div.dev_attr.attr,            \
901         &sensor_dev_attr_fan##X##_alarm.dev_attr.attr,          \
902         &sensor_dev_attr_fan##X##_beep.dev_attr.attr
903
904 #define TEMP_UNIT_ATTRS(X)                                      \
905         &sensor_dev_attr_temp##X##_input.dev_attr.attr,         \
906         &sensor_dev_attr_temp##X##_max.dev_attr.attr,           \
907         &sensor_dev_attr_temp##X##_max_hyst.dev_attr.attr,      \
908         &sensor_dev_attr_temp##X##_alarm.dev_attr.attr,         \
909         &sensor_dev_attr_temp##X##_beep.dev_attr.attr
910
911 static struct attribute* w83781d_attributes[] = {
912         IN_UNIT_ATTRS(0),
913         IN_UNIT_ATTRS(2),
914         IN_UNIT_ATTRS(3),
915         IN_UNIT_ATTRS(4),
916         IN_UNIT_ATTRS(5),
917         IN_UNIT_ATTRS(6),
918         FAN_UNIT_ATTRS(1),
919         FAN_UNIT_ATTRS(2),
920         FAN_UNIT_ATTRS(3),
921         TEMP_UNIT_ATTRS(1),
922         TEMP_UNIT_ATTRS(2),
923         &dev_attr_cpu0_vid.attr,
924         &dev_attr_vrm.attr,
925         &dev_attr_alarms.attr,
926         &dev_attr_beep_mask.attr,
927         &sensor_dev_attr_beep_enable.dev_attr.attr,
928         NULL
929 };
930 static const struct attribute_group w83781d_group = {
931         .attrs = w83781d_attributes,
932 };
933
934 static struct attribute *w83781d_attributes_opt[] = {
935         IN_UNIT_ATTRS(1),
936         IN_UNIT_ATTRS(7),
937         IN_UNIT_ATTRS(8),
938         TEMP_UNIT_ATTRS(3),
939         &sensor_dev_attr_pwm1.dev_attr.attr,
940         &sensor_dev_attr_pwm2.dev_attr.attr,
941         &sensor_dev_attr_pwm3.dev_attr.attr,
942         &sensor_dev_attr_pwm4.dev_attr.attr,
943         &dev_attr_pwm2_enable.attr,
944         &sensor_dev_attr_temp1_type.dev_attr.attr,
945         &sensor_dev_attr_temp2_type.dev_attr.attr,
946         &sensor_dev_attr_temp3_type.dev_attr.attr,
947         NULL
948 };
949 static const struct attribute_group w83781d_group_opt = {
950         .attrs = w83781d_attributes_opt,
951 };
952
953 /* No clean up is done on error, it's up to the caller */
954 static int
955 w83781d_create_files(struct device *dev, int kind, int is_isa)
956 {
957         int err;
958
959         if ((err = sysfs_create_group(&dev->kobj, &w83781d_group)))
960                 return err;
961
962         if (kind != w83783s) {
963                 if ((err = device_create_file(dev,
964                                 &sensor_dev_attr_in1_input.dev_attr))
965                     || (err = device_create_file(dev,
966                                 &sensor_dev_attr_in1_min.dev_attr))
967                     || (err = device_create_file(dev,
968                                 &sensor_dev_attr_in1_max.dev_attr))
969                     || (err = device_create_file(dev,
970                                 &sensor_dev_attr_in1_alarm.dev_attr))
971                     || (err = device_create_file(dev,
972                                 &sensor_dev_attr_in1_beep.dev_attr)))
973                         return err;
974         }
975         if (kind != as99127f && kind != w83781d && kind != w83783s) {
976                 if ((err = device_create_file(dev,
977                                 &sensor_dev_attr_in7_input.dev_attr))
978                     || (err = device_create_file(dev,
979                                 &sensor_dev_attr_in7_min.dev_attr))
980                     || (err = device_create_file(dev,
981                                 &sensor_dev_attr_in7_max.dev_attr))
982                     || (err = device_create_file(dev,
983                                 &sensor_dev_attr_in7_alarm.dev_attr))
984                     || (err = device_create_file(dev,
985                                 &sensor_dev_attr_in7_beep.dev_attr))
986                     || (err = device_create_file(dev,
987                                 &sensor_dev_attr_in8_input.dev_attr))
988                     || (err = device_create_file(dev,
989                                 &sensor_dev_attr_in8_min.dev_attr))
990                     || (err = device_create_file(dev,
991                                 &sensor_dev_attr_in8_max.dev_attr))
992                     || (err = device_create_file(dev,
993                                 &sensor_dev_attr_in8_alarm.dev_attr))
994                     || (err = device_create_file(dev,
995                                 &sensor_dev_attr_in8_beep.dev_attr)))
996                         return err;
997         }
998         if (kind != w83783s) {
999                 if ((err = device_create_file(dev,
1000                                 &sensor_dev_attr_temp3_input.dev_attr))
1001                     || (err = device_create_file(dev,
1002                                 &sensor_dev_attr_temp3_max.dev_attr))
1003                     || (err = device_create_file(dev,
1004                                 &sensor_dev_attr_temp3_max_hyst.dev_attr))
1005                     || (err = device_create_file(dev,
1006                                 &sensor_dev_attr_temp3_alarm.dev_attr))
1007                     || (err = device_create_file(dev,
1008                                 &sensor_dev_attr_temp3_beep.dev_attr)))
1009                         return err;
1010
1011                 if (kind != w83781d) {
1012                         err = sysfs_chmod_file(&dev->kobj,
1013                                 &sensor_dev_attr_temp3_alarm.dev_attr.attr,
1014                                 S_IRUGO | S_IWUSR);
1015                         if (err)
1016                                 return err;
1017                 }
1018         }
1019
1020         if (kind != w83781d && kind != as99127f) {
1021                 if ((err = device_create_file(dev,
1022                                 &sensor_dev_attr_pwm1.dev_attr))
1023                     || (err = device_create_file(dev,
1024                                 &sensor_dev_attr_pwm2.dev_attr))
1025                     || (err = device_create_file(dev, &dev_attr_pwm2_enable)))
1026                         return err;
1027         }
1028         if (kind == w83782d && !is_isa) {
1029                 if ((err = device_create_file(dev,
1030                                 &sensor_dev_attr_pwm3.dev_attr))
1031                     || (err = device_create_file(dev,
1032                                 &sensor_dev_attr_pwm4.dev_attr)))
1033                         return err;
1034         }
1035
1036         if (kind != as99127f && kind != w83781d) {
1037                 if ((err = device_create_file(dev,
1038                                 &sensor_dev_attr_temp1_type.dev_attr))
1039                     || (err = device_create_file(dev,
1040                                 &sensor_dev_attr_temp2_type.dev_attr)))
1041                         return err;
1042                 if (kind != w83783s) {
1043                         if ((err = device_create_file(dev,
1044                                         &sensor_dev_attr_temp3_type.dev_attr)))
1045                                 return err;
1046                 }
1047         }
1048
1049         return 0;
1050 }
1051
1052 /* Return 0 if detection is successful, -ENODEV otherwise */
1053 static int
1054 w83781d_detect(struct i2c_client *client, int kind,
1055                struct i2c_board_info *info)
1056 {
1057         int val1 = 0, val2;
1058         struct w83781d_data *isa = w83781d_data_if_isa();
1059         struct i2c_adapter *adapter = client->adapter;
1060         int address = client->addr;
1061         const char *client_name = "";
1062         enum vendor { winbond, asus } vendid;
1063
1064         if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1065                 return -ENODEV;
1066
1067         /* We block updates of the ISA device to minimize the risk of
1068            concurrent access to the same W83781D chip through different
1069            interfaces. */
1070         if (isa)
1071                 mutex_lock(&isa->update_lock);
1072
1073         /* The w8378?d may be stuck in some other bank than bank 0. This may
1074            make reading other information impossible. Specify a force=... or
1075            force_*=... parameter, and the Winbond will be reset to the right
1076            bank. */
1077         if (kind < 0) {
1078                 if (i2c_smbus_read_byte_data
1079                     (client, W83781D_REG_CONFIG) & 0x80) {
1080                         dev_dbg(&adapter->dev, "Detection of w83781d chip "
1081                                 "failed at step 3\n");
1082                         goto err_nodev;
1083                 }
1084                 val1 = i2c_smbus_read_byte_data(client, W83781D_REG_BANK);
1085                 val2 = i2c_smbus_read_byte_data(client, W83781D_REG_CHIPMAN);
1086                 /* Check for Winbond or Asus ID if in bank 0 */
1087                 if ((!(val1 & 0x07)) &&
1088                     (((!(val1 & 0x80)) && (val2 != 0xa3) && (val2 != 0xc3))
1089                      || ((val1 & 0x80) && (val2 != 0x5c) && (val2 != 0x12)))) {
1090                         dev_dbg(&adapter->dev, "Detection of w83781d chip "
1091                                 "failed at step 4\n");
1092                         goto err_nodev;
1093                 }
1094                 /* If Winbond SMBus, check address at 0x48.
1095                    Asus doesn't support, except for as99127f rev.2 */
1096                 if ((!(val1 & 0x80) && (val2 == 0xa3)) ||
1097                     ((val1 & 0x80) && (val2 == 0x5c))) {
1098                         if (i2c_smbus_read_byte_data
1099                             (client, W83781D_REG_I2C_ADDR) != address) {
1100                                 dev_dbg(&adapter->dev, "Detection of w83781d "
1101                                         "chip failed at step 5\n");
1102                                 goto err_nodev;
1103                         }
1104                 }
1105         }
1106
1107         /* We have either had a force parameter, or we have already detected the
1108            Winbond. Put it now into bank 0 and Vendor ID High Byte */
1109         i2c_smbus_write_byte_data(client, W83781D_REG_BANK,
1110                 (i2c_smbus_read_byte_data(client, W83781D_REG_BANK)
1111                  & 0x78) | 0x80);
1112
1113         /* Determine the chip type. */
1114         if (kind <= 0) {
1115                 /* get vendor ID */
1116                 val2 = i2c_smbus_read_byte_data(client, W83781D_REG_CHIPMAN);
1117                 if (val2 == 0x5c)
1118                         vendid = winbond;
1119                 else if (val2 == 0x12)
1120                         vendid = asus;
1121                 else {
1122                         dev_dbg(&adapter->dev, "w83781d chip vendor is "
1123                                 "neither Winbond nor Asus\n");
1124                         goto err_nodev;
1125                 }
1126
1127                 val1 = i2c_smbus_read_byte_data(client, W83781D_REG_WCHIPID);
1128                 if ((val1 == 0x10 || val1 == 0x11) && vendid == winbond)
1129                         kind = w83781d;
1130                 else if (val1 == 0x30 && vendid == winbond)
1131                         kind = w83782d;
1132                 else if (val1 == 0x40 && vendid == winbond && address == 0x2d)
1133                         kind = w83783s;
1134                 else if (val1 == 0x31)
1135                         kind = as99127f;
1136                 else {
1137                         if (kind == 0)
1138                                 dev_warn(&adapter->dev, "Ignoring 'force' "
1139                                          "parameter for unknown chip at "
1140                                          "address 0x%02x\n", address);
1141                         goto err_nodev;
1142                 }
1143
1144                 if ((kind == w83781d || kind == w83782d)
1145                  && w83781d_alias_detect(client, val1)) {
1146                         dev_dbg(&adapter->dev, "Device at 0x%02x appears to "
1147                                 "be the same as ISA device\n", address);
1148                         goto err_nodev;
1149                 }
1150         }
1151
1152         if (isa)
1153                 mutex_unlock(&isa->update_lock);
1154
1155         if (kind == w83781d) {
1156                 client_name = "w83781d";
1157         } else if (kind == w83782d) {
1158                 client_name = "w83782d";
1159         } else if (kind == w83783s) {
1160                 client_name = "w83783s";
1161         } else if (kind == as99127f) {
1162                 client_name = "as99127f";
1163         }
1164
1165         strlcpy(info->type, client_name, I2C_NAME_SIZE);
1166
1167         return 0;
1168
1169  err_nodev:
1170         if (isa)
1171                 mutex_unlock(&isa->update_lock);
1172         return -ENODEV;
1173 }
1174
1175 static int
1176 w83781d_probe(struct i2c_client *client, const struct i2c_device_id *id)
1177 {
1178         struct device *dev = &client->dev;
1179         struct w83781d_data *data;
1180         int err;
1181
1182         data = kzalloc(sizeof(struct w83781d_data), GFP_KERNEL);
1183         if (!data) {
1184                 err = -ENOMEM;
1185                 goto ERROR1;
1186         }
1187
1188         i2c_set_clientdata(client, data);
1189         mutex_init(&data->lock);
1190         mutex_init(&data->update_lock);
1191
1192         data->type = id->driver_data;
1193         data->client = client;
1194
1195         /* attach secondary i2c lm75-like clients */
1196         err = w83781d_detect_subclients(client);
1197         if (err)
1198                 goto ERROR3;
1199
1200         /* Initialize the chip */
1201         w83781d_init_device(dev);
1202
1203         /* Register sysfs hooks */
1204         err = w83781d_create_files(dev, data->type, 0);
1205         if (err)
1206                 goto ERROR4;
1207
1208         data->hwmon_dev = hwmon_device_register(dev);
1209         if (IS_ERR(data->hwmon_dev)) {
1210                 err = PTR_ERR(data->hwmon_dev);
1211                 goto ERROR4;
1212         }
1213
1214         return 0;
1215
1216 ERROR4:
1217         sysfs_remove_group(&dev->kobj, &w83781d_group);
1218         sysfs_remove_group(&dev->kobj, &w83781d_group_opt);
1219
1220         if (data->lm75[0])
1221                 i2c_unregister_device(data->lm75[0]);
1222         if (data->lm75[1])
1223                 i2c_unregister_device(data->lm75[1]);
1224 ERROR3:
1225         i2c_set_clientdata(client, NULL);
1226         kfree(data);
1227 ERROR1:
1228         return err;
1229 }
1230
1231 static int
1232 w83781d_remove(struct i2c_client *client)
1233 {
1234         struct w83781d_data *data = i2c_get_clientdata(client);
1235         struct device *dev = &client->dev;
1236
1237         hwmon_device_unregister(data->hwmon_dev);
1238
1239         sysfs_remove_group(&dev->kobj, &w83781d_group);
1240         sysfs_remove_group(&dev->kobj, &w83781d_group_opt);
1241
1242         if (data->lm75[0])
1243                 i2c_unregister_device(data->lm75[0]);
1244         if (data->lm75[1])
1245                 i2c_unregister_device(data->lm75[1]);
1246
1247         i2c_set_clientdata(client, NULL);
1248         kfree(data);
1249
1250         return 0;
1251 }
1252
1253 static int
1254 w83781d_read_value_i2c(struct w83781d_data *data, u16 reg)
1255 {
1256         struct i2c_client *client = data->client;
1257         int res, bank;
1258         struct i2c_client *cl;
1259
1260         bank = (reg >> 8) & 0x0f;
1261         if (bank > 2)
1262                 /* switch banks */
1263                 i2c_smbus_write_byte_data(client, W83781D_REG_BANK,
1264                                           bank);
1265         if (bank == 0 || bank > 2) {
1266                 res = i2c_smbus_read_byte_data(client, reg & 0xff);
1267         } else {
1268                 /* switch to subclient */
1269                 cl = data->lm75[bank - 1];
1270                 /* convert from ISA to LM75 I2C addresses */
1271                 switch (reg & 0xff) {
1272                 case 0x50:      /* TEMP */
1273                         res = swab16(i2c_smbus_read_word_data(cl, 0));
1274                         break;
1275                 case 0x52:      /* CONFIG */
1276                         res = i2c_smbus_read_byte_data(cl, 1);
1277                         break;
1278                 case 0x53:      /* HYST */
1279                         res = swab16(i2c_smbus_read_word_data(cl, 2));
1280                         break;
1281                 case 0x55:      /* OVER */
1282                 default:
1283                         res = swab16(i2c_smbus_read_word_data(cl, 3));
1284                         break;
1285                 }
1286         }
1287         if (bank > 2)
1288                 i2c_smbus_write_byte_data(client, W83781D_REG_BANK, 0);
1289
1290         return res;
1291 }
1292
1293 static int
1294 w83781d_write_value_i2c(struct w83781d_data *data, u16 reg, u16 value)
1295 {
1296         struct i2c_client *client = data->client;
1297         int bank;
1298         struct i2c_client *cl;
1299
1300         bank = (reg >> 8) & 0x0f;
1301         if (bank > 2)
1302                 /* switch banks */
1303                 i2c_smbus_write_byte_data(client, W83781D_REG_BANK,
1304                                           bank);
1305         if (bank == 0 || bank > 2) {
1306                 i2c_smbus_write_byte_data(client, reg & 0xff,
1307                                           value & 0xff);
1308         } else {
1309                 /* switch to subclient */
1310                 cl = data->lm75[bank - 1];
1311                 /* convert from ISA to LM75 I2C addresses */
1312                 switch (reg & 0xff) {
1313                 case 0x52:      /* CONFIG */
1314                         i2c_smbus_write_byte_data(cl, 1, value & 0xff);
1315                         break;
1316                 case 0x53:      /* HYST */
1317                         i2c_smbus_write_word_data(cl, 2, swab16(value));
1318                         break;
1319                 case 0x55:      /* OVER */
1320                         i2c_smbus_write_word_data(cl, 3, swab16(value));
1321                         break;
1322                 }
1323         }
1324         if (bank > 2)
1325                 i2c_smbus_write_byte_data(client, W83781D_REG_BANK, 0);
1326
1327         return 0;
1328 }
1329
1330 static void
1331 w83781d_init_device(struct device *dev)
1332 {
1333         struct w83781d_data *data = dev_get_drvdata(dev);
1334         int i, p;
1335         int type = data->type;
1336         u8 tmp;
1337
1338         if (reset && type != as99127f) { /* this resets registers we don't have
1339                                            documentation for on the as99127f */
1340                 /* Resetting the chip has been the default for a long time,
1341                    but it causes the BIOS initializations (fan clock dividers,
1342                    thermal sensor types...) to be lost, so it is now optional.
1343                    It might even go away if nobody reports it as being useful,
1344                    as I see very little reason why this would be needed at
1345                    all. */
1346                 dev_info(dev, "If reset=1 solved a problem you were "
1347                          "having, please report!\n");
1348
1349                 /* save these registers */
1350                 i = w83781d_read_value(data, W83781D_REG_BEEP_CONFIG);
1351                 p = w83781d_read_value(data, W83781D_REG_PWMCLK12);
1352                 /* Reset all except Watchdog values and last conversion values
1353                    This sets fan-divs to 2, among others */
1354                 w83781d_write_value(data, W83781D_REG_CONFIG, 0x80);
1355                 /* Restore the registers and disable power-on abnormal beep.
1356                    This saves FAN 1/2/3 input/output values set by BIOS. */
1357                 w83781d_write_value(data, W83781D_REG_BEEP_CONFIG, i | 0x80);
1358                 w83781d_write_value(data, W83781D_REG_PWMCLK12, p);
1359                 /* Disable master beep-enable (reset turns it on).
1360                    Individual beep_mask should be reset to off but for some reason
1361                    disabling this bit helps some people not get beeped */
1362                 w83781d_write_value(data, W83781D_REG_BEEP_INTS2, 0);
1363         }
1364
1365         /* Disable power-on abnormal beep, as advised by the datasheet.
1366            Already done if reset=1. */
1367         if (init && !reset && type != as99127f) {
1368                 i = w83781d_read_value(data, W83781D_REG_BEEP_CONFIG);
1369                 w83781d_write_value(data, W83781D_REG_BEEP_CONFIG, i | 0x80);
1370         }
1371
1372         data->vrm = vid_which_vrm();
1373
1374         if ((type != w83781d) && (type != as99127f)) {
1375                 tmp = w83781d_read_value(data, W83781D_REG_SCFG1);
1376                 for (i = 1; i <= 3; i++) {
1377                         if (!(tmp & BIT_SCFG1[i - 1])) {
1378                                 data->sens[i - 1] = 4;
1379                         } else {
1380                                 if (w83781d_read_value
1381                                     (data,
1382                                      W83781D_REG_SCFG2) & BIT_SCFG2[i - 1])
1383                                         data->sens[i - 1] = 1;
1384                                 else
1385                                         data->sens[i - 1] = 2;
1386                         }
1387                         if (type == w83783s && i == 2)
1388                                 break;
1389                 }
1390         }
1391
1392         if (init && type != as99127f) {
1393                 /* Enable temp2 */
1394                 tmp = w83781d_read_value(data, W83781D_REG_TEMP2_CONFIG);
1395                 if (tmp & 0x01) {
1396                         dev_warn(dev, "Enabling temp2, readings "
1397                                  "might not make sense\n");
1398                         w83781d_write_value(data, W83781D_REG_TEMP2_CONFIG,
1399                                 tmp & 0xfe);
1400                 }
1401
1402                 /* Enable temp3 */
1403                 if (type != w83783s) {
1404                         tmp = w83781d_read_value(data,
1405                                 W83781D_REG_TEMP3_CONFIG);
1406                         if (tmp & 0x01) {
1407                                 dev_warn(dev, "Enabling temp3, "
1408                                          "readings might not make sense\n");
1409                                 w83781d_write_value(data,
1410                                         W83781D_REG_TEMP3_CONFIG, tmp & 0xfe);
1411                         }
1412                 }
1413         }
1414
1415         /* Start monitoring */
1416         w83781d_write_value(data, W83781D_REG_CONFIG,
1417                             (w83781d_read_value(data,
1418                                                 W83781D_REG_CONFIG) & 0xf7)
1419                             | 0x01);
1420
1421         /* A few vars need to be filled upon startup */
1422         for (i = 0; i < 3; i++) {
1423                 data->fan_min[i] = w83781d_read_value(data,
1424                                         W83781D_REG_FAN_MIN(i));
1425         }
1426
1427         mutex_init(&data->update_lock);
1428 }
1429
1430 static struct w83781d_data *w83781d_update_device(struct device *dev)
1431 {
1432         struct w83781d_data *data = dev_get_drvdata(dev);
1433         struct i2c_client *client = data->client;
1434         int i;
1435
1436         mutex_lock(&data->update_lock);
1437
1438         if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
1439             || !data->valid) {
1440                 dev_dbg(dev, "Starting device update\n");
1441
1442                 for (i = 0; i <= 8; i++) {
1443                         if (data->type == w83783s && i == 1)
1444                                 continue;       /* 783S has no in1 */
1445                         data->in[i] =
1446                             w83781d_read_value(data, W83781D_REG_IN(i));
1447                         data->in_min[i] =
1448                             w83781d_read_value(data, W83781D_REG_IN_MIN(i));
1449                         data->in_max[i] =
1450                             w83781d_read_value(data, W83781D_REG_IN_MAX(i));
1451                         if ((data->type != w83782d) && (i == 6))
1452                                 break;
1453                 }
1454                 for (i = 0; i < 3; i++) {
1455                         data->fan[i] =
1456                             w83781d_read_value(data, W83781D_REG_FAN(i));
1457                         data->fan_min[i] =
1458                             w83781d_read_value(data, W83781D_REG_FAN_MIN(i));
1459                 }
1460                 if (data->type != w83781d && data->type != as99127f) {
1461                         for (i = 0; i < 4; i++) {
1462                                 data->pwm[i] =
1463                                     w83781d_read_value(data,
1464                                                        W83781D_REG_PWM[i]);
1465                                 /* Only W83782D on SMBus has PWM3 and PWM4 */
1466                                 if ((data->type != w83782d || !client)
1467                                     && i == 1)
1468                                         break;
1469                         }
1470                         /* Only PWM2 can be disabled */
1471                         data->pwm2_enable = (w83781d_read_value(data,
1472                                               W83781D_REG_PWMCLK12) & 0x08) >> 3;
1473                 }
1474
1475                 data->temp = w83781d_read_value(data, W83781D_REG_TEMP(1));
1476                 data->temp_max =
1477                     w83781d_read_value(data, W83781D_REG_TEMP_OVER(1));
1478                 data->temp_max_hyst =
1479                     w83781d_read_value(data, W83781D_REG_TEMP_HYST(1));
1480                 data->temp_add[0] =
1481                     w83781d_read_value(data, W83781D_REG_TEMP(2));
1482                 data->temp_max_add[0] =
1483                     w83781d_read_value(data, W83781D_REG_TEMP_OVER(2));
1484                 data->temp_max_hyst_add[0] =
1485                     w83781d_read_value(data, W83781D_REG_TEMP_HYST(2));
1486                 if (data->type != w83783s) {
1487                         data->temp_add[1] =
1488                             w83781d_read_value(data, W83781D_REG_TEMP(3));
1489                         data->temp_max_add[1] =
1490                             w83781d_read_value(data,
1491                                                W83781D_REG_TEMP_OVER(3));
1492                         data->temp_max_hyst_add[1] =
1493                             w83781d_read_value(data,
1494                                                W83781D_REG_TEMP_HYST(3));
1495                 }
1496                 i = w83781d_read_value(data, W83781D_REG_VID_FANDIV);
1497                 data->vid = i & 0x0f;
1498                 data->vid |= (w83781d_read_value(data,
1499                                         W83781D_REG_CHIPID) & 0x01) << 4;
1500                 data->fan_div[0] = (i >> 4) & 0x03;
1501                 data->fan_div[1] = (i >> 6) & 0x03;
1502                 data->fan_div[2] = (w83781d_read_value(data,
1503                                         W83781D_REG_PIN) >> 6) & 0x03;
1504                 if ((data->type != w83781d) && (data->type != as99127f)) {
1505                         i = w83781d_read_value(data, W83781D_REG_VBAT);
1506                         data->fan_div[0] |= (i >> 3) & 0x04;
1507                         data->fan_div[1] |= (i >> 4) & 0x04;
1508                         data->fan_div[2] |= (i >> 5) & 0x04;
1509                 }
1510                 if (data->type == w83782d) {
1511                         data->alarms = w83781d_read_value(data,
1512                                                 W83782D_REG_ALARM1)
1513                                      | (w83781d_read_value(data,
1514                                                 W83782D_REG_ALARM2) << 8)
1515                                      | (w83781d_read_value(data,
1516                                                 W83782D_REG_ALARM3) << 16);
1517                 } else if (data->type == w83783s) {
1518                         data->alarms = w83781d_read_value(data,
1519                                                 W83782D_REG_ALARM1)
1520                                      | (w83781d_read_value(data,
1521                                                 W83782D_REG_ALARM2) << 8);
1522                 } else {
1523                         /* No real-time status registers, fall back to
1524                            interrupt status registers */
1525                         data->alarms = w83781d_read_value(data,
1526                                                 W83781D_REG_ALARM1)
1527                                      | (w83781d_read_value(data,
1528                                                 W83781D_REG_ALARM2) << 8);
1529                 }
1530                 i = w83781d_read_value(data, W83781D_REG_BEEP_INTS2);
1531                 data->beep_mask = (i << 8) +
1532                     w83781d_read_value(data, W83781D_REG_BEEP_INTS1);
1533                 if ((data->type != w83781d) && (data->type != as99127f)) {
1534                         data->beep_mask |=
1535                             w83781d_read_value(data,
1536                                                W83781D_REG_BEEP_INTS3) << 16;
1537                 }
1538                 data->last_updated = jiffies;
1539                 data->valid = 1;
1540         }
1541
1542         mutex_unlock(&data->update_lock);
1543
1544         return data;
1545 }
1546
1547 static const struct i2c_device_id w83781d_ids[] = {
1548         { "w83781d", w83781d, },
1549         { "w83782d", w83782d, },
1550         { "w83783s", w83783s, },
1551         { "as99127f", as99127f },
1552         { /* LIST END */ }
1553 };
1554 MODULE_DEVICE_TABLE(i2c, w83781d_ids);
1555
1556 static struct i2c_driver w83781d_driver = {
1557         .class          = I2C_CLASS_HWMON,
1558         .driver = {
1559                 .name = "w83781d",
1560         },
1561         .probe          = w83781d_probe,
1562         .remove         = w83781d_remove,
1563         .id_table       = w83781d_ids,
1564         .detect         = w83781d_detect,
1565         .address_data   = &addr_data,
1566 };
1567
1568 /*
1569  * ISA related code
1570  */
1571 #ifdef CONFIG_ISA
1572
1573 /* ISA device, if found */
1574 static struct platform_device *pdev;
1575
1576 static unsigned short isa_address = 0x290;
1577
1578 /* I2C devices get this name attribute automatically, but for ISA devices
1579    we must create it by ourselves. */
1580 static ssize_t
1581 show_name(struct device *dev, struct device_attribute *devattr, char *buf)
1582 {
1583         struct w83781d_data *data = dev_get_drvdata(dev);
1584         return sprintf(buf, "%s\n", data->name);
1585 }
1586 static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
1587
1588 static struct w83781d_data *w83781d_data_if_isa(void)
1589 {
1590         return pdev ? platform_get_drvdata(pdev) : NULL;
1591 }
1592
1593 /* Returns 1 if the I2C chip appears to be an alias of the ISA chip */
1594 static int w83781d_alias_detect(struct i2c_client *client, u8 chipid)
1595 {
1596         struct w83781d_data *isa;
1597         int i;
1598
1599         if (!pdev)      /* No ISA chip */
1600                 return 0;
1601
1602         isa = platform_get_drvdata(pdev);
1603
1604         if (w83781d_read_value(isa, W83781D_REG_I2C_ADDR) != client->addr)
1605                 return 0;       /* Address doesn't match */
1606         if (w83781d_read_value(isa, W83781D_REG_WCHIPID) != chipid)
1607                 return 0;       /* Chip type doesn't match */
1608
1609         /* We compare all the limit registers, the config register and the
1610          * interrupt mask registers */
1611         for (i = 0x2b; i <= 0x3d; i++) {
1612                 if (w83781d_read_value(isa, i) !=
1613                     i2c_smbus_read_byte_data(client, i))
1614                         return 0;
1615         }
1616         if (w83781d_read_value(isa, W83781D_REG_CONFIG) !=
1617             i2c_smbus_read_byte_data(client, W83781D_REG_CONFIG))
1618                 return 0;
1619         for (i = 0x43; i <= 0x46; i++) {
1620                 if (w83781d_read_value(isa, i) !=
1621                     i2c_smbus_read_byte_data(client, i))
1622                         return 0;
1623         }
1624
1625         return 1;
1626 }
1627
1628 static int
1629 w83781d_read_value_isa(struct w83781d_data *data, u16 reg)
1630 {
1631         int word_sized, res;
1632
1633         word_sized = (((reg & 0xff00) == 0x100)
1634                       || ((reg & 0xff00) == 0x200))
1635             && (((reg & 0x00ff) == 0x50)
1636                 || ((reg & 0x00ff) == 0x53)
1637                 || ((reg & 0x00ff) == 0x55));
1638         if (reg & 0xff00) {
1639                 outb_p(W83781D_REG_BANK,
1640                        data->isa_addr + W83781D_ADDR_REG_OFFSET);
1641                 outb_p(reg >> 8,
1642                        data->isa_addr + W83781D_DATA_REG_OFFSET);
1643         }
1644         outb_p(reg & 0xff, data->isa_addr + W83781D_ADDR_REG_OFFSET);
1645         res = inb_p(data->isa_addr + W83781D_DATA_REG_OFFSET);
1646         if (word_sized) {
1647                 outb_p((reg & 0xff) + 1,
1648                        data->isa_addr + W83781D_ADDR_REG_OFFSET);
1649                 res =
1650                     (res << 8) + inb_p(data->isa_addr +
1651                                        W83781D_DATA_REG_OFFSET);
1652         }
1653         if (reg & 0xff00) {
1654                 outb_p(W83781D_REG_BANK,
1655                        data->isa_addr + W83781D_ADDR_REG_OFFSET);
1656                 outb_p(0, data->isa_addr + W83781D_DATA_REG_OFFSET);
1657         }
1658         return res;
1659 }
1660
1661 static void
1662 w83781d_write_value_isa(struct w83781d_data *data, u16 reg, u16 value)
1663 {
1664         int word_sized;
1665
1666         word_sized = (((reg & 0xff00) == 0x100)
1667                       || ((reg & 0xff00) == 0x200))
1668             && (((reg & 0x00ff) == 0x53)
1669                 || ((reg & 0x00ff) == 0x55));
1670         if (reg & 0xff00) {
1671                 outb_p(W83781D_REG_BANK,
1672                        data->isa_addr + W83781D_ADDR_REG_OFFSET);
1673                 outb_p(reg >> 8,
1674                        data->isa_addr + W83781D_DATA_REG_OFFSET);
1675         }
1676         outb_p(reg & 0xff, data->isa_addr + W83781D_ADDR_REG_OFFSET);
1677         if (word_sized) {
1678                 outb_p(value >> 8,
1679                        data->isa_addr + W83781D_DATA_REG_OFFSET);
1680                 outb_p((reg & 0xff) + 1,
1681                        data->isa_addr + W83781D_ADDR_REG_OFFSET);
1682         }
1683         outb_p(value & 0xff, data->isa_addr + W83781D_DATA_REG_OFFSET);
1684         if (reg & 0xff00) {
1685                 outb_p(W83781D_REG_BANK,
1686                        data->isa_addr + W83781D_ADDR_REG_OFFSET);
1687                 outb_p(0, data->isa_addr + W83781D_DATA_REG_OFFSET);
1688         }
1689 }
1690
1691 /* The SMBus locks itself, usually, but nothing may access the Winbond between
1692    bank switches. ISA access must always be locked explicitly!
1693    We ignore the W83781D BUSY flag at this moment - it could lead to deadlocks,
1694    would slow down the W83781D access and should not be necessary.
1695    There are some ugly typecasts here, but the good news is - they should
1696    nowhere else be necessary! */
1697 static int
1698 w83781d_read_value(struct w83781d_data *data, u16 reg)
1699 {
1700         struct i2c_client *client = data->client;
1701         int res;
1702
1703         mutex_lock(&data->lock);
1704         if (client)
1705                 res = w83781d_read_value_i2c(data, reg);
1706         else
1707                 res = w83781d_read_value_isa(data, reg);
1708         mutex_unlock(&data->lock);
1709         return res;
1710 }
1711
1712 static int
1713 w83781d_write_value(struct w83781d_data *data, u16 reg, u16 value)
1714 {
1715         struct i2c_client *client = data->client;
1716
1717         mutex_lock(&data->lock);
1718         if (client)
1719                 w83781d_write_value_i2c(data, reg, value);
1720         else
1721                 w83781d_write_value_isa(data, reg, value);
1722         mutex_unlock(&data->lock);
1723         return 0;
1724 }
1725
1726 static int __devinit
1727 w83781d_isa_probe(struct platform_device *pdev)
1728 {
1729         int err, reg;
1730         struct w83781d_data *data;
1731         struct resource *res;
1732
1733         /* Reserve the ISA region */
1734         res = platform_get_resource(pdev, IORESOURCE_IO, 0);
1735         if (!request_region(res->start + W83781D_ADDR_REG_OFFSET, 2,
1736                             "w83781d")) {
1737                 err = -EBUSY;
1738                 goto exit;
1739         }
1740
1741         data = kzalloc(sizeof(struct w83781d_data), GFP_KERNEL);
1742         if (!data) {
1743                 err = -ENOMEM;
1744                 goto exit_release_region;
1745         }
1746         mutex_init(&data->lock);
1747         data->isa_addr = res->start;
1748         platform_set_drvdata(pdev, data);
1749
1750         reg = w83781d_read_value(data, W83781D_REG_WCHIPID);
1751         switch (reg) {
1752         case 0x30:
1753                 data->type = w83782d;
1754                 data->name = "w83782d";
1755                 break;
1756         default:
1757                 data->type = w83781d;
1758                 data->name = "w83781d";
1759         }
1760
1761         /* Initialize the W83781D chip */
1762         w83781d_init_device(&pdev->dev);
1763
1764         /* Register sysfs hooks */
1765         err = w83781d_create_files(&pdev->dev, data->type, 1);
1766         if (err)
1767                 goto exit_remove_files;
1768
1769         err = device_create_file(&pdev->dev, &dev_attr_name);
1770         if (err)
1771                 goto exit_remove_files;
1772
1773         data->hwmon_dev = hwmon_device_register(&pdev->dev);
1774         if (IS_ERR(data->hwmon_dev)) {
1775                 err = PTR_ERR(data->hwmon_dev);
1776                 goto exit_remove_files;
1777         }
1778
1779         return 0;
1780
1781  exit_remove_files:
1782         sysfs_remove_group(&pdev->dev.kobj, &w83781d_group);
1783         sysfs_remove_group(&pdev->dev.kobj, &w83781d_group_opt);
1784         device_remove_file(&pdev->dev, &dev_attr_name);
1785         kfree(data);
1786  exit_release_region:
1787         release_region(res->start + W83781D_ADDR_REG_OFFSET, 2);
1788  exit:
1789         return err;
1790 }
1791
1792 static int __devexit
1793 w83781d_isa_remove(struct platform_device *pdev)
1794 {
1795         struct w83781d_data *data = platform_get_drvdata(pdev);
1796
1797         hwmon_device_unregister(data->hwmon_dev);
1798         sysfs_remove_group(&pdev->dev.kobj, &w83781d_group);
1799         sysfs_remove_group(&pdev->dev.kobj, &w83781d_group_opt);
1800         device_remove_file(&pdev->dev, &dev_attr_name);
1801         release_region(data->isa_addr + W83781D_ADDR_REG_OFFSET, 2);
1802         kfree(data);
1803
1804         return 0;
1805 }
1806
1807 static struct platform_driver w83781d_isa_driver = {
1808         .driver = {
1809                 .owner = THIS_MODULE,
1810                 .name = "w83781d",
1811         },
1812         .probe = w83781d_isa_probe,
1813         .remove = __devexit_p(w83781d_isa_remove),
1814 };
1815
1816 /* return 1 if a supported chip is found, 0 otherwise */
1817 static int __init
1818 w83781d_isa_found(unsigned short address)
1819 {
1820         int val, save, found = 0;
1821
1822         /* We have to request the region in two parts because some
1823            boards declare base+4 to base+7 as a PNP device */
1824         if (!request_region(address, 4, "w83781d")) {
1825                 pr_debug("w83781d: Failed to request low part of region\n");
1826                 return 0;
1827         }
1828         if (!request_region(address + 4, 4, "w83781d")) {
1829                 pr_debug("w83781d: Failed to request high part of region\n");
1830                 release_region(address, 4);
1831                 return 0;
1832         }
1833
1834 #define REALLY_SLOW_IO
1835         /* We need the timeouts for at least some W83781D-like
1836            chips. But only if we read 'undefined' registers. */
1837         val = inb_p(address + 1);
1838         if (inb_p(address + 2) != val
1839          || inb_p(address + 3) != val
1840          || inb_p(address + 7) != val) {
1841                 pr_debug("w83781d: Detection failed at step 1\n");
1842                 goto release;
1843         }
1844 #undef REALLY_SLOW_IO
1845
1846         /* We should be able to change the 7 LSB of the address port. The
1847            MSB (busy flag) should be clear initially, set after the write. */
1848         save = inb_p(address + W83781D_ADDR_REG_OFFSET);
1849         if (save & 0x80) {
1850                 pr_debug("w83781d: Detection failed at step 2\n");
1851                 goto release;
1852         }
1853         val = ~save & 0x7f;
1854         outb_p(val, address + W83781D_ADDR_REG_OFFSET);
1855         if (inb_p(address + W83781D_ADDR_REG_OFFSET) != (val | 0x80)) {
1856                 outb_p(save, address + W83781D_ADDR_REG_OFFSET);
1857                 pr_debug("w83781d: Detection failed at step 3\n");
1858                 goto release;
1859         }
1860
1861         /* We found a device, now see if it could be a W83781D */
1862         outb_p(W83781D_REG_CONFIG, address + W83781D_ADDR_REG_OFFSET);
1863         val = inb_p(address + W83781D_DATA_REG_OFFSET);
1864         if (val & 0x80) {
1865                 pr_debug("w83781d: Detection failed at step 4\n");
1866                 goto release;
1867         }
1868         outb_p(W83781D_REG_BANK, address + W83781D_ADDR_REG_OFFSET);
1869         save = inb_p(address + W83781D_DATA_REG_OFFSET);
1870         outb_p(W83781D_REG_CHIPMAN, address + W83781D_ADDR_REG_OFFSET);
1871         val = inb_p(address + W83781D_DATA_REG_OFFSET);
1872         if ((!(save & 0x80) && (val != 0xa3))
1873          || ((save & 0x80) && (val != 0x5c))) {
1874                 pr_debug("w83781d: Detection failed at step 5\n");
1875                 goto release;
1876         }
1877         outb_p(W83781D_REG_I2C_ADDR, address + W83781D_ADDR_REG_OFFSET);
1878         val = inb_p(address + W83781D_DATA_REG_OFFSET);
1879         if (val < 0x03 || val > 0x77) { /* Not a valid I2C address */
1880                 pr_debug("w83781d: Detection failed at step 6\n");
1881                 goto release;
1882         }
1883
1884         /* The busy flag should be clear again */
1885         if (inb_p(address + W83781D_ADDR_REG_OFFSET) & 0x80) {
1886                 pr_debug("w83781d: Detection failed at step 7\n");
1887                 goto release;
1888         }
1889
1890         /* Determine the chip type */
1891         outb_p(W83781D_REG_BANK, address + W83781D_ADDR_REG_OFFSET);
1892         save = inb_p(address + W83781D_DATA_REG_OFFSET);
1893         outb_p(save & 0xf8, address + W83781D_DATA_REG_OFFSET);
1894         outb_p(W83781D_REG_WCHIPID, address + W83781D_ADDR_REG_OFFSET);
1895         val = inb_p(address + W83781D_DATA_REG_OFFSET);
1896         if ((val & 0xfe) == 0x10        /* W83781D */
1897          || val == 0x30)                /* W83782D */
1898                 found = 1;
1899
1900         if (found)
1901                 pr_info("w83781d: Found a %s chip at %#x\n",
1902                         val == 0x30 ? "W83782D" : "W83781D", (int)address);
1903
1904  release:
1905         release_region(address + 4, 4);
1906         release_region(address, 4);
1907         return found;
1908 }
1909
1910 static int __init
1911 w83781d_isa_device_add(unsigned short address)
1912 {
1913         struct resource res = {
1914                 .start  = address,
1915                 .end    = address + W83781D_EXTENT - 1,
1916                 .name   = "w83781d",
1917                 .flags  = IORESOURCE_IO,
1918         };
1919         int err;
1920
1921         pdev = platform_device_alloc("w83781d", address);
1922         if (!pdev) {
1923                 err = -ENOMEM;
1924                 printk(KERN_ERR "w83781d: Device allocation failed\n");
1925                 goto exit;
1926         }
1927
1928         err = platform_device_add_resources(pdev, &res, 1);
1929         if (err) {
1930                 printk(KERN_ERR "w83781d: Device resource addition failed "
1931                        "(%d)\n", err);
1932                 goto exit_device_put;
1933         }
1934
1935         err = platform_device_add(pdev);
1936         if (err) {
1937                 printk(KERN_ERR "w83781d: Device addition failed (%d)\n",
1938                        err);
1939                 goto exit_device_put;
1940         }
1941
1942         return 0;
1943
1944  exit_device_put:
1945         platform_device_put(pdev);
1946  exit:
1947         pdev = NULL;
1948         return err;
1949 }
1950
1951 static int __init
1952 w83781d_isa_register(void)
1953 {
1954         int res;
1955
1956         if (w83781d_isa_found(isa_address)) {
1957                 res = platform_driver_register(&w83781d_isa_driver);
1958                 if (res)
1959                         goto exit;
1960
1961                 /* Sets global pdev as a side effect */
1962                 res = w83781d_isa_device_add(isa_address);
1963                 if (res)
1964                         goto exit_unreg_isa_driver;
1965         }
1966
1967         return 0;
1968
1969 exit_unreg_isa_driver:
1970         platform_driver_unregister(&w83781d_isa_driver);
1971 exit:
1972         return res;
1973 }
1974
1975 static void
1976 w83781d_isa_unregister(void)
1977 {
1978         if (pdev) {
1979                 platform_device_unregister(pdev);
1980                 platform_driver_unregister(&w83781d_isa_driver);
1981         }
1982 }
1983 #else /* !CONFIG_ISA */
1984
1985 static struct w83781d_data *w83781d_data_if_isa(void)
1986 {
1987         return NULL;
1988 }
1989
1990 static int
1991 w83781d_alias_detect(struct i2c_client *client, u8 chipid)
1992 {
1993         return 0;
1994 }
1995
1996 static int
1997 w83781d_read_value(struct w83781d_data *data, u16 reg)
1998 {
1999         int res;
2000
2001         mutex_lock(&data->lock);
2002         res = w83781d_read_value_i2c(data, reg);
2003         mutex_unlock(&data->lock);
2004
2005         return res;
2006 }
2007
2008 static int
2009 w83781d_write_value(struct w83781d_data *data, u16 reg, u16 value)
2010 {
2011         mutex_lock(&data->lock);
2012         w83781d_write_value_i2c(data, reg, value);
2013         mutex_unlock(&data->lock);
2014
2015         return 0;
2016 }
2017
2018 static int __init
2019 w83781d_isa_register(void)
2020 {
2021         return 0;
2022 }
2023
2024 static void
2025 w83781d_isa_unregister(void)
2026 {
2027 }
2028 #endif /* CONFIG_ISA */
2029
2030 static int __init
2031 sensors_w83781d_init(void)
2032 {
2033         int res;
2034
2035         /* We register the ISA device first, so that we can skip the
2036          * registration of an I2C interface to the same device. */
2037         res = w83781d_isa_register();
2038         if (res)
2039                 goto exit;
2040
2041         res = i2c_add_driver(&w83781d_driver);
2042         if (res)
2043                 goto exit_unreg_isa;
2044
2045         return 0;
2046
2047  exit_unreg_isa:
2048         w83781d_isa_unregister();
2049  exit:
2050         return res;
2051 }
2052
2053 static void __exit
2054 sensors_w83781d_exit(void)
2055 {
2056         w83781d_isa_unregister();
2057         i2c_del_driver(&w83781d_driver);
2058 }
2059
2060 MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>, "
2061               "Philip Edelbrock <phil@netroedge.com>, "
2062               "and Mark Studebaker <mdsxyz123@yahoo.com>");
2063 MODULE_DESCRIPTION("W83781D driver");
2064 MODULE_LICENSE("GPL");
2065
2066 module_init(sensors_w83781d_init);
2067 module_exit(sensors_w83781d_exit);