ACPI: ibm-acpi: clean up fan_read
[linux-2.6.git] / drivers / hwmon / it87.c
blob323ef06719c160537942a002b5495a79159c2b28
1 /*
2 it87.c - Part of lm_sensors, Linux kernel modules for hardware
3 monitoring.
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>
41 #include <asm/io.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 */
59 static inline int
60 superio_inb(int reg)
62 outb(reg, REG);
63 return inb(VAL);
66 static int superio_inw(int reg)
68 int val;
69 outb(reg++, REG);
70 val = inb(VAL) << 8;
71 outb(reg, REG);
72 val |= inb(VAL);
73 return val;
76 static inline void
77 superio_select(int ldn)
79 outb(DEV, REG);
80 outb(ldn, VAL);
83 static inline void
84 superio_enter(void)
86 outb(0x87, REG);
87 outb(0x01, REG);
88 outb(0x55, REG);
89 outb(0x55, REG);
92 static inline void
93 superio_exit(void)
95 outb(0x02, REG);
96 outb(0x02, VAL);
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;
119 static u8 vid_value;
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
143 for these. */
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)
177 if (rpm == 0)
178 return 255;
179 rpm = SENSORS_LIMIT(rpm, 1, 1000000);
180 return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1,
181 254);
184 static inline u16 FAN16_TO_REG(long rpm)
186 if (rpm == 0)
187 return 0xffff;
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)
204 int answer = 0;
205 while (answer < 7 && (val >>= 1))
206 answer++;
207 return answer;
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
215 allocated. */
216 struct it87_data {
217 struct i2c_client client;
218 struct class_device *class_dev;
219 struct mutex lock;
220 enum chips type;
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 */
238 u8 vrm;
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 = {
258 .driver = {
259 .name = "it87",
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 = {
267 .driver = {
268 .owner = THIS_MODULE,
269 .name = "it87-isa",
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,
277 char *buf)
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,
287 char *buf)
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,
297 char *buf)
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),
319 data->in_min[nr]);
320 mutex_unlock(&data->update_lock);
321 return count;
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),
336 data->in_max[nr]);
337 mutex_unlock(&data->update_lock);
338 return count;
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);
351 show_in_offset(0);
352 limit_in_offset(0);
353 show_in_offset(1);
354 limit_in_offset(1);
355 show_in_offset(2);
356 limit_in_offset(2);
357 show_in_offset(3);
358 limit_in_offset(3);
359 show_in_offset(4);
360 limit_in_offset(4);
361 show_in_offset(5);
362 limit_in_offset(5);
363 show_in_offset(6);
364 limit_in_offset(6);
365 show_in_offset(7);
366 limit_in_offset(7);
367 show_in_offset(8);
369 /* 3 temperatures */
370 static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
371 char *buf)
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,
380 char *buf)
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,
389 char *buf)
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);
411 return count;
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);
427 return count;
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);
437 show_temp_offset(1);
438 show_temp_offset(2);
439 show_temp_offset(3);
441 static ssize_t show_sensor(struct device *dev, struct device_attribute *attr,
442 char *buf)
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 */
450 if (reg & (1 << nr))
451 return sprintf(buf, "3\n"); /* thermal diode */
452 if (reg & (8 << nr))
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 */
471 if (val == 3)
472 data->sensor |= 1 << nr;
473 else if (val == 2)
474 data->sensor |= 8 << nr;
475 else if (val != 0) {
476 mutex_unlock(&data->update_lock);
477 return -EINVAL;
479 it87_write_value(client, IT87_REG_TEMP_ENABLE, data->sensor);
480 mutex_unlock(&data->update_lock);
481 return count;
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);
491 /* 3 Fans */
492 static ssize_t show_fan(struct device *dev, struct device_attribute *attr,
493 char *buf)
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,
503 char *buf)
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,
513 char *buf)
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,
522 char *buf)
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,
531 char *buf)
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);
551 switch (nr) {
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);
560 return count;
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);
571 int min;
572 u8 old;
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]));
580 switch (nr) {
581 case 0:
582 case 1:
583 data->fan_div[nr] = DIV_TO_REG(val);
584 break;
585 case 2:
586 if (val < 8)
587 data->fan_div[nr] = 1;
588 else
589 data->fan_div[nr] = 3;
591 val = old & 0x80;
592 val |= (data->fan_div[0] & 0x07);
593 val |= (data->fan_div[1] & 0x07) << 3;
594 if (data->fan_div[2] == 3)
595 val |= 0x1 << 6;
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);
603 return count;
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);
617 if (val == 0) {
618 int tmp;
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]));
631 } else {
632 mutex_unlock(&data->update_lock);
633 return -EINVAL;
636 mutex_unlock(&data->update_lock);
637 return count;
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)
650 return -EINVAL;
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);
657 return count;
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);
668 show_fan_offset(1);
669 show_fan_offset(2);
670 show_fan_offset(3);
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);
678 show_pwm_offset(1);
679 show_pwm_offset(2);
680 show_pwm_offset(3);
682 /* A different set of callbacks for 16-bit fans */
683 static ssize_t show_fan16(struct device *dev, struct device_attribute *attr,
684 char *buf)
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,
693 char *buf)
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);
717 return count;
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);
735 /* Alarms */
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);
743 static ssize_t
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);
749 static ssize_t
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);
754 u32 val;
756 val = simple_strtoul(buf, NULL, 10);
757 data->vrm = val;
759 return count;
761 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
763 static ssize_t
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,
812 NULL
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,
844 &dev_attr_vrm.attr,
845 &dev_attr_cpu0_vid.attr,
846 NULL
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
855 available adapter
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))
860 return 0;
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)
872 int err = -ENODEV;
874 superio_enter();
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)
880 goto exit;
882 superio_select(PME);
883 if (!(superio_inb(IT87_ACT_REG) & 0x01)) {
884 pr_info("it87: Device not activated, skipping\n");
885 goto exit;
888 *address = superio_inw(IT87_BASE_REG) & ~(IT87_EXTENT - 1);
889 if (*address == 0) {
890 pr_info("it87: Base address not set, skipping\n");
891 goto exit;
894 err = 0;
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) {
900 int reg;
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);
907 if (reg & (1 << 0))
908 pr_info("it87: in3 is VCC (+5V)\n");
909 if (reg & (1 << 1))
910 pr_info("it87: in7 is VCCH (+5V Stand-By)\n");
913 exit:
914 superio_exit();
915 return err;
918 /* This function is called by i2c_probe */
919 static int it87_detect(struct i2c_adapter *adapter, int address, int kind)
921 int i;
922 struct i2c_client *new_client;
923 struct it87_data *data;
924 int err = 0;
925 const char *name = "";
926 int is_isa = i2c_is_isa_adapter(adapter);
927 int enable_pwm_interface;
929 if (!is_isa &&
930 !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
931 goto ERROR0;
933 /* Reserve the ISA region */
934 if (is_isa)
935 if (!request_region(address, IT87_EXTENT,
936 it87_isa_driver.driver.name))
937 goto ERROR0;
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))) {
944 err = -ENOMEM;
945 goto ERROR1;
948 new_client = &data->client;
949 if (is_isa)
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. */
959 if (kind < 0) {
960 if ((it87_read_value(new_client, IT87_REG_CONFIG) & 0x80)
961 || (!is_isa
962 && it87_read_value(new_client, IT87_REG_I2C_ADDR) != address)) {
963 err = -ENODEV;
964 goto ERROR2;
968 /* Determine the chip type. */
969 if (kind <= 0) {
970 i = it87_read_value(new_client, IT87_REG_CHIPID);
971 if (i == 0x90) {
972 kind = it87;
973 if (is_isa) {
974 switch (chip_type) {
975 case IT8712F_DEVID:
976 kind = it8712;
977 break;
978 case IT8716F_DEVID:
979 kind = it8716;
980 break;
981 case IT8718F_DEVID:
982 kind = it8718;
983 break;
987 else {
988 if (kind == 0)
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);
993 err = -ENODEV;
994 goto ERROR2;
998 if (kind == it87) {
999 name = "it87";
1000 } else if (kind == it8712) {
1001 name = "it8712";
1002 } else if (kind == it8716) {
1003 name = "it8716";
1004 } else if (kind == it8718) {
1005 name = "it8718";
1008 /* Fill in the remaining client fields and put it into the global list */
1009 strlcpy(new_client->name, name, I2C_NAME_SIZE);
1010 data->type = kind;
1011 data->valid = 0;
1012 mutex_init(&data->update_lock);
1014 /* Tell the I2C layer a new client has arrived */
1015 if ((err = i2c_attach_client(new_client)))
1016 goto ERROR2;
1018 if (!is_isa)
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)))
1031 goto ERROR3;
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)))
1041 goto ERROR4;
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)))
1048 goto ERROR4;
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)))
1055 goto ERROR4;
1057 } else {
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)))
1066 goto ERROR4;
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)))
1075 goto ERROR4;
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)))
1084 goto ERROR4;
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)))
1101 goto ERROR4;
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,
1110 &dev_attr_vrm))
1111 || (err = device_create_file(&new_client->dev,
1112 &dev_attr_cpu0_vid)))
1113 goto ERROR4;
1116 data->class_dev = hwmon_device_register(&new_client->dev);
1117 if (IS_ERR(data->class_dev)) {
1118 err = PTR_ERR(data->class_dev);
1119 goto ERROR4;
1122 return 0;
1124 ERROR4:
1125 sysfs_remove_group(&new_client->dev.kobj, &it87_group);
1126 sysfs_remove_group(&new_client->dev.kobj, &it87_group_opt);
1127 ERROR3:
1128 i2c_detach_client(new_client);
1129 ERROR2:
1130 kfree(data);
1131 ERROR1:
1132 if (is_isa)
1133 release_region(address, IT87_EXTENT);
1134 ERROR0:
1135 return err;
1138 static int it87_detach_client(struct i2c_client *client)
1140 struct it87_data *data = i2c_get_clientdata(client);
1141 int err;
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)))
1148 return err;
1150 if(i2c_is_isa_client(client))
1151 release_region(client->addr, IT87_EXTENT);
1152 kfree(data);
1154 return 0;
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
1159 separately.
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);
1166 int res;
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);
1172 return res;
1173 } else
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
1179 separately.
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);
1191 return 0;
1192 } else
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. */
1208 int i;
1209 u8 pwm[3];
1211 for (i = 0; i < 3; i++)
1212 pwm[i] = it87_read_value(client,
1213 IT87_REG_PWM(i));
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,
1223 tmp | 0x87);
1224 for (i = 0; i < 3; i++)
1225 it87_write_value(client,
1226 IT87_REG_PWM(i),
1227 0x7f & ~pwm[i]);
1228 return 1;
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");
1237 return 0;
1238 } else if (fix_pwm_polarity) {
1239 dev_info(&client->dev, "PWM configuration looks "
1240 "sane, won't touch\n");
1243 return 1;
1246 /* Called when we have found a new IT87. */
1247 static void it87_init_client(struct i2c_client *client, struct it87_data *data)
1249 int tmp, i;
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
1254 * is not needed)
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));
1269 if (tmp == 0xff)
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));
1274 if (tmp == 0xff)
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);
1285 data->sensor = 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,
1310 tmp | 0x07);
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)) {
1318 /* pwm mode */
1319 tmp = it87_read_value(client, IT87_REG_PWM(i));
1320 if (tmp & 0x80) {
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
1324 * interface */
1325 } else {
1326 /* manual pwm */
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);
1342 int i;
1344 mutex_lock(&data->update_lock);
1346 if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
1347 || !data->valid) {
1349 if (update_vbat) {
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++) {
1356 data->in[i] =
1357 it87_read_value(client, IT87_REG_VIN(i));
1358 data->in_min[i] =
1359 it87_read_value(client, IT87_REG_VIN_MIN(i));
1360 data->in_max[i] =
1361 it87_read_value(client, IT87_REG_VIN_MAX(i));
1363 /* in8 (battery) has no limit registers */
1364 data->in[8] =
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)))
1370 continue;
1372 data->fan_min[i] =
1373 it87_read_value(client, IT87_REG_FAN_MIN(i));
1374 data->fan[i] = it87_read_value(client,
1375 IT87_REG_FAN(i));
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++) {
1385 data->temp[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));
1389 data->temp_low[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;
1402 data->alarms =
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. */
1414 data->vid &= 0x3f;
1416 data->last_updated = jiffies;
1417 data->valid = 1;
1420 mutex_unlock(&data->update_lock);
1422 return data;
1425 static int __init sm_it87_init(void)
1427 int res;
1429 res = i2c_add_driver(&it87_driver);
1430 if (res)
1431 return res;
1433 if (!it87_find(&isa_address)) {
1434 res = i2c_isa_add_driver(&it87_isa_driver);
1435 if (res) {
1436 i2c_del_driver(&it87_driver);
1437 return res;
1441 return 0;
1444 static void __exit sm_it87_exit(void)
1446 if (isa_address)
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);