2 w83781d.c - Part of lm_sensors, Linux kernel modules for hardware
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>
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.
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.
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.
25 Supports following chips:
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
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>
49 #include <linux/platform_device.h>
50 #include <linux/ioport.h>
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
);
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}");
68 module_param(reset
, bool, 0);
69 MODULE_PARM_DESC(reset
, "Set to one to reset chip on load");
72 module_param(init
, bool, 0);
73 MODULE_PARM_DESC(init
, "Set to zero to bypass chip initialization");
75 /* Constants specified below */
77 /* Length of ISA address segment */
78 #define W83781D_EXTENT 8
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
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)) : \
93 /* fan nr from 0 to 2 */
94 #define W83781D_REG_FAN_MIN(nr) (0x3b + (nr))
95 #define W83781D_REG_FAN(nr) (0x28 + (nr))
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) : \
104 #define W83781D_REG_TEMP_HYST(nr) ((nr == 3) ? (0x253) : \
105 ((nr == 2) ? (0x153) : \
107 #define W83781D_REG_TEMP_OVER(nr) ((nr == 3) ? (0x255) : \
108 ((nr == 2) ? (0x155) : \
111 #define W83781D_REG_CONFIG 0x40
113 /* Interrupt status (W83781D, AS99127F) */
114 #define W83781D_REG_ALARM1 0x41
115 #define W83781D_REG_ALARM2 0x42
117 /* Real-time status (W83782D, W83783S) */
118 #define W83782D_REG_ALARM1 0x459
119 #define W83782D_REG_ALARM2 0x45A
120 #define W83782D_REG_ALARM3 0x45B
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 */
127 #define W83781D_REG_VID_FANDIV 0x47
129 #define W83781D_REG_CHIPID 0x49
130 #define W83781D_REG_WCHIPID 0x58
131 #define W83781D_REG_CHIPMAN 0x4F
132 #define W83781D_REG_PIN 0x4B
135 #define W83781D_REG_VBAT 0x5D
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
142 #define W83781D_REG_I2C_ADDR 0x48
143 #define W83781D_REG_I2C_SUBADDR 0x4A
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 };
151 #define W83781D_REG_SCFG2 0x59
152 static const u8 BIT_SCFG2
[] = { 0x10, 0x20, 0x40 };
154 #define W83781D_DEFAULT_BETA 3435
157 #define IN_TO_REG(val) SENSORS_LIMIT(((val) + 8) / 16, 0, 255)
158 #define IN_FROM_REG(val) ((val) * 16)
161 FAN_TO_REG(long rpm
, int div
)
165 rpm
= SENSORS_LIMIT(rpm
, 1, 1000000);
166 return SENSORS_LIMIT((1350000 + rpm
* div
/ 2) / (rpm
* div
), 1, 254);
170 FAN_FROM_REG(u8 val
, int div
)
176 return 1350000 / (val
* div
);
179 #define TEMP_TO_REG(val) SENSORS_LIMIT((val) / 1000, -127, 128)
180 #define TEMP_FROM_REG(val) ((val) * 1000)
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)
187 #define DIV_FROM_REG(val) (1 << (val))
190 DIV_TO_REG(long val
, enum chips type
)
193 val
= SENSORS_LIMIT(val
, 1,
195 || type
== as99127f
) ? 8 : 128)) >> 1;
196 for (i
= 0; i
< 7; i
++) {
204 struct w83781d_data
{
205 struct i2c_client
*client
;
206 struct device
*hwmon_dev
;
210 /* For ISA device only */
214 struct mutex update_lock
;
215 char valid
; /* !=0 if following fields are valid */
216 unsigned long last_updated
; /* In jiffies */
218 struct i2c_client
*lm75
[2]; /* for secondary I2C addresses */
219 /* array of 2 pointers to subclients */
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;
244 static struct w83781d_data
*w83781d_data_if_isa(void);
245 static int w83781d_alias_detect(struct i2c_client
*client
, u8 chipid
);
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
);
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, \
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])); \
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) \
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; \
275 val = simple_strtoul(buf, NULL, 10); \
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]); \
281 mutex_unlock(&data->update_lock); \
284 store_in_reg(MIN
, min
);
285 store_in_reg(MAX
, max
);
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)
305 #define show_fan_reg(reg) \
306 static ssize_t show_##reg (struct device *dev, struct device_attribute *da, \
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]))); \
316 show_fan_reg(fan_min
);
319 store_fan_min(struct device
*dev
, struct device_attribute
*da
,
320 const char *buf
, size_t count
)
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
;
327 val
= simple_strtoul(buf
, NULL
, 10);
329 mutex_lock(&data
->update_lock
);
331 FAN_TO_REG(val
, DIV_FROM_REG(data
->fan_div
[nr
]));
332 w83781d_write_value(data
, W83781D_REG_FAN_MIN(nr
),
335 mutex_unlock(&data
->update_lock
);
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);
349 #define show_temp_reg(reg) \
350 static ssize_t show_##reg (struct device *dev, struct device_attribute *da, \
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)); \
364 show_temp_reg(temp_max
);
365 show_temp_reg(temp_max_hyst
);
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) \
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; \
376 val = simple_strtol(buf, NULL, 10); \
378 mutex_lock(&data->update_lock); \
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), \
390 mutex_unlock(&data->update_lock); \
393 store_temp_reg(OVER
, max
);
394 store_temp_reg(HYST
, max_hyst
);
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);
404 sysfs_temp_offsets(1);
405 sysfs_temp_offsets(2);
406 sysfs_temp_offsets(3);
409 show_vid_reg(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
411 struct w83781d_data
*data
= w83781d_update_device(dev
);
412 return sprintf(buf
, "%ld\n", (long) vid_from_reg(data
->vid
, data
->vrm
));
415 static DEVICE_ATTR(cpu0_vid
, S_IRUGO
, show_vid_reg
, NULL
);
418 show_vrm_reg(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
420 struct w83781d_data
*data
= dev_get_drvdata(dev
);
421 return sprintf(buf
, "%ld\n", (long) data
->vrm
);
425 store_vrm_reg(struct device
*dev
, struct device_attribute
*attr
, const char *buf
, size_t count
)
427 struct w83781d_data
*data
= dev_get_drvdata(dev
);
430 val
= simple_strtoul(buf
, NULL
, 10);
436 static DEVICE_ATTR(vrm
, S_IRUGO
| S_IWUSR
, show_vrm_reg
, store_vrm_reg
);
439 show_alarms_reg(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
441 struct w83781d_data
*data
= w83781d_update_device(dev
);
442 return sprintf(buf
, "%u\n", data
->alarms
);
445 static DEVICE_ATTR(alarms
, S_IRUGO
, show_alarms_reg
, NULL
);
447 static ssize_t
show_alarm(struct device
*dev
, struct device_attribute
*attr
,
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);
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
)
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);
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);
480 static ssize_t
show_beep_mask (struct device
*dev
, struct device_attribute
*attr
, char *buf
)
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
));
488 store_beep_mask(struct device
*dev
, struct device_attribute
*attr
,
489 const char *buf
, size_t count
)
491 struct w83781d_data
*data
= dev_get_drvdata(dev
);
494 val
= simple_strtoul(buf
, NULL
, 10);
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);
507 mutex_unlock(&data
->update_lock
);
512 static DEVICE_ATTR(beep_mask
, S_IRUGO
| S_IWUSR
,
513 show_beep_mask
, store_beep_mask
);
515 static ssize_t
show_beep(struct device
*dev
, struct device_attribute
*attr
,
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);
524 store_beep(struct device
*dev
, struct device_attribute
*attr
,
525 const char *buf
, size_t count
)
527 struct w83781d_data
*data
= dev_get_drvdata(dev
);
528 int bitnr
= to_sensor_dev_attr(attr
)->index
;
532 bit
= simple_strtoul(buf
, NULL
, 10);
536 mutex_lock(&data
->update_lock
);
538 data
->beep_mask
|= (1 << bitnr
);
540 data
->beep_mask
&= ~(1 << bitnr
);
543 reg
= w83781d_read_value(data
, W83781D_REG_BEEP_INTS1
);
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
);
552 reg
|= (1 << (bitnr
- 8));
554 reg
&= ~(1 << (bitnr
- 8));
555 w83781d_write_value(data
, W83781D_REG_BEEP_INTS2
, reg
);
557 reg
= w83781d_read_value(data
, W83781D_REG_BEEP_INTS3
);
559 reg
|= (1 << (bitnr
- 16));
561 reg
&= ~(1 << (bitnr
- 16));
562 w83781d_write_value(data
, W83781D_REG_BEEP_INTS3
, reg
);
564 mutex_unlock(&data
->update_lock
);
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
)
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);
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);
612 show_fan_div(struct device
*dev
, struct device_attribute
*da
, char *buf
)
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
]));
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. */
625 store_fan_div(struct device
*dev
, struct device_attribute
*da
,
626 const char *buf
, size_t count
)
628 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(da
);
629 struct w83781d_data
*data
= dev_get_drvdata(dev
);
631 int nr
= attr
->index
;
633 unsigned long val
= simple_strtoul(buf
, NULL
, 10);
635 mutex_lock(&data
->update_lock
);
638 min
= FAN_FROM_REG(data
->fan_min
[nr
],
639 DIV_FROM_REG(data
->fan_div
[nr
]));
641 data
->fan_div
[nr
] = DIV_TO_REG(val
, data
->type
);
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
);
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
)
652 | ((data
->fan_div
[nr
] & 0x04) << (3 + nr
));
653 w83781d_write_value(data
, W83781D_REG_VBAT
, reg
);
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
]);
660 mutex_unlock(&data
->update_lock
);
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);
672 show_pwm(struct device
*dev
, struct device_attribute
*da
, char *buf
)
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
]);
680 show_pwm2_enable(struct device
*dev
, struct device_attribute
*da
, char *buf
)
682 struct w83781d_data
*data
= w83781d_update_device(dev
);
683 return sprintf(buf
, "%d\n", (int)data
->pwm2_enable
);
687 store_pwm(struct device
*dev
, struct device_attribute
*da
, const char *buf
,
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
;
695 val
= simple_strtoul(buf
, NULL
, 10);
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
);
705 store_pwm2_enable(struct device
*dev
, struct device_attribute
*da
,
706 const char *buf
, size_t count
)
708 struct w83781d_data
*data
= dev_get_drvdata(dev
);
711 val
= simple_strtoul(buf
, NULL
, 10);
713 mutex_lock(&data
->update_lock
);
718 reg
= w83781d_read_value(data
, W83781D_REG_PWMCLK12
);
719 w83781d_write_value(data
, W83781D_REG_PWMCLK12
,
720 (reg
& 0xf7) | (val
<< 3));
722 reg
= w83781d_read_value(data
, W83781D_REG_BEEP_CONFIG
);
723 w83781d_write_value(data
, W83781D_REG_BEEP_CONFIG
,
724 (reg
& 0xef) | (!val
<< 4));
726 data
->pwm2_enable
= val
;
730 mutex_unlock(&data
->update_lock
);
734 mutex_unlock(&data
->update_lock
);
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
);
747 show_sensor(struct device
*dev
, struct device_attribute
*da
, char *buf
)
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
]);
755 store_sensor(struct device
*dev
, struct device_attribute
*da
,
756 const char *buf
, size_t count
)
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
;
763 val
= simple_strtoul(buf
, NULL
, 10);
765 mutex_lock(&data
->update_lock
);
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
;
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
;
786 case W83781D_DEFAULT_BETA
:
787 dev_warn(dev
, "Sensor type %d is deprecated, please use 4 "
788 "instead\n", W83781D_DEFAULT_BETA
);
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
;
797 dev_err(dev
, "Invalid sensor type %ld; must be 1, 2, or 4\n",
802 mutex_unlock(&data
->update_lock
);
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);
813 /* Assumes that adapter is of I2C, not ISA variety.
814 * OTHERWISE DON'T CALL THIS
817 w83781d_detect_subclients(struct i2c_client
*new_client
)
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
;
827 id
= i2c_adapter_id(adapter
);
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
]);
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];
845 val1
= w83781d_read_value(data
, W83781D_REG_I2C_SUBADDR
);
846 sc_addr
[0] = 0x48 + (val1
& 0x07);
849 if (kind
!= w83783s
) {
850 if (force_subclients
[0] == id
&&
851 force_subclients
[1] == address
) {
852 sc_addr
[1] = force_subclients
[3];
854 sc_addr
[1] = 0x48 + ((val1
>> 4) & 0x07);
856 if (sc_addr
[0] == sc_addr
[1]) {
857 dev_err(&new_client
->dev
,
858 "Duplicate addresses 0x%x for subclients.\n",
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
]);
882 /* Undo inits in case of errors */
884 i2c_unregister_device(data
->lm75
[0]);
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
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
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
911 static struct attribute
* w83781d_attributes
[] = {
923 &dev_attr_cpu0_vid
.attr
,
925 &dev_attr_alarms
.attr
,
926 &dev_attr_beep_mask
.attr
,
927 &sensor_dev_attr_beep_enable
.dev_attr
.attr
,
930 static const struct attribute_group w83781d_group
= {
931 .attrs
= w83781d_attributes
,
934 static struct attribute
*w83781d_attributes_opt
[] = {
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
,
949 static const struct attribute_group w83781d_group_opt
= {
950 .attrs
= w83781d_attributes_opt
,
953 /* No clean up is done on error, it's up to the caller */
955 w83781d_create_files(struct device
*dev
, int kind
, int is_isa
)
959 if ((err
= sysfs_create_group(&dev
->kobj
, &w83781d_group
)))
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
)))
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
)))
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
)))
1011 if (kind
!= w83781d
) {
1012 err
= sysfs_chmod_file(&dev
->kobj
,
1013 &sensor_dev_attr_temp3_alarm
.dev_attr
.attr
,
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
)))
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
)))
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
)))
1042 if (kind
!= w83783s
) {
1043 if ((err
= device_create_file(dev
,
1044 &sensor_dev_attr_temp3_type
.dev_attr
)))
1052 /* Return 0 if detection is successful, -ENODEV otherwise */
1054 w83781d_detect(struct i2c_client
*client
, int kind
,
1055 struct i2c_board_info
*info
)
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
;
1064 if (!i2c_check_functionality(adapter
, I2C_FUNC_SMBUS_BYTE_DATA
))
1067 /* We block updates of the ISA device to minimize the risk of
1068 concurrent access to the same W83781D chip through different
1071 mutex_lock(&isa
->update_lock
);
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
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");
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");
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");
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
)
1113 /* Determine the chip type. */
1116 val2
= i2c_smbus_read_byte_data(client
, W83781D_REG_CHIPMAN
);
1119 else if (val2
== 0x12)
1122 dev_dbg(&adapter
->dev
, "w83781d chip vendor is "
1123 "neither Winbond nor Asus\n");
1127 val1
= i2c_smbus_read_byte_data(client
, W83781D_REG_WCHIPID
);
1128 if ((val1
== 0x10 || val1
== 0x11) && vendid
== winbond
)
1130 else if (val1
== 0x30 && vendid
== winbond
)
1132 else if (val1
== 0x40 && vendid
== winbond
&& address
== 0x2d)
1134 else if (val1
== 0x31)
1138 dev_warn(&adapter
->dev
, "Ignoring 'force' "
1139 "parameter for unknown chip at "
1140 "address 0x%02x\n", address
);
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
);
1153 mutex_unlock(&isa
->update_lock
);
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";
1165 strlcpy(info
->type
, client_name
, I2C_NAME_SIZE
);
1171 mutex_unlock(&isa
->update_lock
);
1176 w83781d_probe(struct i2c_client
*client
, const struct i2c_device_id
*id
)
1178 struct device
*dev
= &client
->dev
;
1179 struct w83781d_data
*data
;
1182 data
= kzalloc(sizeof(struct w83781d_data
), GFP_KERNEL
);
1188 i2c_set_clientdata(client
, data
);
1189 mutex_init(&data
->lock
);
1190 mutex_init(&data
->update_lock
);
1192 data
->type
= id
->driver_data
;
1193 data
->client
= client
;
1195 /* attach secondary i2c lm75-like clients */
1196 err
= w83781d_detect_subclients(client
);
1200 /* Initialize the chip */
1201 w83781d_init_device(dev
);
1203 /* Register sysfs hooks */
1204 err
= w83781d_create_files(dev
, data
->type
, 0);
1208 data
->hwmon_dev
= hwmon_device_register(dev
);
1209 if (IS_ERR(data
->hwmon_dev
)) {
1210 err
= PTR_ERR(data
->hwmon_dev
);
1217 sysfs_remove_group(&dev
->kobj
, &w83781d_group
);
1218 sysfs_remove_group(&dev
->kobj
, &w83781d_group_opt
);
1221 i2c_unregister_device(data
->lm75
[0]);
1223 i2c_unregister_device(data
->lm75
[1]);
1225 i2c_set_clientdata(client
, NULL
);
1232 w83781d_remove(struct i2c_client
*client
)
1234 struct w83781d_data
*data
= i2c_get_clientdata(client
);
1235 struct device
*dev
= &client
->dev
;
1237 hwmon_device_unregister(data
->hwmon_dev
);
1239 sysfs_remove_group(&dev
->kobj
, &w83781d_group
);
1240 sysfs_remove_group(&dev
->kobj
, &w83781d_group_opt
);
1243 i2c_unregister_device(data
->lm75
[0]);
1245 i2c_unregister_device(data
->lm75
[1]);
1247 i2c_set_clientdata(client
, NULL
);
1254 w83781d_read_value_i2c(struct w83781d_data
*data
, u16 reg
)
1256 struct i2c_client
*client
= data
->client
;
1258 struct i2c_client
*cl
;
1260 bank
= (reg
>> 8) & 0x0f;
1263 i2c_smbus_write_byte_data(client
, W83781D_REG_BANK
,
1265 if (bank
== 0 || bank
> 2) {
1266 res
= i2c_smbus_read_byte_data(client
, reg
& 0xff);
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));
1275 case 0x52: /* CONFIG */
1276 res
= i2c_smbus_read_byte_data(cl
, 1);
1278 case 0x53: /* HYST */
1279 res
= swab16(i2c_smbus_read_word_data(cl
, 2));
1281 case 0x55: /* OVER */
1283 res
= swab16(i2c_smbus_read_word_data(cl
, 3));
1288 i2c_smbus_write_byte_data(client
, W83781D_REG_BANK
, 0);
1294 w83781d_write_value_i2c(struct w83781d_data
*data
, u16 reg
, u16 value
)
1296 struct i2c_client
*client
= data
->client
;
1298 struct i2c_client
*cl
;
1300 bank
= (reg
>> 8) & 0x0f;
1303 i2c_smbus_write_byte_data(client
, W83781D_REG_BANK
,
1305 if (bank
== 0 || bank
> 2) {
1306 i2c_smbus_write_byte_data(client
, reg
& 0xff,
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);
1316 case 0x53: /* HYST */
1317 i2c_smbus_write_word_data(cl
, 2, swab16(value
));
1319 case 0x55: /* OVER */
1320 i2c_smbus_write_word_data(cl
, 3, swab16(value
));
1325 i2c_smbus_write_byte_data(client
, W83781D_REG_BANK
, 0);
1331 w83781d_init_device(struct device
*dev
)
1333 struct w83781d_data
*data
= dev_get_drvdata(dev
);
1335 int type
= data
->type
;
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
1346 dev_info(dev
, "If reset=1 solved a problem you were "
1347 "having, please report!\n");
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);
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);
1372 data
->vrm
= vid_which_vrm();
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;
1380 if (w83781d_read_value
1382 W83781D_REG_SCFG2
) & BIT_SCFG2
[i
- 1])
1383 data
->sens
[i
- 1] = 1;
1385 data
->sens
[i
- 1] = 2;
1387 if (type
== w83783s
&& i
== 2)
1392 if (init
&& type
!= as99127f
) {
1394 tmp
= w83781d_read_value(data
, W83781D_REG_TEMP2_CONFIG
);
1396 dev_warn(dev
, "Enabling temp2, readings "
1397 "might not make sense\n");
1398 w83781d_write_value(data
, W83781D_REG_TEMP2_CONFIG
,
1403 if (type
!= w83783s
) {
1404 tmp
= w83781d_read_value(data
,
1405 W83781D_REG_TEMP3_CONFIG
);
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);
1415 /* Start monitoring */
1416 w83781d_write_value(data
, W83781D_REG_CONFIG
,
1417 (w83781d_read_value(data
,
1418 W83781D_REG_CONFIG
) & 0xf7)
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
));
1427 mutex_init(&data
->update_lock
);
1430 static struct w83781d_data
*w83781d_update_device(struct device
*dev
)
1432 struct w83781d_data
*data
= dev_get_drvdata(dev
);
1433 struct i2c_client
*client
= data
->client
;
1436 mutex_lock(&data
->update_lock
);
1438 if (time_after(jiffies
, data
->last_updated
+ HZ
+ HZ
/ 2)
1440 dev_dbg(dev
, "Starting device update\n");
1442 for (i
= 0; i
<= 8; i
++) {
1443 if (data
->type
== w83783s
&& i
== 1)
1444 continue; /* 783S has no in1 */
1446 w83781d_read_value(data
, W83781D_REG_IN(i
));
1448 w83781d_read_value(data
, W83781D_REG_IN_MIN(i
));
1450 w83781d_read_value(data
, W83781D_REG_IN_MAX(i
));
1451 if ((data
->type
!= w83782d
) && (i
== 6))
1454 for (i
= 0; i
< 3; i
++) {
1456 w83781d_read_value(data
, W83781D_REG_FAN(i
));
1458 w83781d_read_value(data
, W83781D_REG_FAN_MIN(i
));
1460 if (data
->type
!= w83781d
&& data
->type
!= as99127f
) {
1461 for (i
= 0; i
< 4; 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
)
1470 /* Only PWM2 can be disabled */
1471 data
->pwm2_enable
= (w83781d_read_value(data
,
1472 W83781D_REG_PWMCLK12
) & 0x08) >> 3;
1475 data
->temp
= w83781d_read_value(data
, W83781D_REG_TEMP(1));
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));
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
) {
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));
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;
1510 if (data
->type
== w83782d
) {
1511 data
->alarms
= w83781d_read_value(data
,
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
,
1520 | (w83781d_read_value(data
,
1521 W83782D_REG_ALARM2
) << 8);
1523 /* No real-time status registers, fall back to
1524 interrupt status registers */
1525 data
->alarms
= w83781d_read_value(data
,
1527 | (w83781d_read_value(data
,
1528 W83781D_REG_ALARM2
) << 8);
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
)) {
1535 w83781d_read_value(data
,
1536 W83781D_REG_BEEP_INTS3
) << 16;
1538 data
->last_updated
= jiffies
;
1542 mutex_unlock(&data
->update_lock
);
1547 static const struct i2c_device_id w83781d_ids
[] = {
1548 { "w83781d", w83781d
, },
1549 { "w83782d", w83782d
, },
1550 { "w83783s", w83783s
, },
1551 { "as99127f", as99127f
},
1554 MODULE_DEVICE_TABLE(i2c
, w83781d_ids
);
1556 static struct i2c_driver w83781d_driver
= {
1557 .class = I2C_CLASS_HWMON
,
1561 .probe
= w83781d_probe
,
1562 .remove
= w83781d_remove
,
1563 .id_table
= w83781d_ids
,
1564 .detect
= w83781d_detect
,
1565 .address_data
= &addr_data
,
1573 /* ISA device, if found */
1574 static struct platform_device
*pdev
;
1576 static unsigned short isa_address
= 0x290;
1578 /* I2C devices get this name attribute automatically, but for ISA devices
1579 we must create it by ourselves. */
1581 show_name(struct device
*dev
, struct device_attribute
*devattr
, char *buf
)
1583 struct w83781d_data
*data
= dev_get_drvdata(dev
);
1584 return sprintf(buf
, "%s\n", data
->name
);
1586 static DEVICE_ATTR(name
, S_IRUGO
, show_name
, NULL
);
1588 static struct w83781d_data
*w83781d_data_if_isa(void)
1590 return pdev
? platform_get_drvdata(pdev
) : NULL
;
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
)
1596 struct w83781d_data
*isa
;
1599 if (!pdev
) /* No ISA chip */
1602 isa
= platform_get_drvdata(pdev
);
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 */
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
))
1616 if (w83781d_read_value(isa
, W83781D_REG_CONFIG
) !=
1617 i2c_smbus_read_byte_data(client
, W83781D_REG_CONFIG
))
1619 for (i
= 0x43; i
<= 0x46; i
++) {
1620 if (w83781d_read_value(isa
, i
) !=
1621 i2c_smbus_read_byte_data(client
, i
))
1629 w83781d_read_value_isa(struct w83781d_data
*data
, u16 reg
)
1631 int word_sized
, res
;
1633 word_sized
= (((reg
& 0xff00) == 0x100)
1634 || ((reg
& 0xff00) == 0x200))
1635 && (((reg
& 0x00ff) == 0x50)
1636 || ((reg
& 0x00ff) == 0x53)
1637 || ((reg
& 0x00ff) == 0x55));
1639 outb_p(W83781D_REG_BANK
,
1640 data
->isa_addr
+ W83781D_ADDR_REG_OFFSET
);
1642 data
->isa_addr
+ W83781D_DATA_REG_OFFSET
);
1644 outb_p(reg
& 0xff, data
->isa_addr
+ W83781D_ADDR_REG_OFFSET
);
1645 res
= inb_p(data
->isa_addr
+ W83781D_DATA_REG_OFFSET
);
1647 outb_p((reg
& 0xff) + 1,
1648 data
->isa_addr
+ W83781D_ADDR_REG_OFFSET
);
1650 (res
<< 8) + inb_p(data
->isa_addr
+
1651 W83781D_DATA_REG_OFFSET
);
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
);
1662 w83781d_write_value_isa(struct w83781d_data
*data
, u16 reg
, u16 value
)
1666 word_sized
= (((reg
& 0xff00) == 0x100)
1667 || ((reg
& 0xff00) == 0x200))
1668 && (((reg
& 0x00ff) == 0x53)
1669 || ((reg
& 0x00ff) == 0x55));
1671 outb_p(W83781D_REG_BANK
,
1672 data
->isa_addr
+ W83781D_ADDR_REG_OFFSET
);
1674 data
->isa_addr
+ W83781D_DATA_REG_OFFSET
);
1676 outb_p(reg
& 0xff, data
->isa_addr
+ W83781D_ADDR_REG_OFFSET
);
1679 data
->isa_addr
+ W83781D_DATA_REG_OFFSET
);
1680 outb_p((reg
& 0xff) + 1,
1681 data
->isa_addr
+ W83781D_ADDR_REG_OFFSET
);
1683 outb_p(value
& 0xff, data
->isa_addr
+ W83781D_DATA_REG_OFFSET
);
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
);
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! */
1698 w83781d_read_value(struct w83781d_data
*data
, u16 reg
)
1700 struct i2c_client
*client
= data
->client
;
1703 mutex_lock(&data
->lock
);
1705 res
= w83781d_read_value_i2c(data
, reg
);
1707 res
= w83781d_read_value_isa(data
, reg
);
1708 mutex_unlock(&data
->lock
);
1713 w83781d_write_value(struct w83781d_data
*data
, u16 reg
, u16 value
)
1715 struct i2c_client
*client
= data
->client
;
1717 mutex_lock(&data
->lock
);
1719 w83781d_write_value_i2c(data
, reg
, value
);
1721 w83781d_write_value_isa(data
, reg
, value
);
1722 mutex_unlock(&data
->lock
);
1726 static int __devinit
1727 w83781d_isa_probe(struct platform_device
*pdev
)
1730 struct w83781d_data
*data
;
1731 struct resource
*res
;
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,
1741 data
= kzalloc(sizeof(struct w83781d_data
), GFP_KERNEL
);
1744 goto exit_release_region
;
1746 mutex_init(&data
->lock
);
1747 data
->isa_addr
= res
->start
;
1748 platform_set_drvdata(pdev
, data
);
1750 reg
= w83781d_read_value(data
, W83781D_REG_WCHIPID
);
1753 data
->type
= w83782d
;
1754 data
->name
= "w83782d";
1757 data
->type
= w83781d
;
1758 data
->name
= "w83781d";
1761 /* Initialize the W83781D chip */
1762 w83781d_init_device(&pdev
->dev
);
1764 /* Register sysfs hooks */
1765 err
= w83781d_create_files(&pdev
->dev
, data
->type
, 1);
1767 goto exit_remove_files
;
1769 err
= device_create_file(&pdev
->dev
, &dev_attr_name
);
1771 goto exit_remove_files
;
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
;
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
);
1786 exit_release_region
:
1787 release_region(res
->start
+ W83781D_ADDR_REG_OFFSET
, 2);
1792 static int __devexit
1793 w83781d_isa_remove(struct platform_device
*pdev
)
1795 struct w83781d_data
*data
= platform_get_drvdata(pdev
);
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);
1807 static struct platform_driver w83781d_isa_driver
= {
1809 .owner
= THIS_MODULE
,
1812 .probe
= w83781d_isa_probe
,
1813 .remove
= __devexit_p(w83781d_isa_remove
),
1816 /* return 1 if a supported chip is found, 0 otherwise */
1818 w83781d_isa_found(unsigned short address
)
1820 int val
, save
, found
= 0;
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");
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);
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");
1844 #undef REALLY_SLOW_IO
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
);
1850 pr_debug("w83781d: Detection failed at step 2\n");
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");
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
);
1865 pr_debug("w83781d: Detection failed at step 4\n");
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");
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");
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");
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 */
1901 pr_info("w83781d: Found a %s chip at %#x\n",
1902 val
== 0x30 ? "W83782D" : "W83781D", (int)address
);
1905 release_region(address
+ 4, 4);
1906 release_region(address
, 4);
1911 w83781d_isa_device_add(unsigned short address
)
1913 struct resource res
= {
1915 .end
= address
+ W83781D_EXTENT
- 1,
1917 .flags
= IORESOURCE_IO
,
1921 pdev
= platform_device_alloc("w83781d", address
);
1924 printk(KERN_ERR
"w83781d: Device allocation failed\n");
1928 err
= platform_device_add_resources(pdev
, &res
, 1);
1930 printk(KERN_ERR
"w83781d: Device resource addition failed "
1932 goto exit_device_put
;
1935 err
= platform_device_add(pdev
);
1937 printk(KERN_ERR
"w83781d: Device addition failed (%d)\n",
1939 goto exit_device_put
;
1945 platform_device_put(pdev
);
1952 w83781d_isa_register(void)
1956 if (w83781d_isa_found(isa_address
)) {
1957 res
= platform_driver_register(&w83781d_isa_driver
);
1961 /* Sets global pdev as a side effect */
1962 res
= w83781d_isa_device_add(isa_address
);
1964 goto exit_unreg_isa_driver
;
1969 exit_unreg_isa_driver
:
1970 platform_driver_unregister(&w83781d_isa_driver
);
1976 w83781d_isa_unregister(void)
1979 platform_device_unregister(pdev
);
1980 platform_driver_unregister(&w83781d_isa_driver
);
1983 #else /* !CONFIG_ISA */
1985 static struct w83781d_data
*w83781d_data_if_isa(void)
1991 w83781d_alias_detect(struct i2c_client
*client
, u8 chipid
)
1997 w83781d_read_value(struct w83781d_data
*data
, u16 reg
)
2001 mutex_lock(&data
->lock
);
2002 res
= w83781d_read_value_i2c(data
, reg
);
2003 mutex_unlock(&data
->lock
);
2009 w83781d_write_value(struct w83781d_data
*data
, u16 reg
, u16 value
)
2011 mutex_lock(&data
->lock
);
2012 w83781d_write_value_i2c(data
, reg
, value
);
2013 mutex_unlock(&data
->lock
);
2019 w83781d_isa_register(void)
2025 w83781d_isa_unregister(void)
2028 #endif /* CONFIG_ISA */
2031 sensors_w83781d_init(void)
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();
2041 res
= i2c_add_driver(&w83781d_driver
);
2043 goto exit_unreg_isa
;
2048 w83781d_isa_unregister();
2054 sensors_w83781d_exit(void)
2056 w83781d_isa_unregister();
2057 i2c_del_driver(&w83781d_driver
);
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");
2066 module_init(sensors_w83781d_init
);
2067 module_exit(sensors_w83781d_exit
);