2 it87.c - Part of lm_sensors, Linux kernel modules for hardware
5 Supports: IT8705F Super I/O chip w/LPC interface
6 IT8712F Super I/O chip w/LPC interface & SMBus
7 IT8716F Super I/O chip w/LPC interface
8 IT8718F Super I/O chip w/LPC interface
9 Sis950 A clone of the IT8705F
11 Copyright (C) 2001 Chris Gauthron <chrisg@0-in.com>
12 Copyright (C) 2005-2006 Jean Delvare <khali@linux-fr.org>
14 This program is free software; you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation; either version 2 of the License, or
17 (at your option) any later version.
19 This program is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
24 You should have received a copy of the GNU General Public License
25 along with this program; if not, write to the Free Software
26 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
29 #include <linux/module.h>
30 #include <linux/init.h>
31 #include <linux/slab.h>
32 #include <linux/jiffies.h>
33 #include <linux/i2c.h>
34 #include <linux/i2c-isa.h>
35 #include <linux/hwmon.h>
36 #include <linux/hwmon-sysfs.h>
37 #include <linux/hwmon-vid.h>
38 #include <linux/err.h>
39 #include <linux/mutex.h>
40 #include <linux/sysfs.h>
44 /* Addresses to scan */
45 static unsigned short normal_i2c[] = { 0x2d, I2C_CLIENT_END };
46 static unsigned short isa_address;
48 /* Insmod parameters */
49 I2C_CLIENT_INSMOD_4(it87, it8712, it8716, it8718);
51 #define REG 0x2e /* The register to read/write */
52 #define DEV 0x07 /* Register: Logical device select */
53 #define VAL 0x2f /* The value to read/write */
54 #define PME 0x04 /* The device with the fan registers in it */
55 #define GPIO 0x07 /* The device with the IT8718F VID value in it */
56 #define DEVID 0x20 /* Register: Device ID */
57 #define DEVREV 0x22 /* Register: Device Revision */
66 static int superio_inw(int reg)
77 superio_select(int ldn)
99 /* Logical device 4 registers */
100 #define IT8712F_DEVID 0x8712
101 #define IT8705F_DEVID 0x8705
102 #define IT8716F_DEVID 0x8716
103 #define IT8718F_DEVID 0x8718
104 #define IT87_ACT_REG 0x30
105 #define IT87_BASE_REG 0x60
107 /* Logical device 7 registers (IT8712F and later) */
108 #define IT87_SIO_PINX2_REG 0x2c /* Pin selection */
109 #define IT87_SIO_VID_REG 0xfc /* VID value */
111 /* Update battery voltage after every reading if true */
112 static int update_vbat;
114 /* Not all BIOSes properly configure the PWM registers */
115 static int fix_pwm_polarity;
117 /* Values read from Super-I/O config space */
118 static u16 chip_type;
121 /* Many IT87 constants specified below */
123 /* Length of ISA address segment */
124 #define IT87_EXTENT 8
126 /* Where are the ISA address/data registers relative to the base address */
127 #define IT87_ADDR_REG_OFFSET 5
128 #define IT87_DATA_REG_OFFSET 6
130 /*----- The IT87 registers -----*/
132 #define IT87_REG_CONFIG 0x00
134 #define IT87_REG_ALARM1 0x01
135 #define IT87_REG_ALARM2 0x02
136 #define IT87_REG_ALARM3 0x03
138 /* The IT8718F has the VID value in a different register, in Super-I/O
139 configuration space. */
140 #define IT87_REG_VID 0x0a
141 /* Warning: register 0x0b is used for something completely different in
142 new chips/revisions. I suspect only 16-bit tachometer mode will work
144 #define IT87_REG_FAN_DIV 0x0b
145 #define IT87_REG_FAN_16BIT 0x0c
147 /* Monitors: 9 voltage (0 to 7, battery), 3 temp (1 to 3), 3 fan (1 to 3) */
149 #define IT87_REG_FAN(nr) (0x0d + (nr))
150 #define IT87_REG_FAN_MIN(nr) (0x10 + (nr))
151 #define IT87_REG_FANX(nr) (0x18 + (nr))
152 #define IT87_REG_FANX_MIN(nr) (0x1b + (nr))
153 #define IT87_REG_FAN_MAIN_CTRL 0x13
154 #define IT87_REG_FAN_CTL 0x14
155 #define IT87_REG_PWM(nr) (0x15 + (nr))
157 #define IT87_REG_VIN(nr) (0x20 + (nr))
158 #define IT87_REG_TEMP(nr) (0x29 + (nr))
160 #define IT87_REG_VIN_MAX(nr) (0x30 + (nr) * 2)
161 #define IT87_REG_VIN_MIN(nr) (0x31 + (nr) * 2)
162 #define IT87_REG_TEMP_HIGH(nr) (0x40 + (nr) * 2)
163 #define IT87_REG_TEMP_LOW(nr) (0x41 + (nr) * 2)
165 #define IT87_REG_I2C_ADDR 0x48
167 #define IT87_REG_VIN_ENABLE 0x50
168 #define IT87_REG_TEMP_ENABLE 0x51
170 #define IT87_REG_CHIPID 0x58
172 #define IN_TO_REG(val) (SENSORS_LIMIT((((val) + 8)/16),0,255))
173 #define IN_FROM_REG(val) ((val) * 16)
175 static inline u8 FAN_TO_REG(long rpm, int div)
179 rpm = SENSORS_LIMIT(rpm, 1, 1000000);
180 return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1,
184 static inline u16 FAN16_TO_REG(long rpm)
188 return SENSORS_LIMIT((1350000 + rpm) / (rpm * 2), 1, 0xfffe);
191 #define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*(div)))
192 /* The divider is fixed to 2 in 16-bit mode */
193 #define FAN16_FROM_REG(val) ((val)==0?-1:(val)==0xffff?0:1350000/((val)*2))
195 #define TEMP_TO_REG(val) (SENSORS_LIMIT(((val)<0?(((val)-500)/1000):\
196 ((val)+500)/1000),-128,127))
197 #define TEMP_FROM_REG(val) (((val)>0x80?(val)-0x100:(val))*1000)
199 #define PWM_TO_REG(val) ((val) >> 1)
200 #define PWM_FROM_REG(val) (((val)&0x7f) << 1)
202 static int DIV_TO_REG(int val)
205 while (answer < 7 && (val >>= 1))
209 #define DIV_FROM_REG(val) (1 << (val))
212 /* For each registered IT87, we need to keep some data in memory. That
213 data is pointed to by it87_list[NR]->data. The structure itself is
214 dynamically allocated, at the same time when a new it87 client is
217 struct i2c_client client;
218 struct class_device *class_dev;
222 struct mutex update_lock;
223 char valid; /* !=0 if following fields are valid */
224 unsigned long last_updated; /* In jiffies */
226 u8 in[9]; /* Register value */
227 u8 in_max[8]; /* Register value */
228 u8 in_min[8]; /* Register value */
229 u8 has_fan; /* Bitfield, fans enabled */
230 u16 fan[3]; /* Register values, possibly combined */
231 u16 fan_min[3]; /* Register values, possibly combined */
232 u8 temp[3]; /* Register value */
233 u8 temp_high[3]; /* Register value */
234 u8 temp_low[3]; /* Register value */
235 u8 sensor; /* Register value */
236 u8 fan_div[3]; /* Register encoding, shifted right */
237 u8 vid; /* Register encoding, combined */
239 u32 alarms; /* Register encoding, combined */
240 u8 fan_main_ctrl; /* Register value */
241 u8 manual_pwm_ctl[3]; /* manual PWM value set by user */
245 static int it87_attach_adapter(struct i2c_adapter *adapter);
246 static int it87_isa_attach_adapter(struct i2c_adapter *adapter);
247 static int it87_detect(struct i2c_adapter *adapter, int address, int kind);
248 static int it87_detach_client(struct i2c_client *client);
250 static int it87_read_value(struct i2c_client *client, u8 reg);
251 static int it87_write_value(struct i2c_client *client, u8 reg, u8 value);
252 static struct it87_data *it87_update_device(struct device *dev);
253 static int it87_check_pwm(struct i2c_client *client);
254 static void it87_init_client(struct i2c_client *client, struct it87_data *data);
257 static struct i2c_driver it87_driver = {
261 .id = I2C_DRIVERID_IT87,
262 .attach_adapter = it87_attach_adapter,
263 .detach_client = it87_detach_client,
266 static struct i2c_driver it87_isa_driver = {
268 .owner = THIS_MODULE,
271 .attach_adapter = it87_isa_attach_adapter,
272 .detach_client = it87_detach_client,
276 static ssize_t show_in(struct device *dev, struct device_attribute *attr,
279 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
280 int nr = sensor_attr->index;
282 struct it87_data *data = it87_update_device(dev);
283 return sprintf(buf, "%d\n", IN_FROM_REG(data->in[nr]));
286 static ssize_t show_in_min(struct device *dev, struct device_attribute *attr,
289 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
290 int nr = sensor_attr->index;
292 struct it87_data *data = it87_update_device(dev);
293 return sprintf(buf, "%d\n", IN_FROM_REG(data->in_min[nr]));
296 static ssize_t show_in_max(struct device *dev, struct device_attribute *attr,
299 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
300 int nr = sensor_attr->index;
302 struct it87_data *data = it87_update_device(dev);
303 return sprintf(buf, "%d\n", IN_FROM_REG(data->in_max[nr]));
306 static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
307 const char *buf, size_t count)
309 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
310 int nr = sensor_attr->index;
312 struct i2c_client *client = to_i2c_client(dev);
313 struct it87_data *data = i2c_get_clientdata(client);
314 unsigned long val = simple_strtoul(buf, NULL, 10);
316 mutex_lock(&data->update_lock);
317 data->in_min[nr] = IN_TO_REG(val);
318 it87_write_value(client, IT87_REG_VIN_MIN(nr),
320 mutex_unlock(&data->update_lock);
323 static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
324 const char *buf, size_t count)
326 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
327 int nr = sensor_attr->index;
329 struct i2c_client *client = to_i2c_client(dev);
330 struct it87_data *data = i2c_get_clientdata(client);
331 unsigned long val = simple_strtoul(buf, NULL, 10);
333 mutex_lock(&data->update_lock);
334 data->in_max[nr] = IN_TO_REG(val);
335 it87_write_value(client, IT87_REG_VIN_MAX(nr),
337 mutex_unlock(&data->update_lock);
341 #define show_in_offset(offset) \
342 static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \
343 show_in, NULL, offset);
345 #define limit_in_offset(offset) \
346 static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
347 show_in_min, set_in_min, offset); \
348 static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
349 show_in_max, set_in_max, offset);
370 static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
373 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
374 int nr = sensor_attr->index;
376 struct it87_data *data = it87_update_device(dev);
377 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[nr]));
379 static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr,
382 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
383 int nr = sensor_attr->index;
385 struct it87_data *data = it87_update_device(dev);
386 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_high[nr]));
388 static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr,
391 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
392 int nr = sensor_attr->index;
394 struct it87_data *data = it87_update_device(dev);
395 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_low[nr]));
397 static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
398 const char *buf, size_t count)
400 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
401 int nr = sensor_attr->index;
403 struct i2c_client *client = to_i2c_client(dev);
404 struct it87_data *data = i2c_get_clientdata(client);
405 int val = simple_strtol(buf, NULL, 10);
407 mutex_lock(&data->update_lock);
408 data->temp_high[nr] = TEMP_TO_REG(val);
409 it87_write_value(client, IT87_REG_TEMP_HIGH(nr), data->temp_high[nr]);
410 mutex_unlock(&data->update_lock);
413 static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
414 const char *buf, size_t count)
416 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
417 int nr = sensor_attr->index;
419 struct i2c_client *client = to_i2c_client(dev);
420 struct it87_data *data = i2c_get_clientdata(client);
421 int val = simple_strtol(buf, NULL, 10);
423 mutex_lock(&data->update_lock);
424 data->temp_low[nr] = TEMP_TO_REG(val);
425 it87_write_value(client, IT87_REG_TEMP_LOW(nr), data->temp_low[nr]);
426 mutex_unlock(&data->update_lock);
429 #define show_temp_offset(offset) \
430 static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \
431 show_temp, NULL, offset - 1); \
432 static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \
433 show_temp_max, set_temp_max, offset - 1); \
434 static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \
435 show_temp_min, set_temp_min, offset - 1);
441 static ssize_t show_sensor(struct device *dev, struct device_attribute *attr,
444 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
445 int nr = sensor_attr->index;
447 struct it87_data *data = it87_update_device(dev);
448 u8 reg = data->sensor; /* In case the value is updated while we use it */
451 return sprintf(buf, "3\n"); /* thermal diode */
453 return sprintf(buf, "2\n"); /* thermistor */
454 return sprintf(buf, "0\n"); /* disabled */
456 static ssize_t set_sensor(struct device *dev, struct device_attribute *attr,
457 const char *buf, size_t count)
459 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
460 int nr = sensor_attr->index;
462 struct i2c_client *client = to_i2c_client(dev);
463 struct it87_data *data = i2c_get_clientdata(client);
464 int val = simple_strtol(buf, NULL, 10);
466 mutex_lock(&data->update_lock);
468 data->sensor &= ~(1 << nr);
469 data->sensor &= ~(8 << nr);
470 /* 3 = thermal diode; 2 = thermistor; 0 = disabled */
472 data->sensor |= 1 << nr;
474 data->sensor |= 8 << nr;
476 mutex_unlock(&data->update_lock);
479 it87_write_value(client, IT87_REG_TEMP_ENABLE, data->sensor);
480 mutex_unlock(&data->update_lock);
483 #define show_sensor_offset(offset) \
484 static SENSOR_DEVICE_ATTR(temp##offset##_type, S_IRUGO | S_IWUSR, \
485 show_sensor, set_sensor, offset - 1);
487 show_sensor_offset(1);
488 show_sensor_offset(2);
489 show_sensor_offset(3);
492 static ssize_t show_fan(struct device *dev, struct device_attribute *attr,
495 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
496 int nr = sensor_attr->index;
498 struct it87_data *data = it87_update_device(dev);
499 return sprintf(buf,"%d\n", FAN_FROM_REG(data->fan[nr],
500 DIV_FROM_REG(data->fan_div[nr])));
502 static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr,
505 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
506 int nr = sensor_attr->index;
508 struct it87_data *data = it87_update_device(dev);
509 return sprintf(buf,"%d\n",
510 FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr])));
512 static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
515 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
516 int nr = sensor_attr->index;
518 struct it87_data *data = it87_update_device(dev);
519 return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr]));
521 static ssize_t show_pwm_enable(struct device *dev, struct device_attribute *attr,
524 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
525 int nr = sensor_attr->index;
527 struct it87_data *data = it87_update_device(dev);
528 return sprintf(buf,"%d\n", (data->fan_main_ctrl & (1 << nr)) ? 1 : 0);
530 static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
533 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
534 int nr = sensor_attr->index;
536 struct it87_data *data = it87_update_device(dev);
537 return sprintf(buf,"%d\n", data->manual_pwm_ctl[nr]);
539 static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
540 const char *buf, size_t count)
542 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
543 int nr = sensor_attr->index;
545 struct i2c_client *client = to_i2c_client(dev);
546 struct it87_data *data = i2c_get_clientdata(client);
547 int val = simple_strtol(buf, NULL, 10);
548 u8 reg = it87_read_value(client, IT87_REG_FAN_DIV);
550 mutex_lock(&data->update_lock);
552 case 0: data->fan_div[nr] = reg & 0x07; break;
553 case 1: data->fan_div[nr] = (reg >> 3) & 0x07; break;
554 case 2: data->fan_div[nr] = (reg & 0x40) ? 3 : 1; break;
557 data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
558 it87_write_value(client, IT87_REG_FAN_MIN(nr), data->fan_min[nr]);
559 mutex_unlock(&data->update_lock);
562 static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
563 const char *buf, size_t count)
565 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
566 int nr = sensor_attr->index;
568 struct i2c_client *client = to_i2c_client(dev);
569 struct it87_data *data = i2c_get_clientdata(client);
570 unsigned long val = simple_strtoul(buf, NULL, 10);
574 mutex_lock(&data->update_lock);
575 old = it87_read_value(client, IT87_REG_FAN_DIV);
577 /* Save fan min limit */
578 min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr]));
583 data->fan_div[nr] = DIV_TO_REG(val);
587 data->fan_div[nr] = 1;
589 data->fan_div[nr] = 3;
592 val |= (data->fan_div[0] & 0x07);
593 val |= (data->fan_div[1] & 0x07) << 3;
594 if (data->fan_div[2] == 3)
596 it87_write_value(client, IT87_REG_FAN_DIV, val);
598 /* Restore fan min limit */
599 data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
600 it87_write_value(client, IT87_REG_FAN_MIN(nr), data->fan_min[nr]);
602 mutex_unlock(&data->update_lock);
605 static ssize_t set_pwm_enable(struct device *dev,
606 struct device_attribute *attr, const char *buf, size_t count)
608 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
609 int nr = sensor_attr->index;
611 struct i2c_client *client = to_i2c_client(dev);
612 struct it87_data *data = i2c_get_clientdata(client);
613 int val = simple_strtol(buf, NULL, 10);
615 mutex_lock(&data->update_lock);
619 /* make sure the fan is on when in on/off mode */
620 tmp = it87_read_value(client, IT87_REG_FAN_CTL);
621 it87_write_value(client, IT87_REG_FAN_CTL, tmp | (1 << nr));
622 /* set on/off mode */
623 data->fan_main_ctrl &= ~(1 << nr);
624 it87_write_value(client, IT87_REG_FAN_MAIN_CTRL, data->fan_main_ctrl);
625 } else if (val == 1) {
626 /* set SmartGuardian mode */
627 data->fan_main_ctrl |= (1 << nr);
628 it87_write_value(client, IT87_REG_FAN_MAIN_CTRL, data->fan_main_ctrl);
629 /* set saved pwm value, clear FAN_CTLX PWM mode bit */
630 it87_write_value(client, IT87_REG_PWM(nr), PWM_TO_REG(data->manual_pwm_ctl[nr]));
632 mutex_unlock(&data->update_lock);
636 mutex_unlock(&data->update_lock);
639 static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
640 const char *buf, size_t count)
642 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
643 int nr = sensor_attr->index;
645 struct i2c_client *client = to_i2c_client(dev);
646 struct it87_data *data = i2c_get_clientdata(client);
647 int val = simple_strtol(buf, NULL, 10);
649 if (val < 0 || val > 255)
652 mutex_lock(&data->update_lock);
653 data->manual_pwm_ctl[nr] = val;
654 if (data->fan_main_ctrl & (1 << nr))
655 it87_write_value(client, IT87_REG_PWM(nr), PWM_TO_REG(data->manual_pwm_ctl[nr]));
656 mutex_unlock(&data->update_lock);
660 #define show_fan_offset(offset) \
661 static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, \
662 show_fan, NULL, offset - 1); \
663 static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
664 show_fan_min, set_fan_min, offset - 1); \
665 static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
666 show_fan_div, set_fan_div, offset - 1);
672 #define show_pwm_offset(offset) \
673 static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \
674 show_pwm_enable, set_pwm_enable, offset - 1); \
675 static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \
676 show_pwm, set_pwm, offset - 1);
682 /* A different set of callbacks for 16-bit fans */
683 static ssize_t show_fan16(struct device *dev, struct device_attribute *attr,
686 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
687 int nr = sensor_attr->index;
688 struct it87_data *data = it87_update_device(dev);
689 return sprintf(buf, "%d\n", FAN16_FROM_REG(data->fan[nr]));
692 static ssize_t show_fan16_min(struct device *dev, struct device_attribute *attr,
695 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
696 int nr = sensor_attr->index;
697 struct it87_data *data = it87_update_device(dev);
698 return sprintf(buf, "%d\n", FAN16_FROM_REG(data->fan_min[nr]));
701 static ssize_t set_fan16_min(struct device *dev, struct device_attribute *attr,
702 const char *buf, size_t count)
704 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
705 int nr = sensor_attr->index;
706 struct i2c_client *client = to_i2c_client(dev);
707 struct it87_data *data = i2c_get_clientdata(client);
708 int val = simple_strtol(buf, NULL, 10);
710 mutex_lock(&data->update_lock);
711 data->fan_min[nr] = FAN16_TO_REG(val);
712 it87_write_value(client, IT87_REG_FAN_MIN(nr),
713 data->fan_min[nr] & 0xff);
714 it87_write_value(client, IT87_REG_FANX_MIN(nr),
715 data->fan_min[nr] >> 8);
716 mutex_unlock(&data->update_lock);
720 /* We want to use the same sysfs file names as 8-bit fans, but we need
721 different variable names, so we have to use SENSOR_ATTR instead of
722 SENSOR_DEVICE_ATTR. */
723 #define show_fan16_offset(offset) \
724 static struct sensor_device_attribute sensor_dev_attr_fan##offset##_input16 \
725 = SENSOR_ATTR(fan##offset##_input, S_IRUGO, \
726 show_fan16, NULL, offset - 1); \
727 static struct sensor_device_attribute sensor_dev_attr_fan##offset##_min16 \
728 = SENSOR_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
729 show_fan16_min, set_fan16_min, offset - 1)
731 show_fan16_offset(1);
732 show_fan16_offset(2);
733 show_fan16_offset(3);
736 static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf)
738 struct it87_data *data = it87_update_device(dev);
739 return sprintf(buf, "%u\n", data->alarms);
741 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
744 show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf)
746 struct it87_data *data = it87_update_device(dev);
747 return sprintf(buf, "%u\n", data->vrm);
750 store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
752 struct i2c_client *client = to_i2c_client(dev);
753 struct it87_data *data = i2c_get_clientdata(client);
756 val = simple_strtoul(buf, NULL, 10);
761 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
764 show_vid_reg(struct device *dev, struct device_attribute *attr, char *buf)
766 struct it87_data *data = it87_update_device(dev);
767 return sprintf(buf, "%ld\n", (long) vid_from_reg(data->vid, data->vrm));
769 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
771 static struct attribute *it87_attributes[] = {
772 &sensor_dev_attr_in0_input.dev_attr.attr,
773 &sensor_dev_attr_in1_input.dev_attr.attr,
774 &sensor_dev_attr_in2_input.dev_attr.attr,
775 &sensor_dev_attr_in3_input.dev_attr.attr,
776 &sensor_dev_attr_in4_input.dev_attr.attr,
777 &sensor_dev_attr_in5_input.dev_attr.attr,
778 &sensor_dev_attr_in6_input.dev_attr.attr,
779 &sensor_dev_attr_in7_input.dev_attr.attr,
780 &sensor_dev_attr_in8_input.dev_attr.attr,
781 &sensor_dev_attr_in0_min.dev_attr.attr,
782 &sensor_dev_attr_in1_min.dev_attr.attr,
783 &sensor_dev_attr_in2_min.dev_attr.attr,
784 &sensor_dev_attr_in3_min.dev_attr.attr,
785 &sensor_dev_attr_in4_min.dev_attr.attr,
786 &sensor_dev_attr_in5_min.dev_attr.attr,
787 &sensor_dev_attr_in6_min.dev_attr.attr,
788 &sensor_dev_attr_in7_min.dev_attr.attr,
789 &sensor_dev_attr_in0_max.dev_attr.attr,
790 &sensor_dev_attr_in1_max.dev_attr.attr,
791 &sensor_dev_attr_in2_max.dev_attr.attr,
792 &sensor_dev_attr_in3_max.dev_attr.attr,
793 &sensor_dev_attr_in4_max.dev_attr.attr,
794 &sensor_dev_attr_in5_max.dev_attr.attr,
795 &sensor_dev_attr_in6_max.dev_attr.attr,
796 &sensor_dev_attr_in7_max.dev_attr.attr,
798 &sensor_dev_attr_temp1_input.dev_attr.attr,
799 &sensor_dev_attr_temp2_input.dev_attr.attr,
800 &sensor_dev_attr_temp3_input.dev_attr.attr,
801 &sensor_dev_attr_temp1_max.dev_attr.attr,
802 &sensor_dev_attr_temp2_max.dev_attr.attr,
803 &sensor_dev_attr_temp3_max.dev_attr.attr,
804 &sensor_dev_attr_temp1_min.dev_attr.attr,
805 &sensor_dev_attr_temp2_min.dev_attr.attr,
806 &sensor_dev_attr_temp3_min.dev_attr.attr,
807 &sensor_dev_attr_temp1_type.dev_attr.attr,
808 &sensor_dev_attr_temp2_type.dev_attr.attr,
809 &sensor_dev_attr_temp3_type.dev_attr.attr,
811 &dev_attr_alarms.attr,
815 static const struct attribute_group it87_group = {
816 .attrs = it87_attributes,
819 static struct attribute *it87_attributes_opt[] = {
820 &sensor_dev_attr_fan1_input16.dev_attr.attr,
821 &sensor_dev_attr_fan1_min16.dev_attr.attr,
822 &sensor_dev_attr_fan2_input16.dev_attr.attr,
823 &sensor_dev_attr_fan2_min16.dev_attr.attr,
824 &sensor_dev_attr_fan3_input16.dev_attr.attr,
825 &sensor_dev_attr_fan3_min16.dev_attr.attr,
827 &sensor_dev_attr_fan1_input.dev_attr.attr,
828 &sensor_dev_attr_fan1_min.dev_attr.attr,
829 &sensor_dev_attr_fan1_div.dev_attr.attr,
830 &sensor_dev_attr_fan2_input.dev_attr.attr,
831 &sensor_dev_attr_fan2_min.dev_attr.attr,
832 &sensor_dev_attr_fan2_div.dev_attr.attr,
833 &sensor_dev_attr_fan3_input.dev_attr.attr,
834 &sensor_dev_attr_fan3_min.dev_attr.attr,
835 &sensor_dev_attr_fan3_div.dev_attr.attr,
837 &sensor_dev_attr_pwm1_enable.dev_attr.attr,
838 &sensor_dev_attr_pwm2_enable.dev_attr.attr,
839 &sensor_dev_attr_pwm3_enable.dev_attr.attr,
840 &sensor_dev_attr_pwm1.dev_attr.attr,
841 &sensor_dev_attr_pwm2.dev_attr.attr,
842 &sensor_dev_attr_pwm3.dev_attr.attr,
845 &dev_attr_cpu0_vid.attr,
849 static const struct attribute_group it87_group_opt = {
850 .attrs = it87_attributes_opt,
853 /* This function is called when:
854 * it87_driver is inserted (when this module is loaded), for each
856 * when a new adapter is inserted (and it87_driver is still present) */
857 static int it87_attach_adapter(struct i2c_adapter *adapter)
859 if (!(adapter->class & I2C_CLASS_HWMON))
861 return i2c_probe(adapter, &addr_data, it87_detect);
864 static int it87_isa_attach_adapter(struct i2c_adapter *adapter)
866 return it87_detect(adapter, isa_address, -1);
869 /* SuperIO detection - will change isa_address if a chip is found */
870 static int __init it87_find(unsigned short *address)
875 chip_type = superio_inw(DEVID);
876 if (chip_type != IT8712F_DEVID
877 && chip_type != IT8716F_DEVID
878 && chip_type != IT8718F_DEVID
879 && chip_type != IT8705F_DEVID)
883 if (!(superio_inb(IT87_ACT_REG) & 0x01)) {
884 pr_info("it87: Device not activated, skipping\n");
888 *address = superio_inw(IT87_BASE_REG) & ~(IT87_EXTENT - 1);
890 pr_info("it87: Base address not set, skipping\n");
895 pr_info("it87: Found IT%04xF chip at 0x%x, revision %d\n",
896 chip_type, *address, superio_inb(DEVREV) & 0x0f);
898 /* Read GPIO config and VID value from LDN 7 (GPIO) */
899 if (chip_type != IT8705F_DEVID) {
902 superio_select(GPIO);
903 if (chip_type == it8718)
904 vid_value = superio_inb(IT87_SIO_VID_REG);
906 reg = superio_inb(IT87_SIO_PINX2_REG);
908 pr_info("it87: in3 is VCC (+5V)\n");
910 pr_info("it87: in7 is VCCH (+5V Stand-By)\n");
918 /* This function is called by i2c_probe */
919 static int it87_detect(struct i2c_adapter *adapter, int address, int kind)
922 struct i2c_client *new_client;
923 struct it87_data *data;
925 const char *name = "";
926 int is_isa = i2c_is_isa_adapter(adapter);
927 int enable_pwm_interface;
930 !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
933 /* Reserve the ISA region */
935 if (!request_region(address, IT87_EXTENT,
936 it87_isa_driver.driver.name))
939 /* For now, we presume we have a valid client. We create the
940 client structure, even though we cannot fill it completely yet.
941 But it allows us to access it87_{read,write}_value. */
943 if (!(data = kzalloc(sizeof(struct it87_data), GFP_KERNEL))) {
948 new_client = &data->client;
950 mutex_init(&data->lock);
951 i2c_set_clientdata(new_client, data);
952 new_client->addr = address;
953 new_client->adapter = adapter;
954 new_client->driver = is_isa ? &it87_isa_driver : &it87_driver;
955 new_client->flags = 0;
957 /* Now, we do the remaining detection. */
960 if ((it87_read_value(new_client, IT87_REG_CONFIG) & 0x80)
962 && it87_read_value(new_client, IT87_REG_I2C_ADDR) != address)) {
968 /* Determine the chip type. */
970 i = it87_read_value(new_client, IT87_REG_CHIPID);
989 dev_info(&adapter->dev,
990 "Ignoring 'force' parameter for unknown chip at "
991 "adapter %d, address 0x%02x\n",
992 i2c_adapter_id(adapter), address);
1000 } else if (kind == it8712) {
1002 } else if (kind == it8716) {
1004 } else if (kind == it8718) {
1008 /* Fill in the remaining client fields and put it into the global list */
1009 strlcpy(new_client->name, name, I2C_NAME_SIZE);
1012 mutex_init(&data->update_lock);
1014 /* Tell the I2C layer a new client has arrived */
1015 if ((err = i2c_attach_client(new_client)))
1019 dev_info(&new_client->dev, "The I2C interface to IT87xxF "
1020 "hardware monitoring chips is deprecated. Please "
1021 "report if you still rely on it.\n");
1023 /* Check PWM configuration */
1024 enable_pwm_interface = it87_check_pwm(new_client);
1026 /* Initialize the IT87 chip */
1027 it87_init_client(new_client, data);
1029 /* Register sysfs hooks */
1030 if ((err = sysfs_create_group(&new_client->dev.kobj, &it87_group)))
1033 /* Do not create fan files for disabled fans */
1034 if (data->type == it8716 || data->type == it8718) {
1035 /* 16-bit tachometers */
1036 if (data->has_fan & (1 << 0)) {
1037 if ((err = device_create_file(&new_client->dev,
1038 &sensor_dev_attr_fan1_input16.dev_attr))
1039 || (err = device_create_file(&new_client->dev,
1040 &sensor_dev_attr_fan1_min16.dev_attr)))
1043 if (data->has_fan & (1 << 1)) {
1044 if ((err = device_create_file(&new_client->dev,
1045 &sensor_dev_attr_fan2_input16.dev_attr))
1046 || (err = device_create_file(&new_client->dev,
1047 &sensor_dev_attr_fan2_min16.dev_attr)))
1050 if (data->has_fan & (1 << 2)) {
1051 if ((err = device_create_file(&new_client->dev,
1052 &sensor_dev_attr_fan3_input16.dev_attr))
1053 || (err = device_create_file(&new_client->dev,
1054 &sensor_dev_attr_fan3_min16.dev_attr)))
1058 /* 8-bit tachometers with clock divider */
1059 if (data->has_fan & (1 << 0)) {
1060 if ((err = device_create_file(&new_client->dev,
1061 &sensor_dev_attr_fan1_input.dev_attr))
1062 || (err = device_create_file(&new_client->dev,
1063 &sensor_dev_attr_fan1_min.dev_attr))
1064 || (err = device_create_file(&new_client->dev,
1065 &sensor_dev_attr_fan1_div.dev_attr)))
1068 if (data->has_fan & (1 << 1)) {
1069 if ((err = device_create_file(&new_client->dev,
1070 &sensor_dev_attr_fan2_input.dev_attr))
1071 || (err = device_create_file(&new_client->dev,
1072 &sensor_dev_attr_fan2_min.dev_attr))
1073 || (err = device_create_file(&new_client->dev,
1074 &sensor_dev_attr_fan2_div.dev_attr)))
1077 if (data->has_fan & (1 << 2)) {
1078 if ((err = device_create_file(&new_client->dev,
1079 &sensor_dev_attr_fan3_input.dev_attr))
1080 || (err = device_create_file(&new_client->dev,
1081 &sensor_dev_attr_fan3_min.dev_attr))
1082 || (err = device_create_file(&new_client->dev,
1083 &sensor_dev_attr_fan3_div.dev_attr)))
1088 if (enable_pwm_interface) {
1089 if ((err = device_create_file(&new_client->dev,
1090 &sensor_dev_attr_pwm1_enable.dev_attr))
1091 || (err = device_create_file(&new_client->dev,
1092 &sensor_dev_attr_pwm2_enable.dev_attr))
1093 || (err = device_create_file(&new_client->dev,
1094 &sensor_dev_attr_pwm3_enable.dev_attr))
1095 || (err = device_create_file(&new_client->dev,
1096 &sensor_dev_attr_pwm1.dev_attr))
1097 || (err = device_create_file(&new_client->dev,
1098 &sensor_dev_attr_pwm2.dev_attr))
1099 || (err = device_create_file(&new_client->dev,
1100 &sensor_dev_attr_pwm3.dev_attr)))
1104 if (data->type == it8712 || data->type == it8716
1105 || data->type == it8718) {
1106 data->vrm = vid_which_vrm();
1107 /* VID reading from Super-I/O config space if available */
1108 data->vid = vid_value;
1109 if ((err = device_create_file(&new_client->dev,
1111 || (err = device_create_file(&new_client->dev,
1112 &dev_attr_cpu0_vid)))
1116 data->class_dev = hwmon_device_register(&new_client->dev);
1117 if (IS_ERR(data->class_dev)) {
1118 err = PTR_ERR(data->class_dev);
1125 sysfs_remove_group(&new_client->dev.kobj, &it87_group);
1126 sysfs_remove_group(&new_client->dev.kobj, &it87_group_opt);
1128 i2c_detach_client(new_client);
1133 release_region(address, IT87_EXTENT);
1138 static int it87_detach_client(struct i2c_client *client)
1140 struct it87_data *data = i2c_get_clientdata(client);
1143 hwmon_device_unregister(data->class_dev);
1144 sysfs_remove_group(&client->dev.kobj, &it87_group);
1145 sysfs_remove_group(&client->dev.kobj, &it87_group_opt);
1147 if ((err = i2c_detach_client(client)))
1150 if(i2c_is_isa_client(client))
1151 release_region(client->addr, IT87_EXTENT);
1157 /* The SMBus locks itself, but ISA access must be locked explicitly!
1158 We don't want to lock the whole ISA bus, so we lock each client
1160 We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks,
1161 would slow down the IT87 access and should not be necessary. */
1162 static int it87_read_value(struct i2c_client *client, u8 reg)
1164 struct it87_data *data = i2c_get_clientdata(client);
1167 if (i2c_is_isa_client(client)) {
1168 mutex_lock(&data->lock);
1169 outb_p(reg, client->addr + IT87_ADDR_REG_OFFSET);
1170 res = inb_p(client->addr + IT87_DATA_REG_OFFSET);
1171 mutex_unlock(&data->lock);
1174 return i2c_smbus_read_byte_data(client, reg);
1177 /* The SMBus locks itself, but ISA access muse be locked explicitly!
1178 We don't want to lock the whole ISA bus, so we lock each client
1180 We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks,
1181 would slow down the IT87 access and should not be necessary. */
1182 static int it87_write_value(struct i2c_client *client, u8 reg, u8 value)
1184 struct it87_data *data = i2c_get_clientdata(client);
1186 if (i2c_is_isa_client(client)) {
1187 mutex_lock(&data->lock);
1188 outb_p(reg, client->addr + IT87_ADDR_REG_OFFSET);
1189 outb_p(value, client->addr + IT87_DATA_REG_OFFSET);
1190 mutex_unlock(&data->lock);
1193 return i2c_smbus_write_byte_data(client, reg, value);
1196 /* Return 1 if and only if the PWM interface is safe to use */
1197 static int it87_check_pwm(struct i2c_client *client)
1199 /* Some BIOSes fail to correctly configure the IT87 fans. All fans off
1200 * and polarity set to active low is sign that this is the case so we
1201 * disable pwm control to protect the user. */
1202 int tmp = it87_read_value(client, IT87_REG_FAN_CTL);
1203 if ((tmp & 0x87) == 0) {
1204 if (fix_pwm_polarity) {
1205 /* The user asks us to attempt a chip reconfiguration.
1206 * This means switching to active high polarity and
1207 * inverting all fan speed values. */
1211 for (i = 0; i < 3; i++)
1212 pwm[i] = it87_read_value(client,
1215 /* If any fan is in automatic pwm mode, the polarity
1216 * might be correct, as suspicious as it seems, so we
1217 * better don't change anything (but still disable the
1218 * PWM interface). */
1219 if (!((pwm[0] | pwm[1] | pwm[2]) & 0x80)) {
1220 dev_info(&client->dev, "Reconfiguring PWM to "
1221 "active high polarity\n");
1222 it87_write_value(client, IT87_REG_FAN_CTL,
1224 for (i = 0; i < 3; i++)
1225 it87_write_value(client,
1231 dev_info(&client->dev, "PWM configuration is "
1232 "too broken to be fixed\n");
1235 dev_info(&client->dev, "Detected broken BIOS "
1236 "defaults, disabling PWM interface\n");
1238 } else if (fix_pwm_polarity) {
1239 dev_info(&client->dev, "PWM configuration looks "
1240 "sane, won't touch\n");
1246 /* Called when we have found a new IT87. */
1247 static void it87_init_client(struct i2c_client *client, struct it87_data *data)
1251 /* initialize to sane defaults:
1252 * - if the chip is in manual pwm mode, this will be overwritten with
1253 * the actual settings on the chip (so in this case, initialization
1255 * - if in automatic or on/off mode, we could switch to manual mode,
1256 * read the registers and set manual_pwm_ctl accordingly, but currently
1257 * this is not implemented, so we initialize to something sane */
1258 for (i = 0; i < 3; i++) {
1259 data->manual_pwm_ctl[i] = 0xff;
1262 /* Some chips seem to have default value 0xff for all limit
1263 * registers. For low voltage limits it makes no sense and triggers
1264 * alarms, so change to 0 instead. For high temperature limits, it
1265 * means -1 degree C, which surprisingly doesn't trigger an alarm,
1266 * but is still confusing, so change to 127 degrees C. */
1267 for (i = 0; i < 8; i++) {
1268 tmp = it87_read_value(client, IT87_REG_VIN_MIN(i));
1270 it87_write_value(client, IT87_REG_VIN_MIN(i), 0);
1272 for (i = 0; i < 3; i++) {
1273 tmp = it87_read_value(client, IT87_REG_TEMP_HIGH(i));
1275 it87_write_value(client, IT87_REG_TEMP_HIGH(i), 127);
1278 /* Check if temperature channnels are reset manually or by some reason */
1279 tmp = it87_read_value(client, IT87_REG_TEMP_ENABLE);
1280 if ((tmp & 0x3f) == 0) {
1281 /* Temp1,Temp3=thermistor; Temp2=thermal diode */
1282 tmp = (tmp & 0xc0) | 0x2a;
1283 it87_write_value(client, IT87_REG_TEMP_ENABLE, tmp);
1287 /* Check if voltage monitors are reset manually or by some reason */
1288 tmp = it87_read_value(client, IT87_REG_VIN_ENABLE);
1289 if ((tmp & 0xff) == 0) {
1290 /* Enable all voltage monitors */
1291 it87_write_value(client, IT87_REG_VIN_ENABLE, 0xff);
1294 /* Check if tachometers are reset manually or by some reason */
1295 data->fan_main_ctrl = it87_read_value(client, IT87_REG_FAN_MAIN_CTRL);
1296 if ((data->fan_main_ctrl & 0x70) == 0) {
1297 /* Enable all fan tachometers */
1298 data->fan_main_ctrl |= 0x70;
1299 it87_write_value(client, IT87_REG_FAN_MAIN_CTRL, data->fan_main_ctrl);
1301 data->has_fan = (data->fan_main_ctrl >> 4) & 0x07;
1303 /* Set tachometers to 16-bit mode if needed */
1304 if (data->type == it8716 || data->type == it8718) {
1305 tmp = it87_read_value(client, IT87_REG_FAN_16BIT);
1306 if (~tmp & 0x07 & data->has_fan) {
1307 dev_dbg(&client->dev,
1308 "Setting fan1-3 to 16-bit mode\n");
1309 it87_write_value(client, IT87_REG_FAN_16BIT,
1314 /* Set current fan mode registers and the default settings for the
1315 * other mode registers */
1316 for (i = 0; i < 3; i++) {
1317 if (data->fan_main_ctrl & (1 << i)) {
1319 tmp = it87_read_value(client, IT87_REG_PWM(i));
1321 /* automatic pwm - not yet implemented, but
1322 * leave the settings made by the BIOS alone
1323 * until a change is requested via the sysfs
1327 data->manual_pwm_ctl[i] = PWM_FROM_REG(tmp);
1332 /* Start monitoring */
1333 it87_write_value(client, IT87_REG_CONFIG,
1334 (it87_read_value(client, IT87_REG_CONFIG) & 0x36)
1335 | (update_vbat ? 0x41 : 0x01));
1338 static struct it87_data *it87_update_device(struct device *dev)
1340 struct i2c_client *client = to_i2c_client(dev);
1341 struct it87_data *data = i2c_get_clientdata(client);
1344 mutex_lock(&data->update_lock);
1346 if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
1350 /* Cleared after each update, so reenable. Value
1351 returned by this read will be previous value */
1352 it87_write_value(client, IT87_REG_CONFIG,
1353 it87_read_value(client, IT87_REG_CONFIG) | 0x40);
1355 for (i = 0; i <= 7; i++) {
1357 it87_read_value(client, IT87_REG_VIN(i));
1359 it87_read_value(client, IT87_REG_VIN_MIN(i));
1361 it87_read_value(client, IT87_REG_VIN_MAX(i));
1363 /* in8 (battery) has no limit registers */
1365 it87_read_value(client, IT87_REG_VIN(8));
1367 for (i = 0; i < 3; i++) {
1368 /* Skip disabled fans */
1369 if (!(data->has_fan & (1 << i)))
1373 it87_read_value(client, IT87_REG_FAN_MIN(i));
1374 data->fan[i] = it87_read_value(client,
1376 /* Add high byte if in 16-bit mode */
1377 if (data->type == it8716 || data->type == it8718) {
1378 data->fan[i] |= it87_read_value(client,
1379 IT87_REG_FANX(i)) << 8;
1380 data->fan_min[i] |= it87_read_value(client,
1381 IT87_REG_FANX_MIN(i)) << 8;
1384 for (i = 0; i < 3; i++) {
1386 it87_read_value(client, IT87_REG_TEMP(i));
1387 data->temp_high[i] =
1388 it87_read_value(client, IT87_REG_TEMP_HIGH(i));
1390 it87_read_value(client, IT87_REG_TEMP_LOW(i));
1393 /* Newer chips don't have clock dividers */
1394 if ((data->has_fan & 0x07) && data->type != it8716
1395 && data->type != it8718) {
1396 i = it87_read_value(client, IT87_REG_FAN_DIV);
1397 data->fan_div[0] = i & 0x07;
1398 data->fan_div[1] = (i >> 3) & 0x07;
1399 data->fan_div[2] = (i & 0x40) ? 3 : 1;
1403 it87_read_value(client, IT87_REG_ALARM1) |
1404 (it87_read_value(client, IT87_REG_ALARM2) << 8) |
1405 (it87_read_value(client, IT87_REG_ALARM3) << 16);
1406 data->fan_main_ctrl = it87_read_value(client, IT87_REG_FAN_MAIN_CTRL);
1408 data->sensor = it87_read_value(client, IT87_REG_TEMP_ENABLE);
1409 /* The 8705 does not have VID capability */
1410 if (data->type == it8712 || data->type == it8716) {
1411 data->vid = it87_read_value(client, IT87_REG_VID);
1412 /* The older IT8712F revisions had only 5 VID pins,
1413 but we assume it is always safe to read 6 bits. */
1416 data->last_updated = jiffies;
1420 mutex_unlock(&data->update_lock);
1425 static int __init sm_it87_init(void)
1429 res = i2c_add_driver(&it87_driver);
1433 if (!it87_find(&isa_address)) {
1434 res = i2c_isa_add_driver(&it87_isa_driver);
1436 i2c_del_driver(&it87_driver);
1444 static void __exit sm_it87_exit(void)
1447 i2c_isa_del_driver(&it87_isa_driver);
1448 i2c_del_driver(&it87_driver);
1452 MODULE_AUTHOR("Chris Gauthron <chrisg@0-in.com>, "
1453 "Jean Delvare <khali@linux-fr.org>");
1454 MODULE_DESCRIPTION("IT8705F/8712F/8716F/8718F, SiS950 driver");
1455 module_param(update_vbat, bool, 0);
1456 MODULE_PARM_DESC(update_vbat, "Update vbat if set else return powerup value");
1457 module_param(fix_pwm_polarity, bool, 0);
1458 MODULE_PARM_DESC(fix_pwm_polarity, "Force PWM polarity to active high (DANGEROUS)");
1459 MODULE_LICENSE("GPL");
1461 module_init(sm_it87_init);
1462 module_exit(sm_it87_exit);