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);
61 I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: "
62 "{bus, clientaddr, subclientaddr1, subclientaddr2}");
65 module_param(reset, bool, 0);
66 MODULE_PARM_DESC(reset, "Set to one to reset chip on load");
69 module_param(init, bool, 0);
70 MODULE_PARM_DESC(init, "Set to zero to bypass chip initialization");
72 /* Constants specified below */
74 /* Length of ISA address segment */
75 #define W83781D_EXTENT 8
77 /* Where are the ISA address/data registers relative to the base address */
78 #define W83781D_ADDR_REG_OFFSET 5
79 #define W83781D_DATA_REG_OFFSET 6
81 /* The device registers */
82 /* in nr from 0 to 8 */
83 #define W83781D_REG_IN_MAX(nr) ((nr < 7) ? (0x2b + (nr) * 2) : \
84 (0x554 + (((nr) - 7) * 2)))
85 #define W83781D_REG_IN_MIN(nr) ((nr < 7) ? (0x2c + (nr) * 2) : \
86 (0x555 + (((nr) - 7) * 2)))
87 #define W83781D_REG_IN(nr) ((nr < 7) ? (0x20 + (nr)) : \
90 /* fan nr from 0 to 2 */
91 #define W83781D_REG_FAN_MIN(nr) (0x3b + (nr))
92 #define W83781D_REG_FAN(nr) (0x28 + (nr))
94 #define W83781D_REG_BANK 0x4E
95 #define W83781D_REG_TEMP2_CONFIG 0x152
96 #define W83781D_REG_TEMP3_CONFIG 0x252
97 /* temp nr from 1 to 3 */
98 #define W83781D_REG_TEMP(nr) ((nr == 3) ? (0x0250) : \
99 ((nr == 2) ? (0x0150) : \
101 #define W83781D_REG_TEMP_HYST(nr) ((nr == 3) ? (0x253) : \
102 ((nr == 2) ? (0x153) : \
104 #define W83781D_REG_TEMP_OVER(nr) ((nr == 3) ? (0x255) : \
105 ((nr == 2) ? (0x155) : \
108 #define W83781D_REG_CONFIG 0x40
110 /* Interrupt status (W83781D, AS99127F) */
111 #define W83781D_REG_ALARM1 0x41
112 #define W83781D_REG_ALARM2 0x42
114 /* Real-time status (W83782D, W83783S) */
115 #define W83782D_REG_ALARM1 0x459
116 #define W83782D_REG_ALARM2 0x45A
117 #define W83782D_REG_ALARM3 0x45B
119 #define W83781D_REG_BEEP_CONFIG 0x4D
120 #define W83781D_REG_BEEP_INTS1 0x56
121 #define W83781D_REG_BEEP_INTS2 0x57
122 #define W83781D_REG_BEEP_INTS3 0x453 /* not on W83781D */
124 #define W83781D_REG_VID_FANDIV 0x47
126 #define W83781D_REG_CHIPID 0x49
127 #define W83781D_REG_WCHIPID 0x58
128 #define W83781D_REG_CHIPMAN 0x4F
129 #define W83781D_REG_PIN 0x4B
132 #define W83781D_REG_VBAT 0x5D
134 /* PWM 782D (1-4) and 783S (1-2) only */
135 static const u8 W83781D_REG_PWM[] = { 0x5B, 0x5A, 0x5E, 0x5F };
136 #define W83781D_REG_PWMCLK12 0x5C
137 #define W83781D_REG_PWMCLK34 0x45C
139 #define W83781D_REG_I2C_ADDR 0x48
140 #define W83781D_REG_I2C_SUBADDR 0x4A
142 /* The following are undocumented in the data sheets however we
143 received the information in an email from Winbond tech support */
144 /* Sensor selection - not on 781d */
145 #define W83781D_REG_SCFG1 0x5D
146 static const u8 BIT_SCFG1[] = { 0x02, 0x04, 0x08 };
148 #define W83781D_REG_SCFG2 0x59
149 static const u8 BIT_SCFG2[] = { 0x10, 0x20, 0x40 };
151 #define W83781D_DEFAULT_BETA 3435
154 #define IN_TO_REG(val) SENSORS_LIMIT(((val) + 8) / 16, 0, 255)
155 #define IN_FROM_REG(val) ((val) * 16)
158 FAN_TO_REG(long rpm, int div)
162 rpm = SENSORS_LIMIT(rpm, 1, 1000000);
163 return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1, 254);
167 FAN_FROM_REG(u8 val, int div)
173 return 1350000 / (val * div);
176 #define TEMP_TO_REG(val) SENSORS_LIMIT((val) / 1000, -127, 128)
177 #define TEMP_FROM_REG(val) ((val) * 1000)
179 #define BEEP_MASK_FROM_REG(val,type) ((type) == as99127f ? \
180 (~(val)) & 0x7fff : (val) & 0xff7fff)
181 #define BEEP_MASK_TO_REG(val,type) ((type) == as99127f ? \
182 (~(val)) & 0x7fff : (val) & 0xff7fff)
184 #define DIV_FROM_REG(val) (1 << (val))
187 DIV_TO_REG(long val, enum chips type)
190 val = SENSORS_LIMIT(val, 1,
192 || type == as99127f) ? 8 : 128)) >> 1;
193 for (i = 0; i < 7; i++) {
201 struct w83781d_data {
202 struct i2c_client client;
203 struct device *hwmon_dev;
207 /* For ISA device only */
211 struct mutex update_lock;
212 char valid; /* !=0 if following fields are valid */
213 unsigned long last_updated; /* In jiffies */
215 struct i2c_client *lm75[2]; /* for secondary I2C addresses */
216 /* array of 2 pointers to subclients */
218 u8 in[9]; /* Register value - 8 & 9 for 782D only */
219 u8 in_max[9]; /* Register value - 8 & 9 for 782D only */
220 u8 in_min[9]; /* Register value - 8 & 9 for 782D only */
221 u8 fan[3]; /* Register value */
222 u8 fan_min[3]; /* Register value */
223 s8 temp; /* Register value */
224 s8 temp_max; /* Register value */
225 s8 temp_max_hyst; /* Register value */
226 u16 temp_add[2]; /* Register value */
227 u16 temp_max_add[2]; /* Register value */
228 u16 temp_max_hyst_add[2]; /* Register value */
229 u8 fan_div[3]; /* Register encoding, shifted right */
230 u8 vid; /* Register encoding, combined */
231 u32 alarms; /* Register encoding, combined */
232 u32 beep_mask; /* Register encoding, combined */
233 u8 pwm[4]; /* Register value */
234 u8 pwm2_enable; /* Boolean */
235 u16 sens[3]; /* 782D/783S only.
236 1 = pentium diode; 2 = 3904 diode;
241 static struct w83781d_data *w83781d_data_if_isa(void);
242 static int w83781d_alias_detect(struct i2c_client *client, u8 chipid);
244 static int w83781d_attach_adapter(struct i2c_adapter *adapter);
245 static int w83781d_detect(struct i2c_adapter *adapter, int address, int kind);
246 static int w83781d_detach_client(struct i2c_client *client);
248 static int w83781d_read_value(struct w83781d_data *data, u16 reg);
249 static int w83781d_write_value(struct w83781d_data *data, u16 reg, u16 value);
250 static struct w83781d_data *w83781d_update_device(struct device *dev);
251 static void w83781d_init_device(struct device *dev);
253 static struct i2c_driver w83781d_driver = {
257 .attach_adapter = w83781d_attach_adapter,
258 .detach_client = w83781d_detach_client,
261 /* following are the sysfs callback functions */
262 #define show_in_reg(reg) \
263 static ssize_t show_##reg (struct device *dev, struct device_attribute *da, \
266 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \
267 struct w83781d_data *data = w83781d_update_device(dev); \
268 return sprintf(buf, "%ld\n", \
269 (long)IN_FROM_REG(data->reg[attr->index])); \
275 #define store_in_reg(REG, reg) \
276 static ssize_t store_in_##reg (struct device *dev, struct device_attribute \
277 *da, const char *buf, size_t count) \
279 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \
280 struct w83781d_data *data = dev_get_drvdata(dev); \
281 int nr = attr->index; \
284 val = simple_strtoul(buf, NULL, 10); \
286 mutex_lock(&data->update_lock); \
287 data->in_##reg[nr] = IN_TO_REG(val); \
288 w83781d_write_value(data, W83781D_REG_IN_##REG(nr), data->in_##reg[nr]); \
290 mutex_unlock(&data->update_lock); \
293 store_in_reg(MIN, min);
294 store_in_reg(MAX, max);
296 #define sysfs_in_offsets(offset) \
297 static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \
298 show_in, NULL, offset); \
299 static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
300 show_in_min, store_in_min, offset); \
301 static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
302 show_in_max, store_in_max, offset)
314 #define show_fan_reg(reg) \
315 static ssize_t show_##reg (struct device *dev, struct device_attribute *da, \
318 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \
319 struct w83781d_data *data = w83781d_update_device(dev); \
320 return sprintf(buf,"%ld\n", \
321 FAN_FROM_REG(data->reg[attr->index], \
322 DIV_FROM_REG(data->fan_div[attr->index]))); \
325 show_fan_reg(fan_min);
328 store_fan_min(struct device *dev, struct device_attribute *da,
329 const char *buf, size_t count)
331 struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
332 struct w83781d_data *data = dev_get_drvdata(dev);
333 int nr = attr->index;
336 val = simple_strtoul(buf, NULL, 10);
338 mutex_lock(&data->update_lock);
340 FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
341 w83781d_write_value(data, W83781D_REG_FAN_MIN(nr),
344 mutex_unlock(&data->update_lock);
348 static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0);
349 static SENSOR_DEVICE_ATTR(fan1_min, S_IRUGO | S_IWUSR,
350 show_fan_min, store_fan_min, 0);
351 static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1);
352 static SENSOR_DEVICE_ATTR(fan2_min, S_IRUGO | S_IWUSR,
353 show_fan_min, store_fan_min, 1);
354 static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2);
355 static SENSOR_DEVICE_ATTR(fan3_min, S_IRUGO | S_IWUSR,
356 show_fan_min, store_fan_min, 2);
358 #define show_temp_reg(reg) \
359 static ssize_t show_##reg (struct device *dev, struct device_attribute *da, \
362 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \
363 struct w83781d_data *data = w83781d_update_device(dev); \
364 int nr = attr->index; \
365 if (nr >= 2) { /* TEMP2 and TEMP3 */ \
366 return sprintf(buf,"%d\n", \
367 LM75_TEMP_FROM_REG(data->reg##_add[nr-2])); \
368 } else { /* TEMP1 */ \
369 return sprintf(buf,"%ld\n", (long)TEMP_FROM_REG(data->reg)); \
373 show_temp_reg(temp_max);
374 show_temp_reg(temp_max_hyst);
376 #define store_temp_reg(REG, reg) \
377 static ssize_t store_temp_##reg (struct device *dev, \
378 struct device_attribute *da, const char *buf, size_t count) \
380 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \
381 struct w83781d_data *data = dev_get_drvdata(dev); \
382 int nr = attr->index; \
385 val = simple_strtol(buf, NULL, 10); \
387 mutex_lock(&data->update_lock); \
389 if (nr >= 2) { /* TEMP2 and TEMP3 */ \
390 data->temp_##reg##_add[nr-2] = LM75_TEMP_TO_REG(val); \
391 w83781d_write_value(data, W83781D_REG_TEMP_##REG(nr), \
392 data->temp_##reg##_add[nr-2]); \
393 } else { /* TEMP1 */ \
394 data->temp_##reg = TEMP_TO_REG(val); \
395 w83781d_write_value(data, W83781D_REG_TEMP_##REG(nr), \
399 mutex_unlock(&data->update_lock); \
402 store_temp_reg(OVER, max);
403 store_temp_reg(HYST, max_hyst);
405 #define sysfs_temp_offsets(offset) \
406 static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \
407 show_temp, NULL, offset); \
408 static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \
409 show_temp_max, store_temp_max, offset); \
410 static SENSOR_DEVICE_ATTR(temp##offset##_max_hyst, S_IRUGO | S_IWUSR, \
411 show_temp_max_hyst, store_temp_max_hyst, offset);
413 sysfs_temp_offsets(1);
414 sysfs_temp_offsets(2);
415 sysfs_temp_offsets(3);
418 show_vid_reg(struct device *dev, struct device_attribute *attr, char *buf)
420 struct w83781d_data *data = w83781d_update_device(dev);
421 return sprintf(buf, "%ld\n", (long) vid_from_reg(data->vid, data->vrm));
424 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
427 show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf)
429 struct w83781d_data *data = dev_get_drvdata(dev);
430 return sprintf(buf, "%ld\n", (long) data->vrm);
434 store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
436 struct w83781d_data *data = dev_get_drvdata(dev);
439 val = simple_strtoul(buf, NULL, 10);
445 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
448 show_alarms_reg(struct device *dev, struct device_attribute *attr, char *buf)
450 struct w83781d_data *data = w83781d_update_device(dev);
451 return sprintf(buf, "%u\n", data->alarms);
454 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
456 static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
459 struct w83781d_data *data = w83781d_update_device(dev);
460 int bitnr = to_sensor_dev_attr(attr)->index;
461 return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1);
464 /* The W83781D has a single alarm bit for temp2 and temp3 */
465 static ssize_t show_temp3_alarm(struct device *dev,
466 struct device_attribute *attr, char *buf)
468 struct w83781d_data *data = w83781d_update_device(dev);
469 int bitnr = (data->type == w83781d) ? 5 : 13;
470 return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1);
473 static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0);
474 static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1);
475 static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2);
476 static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3);
477 static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8);
478 static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 9);
479 static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 10);
480 static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 16);
481 static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 17);
482 static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6);
483 static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7);
484 static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11);
485 static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4);
486 static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5);
487 static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_temp3_alarm, NULL, 0);
489 static ssize_t show_beep_mask (struct device *dev, struct device_attribute *attr, char *buf)
491 struct w83781d_data *data = w83781d_update_device(dev);
492 return sprintf(buf, "%ld\n",
493 (long)BEEP_MASK_FROM_REG(data->beep_mask, data->type));
497 store_beep_mask(struct device *dev, struct device_attribute *attr,
498 const char *buf, size_t count)
500 struct w83781d_data *data = dev_get_drvdata(dev);
503 val = simple_strtoul(buf, NULL, 10);
505 mutex_lock(&data->update_lock);
506 data->beep_mask &= 0x8000; /* preserve beep enable */
507 data->beep_mask |= BEEP_MASK_TO_REG(val, data->type);
508 w83781d_write_value(data, W83781D_REG_BEEP_INTS1,
509 data->beep_mask & 0xff);
510 w83781d_write_value(data, W83781D_REG_BEEP_INTS2,
511 (data->beep_mask >> 8) & 0xff);
512 if (data->type != w83781d && data->type != as99127f) {
513 w83781d_write_value(data, W83781D_REG_BEEP_INTS3,
514 ((data->beep_mask) >> 16) & 0xff);
516 mutex_unlock(&data->update_lock);
521 static DEVICE_ATTR(beep_mask, S_IRUGO | S_IWUSR,
522 show_beep_mask, store_beep_mask);
524 static ssize_t show_beep(struct device *dev, struct device_attribute *attr,
527 struct w83781d_data *data = w83781d_update_device(dev);
528 int bitnr = to_sensor_dev_attr(attr)->index;
529 return sprintf(buf, "%u\n", (data->beep_mask >> bitnr) & 1);
533 store_beep(struct device *dev, struct device_attribute *attr,
534 const char *buf, size_t count)
536 struct w83781d_data *data = dev_get_drvdata(dev);
537 int bitnr = to_sensor_dev_attr(attr)->index;
541 bit = simple_strtoul(buf, NULL, 10);
545 mutex_lock(&data->update_lock);
547 data->beep_mask |= (1 << bitnr);
549 data->beep_mask &= ~(1 << bitnr);
552 reg = w83781d_read_value(data, W83781D_REG_BEEP_INTS1);
556 reg &= ~(1 << bitnr);
557 w83781d_write_value(data, W83781D_REG_BEEP_INTS1, reg);
558 } else if (bitnr < 16) {
559 reg = w83781d_read_value(data, W83781D_REG_BEEP_INTS2);
561 reg |= (1 << (bitnr - 8));
563 reg &= ~(1 << (bitnr - 8));
564 w83781d_write_value(data, W83781D_REG_BEEP_INTS2, reg);
566 reg = w83781d_read_value(data, W83781D_REG_BEEP_INTS3);
568 reg |= (1 << (bitnr - 16));
570 reg &= ~(1 << (bitnr - 16));
571 w83781d_write_value(data, W83781D_REG_BEEP_INTS3, reg);
573 mutex_unlock(&data->update_lock);
578 /* The W83781D has a single beep bit for temp2 and temp3 */
579 static ssize_t show_temp3_beep(struct device *dev,
580 struct device_attribute *attr, char *buf)
582 struct w83781d_data *data = w83781d_update_device(dev);
583 int bitnr = (data->type == w83781d) ? 5 : 13;
584 return sprintf(buf, "%u\n", (data->beep_mask >> bitnr) & 1);
587 static SENSOR_DEVICE_ATTR(in0_beep, S_IRUGO | S_IWUSR,
588 show_beep, store_beep, 0);
589 static SENSOR_DEVICE_ATTR(in1_beep, S_IRUGO | S_IWUSR,
590 show_beep, store_beep, 1);
591 static SENSOR_DEVICE_ATTR(in2_beep, S_IRUGO | S_IWUSR,
592 show_beep, store_beep, 2);
593 static SENSOR_DEVICE_ATTR(in3_beep, S_IRUGO | S_IWUSR,
594 show_beep, store_beep, 3);
595 static SENSOR_DEVICE_ATTR(in4_beep, S_IRUGO | S_IWUSR,
596 show_beep, store_beep, 8);
597 static SENSOR_DEVICE_ATTR(in5_beep, S_IRUGO | S_IWUSR,
598 show_beep, store_beep, 9);
599 static SENSOR_DEVICE_ATTR(in6_beep, S_IRUGO | S_IWUSR,
600 show_beep, store_beep, 10);
601 static SENSOR_DEVICE_ATTR(in7_beep, S_IRUGO | S_IWUSR,
602 show_beep, store_beep, 16);
603 static SENSOR_DEVICE_ATTR(in8_beep, S_IRUGO | S_IWUSR,
604 show_beep, store_beep, 17);
605 static SENSOR_DEVICE_ATTR(fan1_beep, S_IRUGO | S_IWUSR,
606 show_beep, store_beep, 6);
607 static SENSOR_DEVICE_ATTR(fan2_beep, S_IRUGO | S_IWUSR,
608 show_beep, store_beep, 7);
609 static SENSOR_DEVICE_ATTR(fan3_beep, S_IRUGO | S_IWUSR,
610 show_beep, store_beep, 11);
611 static SENSOR_DEVICE_ATTR(temp1_beep, S_IRUGO | S_IWUSR,
612 show_beep, store_beep, 4);
613 static SENSOR_DEVICE_ATTR(temp2_beep, S_IRUGO | S_IWUSR,
614 show_beep, store_beep, 5);
615 static SENSOR_DEVICE_ATTR(temp3_beep, S_IRUGO,
616 show_temp3_beep, store_beep, 13);
617 static SENSOR_DEVICE_ATTR(beep_enable, S_IRUGO | S_IWUSR,
618 show_beep, store_beep, 15);
621 show_fan_div(struct device *dev, struct device_attribute *da, char *buf)
623 struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
624 struct w83781d_data *data = w83781d_update_device(dev);
625 return sprintf(buf, "%ld\n",
626 (long) DIV_FROM_REG(data->fan_div[attr->index]));
629 /* Note: we save and restore the fan minimum here, because its value is
630 determined in part by the fan divisor. This follows the principle of
631 least surprise; the user doesn't expect the fan minimum to change just
632 because the divisor changed. */
634 store_fan_div(struct device *dev, struct device_attribute *da,
635 const char *buf, size_t count)
637 struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
638 struct w83781d_data *data = dev_get_drvdata(dev);
640 int nr = attr->index;
642 unsigned long val = simple_strtoul(buf, NULL, 10);
644 mutex_lock(&data->update_lock);
647 min = FAN_FROM_REG(data->fan_min[nr],
648 DIV_FROM_REG(data->fan_div[nr]));
650 data->fan_div[nr] = DIV_TO_REG(val, data->type);
652 reg = (w83781d_read_value(data, nr==2 ? W83781D_REG_PIN : W83781D_REG_VID_FANDIV)
653 & (nr==0 ? 0xcf : 0x3f))
654 | ((data->fan_div[nr] & 0x03) << (nr==0 ? 4 : 6));
655 w83781d_write_value(data, nr==2 ? W83781D_REG_PIN : W83781D_REG_VID_FANDIV, reg);
657 /* w83781d and as99127f don't have extended divisor bits */
658 if (data->type != w83781d && data->type != as99127f) {
659 reg = (w83781d_read_value(data, W83781D_REG_VBAT)
661 | ((data->fan_div[nr] & 0x04) << (3 + nr));
662 w83781d_write_value(data, W83781D_REG_VBAT, reg);
665 /* Restore fan_min */
666 data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
667 w83781d_write_value(data, W83781D_REG_FAN_MIN(nr), data->fan_min[nr]);
669 mutex_unlock(&data->update_lock);
673 static SENSOR_DEVICE_ATTR(fan1_div, S_IRUGO | S_IWUSR,
674 show_fan_div, store_fan_div, 0);
675 static SENSOR_DEVICE_ATTR(fan2_div, S_IRUGO | S_IWUSR,
676 show_fan_div, store_fan_div, 1);
677 static SENSOR_DEVICE_ATTR(fan3_div, S_IRUGO | S_IWUSR,
678 show_fan_div, store_fan_div, 2);
681 show_pwm(struct device *dev, struct device_attribute *da, char *buf)
683 struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
684 struct w83781d_data *data = w83781d_update_device(dev);
685 return sprintf(buf, "%d\n", (int)data->pwm[attr->index]);
689 show_pwm2_enable(struct device *dev, struct device_attribute *da, char *buf)
691 struct w83781d_data *data = w83781d_update_device(dev);
692 return sprintf(buf, "%d\n", (int)data->pwm2_enable);
696 store_pwm(struct device *dev, struct device_attribute *da, const char *buf,
699 struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
700 struct w83781d_data *data = dev_get_drvdata(dev);
701 int nr = attr->index;
704 val = simple_strtoul(buf, NULL, 10);
706 mutex_lock(&data->update_lock);
707 data->pwm[nr] = SENSORS_LIMIT(val, 0, 255);
708 w83781d_write_value(data, W83781D_REG_PWM[nr], data->pwm[nr]);
709 mutex_unlock(&data->update_lock);
714 store_pwm2_enable(struct device *dev, struct device_attribute *da,
715 const char *buf, size_t count)
717 struct w83781d_data *data = dev_get_drvdata(dev);
720 val = simple_strtoul(buf, NULL, 10);
722 mutex_lock(&data->update_lock);
727 reg = w83781d_read_value(data, W83781D_REG_PWMCLK12);
728 w83781d_write_value(data, W83781D_REG_PWMCLK12,
729 (reg & 0xf7) | (val << 3));
731 reg = w83781d_read_value(data, W83781D_REG_BEEP_CONFIG);
732 w83781d_write_value(data, W83781D_REG_BEEP_CONFIG,
733 (reg & 0xef) | (!val << 4));
735 data->pwm2_enable = val;
739 mutex_unlock(&data->update_lock);
743 mutex_unlock(&data->update_lock);
747 static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, show_pwm, store_pwm, 0);
748 static SENSOR_DEVICE_ATTR(pwm2, S_IRUGO | S_IWUSR, show_pwm, store_pwm, 1);
749 static SENSOR_DEVICE_ATTR(pwm3, S_IRUGO | S_IWUSR, show_pwm, store_pwm, 2);
750 static SENSOR_DEVICE_ATTR(pwm4, S_IRUGO | S_IWUSR, show_pwm, store_pwm, 3);
751 /* only PWM2 can be enabled/disabled */
752 static DEVICE_ATTR(pwm2_enable, S_IRUGO | S_IWUSR,
753 show_pwm2_enable, store_pwm2_enable);
756 show_sensor(struct device *dev, struct device_attribute *da, char *buf)
758 struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
759 struct w83781d_data *data = w83781d_update_device(dev);
760 return sprintf(buf, "%d\n", (int)data->sens[attr->index]);
764 store_sensor(struct device *dev, struct device_attribute *da,
765 const char *buf, size_t count)
767 struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
768 struct w83781d_data *data = dev_get_drvdata(dev);
769 int nr = attr->index;
772 val = simple_strtoul(buf, NULL, 10);
774 mutex_lock(&data->update_lock);
777 case 1: /* PII/Celeron diode */
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;
787 tmp = w83781d_read_value(data, W83781D_REG_SCFG1);
788 w83781d_write_value(data, W83781D_REG_SCFG1,
789 tmp | BIT_SCFG1[nr]);
790 tmp = w83781d_read_value(data, W83781D_REG_SCFG2);
791 w83781d_write_value(data, W83781D_REG_SCFG2,
792 tmp & ~BIT_SCFG2[nr]);
793 data->sens[nr] = val;
795 case W83781D_DEFAULT_BETA:
796 dev_warn(dev, "Sensor type %d is deprecated, please use 4 "
797 "instead\n", W83781D_DEFAULT_BETA);
799 case 4: /* thermistor */
800 tmp = w83781d_read_value(data, W83781D_REG_SCFG1);
801 w83781d_write_value(data, W83781D_REG_SCFG1,
802 tmp & ~BIT_SCFG1[nr]);
803 data->sens[nr] = val;
806 dev_err(dev, "Invalid sensor type %ld; must be 1, 2, or 4\n",
811 mutex_unlock(&data->update_lock);
815 static SENSOR_DEVICE_ATTR(temp1_type, S_IRUGO | S_IWUSR,
816 show_sensor, store_sensor, 0);
817 static SENSOR_DEVICE_ATTR(temp2_type, S_IRUGO | S_IWUSR,
818 show_sensor, store_sensor, 1);
819 static SENSOR_DEVICE_ATTR(temp3_type, S_IRUGO | S_IWUSR,
820 show_sensor, store_sensor, 2);
822 /* This function is called when:
823 * w83781d_driver is inserted (when this module is loaded), for each
825 * when a new adapter is inserted (and w83781d_driver is still present)
826 We block updates of the ISA device to minimize the risk of concurrent
827 access to the same W83781D chip through different interfaces. */
829 w83781d_attach_adapter(struct i2c_adapter *adapter)
831 struct w83781d_data *data = w83781d_data_if_isa();
834 if (!(adapter->class & I2C_CLASS_HWMON))
838 mutex_lock(&data->update_lock);
839 err = i2c_probe(adapter, &addr_data, w83781d_detect);
841 mutex_unlock(&data->update_lock);
845 /* Assumes that adapter is of I2C, not ISA variety.
846 * OTHERWISE DON'T CALL THIS
849 w83781d_detect_subclients(struct i2c_adapter *adapter, int address, int kind,
850 struct i2c_client *new_client)
854 const char *client_name = "";
855 struct w83781d_data *data = i2c_get_clientdata(new_client);
857 data->lm75[0] = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
858 if (!(data->lm75[0])) {
863 id = i2c_adapter_id(adapter);
865 if (force_subclients[0] == id && force_subclients[1] == address) {
866 for (i = 2; i <= 3; i++) {
867 if (force_subclients[i] < 0x48 ||
868 force_subclients[i] > 0x4f) {
869 dev_err(&new_client->dev, "Invalid subclient "
870 "address %d; must be 0x48-0x4f\n",
871 force_subclients[i]);
876 w83781d_write_value(data, W83781D_REG_I2C_SUBADDR,
877 (force_subclients[2] & 0x07) |
878 ((force_subclients[3] & 0x07) << 4));
879 data->lm75[0]->addr = force_subclients[2];
881 val1 = w83781d_read_value(data, W83781D_REG_I2C_SUBADDR);
882 data->lm75[0]->addr = 0x48 + (val1 & 0x07);
885 if (kind != w83783s) {
886 data->lm75[1] = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
887 if (!(data->lm75[1])) {
892 if (force_subclients[0] == id &&
893 force_subclients[1] == address) {
894 data->lm75[1]->addr = force_subclients[3];
896 data->lm75[1]->addr = 0x48 + ((val1 >> 4) & 0x07);
898 if (data->lm75[0]->addr == data->lm75[1]->addr) {
899 dev_err(&new_client->dev,
900 "Duplicate addresses 0x%x for subclients.\n",
901 data->lm75[0]->addr);
908 client_name = "w83781d subclient";
909 else if (kind == w83782d)
910 client_name = "w83782d subclient";
911 else if (kind == w83783s)
912 client_name = "w83783s subclient";
913 else if (kind == as99127f)
914 client_name = "as99127f subclient";
916 for (i = 0; i <= 1; i++) {
917 /* store all data in w83781d */
918 i2c_set_clientdata(data->lm75[i], NULL);
919 data->lm75[i]->adapter = adapter;
920 data->lm75[i]->driver = &w83781d_driver;
921 data->lm75[i]->flags = 0;
922 strlcpy(data->lm75[i]->name, client_name,
924 if ((err = i2c_attach_client(data->lm75[i]))) {
925 dev_err(&new_client->dev, "Subclient %d "
926 "registration at address 0x%x "
927 "failed.\n", i, data->lm75[i]->addr);
938 /* Undo inits in case of errors */
940 i2c_detach_client(data->lm75[0]);
942 kfree(data->lm75[1]);
944 kfree(data->lm75[0]);
949 #define IN_UNIT_ATTRS(X) \
950 &sensor_dev_attr_in##X##_input.dev_attr.attr, \
951 &sensor_dev_attr_in##X##_min.dev_attr.attr, \
952 &sensor_dev_attr_in##X##_max.dev_attr.attr, \
953 &sensor_dev_attr_in##X##_alarm.dev_attr.attr, \
954 &sensor_dev_attr_in##X##_beep.dev_attr.attr
956 #define FAN_UNIT_ATTRS(X) \
957 &sensor_dev_attr_fan##X##_input.dev_attr.attr, \
958 &sensor_dev_attr_fan##X##_min.dev_attr.attr, \
959 &sensor_dev_attr_fan##X##_div.dev_attr.attr, \
960 &sensor_dev_attr_fan##X##_alarm.dev_attr.attr, \
961 &sensor_dev_attr_fan##X##_beep.dev_attr.attr
963 #define TEMP_UNIT_ATTRS(X) \
964 &sensor_dev_attr_temp##X##_input.dev_attr.attr, \
965 &sensor_dev_attr_temp##X##_max.dev_attr.attr, \
966 &sensor_dev_attr_temp##X##_max_hyst.dev_attr.attr, \
967 &sensor_dev_attr_temp##X##_alarm.dev_attr.attr, \
968 &sensor_dev_attr_temp##X##_beep.dev_attr.attr
970 static struct attribute* w83781d_attributes[] = {
982 &dev_attr_cpu0_vid.attr,
984 &dev_attr_alarms.attr,
985 &dev_attr_beep_mask.attr,
986 &sensor_dev_attr_beep_enable.dev_attr.attr,
989 static const struct attribute_group w83781d_group = {
990 .attrs = w83781d_attributes,
993 static struct attribute *w83781d_attributes_opt[] = {
998 &sensor_dev_attr_pwm1.dev_attr.attr,
999 &sensor_dev_attr_pwm2.dev_attr.attr,
1000 &sensor_dev_attr_pwm3.dev_attr.attr,
1001 &sensor_dev_attr_pwm4.dev_attr.attr,
1002 &dev_attr_pwm2_enable.attr,
1003 &sensor_dev_attr_temp1_type.dev_attr.attr,
1004 &sensor_dev_attr_temp2_type.dev_attr.attr,
1005 &sensor_dev_attr_temp3_type.dev_attr.attr,
1008 static const struct attribute_group w83781d_group_opt = {
1009 .attrs = w83781d_attributes_opt,
1012 /* No clean up is done on error, it's up to the caller */
1014 w83781d_create_files(struct device *dev, int kind, int is_isa)
1018 if ((err = sysfs_create_group(&dev->kobj, &w83781d_group)))
1021 if (kind != w83783s) {
1022 if ((err = device_create_file(dev,
1023 &sensor_dev_attr_in1_input.dev_attr))
1024 || (err = device_create_file(dev,
1025 &sensor_dev_attr_in1_min.dev_attr))
1026 || (err = device_create_file(dev,
1027 &sensor_dev_attr_in1_max.dev_attr))
1028 || (err = device_create_file(dev,
1029 &sensor_dev_attr_in1_alarm.dev_attr))
1030 || (err = device_create_file(dev,
1031 &sensor_dev_attr_in1_beep.dev_attr)))
1034 if (kind != as99127f && kind != w83781d && kind != w83783s) {
1035 if ((err = device_create_file(dev,
1036 &sensor_dev_attr_in7_input.dev_attr))
1037 || (err = device_create_file(dev,
1038 &sensor_dev_attr_in7_min.dev_attr))
1039 || (err = device_create_file(dev,
1040 &sensor_dev_attr_in7_max.dev_attr))
1041 || (err = device_create_file(dev,
1042 &sensor_dev_attr_in7_alarm.dev_attr))
1043 || (err = device_create_file(dev,
1044 &sensor_dev_attr_in7_beep.dev_attr))
1045 || (err = device_create_file(dev,
1046 &sensor_dev_attr_in8_input.dev_attr))
1047 || (err = device_create_file(dev,
1048 &sensor_dev_attr_in8_min.dev_attr))
1049 || (err = device_create_file(dev,
1050 &sensor_dev_attr_in8_max.dev_attr))
1051 || (err = device_create_file(dev,
1052 &sensor_dev_attr_in8_alarm.dev_attr))
1053 || (err = device_create_file(dev,
1054 &sensor_dev_attr_in8_beep.dev_attr)))
1057 if (kind != w83783s) {
1058 if ((err = device_create_file(dev,
1059 &sensor_dev_attr_temp3_input.dev_attr))
1060 || (err = device_create_file(dev,
1061 &sensor_dev_attr_temp3_max.dev_attr))
1062 || (err = device_create_file(dev,
1063 &sensor_dev_attr_temp3_max_hyst.dev_attr))
1064 || (err = device_create_file(dev,
1065 &sensor_dev_attr_temp3_alarm.dev_attr))
1066 || (err = device_create_file(dev,
1067 &sensor_dev_attr_temp3_beep.dev_attr)))
1070 if (kind != w83781d) {
1071 err = sysfs_chmod_file(&dev->kobj,
1072 &sensor_dev_attr_temp3_alarm.dev_attr.attr,
1079 if (kind != w83781d && kind != as99127f) {
1080 if ((err = device_create_file(dev,
1081 &sensor_dev_attr_pwm1.dev_attr))
1082 || (err = device_create_file(dev,
1083 &sensor_dev_attr_pwm2.dev_attr))
1084 || (err = device_create_file(dev, &dev_attr_pwm2_enable)))
1087 if (kind == w83782d && !is_isa) {
1088 if ((err = device_create_file(dev,
1089 &sensor_dev_attr_pwm3.dev_attr))
1090 || (err = device_create_file(dev,
1091 &sensor_dev_attr_pwm4.dev_attr)))
1095 if (kind != as99127f && kind != w83781d) {
1096 if ((err = device_create_file(dev,
1097 &sensor_dev_attr_temp1_type.dev_attr))
1098 || (err = device_create_file(dev,
1099 &sensor_dev_attr_temp2_type.dev_attr)))
1101 if (kind != w83783s) {
1102 if ((err = device_create_file(dev,
1103 &sensor_dev_attr_temp3_type.dev_attr)))
1112 w83781d_detect(struct i2c_adapter *adapter, int address, int kind)
1115 struct i2c_client *client;
1117 struct w83781d_data *data;
1119 const char *client_name = "";
1120 enum vendor { winbond, asus } vendid;
1122 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1127 /* OK. For now, we presume we have a valid client. We now create the
1128 client structure, even though we cannot fill it completely yet.
1129 But it allows us to access w83781d_{read,write}_value. */
1131 if (!(data = kzalloc(sizeof(struct w83781d_data), GFP_KERNEL))) {
1136 client = &data->client;
1137 i2c_set_clientdata(client, data);
1138 client->addr = address;
1139 mutex_init(&data->lock);
1140 client->adapter = adapter;
1141 client->driver = &w83781d_driver;
1144 /* Now, we do the remaining detection. */
1146 /* The w8378?d may be stuck in some other bank than bank 0. This may
1147 make reading other information impossible. Specify a force=... or
1148 force_*=... parameter, and the Winbond will be reset to the right
1151 if (w83781d_read_value(data, W83781D_REG_CONFIG) & 0x80) {
1152 dev_dbg(&adapter->dev, "Detection of w83781d chip "
1153 "failed at step 3\n");
1157 val1 = w83781d_read_value(data, W83781D_REG_BANK);
1158 val2 = w83781d_read_value(data, W83781D_REG_CHIPMAN);
1159 /* Check for Winbond or Asus ID if in bank 0 */
1160 if ((!(val1 & 0x07)) &&
1161 (((!(val1 & 0x80)) && (val2 != 0xa3) && (val2 != 0xc3))
1162 || ((val1 & 0x80) && (val2 != 0x5c) && (val2 != 0x12)))) {
1163 dev_dbg(&adapter->dev, "Detection of w83781d chip "
1164 "failed at step 4\n");
1168 /* If Winbond SMBus, check address at 0x48.
1169 Asus doesn't support, except for as99127f rev.2 */
1170 if ((!(val1 & 0x80) && (val2 == 0xa3)) ||
1171 ((val1 & 0x80) && (val2 == 0x5c))) {
1172 if (w83781d_read_value
1173 (data, W83781D_REG_I2C_ADDR) != address) {
1174 dev_dbg(&adapter->dev, "Detection of w83781d "
1175 "chip failed at step 5\n");
1182 /* We have either had a force parameter, or we have already detected the
1183 Winbond. Put it now into bank 0 and Vendor ID High Byte */
1184 w83781d_write_value(data, W83781D_REG_BANK,
1185 (w83781d_read_value(data, W83781D_REG_BANK)
1188 /* Determine the chip type. */
1191 val2 = w83781d_read_value(data, W83781D_REG_CHIPMAN);
1194 else if (val2 == 0x12)
1197 dev_dbg(&adapter->dev, "w83781d chip vendor is "
1198 "neither Winbond nor Asus\n");
1203 val1 = w83781d_read_value(data, W83781D_REG_WCHIPID);
1204 if ((val1 == 0x10 || val1 == 0x11) && vendid == winbond)
1206 else if (val1 == 0x30 && vendid == winbond)
1208 else if (val1 == 0x40 && vendid == winbond && address == 0x2d)
1210 else if (val1 == 0x31)
1214 dev_warn(&adapter->dev, "Ignoring 'force' "
1215 "parameter for unknown chip at "
1216 "address 0x%02x\n", address);
1221 if ((kind == w83781d || kind == w83782d)
1222 && w83781d_alias_detect(client, val1)) {
1223 dev_dbg(&adapter->dev, "Device at 0x%02x appears to "
1224 "be the same as ISA device\n", address);
1230 if (kind == w83781d) {
1231 client_name = "w83781d";
1232 } else if (kind == w83782d) {
1233 client_name = "w83782d";
1234 } else if (kind == w83783s) {
1235 client_name = "w83783s";
1236 } else if (kind == as99127f) {
1237 client_name = "as99127f";
1240 /* Fill in the remaining client fields and put into the global list */
1241 strlcpy(client->name, client_name, I2C_NAME_SIZE);
1244 /* Tell the I2C layer a new client has arrived */
1245 if ((err = i2c_attach_client(client)))
1248 /* attach secondary i2c lm75-like clients */
1249 if ((err = w83781d_detect_subclients(adapter, address,
1253 /* Initialize the chip */
1254 w83781d_init_device(dev);
1256 /* Register sysfs hooks */
1257 err = w83781d_create_files(dev, kind, 0);
1261 data->hwmon_dev = hwmon_device_register(dev);
1262 if (IS_ERR(data->hwmon_dev)) {
1263 err = PTR_ERR(data->hwmon_dev);
1270 sysfs_remove_group(&dev->kobj, &w83781d_group);
1271 sysfs_remove_group(&dev->kobj, &w83781d_group_opt);
1273 if (data->lm75[1]) {
1274 i2c_detach_client(data->lm75[1]);
1275 kfree(data->lm75[1]);
1277 if (data->lm75[0]) {
1278 i2c_detach_client(data->lm75[0]);
1279 kfree(data->lm75[0]);
1282 i2c_detach_client(client);
1290 w83781d_detach_client(struct i2c_client *client)
1292 struct w83781d_data *data = i2c_get_clientdata(client);
1297 hwmon_device_unregister(data->hwmon_dev);
1298 sysfs_remove_group(&client->dev.kobj, &w83781d_group);
1299 sysfs_remove_group(&client->dev.kobj, &w83781d_group_opt);
1302 if ((err = i2c_detach_client(client)))
1317 w83781d_read_value_i2c(struct w83781d_data *data, u16 reg)
1319 struct i2c_client *client = &data->client;
1321 struct i2c_client *cl;
1323 bank = (reg >> 8) & 0x0f;
1326 i2c_smbus_write_byte_data(client, W83781D_REG_BANK,
1328 if (bank == 0 || bank > 2) {
1329 res = i2c_smbus_read_byte_data(client, reg & 0xff);
1331 /* switch to subclient */
1332 cl = data->lm75[bank - 1];
1333 /* convert from ISA to LM75 I2C addresses */
1334 switch (reg & 0xff) {
1335 case 0x50: /* TEMP */
1336 res = swab16(i2c_smbus_read_word_data(cl, 0));
1338 case 0x52: /* CONFIG */
1339 res = i2c_smbus_read_byte_data(cl, 1);
1341 case 0x53: /* HYST */
1342 res = swab16(i2c_smbus_read_word_data(cl, 2));
1344 case 0x55: /* OVER */
1346 res = swab16(i2c_smbus_read_word_data(cl, 3));
1351 i2c_smbus_write_byte_data(client, W83781D_REG_BANK, 0);
1357 w83781d_write_value_i2c(struct w83781d_data *data, u16 reg, u16 value)
1359 struct i2c_client *client = &data->client;
1361 struct i2c_client *cl;
1363 bank = (reg >> 8) & 0x0f;
1366 i2c_smbus_write_byte_data(client, W83781D_REG_BANK,
1368 if (bank == 0 || bank > 2) {
1369 i2c_smbus_write_byte_data(client, reg & 0xff,
1372 /* switch to subclient */
1373 cl = data->lm75[bank - 1];
1374 /* convert from ISA to LM75 I2C addresses */
1375 switch (reg & 0xff) {
1376 case 0x52: /* CONFIG */
1377 i2c_smbus_write_byte_data(cl, 1, value & 0xff);
1379 case 0x53: /* HYST */
1380 i2c_smbus_write_word_data(cl, 2, swab16(value));
1382 case 0x55: /* OVER */
1383 i2c_smbus_write_word_data(cl, 3, swab16(value));
1388 i2c_smbus_write_byte_data(client, W83781D_REG_BANK, 0);
1394 w83781d_init_device(struct device *dev)
1396 struct w83781d_data *data = dev_get_drvdata(dev);
1398 int type = data->type;
1401 if (reset && type != as99127f) { /* this resets registers we don't have
1402 documentation for on the as99127f */
1403 /* Resetting the chip has been the default for a long time,
1404 but it causes the BIOS initializations (fan clock dividers,
1405 thermal sensor types...) to be lost, so it is now optional.
1406 It might even go away if nobody reports it as being useful,
1407 as I see very little reason why this would be needed at
1409 dev_info(dev, "If reset=1 solved a problem you were "
1410 "having, please report!\n");
1412 /* save these registers */
1413 i = w83781d_read_value(data, W83781D_REG_BEEP_CONFIG);
1414 p = w83781d_read_value(data, W83781D_REG_PWMCLK12);
1415 /* Reset all except Watchdog values and last conversion values
1416 This sets fan-divs to 2, among others */
1417 w83781d_write_value(data, W83781D_REG_CONFIG, 0x80);
1418 /* Restore the registers and disable power-on abnormal beep.
1419 This saves FAN 1/2/3 input/output values set by BIOS. */
1420 w83781d_write_value(data, W83781D_REG_BEEP_CONFIG, i | 0x80);
1421 w83781d_write_value(data, W83781D_REG_PWMCLK12, p);
1422 /* Disable master beep-enable (reset turns it on).
1423 Individual beep_mask should be reset to off but for some reason
1424 disabling this bit helps some people not get beeped */
1425 w83781d_write_value(data, W83781D_REG_BEEP_INTS2, 0);
1428 /* Disable power-on abnormal beep, as advised by the datasheet.
1429 Already done if reset=1. */
1430 if (init && !reset && type != as99127f) {
1431 i = w83781d_read_value(data, W83781D_REG_BEEP_CONFIG);
1432 w83781d_write_value(data, W83781D_REG_BEEP_CONFIG, i | 0x80);
1435 data->vrm = vid_which_vrm();
1437 if ((type != w83781d) && (type != as99127f)) {
1438 tmp = w83781d_read_value(data, W83781D_REG_SCFG1);
1439 for (i = 1; i <= 3; i++) {
1440 if (!(tmp & BIT_SCFG1[i - 1])) {
1441 data->sens[i - 1] = 4;
1443 if (w83781d_read_value
1445 W83781D_REG_SCFG2) & BIT_SCFG2[i - 1])
1446 data->sens[i - 1] = 1;
1448 data->sens[i - 1] = 2;
1450 if (type == w83783s && i == 2)
1455 if (init && type != as99127f) {
1457 tmp = w83781d_read_value(data, W83781D_REG_TEMP2_CONFIG);
1459 dev_warn(dev, "Enabling temp2, readings "
1460 "might not make sense\n");
1461 w83781d_write_value(data, W83781D_REG_TEMP2_CONFIG,
1466 if (type != w83783s) {
1467 tmp = w83781d_read_value(data,
1468 W83781D_REG_TEMP3_CONFIG);
1470 dev_warn(dev, "Enabling temp3, "
1471 "readings might not make sense\n");
1472 w83781d_write_value(data,
1473 W83781D_REG_TEMP3_CONFIG, tmp & 0xfe);
1478 /* Start monitoring */
1479 w83781d_write_value(data, W83781D_REG_CONFIG,
1480 (w83781d_read_value(data,
1481 W83781D_REG_CONFIG) & 0xf7)
1484 /* A few vars need to be filled upon startup */
1485 for (i = 0; i < 3; i++) {
1486 data->fan_min[i] = w83781d_read_value(data,
1487 W83781D_REG_FAN_MIN(i));
1490 mutex_init(&data->update_lock);
1493 static struct w83781d_data *w83781d_update_device(struct device *dev)
1495 struct w83781d_data *data = dev_get_drvdata(dev);
1496 struct i2c_client *client = &data->client;
1499 mutex_lock(&data->update_lock);
1501 if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
1503 dev_dbg(dev, "Starting device update\n");
1505 for (i = 0; i <= 8; i++) {
1506 if (data->type == w83783s && i == 1)
1507 continue; /* 783S has no in1 */
1509 w83781d_read_value(data, W83781D_REG_IN(i));
1511 w83781d_read_value(data, W83781D_REG_IN_MIN(i));
1513 w83781d_read_value(data, W83781D_REG_IN_MAX(i));
1514 if ((data->type != w83782d) && (i == 6))
1517 for (i = 0; i < 3; i++) {
1519 w83781d_read_value(data, W83781D_REG_FAN(i));
1521 w83781d_read_value(data, W83781D_REG_FAN_MIN(i));
1523 if (data->type != w83781d && data->type != as99127f) {
1524 for (i = 0; i < 4; i++) {
1526 w83781d_read_value(data,
1527 W83781D_REG_PWM[i]);
1528 if ((data->type != w83782d || !client->driver)
1532 /* Only PWM2 can be disabled */
1533 data->pwm2_enable = (w83781d_read_value(data,
1534 W83781D_REG_PWMCLK12) & 0x08) >> 3;
1537 data->temp = w83781d_read_value(data, W83781D_REG_TEMP(1));
1539 w83781d_read_value(data, W83781D_REG_TEMP_OVER(1));
1540 data->temp_max_hyst =
1541 w83781d_read_value(data, W83781D_REG_TEMP_HYST(1));
1543 w83781d_read_value(data, W83781D_REG_TEMP(2));
1544 data->temp_max_add[0] =
1545 w83781d_read_value(data, W83781D_REG_TEMP_OVER(2));
1546 data->temp_max_hyst_add[0] =
1547 w83781d_read_value(data, W83781D_REG_TEMP_HYST(2));
1548 if (data->type != w83783s) {
1550 w83781d_read_value(data, W83781D_REG_TEMP(3));
1551 data->temp_max_add[1] =
1552 w83781d_read_value(data,
1553 W83781D_REG_TEMP_OVER(3));
1554 data->temp_max_hyst_add[1] =
1555 w83781d_read_value(data,
1556 W83781D_REG_TEMP_HYST(3));
1558 i = w83781d_read_value(data, W83781D_REG_VID_FANDIV);
1559 data->vid = i & 0x0f;
1560 data->vid |= (w83781d_read_value(data,
1561 W83781D_REG_CHIPID) & 0x01) << 4;
1562 data->fan_div[0] = (i >> 4) & 0x03;
1563 data->fan_div[1] = (i >> 6) & 0x03;
1564 data->fan_div[2] = (w83781d_read_value(data,
1565 W83781D_REG_PIN) >> 6) & 0x03;
1566 if ((data->type != w83781d) && (data->type != as99127f)) {
1567 i = w83781d_read_value(data, W83781D_REG_VBAT);
1568 data->fan_div[0] |= (i >> 3) & 0x04;
1569 data->fan_div[1] |= (i >> 4) & 0x04;
1570 data->fan_div[2] |= (i >> 5) & 0x04;
1572 if (data->type == w83782d) {
1573 data->alarms = w83781d_read_value(data,
1575 | (w83781d_read_value(data,
1576 W83782D_REG_ALARM2) << 8)
1577 | (w83781d_read_value(data,
1578 W83782D_REG_ALARM3) << 16);
1579 } else if (data->type == w83783s) {
1580 data->alarms = w83781d_read_value(data,
1582 | (w83781d_read_value(data,
1583 W83782D_REG_ALARM2) << 8);
1585 /* No real-time status registers, fall back to
1586 interrupt status registers */
1587 data->alarms = w83781d_read_value(data,
1589 | (w83781d_read_value(data,
1590 W83781D_REG_ALARM2) << 8);
1592 i = w83781d_read_value(data, W83781D_REG_BEEP_INTS2);
1593 data->beep_mask = (i << 8) +
1594 w83781d_read_value(data, W83781D_REG_BEEP_INTS1);
1595 if ((data->type != w83781d) && (data->type != as99127f)) {
1597 w83781d_read_value(data,
1598 W83781D_REG_BEEP_INTS3) << 16;
1600 data->last_updated = jiffies;
1604 mutex_unlock(&data->update_lock);
1611 /* ISA device, if found */
1612 static struct platform_device *pdev;
1614 static unsigned short isa_address = 0x290;
1616 /* I2C devices get this name attribute automatically, but for ISA devices
1617 we must create it by ourselves. */
1619 show_name(struct device *dev, struct device_attribute *devattr, char *buf)
1621 struct w83781d_data *data = dev_get_drvdata(dev);
1622 return sprintf(buf, "%s\n", data->name);
1624 static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
1626 static struct w83781d_data *w83781d_data_if_isa(void)
1628 return pdev ? platform_get_drvdata(pdev) : NULL;
1631 /* Returns 1 if the I2C chip appears to be an alias of the ISA chip */
1632 static int w83781d_alias_detect(struct i2c_client *client, u8 chipid)
1634 struct w83781d_data *i2c, *isa;
1637 if (!pdev) /* No ISA chip */
1640 i2c = i2c_get_clientdata(client);
1641 isa = platform_get_drvdata(pdev);
1643 if (w83781d_read_value(isa, W83781D_REG_I2C_ADDR) != client->addr)
1644 return 0; /* Address doesn't match */
1645 if (w83781d_read_value(isa, W83781D_REG_WCHIPID) != chipid)
1646 return 0; /* Chip type doesn't match */
1648 /* We compare all the limit registers, the config register and the
1649 * interrupt mask registers */
1650 for (i = 0x2b; i <= 0x3d; i++) {
1651 if (w83781d_read_value(isa, i) != w83781d_read_value(i2c, i))
1654 if (w83781d_read_value(isa, W83781D_REG_CONFIG) !=
1655 w83781d_read_value(i2c, W83781D_REG_CONFIG))
1657 for (i = 0x43; i <= 0x46; i++) {
1658 if (w83781d_read_value(isa, i) != w83781d_read_value(i2c, i))
1666 w83781d_read_value_isa(struct w83781d_data *data, u16 reg)
1668 int word_sized, res;
1670 word_sized = (((reg & 0xff00) == 0x100)
1671 || ((reg & 0xff00) == 0x200))
1672 && (((reg & 0x00ff) == 0x50)
1673 || ((reg & 0x00ff) == 0x53)
1674 || ((reg & 0x00ff) == 0x55));
1676 outb_p(W83781D_REG_BANK,
1677 data->isa_addr + W83781D_ADDR_REG_OFFSET);
1679 data->isa_addr + W83781D_DATA_REG_OFFSET);
1681 outb_p(reg & 0xff, data->isa_addr + W83781D_ADDR_REG_OFFSET);
1682 res = inb_p(data->isa_addr + W83781D_DATA_REG_OFFSET);
1684 outb_p((reg & 0xff) + 1,
1685 data->isa_addr + W83781D_ADDR_REG_OFFSET);
1687 (res << 8) + inb_p(data->isa_addr +
1688 W83781D_DATA_REG_OFFSET);
1691 outb_p(W83781D_REG_BANK,
1692 data->isa_addr + W83781D_ADDR_REG_OFFSET);
1693 outb_p(0, data->isa_addr + W83781D_DATA_REG_OFFSET);
1699 w83781d_write_value_isa(struct w83781d_data *data, u16 reg, u16 value)
1703 word_sized = (((reg & 0xff00) == 0x100)
1704 || ((reg & 0xff00) == 0x200))
1705 && (((reg & 0x00ff) == 0x53)
1706 || ((reg & 0x00ff) == 0x55));
1708 outb_p(W83781D_REG_BANK,
1709 data->isa_addr + W83781D_ADDR_REG_OFFSET);
1711 data->isa_addr + W83781D_DATA_REG_OFFSET);
1713 outb_p(reg & 0xff, data->isa_addr + W83781D_ADDR_REG_OFFSET);
1716 data->isa_addr + W83781D_DATA_REG_OFFSET);
1717 outb_p((reg & 0xff) + 1,
1718 data->isa_addr + W83781D_ADDR_REG_OFFSET);
1720 outb_p(value & 0xff, data->isa_addr + W83781D_DATA_REG_OFFSET);
1722 outb_p(W83781D_REG_BANK,
1723 data->isa_addr + W83781D_ADDR_REG_OFFSET);
1724 outb_p(0, data->isa_addr + W83781D_DATA_REG_OFFSET);
1728 /* The SMBus locks itself, usually, but nothing may access the Winbond between
1729 bank switches. ISA access must always be locked explicitly!
1730 We ignore the W83781D BUSY flag at this moment - it could lead to deadlocks,
1731 would slow down the W83781D access and should not be necessary.
1732 There are some ugly typecasts here, but the good news is - they should
1733 nowhere else be necessary! */
1735 w83781d_read_value(struct w83781d_data *data, u16 reg)
1737 struct i2c_client *client = &data->client;
1740 mutex_lock(&data->lock);
1742 res = w83781d_read_value_i2c(data, reg);
1744 res = w83781d_read_value_isa(data, reg);
1745 mutex_unlock(&data->lock);
1750 w83781d_write_value(struct w83781d_data *data, u16 reg, u16 value)
1752 struct i2c_client *client = &data->client;
1754 mutex_lock(&data->lock);
1756 w83781d_write_value_i2c(data, reg, value);
1758 w83781d_write_value_isa(data, reg, value);
1759 mutex_unlock(&data->lock);
1763 static int __devinit
1764 w83781d_isa_probe(struct platform_device *pdev)
1767 struct w83781d_data *data;
1768 struct resource *res;
1770 /* Reserve the ISA region */
1771 res = platform_get_resource(pdev, IORESOURCE_IO, 0);
1772 if (!request_region(res->start + W83781D_ADDR_REG_OFFSET, 2,
1778 data = kzalloc(sizeof(struct w83781d_data), GFP_KERNEL);
1781 goto exit_release_region;
1783 mutex_init(&data->lock);
1784 data->isa_addr = res->start;
1785 platform_set_drvdata(pdev, data);
1787 reg = w83781d_read_value(data, W83781D_REG_WCHIPID);
1790 data->type = w83782d;
1791 data->name = "w83782d";
1794 data->type = w83781d;
1795 data->name = "w83781d";
1798 /* Initialize the W83781D chip */
1799 w83781d_init_device(&pdev->dev);
1801 /* Register sysfs hooks */
1802 err = w83781d_create_files(&pdev->dev, data->type, 1);
1804 goto exit_remove_files;
1806 err = device_create_file(&pdev->dev, &dev_attr_name);
1808 goto exit_remove_files;
1810 data->hwmon_dev = hwmon_device_register(&pdev->dev);
1811 if (IS_ERR(data->hwmon_dev)) {
1812 err = PTR_ERR(data->hwmon_dev);
1813 goto exit_remove_files;
1819 sysfs_remove_group(&pdev->dev.kobj, &w83781d_group);
1820 sysfs_remove_group(&pdev->dev.kobj, &w83781d_group_opt);
1821 device_remove_file(&pdev->dev, &dev_attr_name);
1823 exit_release_region:
1824 release_region(res->start + W83781D_ADDR_REG_OFFSET, 2);
1829 static int __devexit
1830 w83781d_isa_remove(struct platform_device *pdev)
1832 struct w83781d_data *data = platform_get_drvdata(pdev);
1834 hwmon_device_unregister(data->hwmon_dev);
1835 sysfs_remove_group(&pdev->dev.kobj, &w83781d_group);
1836 sysfs_remove_group(&pdev->dev.kobj, &w83781d_group_opt);
1837 device_remove_file(&pdev->dev, &dev_attr_name);
1838 release_region(data->isa_addr + W83781D_ADDR_REG_OFFSET, 2);
1844 static struct platform_driver w83781d_isa_driver = {
1846 .owner = THIS_MODULE,
1849 .probe = w83781d_isa_probe,
1850 .remove = __devexit_p(w83781d_isa_remove),
1853 /* return 1 if a supported chip is found, 0 otherwise */
1855 w83781d_isa_found(unsigned short address)
1857 int val, save, found = 0;
1859 /* We have to request the region in two parts because some
1860 boards declare base+4 to base+7 as a PNP device */
1861 if (!request_region(address, 4, "w83781d")) {
1862 pr_debug("w83781d: Failed to request low part of region\n");
1865 if (!request_region(address + 4, 4, "w83781d")) {
1866 pr_debug("w83781d: Failed to request high part of region\n");
1867 release_region(address, 4);
1871 #define REALLY_SLOW_IO
1872 /* We need the timeouts for at least some W83781D-like
1873 chips. But only if we read 'undefined' registers. */
1874 val = inb_p(address + 1);
1875 if (inb_p(address + 2) != val
1876 || inb_p(address + 3) != val
1877 || inb_p(address + 7) != val) {
1878 pr_debug("w83781d: Detection failed at step 1\n");
1881 #undef REALLY_SLOW_IO
1883 /* We should be able to change the 7 LSB of the address port. The
1884 MSB (busy flag) should be clear initially, set after the write. */
1885 save = inb_p(address + W83781D_ADDR_REG_OFFSET);
1887 pr_debug("w83781d: Detection failed at step 2\n");
1891 outb_p(val, address + W83781D_ADDR_REG_OFFSET);
1892 if (inb_p(address + W83781D_ADDR_REG_OFFSET) != (val | 0x80)) {
1893 outb_p(save, address + W83781D_ADDR_REG_OFFSET);
1894 pr_debug("w83781d: Detection failed at step 3\n");
1898 /* We found a device, now see if it could be a W83781D */
1899 outb_p(W83781D_REG_CONFIG, address + W83781D_ADDR_REG_OFFSET);
1900 val = inb_p(address + W83781D_DATA_REG_OFFSET);
1902 pr_debug("w83781d: Detection failed at step 4\n");
1905 outb_p(W83781D_REG_BANK, address + W83781D_ADDR_REG_OFFSET);
1906 save = inb_p(address + W83781D_DATA_REG_OFFSET);
1907 outb_p(W83781D_REG_CHIPMAN, address + W83781D_ADDR_REG_OFFSET);
1908 val = inb_p(address + W83781D_DATA_REG_OFFSET);
1909 if ((!(save & 0x80) && (val != 0xa3))
1910 || ((save & 0x80) && (val != 0x5c))) {
1911 pr_debug("w83781d: Detection failed at step 5\n");
1914 outb_p(W83781D_REG_I2C_ADDR, address + W83781D_ADDR_REG_OFFSET);
1915 val = inb_p(address + W83781D_DATA_REG_OFFSET);
1916 if (val < 0x03 || val > 0x77) { /* Not a valid I2C address */
1917 pr_debug("w83781d: Detection failed at step 6\n");
1921 /* The busy flag should be clear again */
1922 if (inb_p(address + W83781D_ADDR_REG_OFFSET) & 0x80) {
1923 pr_debug("w83781d: Detection failed at step 7\n");
1927 /* Determine the chip type */
1928 outb_p(W83781D_REG_BANK, address + W83781D_ADDR_REG_OFFSET);
1929 save = inb_p(address + W83781D_DATA_REG_OFFSET);
1930 outb_p(save & 0xf8, address + W83781D_DATA_REG_OFFSET);
1931 outb_p(W83781D_REG_WCHIPID, address + W83781D_ADDR_REG_OFFSET);
1932 val = inb_p(address + W83781D_DATA_REG_OFFSET);
1933 if ((val & 0xfe) == 0x10 /* W83781D */
1934 || val == 0x30) /* W83782D */
1938 pr_info("w83781d: Found a %s chip at %#x\n",
1939 val == 0x30 ? "W83782D" : "W83781D", (int)address);
1942 release_region(address + 4, 4);
1943 release_region(address, 4);
1948 w83781d_isa_device_add(unsigned short address)
1950 struct resource res = {
1952 .end = address + W83781D_EXTENT - 1,
1954 .flags = IORESOURCE_IO,
1958 pdev = platform_device_alloc("w83781d", address);
1961 printk(KERN_ERR "w83781d: Device allocation failed\n");
1965 err = platform_device_add_resources(pdev, &res, 1);
1967 printk(KERN_ERR "w83781d: Device resource addition failed "
1969 goto exit_device_put;
1972 err = platform_device_add(pdev);
1974 printk(KERN_ERR "w83781d: Device addition failed (%d)\n",
1976 goto exit_device_put;
1982 platform_device_put(pdev);
1989 w83781d_isa_register(void)
1993 if (w83781d_isa_found(isa_address)) {
1994 res = platform_driver_register(&w83781d_isa_driver);
1998 /* Sets global pdev as a side effect */
1999 res = w83781d_isa_device_add(isa_address);
2001 goto exit_unreg_isa_driver;
2006 exit_unreg_isa_driver:
2007 platform_driver_unregister(&w83781d_isa_driver);
2013 w83781d_isa_unregister(void)
2016 platform_device_unregister(pdev);
2017 platform_driver_unregister(&w83781d_isa_driver);
2020 #else /* !CONFIG_ISA */
2022 static struct w83781d_data *w83781d_data_if_isa(void)
2028 w83781d_alias_detect(struct i2c_client *client, u8 chipid)
2034 w83781d_read_value(struct w83781d_data *data, u16 reg)
2038 mutex_lock(&data->lock);
2039 res = w83781d_read_value_i2c(data, reg);
2040 mutex_unlock(&data->lock);
2046 w83781d_write_value(struct w83781d_data *data, u16 reg, u16 value)
2048 mutex_lock(&data->lock);
2049 w83781d_write_value_i2c(data, reg, value);
2050 mutex_unlock(&data->lock);
2056 w83781d_isa_register(void)
2062 w83781d_isa_unregister(void)
2065 #endif /* CONFIG_ISA */
2068 sensors_w83781d_init(void)
2072 /* We register the ISA device first, so that we can skip the
2073 * registration of an I2C interface to the same device. */
2074 res = w83781d_isa_register();
2078 res = i2c_add_driver(&w83781d_driver);
2080 goto exit_unreg_isa;
2085 w83781d_isa_unregister();
2091 sensors_w83781d_exit(void)
2093 w83781d_isa_unregister();
2094 i2c_del_driver(&w83781d_driver);
2097 MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>, "
2098 "Philip Edelbrock <phil@netroedge.com>, "
2099 "and Mark Studebaker <mdsxyz123@yahoo.com>");
2100 MODULE_DESCRIPTION("W83781D driver");
2101 MODULE_LICENSE("GPL");
2103 module_init(sensors_w83781d_init);
2104 module_exit(sensors_w83781d_exit);