2 it87.c - Part of lm_sensors, Linux kernel modules for hardware
5 The IT8705F is an LPC-based Super I/O part that contains UARTs, a
6 parallel port, an IR port, a MIDI port, a floppy controller, etc., in
7 addition to an Environment Controller (Enhanced Hardware Monitor and
10 This driver supports only the Environment Controller in the IT8705F and
11 similar parts. The other devices are supported by different drivers.
13 Supports: IT8705F Super I/O chip w/LPC interface
14 IT8712F Super I/O chip w/LPC interface
15 IT8716F Super I/O chip w/LPC interface
16 IT8718F Super I/O chip w/LPC interface
17 IT8726F Super I/O chip w/LPC interface
18 Sis950 A clone of the IT8705F
20 Copyright (C) 2001 Chris Gauthron
21 Copyright (C) 2005-2007 Jean Delvare <khali@linux-fr.org>
23 This program is free software; you can redistribute it and/or modify
24 it under the terms of the GNU General Public License as published by
25 the Free Software Foundation; either version 2 of the License, or
26 (at your option) any later version.
28 This program is distributed in the hope that it will be useful,
29 but WITHOUT ANY WARRANTY; without even the implied warranty of
30 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
31 GNU General Public License for more details.
33 You should have received a copy of the GNU General Public License
34 along with this program; if not, write to the Free Software
35 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
38 #include <linux/module.h>
39 #include <linux/init.h>
40 #include <linux/slab.h>
41 #include <linux/jiffies.h>
42 #include <linux/platform_device.h>
43 #include <linux/hwmon.h>
44 #include <linux/hwmon-sysfs.h>
45 #include <linux/hwmon-vid.h>
46 #include <linux/err.h>
47 #include <linux/mutex.h>
48 #include <linux/sysfs.h>
49 #include <linux/string.h>
50 #include <linux/dmi.h>
53 #define DRVNAME "it87"
55 enum chips
{ it87
, it8712
, it8716
, it8718
};
57 static unsigned short force_id
;
58 module_param(force_id
, ushort
, 0);
59 MODULE_PARM_DESC(force_id
, "Override the detected device ID");
61 static struct platform_device
*pdev
;
63 #define REG 0x2e /* The register to read/write */
64 #define DEV 0x07 /* Register: Logical device select */
65 #define VAL 0x2f /* The value to read/write */
66 #define PME 0x04 /* The device with the fan registers in it */
67 #define GPIO 0x07 /* The device with the IT8718F VID value in it */
68 #define DEVID 0x20 /* Register: Device ID */
69 #define DEVREV 0x22 /* Register: Device Revision */
78 static int superio_inw(int reg
)
89 superio_select(int ldn
)
111 /* Logical device 4 registers */
112 #define IT8712F_DEVID 0x8712
113 #define IT8705F_DEVID 0x8705
114 #define IT8716F_DEVID 0x8716
115 #define IT8718F_DEVID 0x8718
116 #define IT8726F_DEVID 0x8726
117 #define IT87_ACT_REG 0x30
118 #define IT87_BASE_REG 0x60
120 /* Logical device 7 registers (IT8712F and later) */
121 #define IT87_SIO_PINX2_REG 0x2c /* Pin selection */
122 #define IT87_SIO_VID_REG 0xfc /* VID value */
124 /* Update battery voltage after every reading if true */
125 static int update_vbat
;
127 /* Not all BIOSes properly configure the PWM registers */
128 static int fix_pwm_polarity
;
130 /* Many IT87 constants specified below */
132 /* Length of ISA address segment */
133 #define IT87_EXTENT 8
135 /* Length of ISA address segment for Environmental Controller */
136 #define IT87_EC_EXTENT 2
138 /* Offset of EC registers from ISA base address */
139 #define IT87_EC_OFFSET 5
141 /* Where are the ISA address/data registers relative to the EC base address */
142 #define IT87_ADDR_REG_OFFSET 0
143 #define IT87_DATA_REG_OFFSET 1
145 /*----- The IT87 registers -----*/
147 #define IT87_REG_CONFIG 0x00
149 #define IT87_REG_ALARM1 0x01
150 #define IT87_REG_ALARM2 0x02
151 #define IT87_REG_ALARM3 0x03
153 /* The IT8718F has the VID value in a different register, in Super-I/O
154 configuration space. */
155 #define IT87_REG_VID 0x0a
156 /* The IT8705F and IT8712F earlier than revision 0x08 use register 0x0b
157 for fan divisors. Later IT8712F revisions must use 16-bit tachometer
159 #define IT87_REG_FAN_DIV 0x0b
160 #define IT87_REG_FAN_16BIT 0x0c
162 /* Monitors: 9 voltage (0 to 7, battery), 3 temp (1 to 3), 3 fan (1 to 3) */
164 static const u8 IT87_REG_FAN
[] = { 0x0d, 0x0e, 0x0f, 0x80, 0x82 };
165 static const u8 IT87_REG_FAN_MIN
[] = { 0x10, 0x11, 0x12, 0x84, 0x86 };
166 static const u8 IT87_REG_FANX
[] = { 0x18, 0x19, 0x1a, 0x81, 0x83 };
167 static const u8 IT87_REG_FANX_MIN
[] = { 0x1b, 0x1c, 0x1d, 0x85, 0x87 };
168 #define IT87_REG_FAN_MAIN_CTRL 0x13
169 #define IT87_REG_FAN_CTL 0x14
170 #define IT87_REG_PWM(nr) (0x15 + (nr))
172 #define IT87_REG_VIN(nr) (0x20 + (nr))
173 #define IT87_REG_TEMP(nr) (0x29 + (nr))
175 #define IT87_REG_VIN_MAX(nr) (0x30 + (nr) * 2)
176 #define IT87_REG_VIN_MIN(nr) (0x31 + (nr) * 2)
177 #define IT87_REG_TEMP_HIGH(nr) (0x40 + (nr) * 2)
178 #define IT87_REG_TEMP_LOW(nr) (0x41 + (nr) * 2)
180 #define IT87_REG_VIN_ENABLE 0x50
181 #define IT87_REG_TEMP_ENABLE 0x51
183 #define IT87_REG_CHIPID 0x58
185 #define IN_TO_REG(val) (SENSORS_LIMIT((((val) + 8)/16),0,255))
186 #define IN_FROM_REG(val) ((val) * 16)
188 static inline u8
FAN_TO_REG(long rpm
, int div
)
192 rpm
= SENSORS_LIMIT(rpm
, 1, 1000000);
193 return SENSORS_LIMIT((1350000 + rpm
* div
/ 2) / (rpm
* div
), 1,
197 static inline u16
FAN16_TO_REG(long rpm
)
201 return SENSORS_LIMIT((1350000 + rpm
) / (rpm
* 2), 1, 0xfffe);
204 #define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*(div)))
205 /* The divider is fixed to 2 in 16-bit mode */
206 #define FAN16_FROM_REG(val) ((val)==0?-1:(val)==0xffff?0:1350000/((val)*2))
208 #define TEMP_TO_REG(val) (SENSORS_LIMIT(((val)<0?(((val)-500)/1000):\
209 ((val)+500)/1000),-128,127))
210 #define TEMP_FROM_REG(val) (((val)>0x80?(val)-0x100:(val))*1000)
212 #define PWM_TO_REG(val) ((val) >> 1)
213 #define PWM_FROM_REG(val) (((val)&0x7f) << 1)
215 static int DIV_TO_REG(int val
)
218 while (answer
< 7 && (val
>>= 1))
222 #define DIV_FROM_REG(val) (1 << (val))
224 static const unsigned int pwm_freq
[8] = {
236 struct it87_sio_data
{
238 /* Values read from Super-I/O config space */
241 /* Values set based on DMI strings */
245 /* For each registered chip, we need to keep some data in memory.
246 The structure is dynamically allocated. */
248 struct device
*hwmon_dev
;
254 struct mutex update_lock
;
255 char valid
; /* !=0 if following fields are valid */
256 unsigned long last_updated
; /* In jiffies */
258 u8 in
[9]; /* Register value */
259 u8 in_max
[8]; /* Register value */
260 u8 in_min
[8]; /* Register value */
261 u8 has_fan
; /* Bitfield, fans enabled */
262 u16 fan
[5]; /* Register values, possibly combined */
263 u16 fan_min
[5]; /* Register values, possibly combined */
264 u8 temp
[3]; /* Register value */
265 u8 temp_high
[3]; /* Register value */
266 u8 temp_low
[3]; /* Register value */
267 u8 sensor
; /* Register value */
268 u8 fan_div
[3]; /* Register encoding, shifted right */
269 u8 vid
; /* Register encoding, combined */
271 u32 alarms
; /* Register encoding, combined */
272 u8 fan_main_ctrl
; /* Register value */
273 u8 fan_ctl
; /* Register value */
274 u8 manual_pwm_ctl
[3]; /* manual PWM value set by user */
277 static inline int has_16bit_fans(const struct it87_data
*data
)
279 /* IT8705F Datasheet 0.4.1, 3h == Version G.
280 IT8712F Datasheet 0.9.1, section 8.3.5 indicates 8h == Version J.
281 These are the first revisions with 16bit tachometer support. */
282 return (data
->type
== it87
&& data
->revision
>= 0x03)
283 || (data
->type
== it8712
&& data
->revision
>= 0x08)
284 || data
->type
== it8716
285 || data
->type
== it8718
;
288 static int it87_probe(struct platform_device
*pdev
);
289 static int __devexit
it87_remove(struct platform_device
*pdev
);
291 static int it87_read_value(struct it87_data
*data
, u8 reg
);
292 static void it87_write_value(struct it87_data
*data
, u8 reg
, u8 value
);
293 static struct it87_data
*it87_update_device(struct device
*dev
);
294 static int it87_check_pwm(struct device
*dev
);
295 static void it87_init_device(struct platform_device
*pdev
);
298 static struct platform_driver it87_driver
= {
300 .owner
= THIS_MODULE
,
304 .remove
= __devexit_p(it87_remove
),
307 static ssize_t
show_in(struct device
*dev
, struct device_attribute
*attr
,
310 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
311 int nr
= sensor_attr
->index
;
313 struct it87_data
*data
= it87_update_device(dev
);
314 return sprintf(buf
, "%d\n", IN_FROM_REG(data
->in
[nr
]));
317 static ssize_t
show_in_min(struct device
*dev
, struct device_attribute
*attr
,
320 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
321 int nr
= sensor_attr
->index
;
323 struct it87_data
*data
= it87_update_device(dev
);
324 return sprintf(buf
, "%d\n", IN_FROM_REG(data
->in_min
[nr
]));
327 static ssize_t
show_in_max(struct device
*dev
, struct device_attribute
*attr
,
330 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
331 int nr
= sensor_attr
->index
;
333 struct it87_data
*data
= it87_update_device(dev
);
334 return sprintf(buf
, "%d\n", IN_FROM_REG(data
->in_max
[nr
]));
337 static ssize_t
set_in_min(struct device
*dev
, struct device_attribute
*attr
,
338 const char *buf
, size_t count
)
340 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
341 int nr
= sensor_attr
->index
;
343 struct it87_data
*data
= dev_get_drvdata(dev
);
344 unsigned long val
= simple_strtoul(buf
, NULL
, 10);
346 mutex_lock(&data
->update_lock
);
347 data
->in_min
[nr
] = IN_TO_REG(val
);
348 it87_write_value(data
, IT87_REG_VIN_MIN(nr
),
350 mutex_unlock(&data
->update_lock
);
353 static ssize_t
set_in_max(struct device
*dev
, struct device_attribute
*attr
,
354 const char *buf
, size_t count
)
356 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
357 int nr
= sensor_attr
->index
;
359 struct it87_data
*data
= dev_get_drvdata(dev
);
360 unsigned long val
= simple_strtoul(buf
, NULL
, 10);
362 mutex_lock(&data
->update_lock
);
363 data
->in_max
[nr
] = IN_TO_REG(val
);
364 it87_write_value(data
, IT87_REG_VIN_MAX(nr
),
366 mutex_unlock(&data
->update_lock
);
370 #define show_in_offset(offset) \
371 static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \
372 show_in, NULL, offset);
374 #define limit_in_offset(offset) \
375 static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
376 show_in_min, set_in_min, offset); \
377 static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
378 show_in_max, set_in_max, offset);
399 static ssize_t
show_temp(struct device
*dev
, struct device_attribute
*attr
,
402 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
403 int nr
= sensor_attr
->index
;
405 struct it87_data
*data
= it87_update_device(dev
);
406 return sprintf(buf
, "%d\n", TEMP_FROM_REG(data
->temp
[nr
]));
408 static ssize_t
show_temp_max(struct device
*dev
, struct device_attribute
*attr
,
411 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
412 int nr
= sensor_attr
->index
;
414 struct it87_data
*data
= it87_update_device(dev
);
415 return sprintf(buf
, "%d\n", TEMP_FROM_REG(data
->temp_high
[nr
]));
417 static ssize_t
show_temp_min(struct device
*dev
, struct device_attribute
*attr
,
420 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
421 int nr
= sensor_attr
->index
;
423 struct it87_data
*data
= it87_update_device(dev
);
424 return sprintf(buf
, "%d\n", TEMP_FROM_REG(data
->temp_low
[nr
]));
426 static ssize_t
set_temp_max(struct device
*dev
, struct device_attribute
*attr
,
427 const char *buf
, size_t count
)
429 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
430 int nr
= sensor_attr
->index
;
432 struct it87_data
*data
= dev_get_drvdata(dev
);
433 int val
= simple_strtol(buf
, NULL
, 10);
435 mutex_lock(&data
->update_lock
);
436 data
->temp_high
[nr
] = TEMP_TO_REG(val
);
437 it87_write_value(data
, IT87_REG_TEMP_HIGH(nr
), data
->temp_high
[nr
]);
438 mutex_unlock(&data
->update_lock
);
441 static ssize_t
set_temp_min(struct device
*dev
, struct device_attribute
*attr
,
442 const char *buf
, size_t count
)
444 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
445 int nr
= sensor_attr
->index
;
447 struct it87_data
*data
= dev_get_drvdata(dev
);
448 int val
= simple_strtol(buf
, NULL
, 10);
450 mutex_lock(&data
->update_lock
);
451 data
->temp_low
[nr
] = TEMP_TO_REG(val
);
452 it87_write_value(data
, IT87_REG_TEMP_LOW(nr
), data
->temp_low
[nr
]);
453 mutex_unlock(&data
->update_lock
);
456 #define show_temp_offset(offset) \
457 static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \
458 show_temp, NULL, offset - 1); \
459 static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \
460 show_temp_max, set_temp_max, offset - 1); \
461 static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \
462 show_temp_min, set_temp_min, offset - 1);
468 static ssize_t
show_sensor(struct device
*dev
, struct device_attribute
*attr
,
471 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
472 int nr
= sensor_attr
->index
;
474 struct it87_data
*data
= it87_update_device(dev
);
475 u8 reg
= data
->sensor
; /* In case the value is updated while we use it */
478 return sprintf(buf
, "3\n"); /* thermal diode */
480 return sprintf(buf
, "2\n"); /* thermistor */
481 return sprintf(buf
, "0\n"); /* disabled */
483 static ssize_t
set_sensor(struct device
*dev
, struct device_attribute
*attr
,
484 const char *buf
, size_t count
)
486 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
487 int nr
= sensor_attr
->index
;
489 struct it87_data
*data
= dev_get_drvdata(dev
);
490 int val
= simple_strtol(buf
, NULL
, 10);
492 mutex_lock(&data
->update_lock
);
494 data
->sensor
&= ~(1 << nr
);
495 data
->sensor
&= ~(8 << nr
);
496 /* 3 = thermal diode; 2 = thermistor; 0 = disabled */
498 data
->sensor
|= 1 << nr
;
500 data
->sensor
|= 8 << nr
;
502 mutex_unlock(&data
->update_lock
);
505 it87_write_value(data
, IT87_REG_TEMP_ENABLE
, data
->sensor
);
506 mutex_unlock(&data
->update_lock
);
509 #define show_sensor_offset(offset) \
510 static SENSOR_DEVICE_ATTR(temp##offset##_type, S_IRUGO | S_IWUSR, \
511 show_sensor, set_sensor, offset - 1);
513 show_sensor_offset(1);
514 show_sensor_offset(2);
515 show_sensor_offset(3);
518 static ssize_t
show_fan(struct device
*dev
, struct device_attribute
*attr
,
521 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
522 int nr
= sensor_attr
->index
;
524 struct it87_data
*data
= it87_update_device(dev
);
525 return sprintf(buf
,"%d\n", FAN_FROM_REG(data
->fan
[nr
],
526 DIV_FROM_REG(data
->fan_div
[nr
])));
528 static ssize_t
show_fan_min(struct device
*dev
, struct device_attribute
*attr
,
531 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
532 int nr
= sensor_attr
->index
;
534 struct it87_data
*data
= it87_update_device(dev
);
535 return sprintf(buf
,"%d\n",
536 FAN_FROM_REG(data
->fan_min
[nr
], DIV_FROM_REG(data
->fan_div
[nr
])));
538 static ssize_t
show_fan_div(struct device
*dev
, struct device_attribute
*attr
,
541 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
542 int nr
= sensor_attr
->index
;
544 struct it87_data
*data
= it87_update_device(dev
);
545 return sprintf(buf
, "%d\n", DIV_FROM_REG(data
->fan_div
[nr
]));
547 static ssize_t
show_pwm_enable(struct device
*dev
, struct device_attribute
*attr
,
550 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
551 int nr
= sensor_attr
->index
;
553 struct it87_data
*data
= it87_update_device(dev
);
554 return sprintf(buf
,"%d\n", (data
->fan_main_ctrl
& (1 << nr
)) ? 1 : 0);
556 static ssize_t
show_pwm(struct device
*dev
, struct device_attribute
*attr
,
559 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
560 int nr
= sensor_attr
->index
;
562 struct it87_data
*data
= it87_update_device(dev
);
563 return sprintf(buf
,"%d\n", data
->manual_pwm_ctl
[nr
]);
565 static ssize_t
show_pwm_freq(struct device
*dev
, struct device_attribute
*attr
,
568 struct it87_data
*data
= it87_update_device(dev
);
569 int index
= (data
->fan_ctl
>> 4) & 0x07;
571 return sprintf(buf
, "%u\n", pwm_freq
[index
]);
573 static ssize_t
set_fan_min(struct device
*dev
, struct device_attribute
*attr
,
574 const char *buf
, size_t count
)
576 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
577 int nr
= sensor_attr
->index
;
579 struct it87_data
*data
= dev_get_drvdata(dev
);
580 int val
= simple_strtol(buf
, NULL
, 10);
583 mutex_lock(&data
->update_lock
);
584 reg
= it87_read_value(data
, IT87_REG_FAN_DIV
);
586 case 0: data
->fan_div
[nr
] = reg
& 0x07; break;
587 case 1: data
->fan_div
[nr
] = (reg
>> 3) & 0x07; break;
588 case 2: data
->fan_div
[nr
] = (reg
& 0x40) ? 3 : 1; break;
591 data
->fan_min
[nr
] = FAN_TO_REG(val
, DIV_FROM_REG(data
->fan_div
[nr
]));
592 it87_write_value(data
, IT87_REG_FAN_MIN
[nr
], data
->fan_min
[nr
]);
593 mutex_unlock(&data
->update_lock
);
596 static ssize_t
set_fan_div(struct device
*dev
, struct device_attribute
*attr
,
597 const char *buf
, size_t count
)
599 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
600 int nr
= sensor_attr
->index
;
602 struct it87_data
*data
= dev_get_drvdata(dev
);
603 unsigned long val
= simple_strtoul(buf
, NULL
, 10);
607 mutex_lock(&data
->update_lock
);
608 old
= it87_read_value(data
, IT87_REG_FAN_DIV
);
610 /* Save fan min limit */
611 min
= FAN_FROM_REG(data
->fan_min
[nr
], DIV_FROM_REG(data
->fan_div
[nr
]));
616 data
->fan_div
[nr
] = DIV_TO_REG(val
);
620 data
->fan_div
[nr
] = 1;
622 data
->fan_div
[nr
] = 3;
625 val
|= (data
->fan_div
[0] & 0x07);
626 val
|= (data
->fan_div
[1] & 0x07) << 3;
627 if (data
->fan_div
[2] == 3)
629 it87_write_value(data
, IT87_REG_FAN_DIV
, val
);
631 /* Restore fan min limit */
632 data
->fan_min
[nr
] = FAN_TO_REG(min
, DIV_FROM_REG(data
->fan_div
[nr
]));
633 it87_write_value(data
, IT87_REG_FAN_MIN
[nr
], data
->fan_min
[nr
]);
635 mutex_unlock(&data
->update_lock
);
638 static ssize_t
set_pwm_enable(struct device
*dev
,
639 struct device_attribute
*attr
, const char *buf
, size_t count
)
641 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
642 int nr
= sensor_attr
->index
;
644 struct it87_data
*data
= dev_get_drvdata(dev
);
645 int val
= simple_strtol(buf
, NULL
, 10);
647 mutex_lock(&data
->update_lock
);
651 /* make sure the fan is on when in on/off mode */
652 tmp
= it87_read_value(data
, IT87_REG_FAN_CTL
);
653 it87_write_value(data
, IT87_REG_FAN_CTL
, tmp
| (1 << nr
));
654 /* set on/off mode */
655 data
->fan_main_ctrl
&= ~(1 << nr
);
656 it87_write_value(data
, IT87_REG_FAN_MAIN_CTRL
, data
->fan_main_ctrl
);
657 } else if (val
== 1) {
658 /* set SmartGuardian mode */
659 data
->fan_main_ctrl
|= (1 << nr
);
660 it87_write_value(data
, IT87_REG_FAN_MAIN_CTRL
, data
->fan_main_ctrl
);
661 /* set saved pwm value, clear FAN_CTLX PWM mode bit */
662 it87_write_value(data
, IT87_REG_PWM(nr
), PWM_TO_REG(data
->manual_pwm_ctl
[nr
]));
664 mutex_unlock(&data
->update_lock
);
668 mutex_unlock(&data
->update_lock
);
671 static ssize_t
set_pwm(struct device
*dev
, struct device_attribute
*attr
,
672 const char *buf
, size_t count
)
674 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
675 int nr
= sensor_attr
->index
;
677 struct it87_data
*data
= dev_get_drvdata(dev
);
678 int val
= simple_strtol(buf
, NULL
, 10);
680 if (val
< 0 || val
> 255)
683 mutex_lock(&data
->update_lock
);
684 data
->manual_pwm_ctl
[nr
] = val
;
685 if (data
->fan_main_ctrl
& (1 << nr
))
686 it87_write_value(data
, IT87_REG_PWM(nr
), PWM_TO_REG(data
->manual_pwm_ctl
[nr
]));
687 mutex_unlock(&data
->update_lock
);
690 static ssize_t
set_pwm_freq(struct device
*dev
,
691 struct device_attribute
*attr
, const char *buf
, size_t count
)
693 struct it87_data
*data
= dev_get_drvdata(dev
);
694 unsigned long val
= simple_strtoul(buf
, NULL
, 10);
697 /* Search for the nearest available frequency */
698 for (i
= 0; i
< 7; i
++) {
699 if (val
> (pwm_freq
[i
] + pwm_freq
[i
+1]) / 2)
703 mutex_lock(&data
->update_lock
);
704 data
->fan_ctl
= it87_read_value(data
, IT87_REG_FAN_CTL
) & 0x8f;
705 data
->fan_ctl
|= i
<< 4;
706 it87_write_value(data
, IT87_REG_FAN_CTL
, data
->fan_ctl
);
707 mutex_unlock(&data
->update_lock
);
712 #define show_fan_offset(offset) \
713 static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, \
714 show_fan, NULL, offset - 1); \
715 static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
716 show_fan_min, set_fan_min, offset - 1); \
717 static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
718 show_fan_div, set_fan_div, offset - 1);
724 #define show_pwm_offset(offset) \
725 static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \
726 show_pwm_enable, set_pwm_enable, offset - 1); \
727 static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \
728 show_pwm, set_pwm, offset - 1); \
729 static DEVICE_ATTR(pwm##offset##_freq, \
730 (offset == 1 ? S_IRUGO | S_IWUSR : S_IRUGO), \
731 show_pwm_freq, (offset == 1 ? set_pwm_freq : NULL));
737 /* A different set of callbacks for 16-bit fans */
738 static ssize_t
show_fan16(struct device
*dev
, struct device_attribute
*attr
,
741 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
742 int nr
= sensor_attr
->index
;
743 struct it87_data
*data
= it87_update_device(dev
);
744 return sprintf(buf
, "%d\n", FAN16_FROM_REG(data
->fan
[nr
]));
747 static ssize_t
show_fan16_min(struct device
*dev
, struct device_attribute
*attr
,
750 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
751 int nr
= sensor_attr
->index
;
752 struct it87_data
*data
= it87_update_device(dev
);
753 return sprintf(buf
, "%d\n", FAN16_FROM_REG(data
->fan_min
[nr
]));
756 static ssize_t
set_fan16_min(struct device
*dev
, struct device_attribute
*attr
,
757 const char *buf
, size_t count
)
759 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
760 int nr
= sensor_attr
->index
;
761 struct it87_data
*data
= dev_get_drvdata(dev
);
762 int val
= simple_strtol(buf
, NULL
, 10);
764 mutex_lock(&data
->update_lock
);
765 data
->fan_min
[nr
] = FAN16_TO_REG(val
);
766 it87_write_value(data
, IT87_REG_FAN_MIN
[nr
],
767 data
->fan_min
[nr
] & 0xff);
768 it87_write_value(data
, IT87_REG_FANX_MIN
[nr
],
769 data
->fan_min
[nr
] >> 8);
770 mutex_unlock(&data
->update_lock
);
774 /* We want to use the same sysfs file names as 8-bit fans, but we need
775 different variable names, so we have to use SENSOR_ATTR instead of
776 SENSOR_DEVICE_ATTR. */
777 #define show_fan16_offset(offset) \
778 static struct sensor_device_attribute sensor_dev_attr_fan##offset##_input16 \
779 = SENSOR_ATTR(fan##offset##_input, S_IRUGO, \
780 show_fan16, NULL, offset - 1); \
781 static struct sensor_device_attribute sensor_dev_attr_fan##offset##_min16 \
782 = SENSOR_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
783 show_fan16_min, set_fan16_min, offset - 1)
785 show_fan16_offset(1);
786 show_fan16_offset(2);
787 show_fan16_offset(3);
788 show_fan16_offset(4);
789 show_fan16_offset(5);
792 static ssize_t
show_alarms(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
794 struct it87_data
*data
= it87_update_device(dev
);
795 return sprintf(buf
, "%u\n", data
->alarms
);
797 static DEVICE_ATTR(alarms
, S_IRUGO
, show_alarms
, NULL
);
799 static ssize_t
show_alarm(struct device
*dev
, struct device_attribute
*attr
,
802 int bitnr
= to_sensor_dev_attr(attr
)->index
;
803 struct it87_data
*data
= it87_update_device(dev
);
804 return sprintf(buf
, "%u\n", (data
->alarms
>> bitnr
) & 1);
806 static SENSOR_DEVICE_ATTR(in0_alarm
, S_IRUGO
, show_alarm
, NULL
, 8);
807 static SENSOR_DEVICE_ATTR(in1_alarm
, S_IRUGO
, show_alarm
, NULL
, 9);
808 static SENSOR_DEVICE_ATTR(in2_alarm
, S_IRUGO
, show_alarm
, NULL
, 10);
809 static SENSOR_DEVICE_ATTR(in3_alarm
, S_IRUGO
, show_alarm
, NULL
, 11);
810 static SENSOR_DEVICE_ATTR(in4_alarm
, S_IRUGO
, show_alarm
, NULL
, 12);
811 static SENSOR_DEVICE_ATTR(in5_alarm
, S_IRUGO
, show_alarm
, NULL
, 13);
812 static SENSOR_DEVICE_ATTR(in6_alarm
, S_IRUGO
, show_alarm
, NULL
, 14);
813 static SENSOR_DEVICE_ATTR(in7_alarm
, S_IRUGO
, show_alarm
, NULL
, 15);
814 static SENSOR_DEVICE_ATTR(fan1_alarm
, S_IRUGO
, show_alarm
, NULL
, 0);
815 static SENSOR_DEVICE_ATTR(fan2_alarm
, S_IRUGO
, show_alarm
, NULL
, 1);
816 static SENSOR_DEVICE_ATTR(fan3_alarm
, S_IRUGO
, show_alarm
, NULL
, 2);
817 static SENSOR_DEVICE_ATTR(fan4_alarm
, S_IRUGO
, show_alarm
, NULL
, 3);
818 static SENSOR_DEVICE_ATTR(fan5_alarm
, S_IRUGO
, show_alarm
, NULL
, 6);
819 static SENSOR_DEVICE_ATTR(temp1_alarm
, S_IRUGO
, show_alarm
, NULL
, 16);
820 static SENSOR_DEVICE_ATTR(temp2_alarm
, S_IRUGO
, show_alarm
, NULL
, 17);
821 static SENSOR_DEVICE_ATTR(temp3_alarm
, S_IRUGO
, show_alarm
, NULL
, 18);
824 show_vrm_reg(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
826 struct it87_data
*data
= dev_get_drvdata(dev
);
827 return sprintf(buf
, "%u\n", data
->vrm
);
830 store_vrm_reg(struct device
*dev
, struct device_attribute
*attr
, const char *buf
, size_t count
)
832 struct it87_data
*data
= dev_get_drvdata(dev
);
835 val
= simple_strtoul(buf
, NULL
, 10);
840 static DEVICE_ATTR(vrm
, S_IRUGO
| S_IWUSR
, show_vrm_reg
, store_vrm_reg
);
843 show_vid_reg(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
845 struct it87_data
*data
= it87_update_device(dev
);
846 return sprintf(buf
, "%ld\n", (long) vid_from_reg(data
->vid
, data
->vrm
));
848 static DEVICE_ATTR(cpu0_vid
, S_IRUGO
, show_vid_reg
, NULL
);
850 static ssize_t
show_name(struct device
*dev
, struct device_attribute
853 struct it87_data
*data
= dev_get_drvdata(dev
);
854 return sprintf(buf
, "%s\n", data
->name
);
856 static DEVICE_ATTR(name
, S_IRUGO
, show_name
, NULL
);
858 static struct attribute
*it87_attributes
[] = {
859 &sensor_dev_attr_in0_input
.dev_attr
.attr
,
860 &sensor_dev_attr_in1_input
.dev_attr
.attr
,
861 &sensor_dev_attr_in2_input
.dev_attr
.attr
,
862 &sensor_dev_attr_in3_input
.dev_attr
.attr
,
863 &sensor_dev_attr_in4_input
.dev_attr
.attr
,
864 &sensor_dev_attr_in5_input
.dev_attr
.attr
,
865 &sensor_dev_attr_in6_input
.dev_attr
.attr
,
866 &sensor_dev_attr_in7_input
.dev_attr
.attr
,
867 &sensor_dev_attr_in8_input
.dev_attr
.attr
,
868 &sensor_dev_attr_in0_min
.dev_attr
.attr
,
869 &sensor_dev_attr_in1_min
.dev_attr
.attr
,
870 &sensor_dev_attr_in2_min
.dev_attr
.attr
,
871 &sensor_dev_attr_in3_min
.dev_attr
.attr
,
872 &sensor_dev_attr_in4_min
.dev_attr
.attr
,
873 &sensor_dev_attr_in5_min
.dev_attr
.attr
,
874 &sensor_dev_attr_in6_min
.dev_attr
.attr
,
875 &sensor_dev_attr_in7_min
.dev_attr
.attr
,
876 &sensor_dev_attr_in0_max
.dev_attr
.attr
,
877 &sensor_dev_attr_in1_max
.dev_attr
.attr
,
878 &sensor_dev_attr_in2_max
.dev_attr
.attr
,
879 &sensor_dev_attr_in3_max
.dev_attr
.attr
,
880 &sensor_dev_attr_in4_max
.dev_attr
.attr
,
881 &sensor_dev_attr_in5_max
.dev_attr
.attr
,
882 &sensor_dev_attr_in6_max
.dev_attr
.attr
,
883 &sensor_dev_attr_in7_max
.dev_attr
.attr
,
884 &sensor_dev_attr_in0_alarm
.dev_attr
.attr
,
885 &sensor_dev_attr_in1_alarm
.dev_attr
.attr
,
886 &sensor_dev_attr_in2_alarm
.dev_attr
.attr
,
887 &sensor_dev_attr_in3_alarm
.dev_attr
.attr
,
888 &sensor_dev_attr_in4_alarm
.dev_attr
.attr
,
889 &sensor_dev_attr_in5_alarm
.dev_attr
.attr
,
890 &sensor_dev_attr_in6_alarm
.dev_attr
.attr
,
891 &sensor_dev_attr_in7_alarm
.dev_attr
.attr
,
893 &sensor_dev_attr_temp1_input
.dev_attr
.attr
,
894 &sensor_dev_attr_temp2_input
.dev_attr
.attr
,
895 &sensor_dev_attr_temp3_input
.dev_attr
.attr
,
896 &sensor_dev_attr_temp1_max
.dev_attr
.attr
,
897 &sensor_dev_attr_temp2_max
.dev_attr
.attr
,
898 &sensor_dev_attr_temp3_max
.dev_attr
.attr
,
899 &sensor_dev_attr_temp1_min
.dev_attr
.attr
,
900 &sensor_dev_attr_temp2_min
.dev_attr
.attr
,
901 &sensor_dev_attr_temp3_min
.dev_attr
.attr
,
902 &sensor_dev_attr_temp1_type
.dev_attr
.attr
,
903 &sensor_dev_attr_temp2_type
.dev_attr
.attr
,
904 &sensor_dev_attr_temp3_type
.dev_attr
.attr
,
905 &sensor_dev_attr_temp1_alarm
.dev_attr
.attr
,
906 &sensor_dev_attr_temp2_alarm
.dev_attr
.attr
,
907 &sensor_dev_attr_temp3_alarm
.dev_attr
.attr
,
909 &dev_attr_alarms
.attr
,
914 static const struct attribute_group it87_group
= {
915 .attrs
= it87_attributes
,
918 static struct attribute
*it87_attributes_opt
[] = {
919 &sensor_dev_attr_fan1_input16
.dev_attr
.attr
,
920 &sensor_dev_attr_fan1_min16
.dev_attr
.attr
,
921 &sensor_dev_attr_fan2_input16
.dev_attr
.attr
,
922 &sensor_dev_attr_fan2_min16
.dev_attr
.attr
,
923 &sensor_dev_attr_fan3_input16
.dev_attr
.attr
,
924 &sensor_dev_attr_fan3_min16
.dev_attr
.attr
,
925 &sensor_dev_attr_fan4_input16
.dev_attr
.attr
,
926 &sensor_dev_attr_fan4_min16
.dev_attr
.attr
,
927 &sensor_dev_attr_fan5_input16
.dev_attr
.attr
,
928 &sensor_dev_attr_fan5_min16
.dev_attr
.attr
,
930 &sensor_dev_attr_fan1_input
.dev_attr
.attr
,
931 &sensor_dev_attr_fan1_min
.dev_attr
.attr
,
932 &sensor_dev_attr_fan1_div
.dev_attr
.attr
,
933 &sensor_dev_attr_fan2_input
.dev_attr
.attr
,
934 &sensor_dev_attr_fan2_min
.dev_attr
.attr
,
935 &sensor_dev_attr_fan2_div
.dev_attr
.attr
,
936 &sensor_dev_attr_fan3_input
.dev_attr
.attr
,
937 &sensor_dev_attr_fan3_min
.dev_attr
.attr
,
938 &sensor_dev_attr_fan3_div
.dev_attr
.attr
,
940 &sensor_dev_attr_fan1_alarm
.dev_attr
.attr
,
941 &sensor_dev_attr_fan2_alarm
.dev_attr
.attr
,
942 &sensor_dev_attr_fan3_alarm
.dev_attr
.attr
,
943 &sensor_dev_attr_fan4_alarm
.dev_attr
.attr
,
944 &sensor_dev_attr_fan5_alarm
.dev_attr
.attr
,
946 &sensor_dev_attr_pwm1_enable
.dev_attr
.attr
,
947 &sensor_dev_attr_pwm2_enable
.dev_attr
.attr
,
948 &sensor_dev_attr_pwm3_enable
.dev_attr
.attr
,
949 &sensor_dev_attr_pwm1
.dev_attr
.attr
,
950 &sensor_dev_attr_pwm2
.dev_attr
.attr
,
951 &sensor_dev_attr_pwm3
.dev_attr
.attr
,
952 &dev_attr_pwm1_freq
.attr
,
953 &dev_attr_pwm2_freq
.attr
,
954 &dev_attr_pwm3_freq
.attr
,
957 &dev_attr_cpu0_vid
.attr
,
961 static const struct attribute_group it87_group_opt
= {
962 .attrs
= it87_attributes_opt
,
965 /* SuperIO detection - will change isa_address if a chip is found */
966 static int __init
it87_find(unsigned short *address
,
967 struct it87_sio_data
*sio_data
)
971 const char *board_vendor
, *board_name
;
974 chip_type
= force_id
? force_id
: superio_inw(DEVID
);
978 sio_data
->type
= it87
;
981 sio_data
->type
= it8712
;
985 sio_data
->type
= it8716
;
988 sio_data
->type
= it8718
;
990 case 0xffff: /* No device at all */
993 pr_debug(DRVNAME
": Unsupported chip (DEVID=0x%x)\n",
999 if (!(superio_inb(IT87_ACT_REG
) & 0x01)) {
1000 pr_info("it87: Device not activated, skipping\n");
1004 *address
= superio_inw(IT87_BASE_REG
) & ~(IT87_EXTENT
- 1);
1005 if (*address
== 0) {
1006 pr_info("it87: Base address not set, skipping\n");
1011 sio_data
->revision
= superio_inb(DEVREV
) & 0x0f;
1012 pr_info("it87: Found IT%04xF chip at 0x%x, revision %d\n",
1013 chip_type
, *address
, sio_data
->revision
);
1015 /* Read GPIO config and VID value from LDN 7 (GPIO) */
1016 if (chip_type
!= IT8705F_DEVID
) {
1019 superio_select(GPIO
);
1020 if (chip_type
== it8718
)
1021 sio_data
->vid_value
= superio_inb(IT87_SIO_VID_REG
);
1023 reg
= superio_inb(IT87_SIO_PINX2_REG
);
1025 pr_info("it87: in3 is VCC (+5V)\n");
1027 pr_info("it87: in7 is VCCH (+5V Stand-By)\n");
1030 /* Disable specific features based on DMI strings */
1031 board_vendor
= dmi_get_system_info(DMI_BOARD_VENDOR
);
1032 board_name
= dmi_get_system_info(DMI_BOARD_NAME
);
1033 if (board_vendor
&& board_name
) {
1034 if (strcmp(board_vendor
, "nVIDIA") == 0
1035 && strcmp(board_name
, "FN68PT") == 0) {
1036 /* On the Shuttle SN68PT, FAN_CTL2 is apparently not
1037 connected to a fan, but to something else. One user
1038 has reported instant system power-off when changing
1039 the PWM2 duty cycle, so we disable it.
1040 I use the board name string as the trigger in case
1041 the same board is ever used in other systems. */
1042 pr_info("it87: Disabling pwm2 due to "
1043 "hardware constraints\n");
1044 sio_data
->skip_pwm
= (1 << 1);
1053 static int __devinit
it87_probe(struct platform_device
*pdev
)
1055 struct it87_data
*data
;
1056 struct resource
*res
;
1057 struct device
*dev
= &pdev
->dev
;
1058 struct it87_sio_data
*sio_data
= dev
->platform_data
;
1060 int enable_pwm_interface
;
1061 static const char *names
[] = {
1068 res
= platform_get_resource(pdev
, IORESOURCE_IO
, 0);
1069 if (!request_region(res
->start
, IT87_EC_EXTENT
, DRVNAME
)) {
1070 dev_err(dev
, "Failed to request region 0x%lx-0x%lx\n",
1071 (unsigned long)res
->start
,
1072 (unsigned long)(res
->start
+ IT87_EC_EXTENT
- 1));
1077 if (!(data
= kzalloc(sizeof(struct it87_data
), GFP_KERNEL
))) {
1082 data
->addr
= res
->start
;
1083 data
->type
= sio_data
->type
;
1084 data
->revision
= sio_data
->revision
;
1085 data
->name
= names
[sio_data
->type
];
1087 /* Now, we do the remaining detection. */
1088 if ((it87_read_value(data
, IT87_REG_CONFIG
) & 0x80)
1089 || it87_read_value(data
, IT87_REG_CHIPID
) != 0x90) {
1094 platform_set_drvdata(pdev
, data
);
1096 mutex_init(&data
->update_lock
);
1098 /* Check PWM configuration */
1099 enable_pwm_interface
= it87_check_pwm(dev
);
1101 /* Initialize the IT87 chip */
1102 it87_init_device(pdev
);
1104 /* Register sysfs hooks */
1105 if ((err
= sysfs_create_group(&dev
->kobj
, &it87_group
)))
1108 /* Do not create fan files for disabled fans */
1109 if (has_16bit_fans(data
)) {
1110 /* 16-bit tachometers */
1111 if (data
->has_fan
& (1 << 0)) {
1112 if ((err
= device_create_file(dev
,
1113 &sensor_dev_attr_fan1_input16
.dev_attr
))
1114 || (err
= device_create_file(dev
,
1115 &sensor_dev_attr_fan1_min16
.dev_attr
))
1116 || (err
= device_create_file(dev
,
1117 &sensor_dev_attr_fan1_alarm
.dev_attr
)))
1120 if (data
->has_fan
& (1 << 1)) {
1121 if ((err
= device_create_file(dev
,
1122 &sensor_dev_attr_fan2_input16
.dev_attr
))
1123 || (err
= device_create_file(dev
,
1124 &sensor_dev_attr_fan2_min16
.dev_attr
))
1125 || (err
= device_create_file(dev
,
1126 &sensor_dev_attr_fan2_alarm
.dev_attr
)))
1129 if (data
->has_fan
& (1 << 2)) {
1130 if ((err
= device_create_file(dev
,
1131 &sensor_dev_attr_fan3_input16
.dev_attr
))
1132 || (err
= device_create_file(dev
,
1133 &sensor_dev_attr_fan3_min16
.dev_attr
))
1134 || (err
= device_create_file(dev
,
1135 &sensor_dev_attr_fan3_alarm
.dev_attr
)))
1138 if (data
->has_fan
& (1 << 3)) {
1139 if ((err
= device_create_file(dev
,
1140 &sensor_dev_attr_fan4_input16
.dev_attr
))
1141 || (err
= device_create_file(dev
,
1142 &sensor_dev_attr_fan4_min16
.dev_attr
))
1143 || (err
= device_create_file(dev
,
1144 &sensor_dev_attr_fan4_alarm
.dev_attr
)))
1147 if (data
->has_fan
& (1 << 4)) {
1148 if ((err
= device_create_file(dev
,
1149 &sensor_dev_attr_fan5_input16
.dev_attr
))
1150 || (err
= device_create_file(dev
,
1151 &sensor_dev_attr_fan5_min16
.dev_attr
))
1152 || (err
= device_create_file(dev
,
1153 &sensor_dev_attr_fan5_alarm
.dev_attr
)))
1157 /* 8-bit tachometers with clock divider */
1158 if (data
->has_fan
& (1 << 0)) {
1159 if ((err
= device_create_file(dev
,
1160 &sensor_dev_attr_fan1_input
.dev_attr
))
1161 || (err
= device_create_file(dev
,
1162 &sensor_dev_attr_fan1_min
.dev_attr
))
1163 || (err
= device_create_file(dev
,
1164 &sensor_dev_attr_fan1_div
.dev_attr
))
1165 || (err
= device_create_file(dev
,
1166 &sensor_dev_attr_fan1_alarm
.dev_attr
)))
1169 if (data
->has_fan
& (1 << 1)) {
1170 if ((err
= device_create_file(dev
,
1171 &sensor_dev_attr_fan2_input
.dev_attr
))
1172 || (err
= device_create_file(dev
,
1173 &sensor_dev_attr_fan2_min
.dev_attr
))
1174 || (err
= device_create_file(dev
,
1175 &sensor_dev_attr_fan2_div
.dev_attr
))
1176 || (err
= device_create_file(dev
,
1177 &sensor_dev_attr_fan2_alarm
.dev_attr
)))
1180 if (data
->has_fan
& (1 << 2)) {
1181 if ((err
= device_create_file(dev
,
1182 &sensor_dev_attr_fan3_input
.dev_attr
))
1183 || (err
= device_create_file(dev
,
1184 &sensor_dev_attr_fan3_min
.dev_attr
))
1185 || (err
= device_create_file(dev
,
1186 &sensor_dev_attr_fan3_div
.dev_attr
))
1187 || (err
= device_create_file(dev
,
1188 &sensor_dev_attr_fan3_alarm
.dev_attr
)))
1193 if (enable_pwm_interface
) {
1194 if (!(sio_data
->skip_pwm
& (1 << 0))) {
1195 if ((err
= device_create_file(dev
,
1196 &sensor_dev_attr_pwm1_enable
.dev_attr
))
1197 || (err
= device_create_file(dev
,
1198 &sensor_dev_attr_pwm1
.dev_attr
))
1199 || (err
= device_create_file(dev
,
1200 &dev_attr_pwm1_freq
)))
1203 if (!(sio_data
->skip_pwm
& (1 << 1))) {
1204 if ((err
= device_create_file(dev
,
1205 &sensor_dev_attr_pwm2_enable
.dev_attr
))
1206 || (err
= device_create_file(dev
,
1207 &sensor_dev_attr_pwm2
.dev_attr
))
1208 || (err
= device_create_file(dev
,
1209 &dev_attr_pwm2_freq
)))
1212 if (!(sio_data
->skip_pwm
& (1 << 2))) {
1213 if ((err
= device_create_file(dev
,
1214 &sensor_dev_attr_pwm3_enable
.dev_attr
))
1215 || (err
= device_create_file(dev
,
1216 &sensor_dev_attr_pwm3
.dev_attr
))
1217 || (err
= device_create_file(dev
,
1218 &dev_attr_pwm3_freq
)))
1223 if (data
->type
== it8712
|| data
->type
== it8716
1224 || data
->type
== it8718
) {
1225 data
->vrm
= vid_which_vrm();
1226 /* VID reading from Super-I/O config space if available */
1227 data
->vid
= sio_data
->vid_value
;
1228 if ((err
= device_create_file(dev
,
1230 || (err
= device_create_file(dev
,
1231 &dev_attr_cpu0_vid
)))
1235 data
->hwmon_dev
= hwmon_device_register(dev
);
1236 if (IS_ERR(data
->hwmon_dev
)) {
1237 err
= PTR_ERR(data
->hwmon_dev
);
1244 sysfs_remove_group(&dev
->kobj
, &it87_group
);
1245 sysfs_remove_group(&dev
->kobj
, &it87_group_opt
);
1247 platform_set_drvdata(pdev
, NULL
);
1250 release_region(res
->start
, IT87_EC_EXTENT
);
1255 static int __devexit
it87_remove(struct platform_device
*pdev
)
1257 struct it87_data
*data
= platform_get_drvdata(pdev
);
1259 hwmon_device_unregister(data
->hwmon_dev
);
1260 sysfs_remove_group(&pdev
->dev
.kobj
, &it87_group
);
1261 sysfs_remove_group(&pdev
->dev
.kobj
, &it87_group_opt
);
1263 release_region(data
->addr
, IT87_EC_EXTENT
);
1264 platform_set_drvdata(pdev
, NULL
);
1270 /* Must be called with data->update_lock held, except during initialization.
1271 We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks,
1272 would slow down the IT87 access and should not be necessary. */
1273 static int it87_read_value(struct it87_data
*data
, u8 reg
)
1275 outb_p(reg
, data
->addr
+ IT87_ADDR_REG_OFFSET
);
1276 return inb_p(data
->addr
+ IT87_DATA_REG_OFFSET
);
1279 /* Must be called with data->update_lock held, except during initialization.
1280 We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks,
1281 would slow down the IT87 access and should not be necessary. */
1282 static void it87_write_value(struct it87_data
*data
, u8 reg
, u8 value
)
1284 outb_p(reg
, data
->addr
+ IT87_ADDR_REG_OFFSET
);
1285 outb_p(value
, data
->addr
+ IT87_DATA_REG_OFFSET
);
1288 /* Return 1 if and only if the PWM interface is safe to use */
1289 static int __devinit
it87_check_pwm(struct device
*dev
)
1291 struct it87_data
*data
= dev_get_drvdata(dev
);
1292 /* Some BIOSes fail to correctly configure the IT87 fans. All fans off
1293 * and polarity set to active low is sign that this is the case so we
1294 * disable pwm control to protect the user. */
1295 int tmp
= it87_read_value(data
, IT87_REG_FAN_CTL
);
1296 if ((tmp
& 0x87) == 0) {
1297 if (fix_pwm_polarity
) {
1298 /* The user asks us to attempt a chip reconfiguration.
1299 * This means switching to active high polarity and
1300 * inverting all fan speed values. */
1304 for (i
= 0; i
< 3; i
++)
1305 pwm
[i
] = it87_read_value(data
,
1308 /* If any fan is in automatic pwm mode, the polarity
1309 * might be correct, as suspicious as it seems, so we
1310 * better don't change anything (but still disable the
1311 * PWM interface). */
1312 if (!((pwm
[0] | pwm
[1] | pwm
[2]) & 0x80)) {
1313 dev_info(dev
, "Reconfiguring PWM to "
1314 "active high polarity\n");
1315 it87_write_value(data
, IT87_REG_FAN_CTL
,
1317 for (i
= 0; i
< 3; i
++)
1318 it87_write_value(data
,
1324 dev_info(dev
, "PWM configuration is "
1325 "too broken to be fixed\n");
1328 dev_info(dev
, "Detected broken BIOS "
1329 "defaults, disabling PWM interface\n");
1331 } else if (fix_pwm_polarity
) {
1332 dev_info(dev
, "PWM configuration looks "
1333 "sane, won't touch\n");
1339 /* Called when we have found a new IT87. */
1340 static void __devinit
it87_init_device(struct platform_device
*pdev
)
1342 struct it87_data
*data
= platform_get_drvdata(pdev
);
1345 /* initialize to sane defaults:
1346 * - if the chip is in manual pwm mode, this will be overwritten with
1347 * the actual settings on the chip (so in this case, initialization
1349 * - if in automatic or on/off mode, we could switch to manual mode,
1350 * read the registers and set manual_pwm_ctl accordingly, but currently
1351 * this is not implemented, so we initialize to something sane */
1352 for (i
= 0; i
< 3; i
++) {
1353 data
->manual_pwm_ctl
[i
] = 0xff;
1356 /* Some chips seem to have default value 0xff for all limit
1357 * registers. For low voltage limits it makes no sense and triggers
1358 * alarms, so change to 0 instead. For high temperature limits, it
1359 * means -1 degree C, which surprisingly doesn't trigger an alarm,
1360 * but is still confusing, so change to 127 degrees C. */
1361 for (i
= 0; i
< 8; i
++) {
1362 tmp
= it87_read_value(data
, IT87_REG_VIN_MIN(i
));
1364 it87_write_value(data
, IT87_REG_VIN_MIN(i
), 0);
1366 for (i
= 0; i
< 3; i
++) {
1367 tmp
= it87_read_value(data
, IT87_REG_TEMP_HIGH(i
));
1369 it87_write_value(data
, IT87_REG_TEMP_HIGH(i
), 127);
1372 /* Check if temperature channnels are reset manually or by some reason */
1373 tmp
= it87_read_value(data
, IT87_REG_TEMP_ENABLE
);
1374 if ((tmp
& 0x3f) == 0) {
1375 /* Temp1,Temp3=thermistor; Temp2=thermal diode */
1376 tmp
= (tmp
& 0xc0) | 0x2a;
1377 it87_write_value(data
, IT87_REG_TEMP_ENABLE
, tmp
);
1381 /* Check if voltage monitors are reset manually or by some reason */
1382 tmp
= it87_read_value(data
, IT87_REG_VIN_ENABLE
);
1383 if ((tmp
& 0xff) == 0) {
1384 /* Enable all voltage monitors */
1385 it87_write_value(data
, IT87_REG_VIN_ENABLE
, 0xff);
1388 /* Check if tachometers are reset manually or by some reason */
1389 data
->fan_main_ctrl
= it87_read_value(data
, IT87_REG_FAN_MAIN_CTRL
);
1390 if ((data
->fan_main_ctrl
& 0x70) == 0) {
1391 /* Enable all fan tachometers */
1392 data
->fan_main_ctrl
|= 0x70;
1393 it87_write_value(data
, IT87_REG_FAN_MAIN_CTRL
, data
->fan_main_ctrl
);
1395 data
->has_fan
= (data
->fan_main_ctrl
>> 4) & 0x07;
1397 /* Set tachometers to 16-bit mode if needed */
1398 if (has_16bit_fans(data
)) {
1399 tmp
= it87_read_value(data
, IT87_REG_FAN_16BIT
);
1400 if (~tmp
& 0x07 & data
->has_fan
) {
1402 "Setting fan1-3 to 16-bit mode\n");
1403 it87_write_value(data
, IT87_REG_FAN_16BIT
,
1406 /* IT8705F only supports three fans. */
1407 if (data
->type
!= it87
) {
1409 data
->has_fan
|= (1 << 3); /* fan4 enabled */
1411 data
->has_fan
|= (1 << 4); /* fan5 enabled */
1415 /* Set current fan mode registers and the default settings for the
1416 * other mode registers */
1417 for (i
= 0; i
< 3; i
++) {
1418 if (data
->fan_main_ctrl
& (1 << i
)) {
1420 tmp
= it87_read_value(data
, IT87_REG_PWM(i
));
1422 /* automatic pwm - not yet implemented, but
1423 * leave the settings made by the BIOS alone
1424 * until a change is requested via the sysfs
1428 data
->manual_pwm_ctl
[i
] = PWM_FROM_REG(tmp
);
1433 /* Start monitoring */
1434 it87_write_value(data
, IT87_REG_CONFIG
,
1435 (it87_read_value(data
, IT87_REG_CONFIG
) & 0x36)
1436 | (update_vbat
? 0x41 : 0x01));
1439 static struct it87_data
*it87_update_device(struct device
*dev
)
1441 struct it87_data
*data
= dev_get_drvdata(dev
);
1444 mutex_lock(&data
->update_lock
);
1446 if (time_after(jiffies
, data
->last_updated
+ HZ
+ HZ
/ 2)
1450 /* Cleared after each update, so reenable. Value
1451 returned by this read will be previous value */
1452 it87_write_value(data
, IT87_REG_CONFIG
,
1453 it87_read_value(data
, IT87_REG_CONFIG
) | 0x40);
1455 for (i
= 0; i
<= 7; i
++) {
1457 it87_read_value(data
, IT87_REG_VIN(i
));
1459 it87_read_value(data
, IT87_REG_VIN_MIN(i
));
1461 it87_read_value(data
, IT87_REG_VIN_MAX(i
));
1463 /* in8 (battery) has no limit registers */
1465 it87_read_value(data
, IT87_REG_VIN(8));
1467 for (i
= 0; i
< 5; i
++) {
1468 /* Skip disabled fans */
1469 if (!(data
->has_fan
& (1 << i
)))
1473 it87_read_value(data
, IT87_REG_FAN_MIN
[i
]);
1474 data
->fan
[i
] = it87_read_value(data
,
1476 /* Add high byte if in 16-bit mode */
1477 if (has_16bit_fans(data
)) {
1478 data
->fan
[i
] |= it87_read_value(data
,
1479 IT87_REG_FANX
[i
]) << 8;
1480 data
->fan_min
[i
] |= it87_read_value(data
,
1481 IT87_REG_FANX_MIN
[i
]) << 8;
1484 for (i
= 0; i
< 3; i
++) {
1486 it87_read_value(data
, IT87_REG_TEMP(i
));
1487 data
->temp_high
[i
] =
1488 it87_read_value(data
, IT87_REG_TEMP_HIGH(i
));
1490 it87_read_value(data
, IT87_REG_TEMP_LOW(i
));
1493 /* Newer chips don't have clock dividers */
1494 if ((data
->has_fan
& 0x07) && !has_16bit_fans(data
)) {
1495 i
= it87_read_value(data
, IT87_REG_FAN_DIV
);
1496 data
->fan_div
[0] = i
& 0x07;
1497 data
->fan_div
[1] = (i
>> 3) & 0x07;
1498 data
->fan_div
[2] = (i
& 0x40) ? 3 : 1;
1502 it87_read_value(data
, IT87_REG_ALARM1
) |
1503 (it87_read_value(data
, IT87_REG_ALARM2
) << 8) |
1504 (it87_read_value(data
, IT87_REG_ALARM3
) << 16);
1505 data
->fan_main_ctrl
= it87_read_value(data
,
1506 IT87_REG_FAN_MAIN_CTRL
);
1507 data
->fan_ctl
= it87_read_value(data
, IT87_REG_FAN_CTL
);
1509 data
->sensor
= it87_read_value(data
, IT87_REG_TEMP_ENABLE
);
1510 /* The 8705 does not have VID capability.
1511 The 8718 does not use IT87_REG_VID for the same purpose. */
1512 if (data
->type
== it8712
|| data
->type
== it8716
) {
1513 data
->vid
= it87_read_value(data
, IT87_REG_VID
);
1514 /* The older IT8712F revisions had only 5 VID pins,
1515 but we assume it is always safe to read 6 bits. */
1518 data
->last_updated
= jiffies
;
1522 mutex_unlock(&data
->update_lock
);
1527 static int __init
it87_device_add(unsigned short address
,
1528 const struct it87_sio_data
*sio_data
)
1530 struct resource res
= {
1531 .start
= address
+ IT87_EC_OFFSET
,
1532 .end
= address
+ IT87_EC_OFFSET
+ IT87_EC_EXTENT
- 1,
1534 .flags
= IORESOURCE_IO
,
1538 pdev
= platform_device_alloc(DRVNAME
, address
);
1541 printk(KERN_ERR DRVNAME
": Device allocation failed\n");
1545 err
= platform_device_add_resources(pdev
, &res
, 1);
1547 printk(KERN_ERR DRVNAME
": Device resource addition failed "
1549 goto exit_device_put
;
1552 err
= platform_device_add_data(pdev
, sio_data
,
1553 sizeof(struct it87_sio_data
));
1555 printk(KERN_ERR DRVNAME
": Platform data allocation failed\n");
1556 goto exit_device_put
;
1559 err
= platform_device_add(pdev
);
1561 printk(KERN_ERR DRVNAME
": Device addition failed (%d)\n",
1563 goto exit_device_put
;
1569 platform_device_put(pdev
);
1574 static int __init
sm_it87_init(void)
1577 unsigned short isa_address
=0;
1578 struct it87_sio_data sio_data
;
1580 memset(&sio_data
, 0, sizeof(struct it87_sio_data
));
1581 err
= it87_find(&isa_address
, &sio_data
);
1584 err
= platform_driver_register(&it87_driver
);
1588 err
= it87_device_add(isa_address
, &sio_data
);
1590 platform_driver_unregister(&it87_driver
);
1597 static void __exit
sm_it87_exit(void)
1599 platform_device_unregister(pdev
);
1600 platform_driver_unregister(&it87_driver
);
1604 MODULE_AUTHOR("Chris Gauthron, "
1605 "Jean Delvare <khali@linux-fr.org>");
1606 MODULE_DESCRIPTION("IT8705F/8712F/8716F/8718F/8726F, SiS950 driver");
1607 module_param(update_vbat
, bool, 0);
1608 MODULE_PARM_DESC(update_vbat
, "Update vbat if set else return powerup value");
1609 module_param(fix_pwm_polarity
, bool, 0);
1610 MODULE_PARM_DESC(fix_pwm_polarity
, "Force PWM polarity to active high (DANGEROUS)");
1611 MODULE_LICENSE("GPL");
1613 module_init(sm_it87_init
);
1614 module_exit(sm_it87_exit
);