hwmon/it87: Add PWM base frequency control
[safe/jmp/linux-2.6] / drivers / hwmon / it87.c
1 /*
2     it87.c - Part of lm_sensors, Linux kernel modules for hardware
3              monitoring.
4
5     Supports: IT8705F  Super I/O chip w/LPC interface
6               IT8712F  Super I/O chip w/LPC interface
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
10
11     Copyright (C) 2001 Chris Gauthron <chrisg@0-in.com> 
12     Copyright (C) 2005-2006 Jean Delvare <khali@linux-fr.org>
13
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.
18
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.
23
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.
27 */
28
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>
42
43
44 static unsigned short isa_address;
45 enum chips { it87, it8712, it8716, it8718 };
46
47 #define REG     0x2e    /* The register to read/write */
48 #define DEV     0x07    /* Register: Logical device select */
49 #define VAL     0x2f    /* The value to read/write */
50 #define PME     0x04    /* The device with the fan registers in it */
51 #define GPIO    0x07    /* The device with the IT8718F VID value in it */
52 #define DEVID   0x20    /* Register: Device ID */
53 #define DEVREV  0x22    /* Register: Device Revision */
54
55 static inline int
56 superio_inb(int reg)
57 {
58         outb(reg, REG);
59         return inb(VAL);
60 }
61
62 static int superio_inw(int reg)
63 {
64         int val;
65         outb(reg++, REG);
66         val = inb(VAL) << 8;
67         outb(reg, REG);
68         val |= inb(VAL);
69         return val;
70 }
71
72 static inline void
73 superio_select(int ldn)
74 {
75         outb(DEV, REG);
76         outb(ldn, VAL);
77 }
78
79 static inline void
80 superio_enter(void)
81 {
82         outb(0x87, REG);
83         outb(0x01, REG);
84         outb(0x55, REG);
85         outb(0x55, REG);
86 }
87
88 static inline void
89 superio_exit(void)
90 {
91         outb(0x02, REG);
92         outb(0x02, VAL);
93 }
94
95 /* Logical device 4 registers */
96 #define IT8712F_DEVID 0x8712
97 #define IT8705F_DEVID 0x8705
98 #define IT8716F_DEVID 0x8716
99 #define IT8718F_DEVID 0x8718
100 #define IT87_ACT_REG  0x30
101 #define IT87_BASE_REG 0x60
102
103 /* Logical device 7 registers (IT8712F and later) */
104 #define IT87_SIO_PINX2_REG      0x2c    /* Pin selection */
105 #define IT87_SIO_VID_REG        0xfc    /* VID value */
106
107 /* Update battery voltage after every reading if true */
108 static int update_vbat;
109
110 /* Not all BIOSes properly configure the PWM registers */
111 static int fix_pwm_polarity;
112
113 /* Values read from Super-I/O config space */
114 static u16 chip_type;
115 static u8 vid_value;
116
117 /* Many IT87 constants specified below */
118
119 /* Length of ISA address segment */
120 #define IT87_EXTENT 8
121
122 /* Where are the ISA address/data registers relative to the base address */
123 #define IT87_ADDR_REG_OFFSET 5
124 #define IT87_DATA_REG_OFFSET 6
125
126 /*----- The IT87 registers -----*/
127
128 #define IT87_REG_CONFIG        0x00
129
130 #define IT87_REG_ALARM1        0x01
131 #define IT87_REG_ALARM2        0x02
132 #define IT87_REG_ALARM3        0x03
133
134 /* The IT8718F has the VID value in a different register, in Super-I/O
135    configuration space. */
136 #define IT87_REG_VID           0x0a
137 /* Warning: register 0x0b is used for something completely different in
138    new chips/revisions. I suspect only 16-bit tachometer mode will work
139    for these. */
140 #define IT87_REG_FAN_DIV       0x0b
141 #define IT87_REG_FAN_16BIT     0x0c
142
143 /* Monitors: 9 voltage (0 to 7, battery), 3 temp (1 to 3), 3 fan (1 to 3) */
144
145 #define IT87_REG_FAN(nr)       (0x0d + (nr))
146 #define IT87_REG_FAN_MIN(nr)   (0x10 + (nr))
147 #define IT87_REG_FANX(nr)      (0x18 + (nr))
148 #define IT87_REG_FANX_MIN(nr)  (0x1b + (nr))
149 #define IT87_REG_FAN_MAIN_CTRL 0x13
150 #define IT87_REG_FAN_CTL       0x14
151 #define IT87_REG_PWM(nr)       (0x15 + (nr))
152
153 #define IT87_REG_VIN(nr)       (0x20 + (nr))
154 #define IT87_REG_TEMP(nr)      (0x29 + (nr))
155
156 #define IT87_REG_VIN_MAX(nr)   (0x30 + (nr) * 2)
157 #define IT87_REG_VIN_MIN(nr)   (0x31 + (nr) * 2)
158 #define IT87_REG_TEMP_HIGH(nr) (0x40 + (nr) * 2)
159 #define IT87_REG_TEMP_LOW(nr)  (0x41 + (nr) * 2)
160
161 #define IT87_REG_VIN_ENABLE    0x50
162 #define IT87_REG_TEMP_ENABLE   0x51
163
164 #define IT87_REG_CHIPID        0x58
165
166 #define IN_TO_REG(val)  (SENSORS_LIMIT((((val) + 8)/16),0,255))
167 #define IN_FROM_REG(val) ((val) * 16)
168
169 static inline u8 FAN_TO_REG(long rpm, int div)
170 {
171         if (rpm == 0)
172                 return 255;
173         rpm = SENSORS_LIMIT(rpm, 1, 1000000);
174         return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1,
175                              254);
176 }
177
178 static inline u16 FAN16_TO_REG(long rpm)
179 {
180         if (rpm == 0)
181                 return 0xffff;
182         return SENSORS_LIMIT((1350000 + rpm) / (rpm * 2), 1, 0xfffe);
183 }
184
185 #define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*(div)))
186 /* The divider is fixed to 2 in 16-bit mode */
187 #define FAN16_FROM_REG(val) ((val)==0?-1:(val)==0xffff?0:1350000/((val)*2))
188
189 #define TEMP_TO_REG(val) (SENSORS_LIMIT(((val)<0?(((val)-500)/1000):\
190                                         ((val)+500)/1000),-128,127))
191 #define TEMP_FROM_REG(val) (((val)>0x80?(val)-0x100:(val))*1000)
192
193 #define PWM_TO_REG(val)   ((val) >> 1)
194 #define PWM_FROM_REG(val) (((val)&0x7f) << 1)
195
196 static int DIV_TO_REG(int val)
197 {
198         int answer = 0;
199         while (answer < 7 && (val >>= 1))
200                 answer++;
201         return answer;
202 }
203 #define DIV_FROM_REG(val) (1 << (val))
204
205 static const unsigned int pwm_freq[8] = {
206         48000000 / 128,
207         24000000 / 128,
208         12000000 / 128,
209         8000000 / 128,
210         6000000 / 128,
211         3000000 / 128,
212         1500000 / 128,
213         750000 / 128,
214 };
215
216
217 /* For each registered IT87, we need to keep some data in memory. That
218    data is pointed to by it87_list[NR]->data. The structure itself is
219    dynamically allocated, at the same time when a new it87 client is
220    allocated. */
221 struct it87_data {
222         struct i2c_client client;
223         struct class_device *class_dev;
224         struct mutex lock;
225         enum chips type;
226
227         struct mutex update_lock;
228         char valid;             /* !=0 if following fields are valid */
229         unsigned long last_updated;     /* In jiffies */
230
231         u8 in[9];               /* Register value */
232         u8 in_max[8];           /* Register value */
233         u8 in_min[8];           /* Register value */
234         u8 has_fan;             /* Bitfield, fans enabled */
235         u16 fan[3];             /* Register values, possibly combined */
236         u16 fan_min[3];         /* Register values, possibly combined */
237         u8 temp[3];             /* Register value */
238         u8 temp_high[3];        /* Register value */
239         u8 temp_low[3];         /* Register value */
240         u8 sensor;              /* Register value */
241         u8 fan_div[3];          /* Register encoding, shifted right */
242         u8 vid;                 /* Register encoding, combined */
243         u8 vrm;
244         u32 alarms;             /* Register encoding, combined */
245         u8 fan_main_ctrl;       /* Register value */
246         u8 fan_ctl;             /* Register value */
247         u8 manual_pwm_ctl[3];   /* manual PWM value set by user */
248 };
249
250
251 static int it87_detect(struct i2c_adapter *adapter);
252 static int it87_detach_client(struct i2c_client *client);
253
254 static int it87_read_value(struct i2c_client *client, u8 reg);
255 static void it87_write_value(struct i2c_client *client, u8 reg, u8 value);
256 static struct it87_data *it87_update_device(struct device *dev);
257 static int it87_check_pwm(struct i2c_client *client);
258 static void it87_init_client(struct i2c_client *client, struct it87_data *data);
259
260
261 static struct i2c_driver it87_isa_driver = {
262         .driver = {
263                 .owner  = THIS_MODULE,
264                 .name   = "it87-isa",
265         },
266         .attach_adapter = it87_detect,
267         .detach_client  = it87_detach_client,
268 };
269
270
271 static ssize_t show_in(struct device *dev, struct device_attribute *attr,
272                 char *buf)
273 {
274         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
275         int nr = sensor_attr->index;
276
277         struct it87_data *data = it87_update_device(dev);
278         return sprintf(buf, "%d\n", IN_FROM_REG(data->in[nr]));
279 }
280
281 static ssize_t show_in_min(struct device *dev, struct device_attribute *attr,
282                 char *buf)
283 {
284         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
285         int nr = sensor_attr->index;
286
287         struct it87_data *data = it87_update_device(dev);
288         return sprintf(buf, "%d\n", IN_FROM_REG(data->in_min[nr]));
289 }
290
291 static ssize_t show_in_max(struct device *dev, struct device_attribute *attr,
292                 char *buf)
293 {
294         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
295         int nr = sensor_attr->index;
296
297         struct it87_data *data = it87_update_device(dev);
298         return sprintf(buf, "%d\n", IN_FROM_REG(data->in_max[nr]));
299 }
300
301 static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
302                 const char *buf, size_t count)
303 {
304         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
305         int nr = sensor_attr->index;
306
307         struct i2c_client *client = to_i2c_client(dev);
308         struct it87_data *data = i2c_get_clientdata(client);
309         unsigned long val = simple_strtoul(buf, NULL, 10);
310
311         mutex_lock(&data->update_lock);
312         data->in_min[nr] = IN_TO_REG(val);
313         it87_write_value(client, IT87_REG_VIN_MIN(nr), 
314                         data->in_min[nr]);
315         mutex_unlock(&data->update_lock);
316         return count;
317 }
318 static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
319                 const char *buf, size_t count)
320 {
321         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
322         int nr = sensor_attr->index;
323
324         struct i2c_client *client = to_i2c_client(dev);
325         struct it87_data *data = i2c_get_clientdata(client);
326         unsigned long val = simple_strtoul(buf, NULL, 10);
327
328         mutex_lock(&data->update_lock);
329         data->in_max[nr] = IN_TO_REG(val);
330         it87_write_value(client, IT87_REG_VIN_MAX(nr), 
331                         data->in_max[nr]);
332         mutex_unlock(&data->update_lock);
333         return count;
334 }
335
336 #define show_in_offset(offset)                                  \
337 static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO,          \
338                 show_in, NULL, offset);
339
340 #define limit_in_offset(offset)                                 \
341 static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR,  \
342                 show_in_min, set_in_min, offset);               \
343 static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR,  \
344                 show_in_max, set_in_max, offset);
345
346 show_in_offset(0);
347 limit_in_offset(0);
348 show_in_offset(1);
349 limit_in_offset(1);
350 show_in_offset(2);
351 limit_in_offset(2);
352 show_in_offset(3);
353 limit_in_offset(3);
354 show_in_offset(4);
355 limit_in_offset(4);
356 show_in_offset(5);
357 limit_in_offset(5);
358 show_in_offset(6);
359 limit_in_offset(6);
360 show_in_offset(7);
361 limit_in_offset(7);
362 show_in_offset(8);
363
364 /* 3 temperatures */
365 static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
366                 char *buf)
367 {
368         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
369         int nr = sensor_attr->index;
370
371         struct it87_data *data = it87_update_device(dev);
372         return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[nr]));
373 }
374 static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr,
375                 char *buf)
376 {
377         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
378         int nr = sensor_attr->index;
379
380         struct it87_data *data = it87_update_device(dev);
381         return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_high[nr]));
382 }
383 static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr,
384                 char *buf)
385 {
386         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
387         int nr = sensor_attr->index;
388
389         struct it87_data *data = it87_update_device(dev);
390         return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_low[nr]));
391 }
392 static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
393                 const char *buf, size_t count)
394 {
395         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
396         int nr = sensor_attr->index;
397
398         struct i2c_client *client = to_i2c_client(dev);
399         struct it87_data *data = i2c_get_clientdata(client);
400         int val = simple_strtol(buf, NULL, 10);
401
402         mutex_lock(&data->update_lock);
403         data->temp_high[nr] = TEMP_TO_REG(val);
404         it87_write_value(client, IT87_REG_TEMP_HIGH(nr), data->temp_high[nr]);
405         mutex_unlock(&data->update_lock);
406         return count;
407 }
408 static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
409                 const char *buf, size_t count)
410 {
411         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
412         int nr = sensor_attr->index;
413
414         struct i2c_client *client = to_i2c_client(dev);
415         struct it87_data *data = i2c_get_clientdata(client);
416         int val = simple_strtol(buf, NULL, 10);
417
418         mutex_lock(&data->update_lock);
419         data->temp_low[nr] = TEMP_TO_REG(val);
420         it87_write_value(client, IT87_REG_TEMP_LOW(nr), data->temp_low[nr]);
421         mutex_unlock(&data->update_lock);
422         return count;
423 }
424 #define show_temp_offset(offset)                                        \
425 static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO,                \
426                 show_temp, NULL, offset - 1);                           \
427 static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR,        \
428                 show_temp_max, set_temp_max, offset - 1);               \
429 static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR,        \
430                 show_temp_min, set_temp_min, offset - 1);
431
432 show_temp_offset(1);
433 show_temp_offset(2);
434 show_temp_offset(3);
435
436 static ssize_t show_sensor(struct device *dev, struct device_attribute *attr,
437                 char *buf)
438 {
439         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
440         int nr = sensor_attr->index;
441
442         struct it87_data *data = it87_update_device(dev);
443         u8 reg = data->sensor; /* In case the value is updated while we use it */
444         
445         if (reg & (1 << nr))
446                 return sprintf(buf, "3\n");  /* thermal diode */
447         if (reg & (8 << nr))
448                 return sprintf(buf, "2\n");  /* thermistor */
449         return sprintf(buf, "0\n");      /* disabled */
450 }
451 static ssize_t set_sensor(struct device *dev, struct device_attribute *attr,
452                 const char *buf, size_t count)
453 {
454         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
455         int nr = sensor_attr->index;
456
457         struct i2c_client *client = to_i2c_client(dev);
458         struct it87_data *data = i2c_get_clientdata(client);
459         int val = simple_strtol(buf, NULL, 10);
460
461         mutex_lock(&data->update_lock);
462
463         data->sensor &= ~(1 << nr);
464         data->sensor &= ~(8 << nr);
465         /* 3 = thermal diode; 2 = thermistor; 0 = disabled */
466         if (val == 3)
467             data->sensor |= 1 << nr;
468         else if (val == 2)
469             data->sensor |= 8 << nr;
470         else if (val != 0) {
471                 mutex_unlock(&data->update_lock);
472                 return -EINVAL;
473         }
474         it87_write_value(client, IT87_REG_TEMP_ENABLE, data->sensor);
475         mutex_unlock(&data->update_lock);
476         return count;
477 }
478 #define show_sensor_offset(offset)                                      \
479 static SENSOR_DEVICE_ATTR(temp##offset##_type, S_IRUGO | S_IWUSR,       \
480                 show_sensor, set_sensor, offset - 1);
481
482 show_sensor_offset(1);
483 show_sensor_offset(2);
484 show_sensor_offset(3);
485
486 /* 3 Fans */
487 static ssize_t show_fan(struct device *dev, struct device_attribute *attr,
488                 char *buf)
489 {
490         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
491         int nr = sensor_attr->index;
492
493         struct it87_data *data = it87_update_device(dev);
494         return sprintf(buf,"%d\n", FAN_FROM_REG(data->fan[nr], 
495                                 DIV_FROM_REG(data->fan_div[nr])));
496 }
497 static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr,
498                 char *buf)
499 {
500         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
501         int nr = sensor_attr->index;
502
503         struct it87_data *data = it87_update_device(dev);
504         return sprintf(buf,"%d\n",
505                 FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr])));
506 }
507 static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
508                 char *buf)
509 {
510         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
511         int nr = sensor_attr->index;
512
513         struct it87_data *data = it87_update_device(dev);
514         return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr]));
515 }
516 static ssize_t show_pwm_enable(struct device *dev, struct device_attribute *attr,
517                 char *buf)
518 {
519         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
520         int nr = sensor_attr->index;
521
522         struct it87_data *data = it87_update_device(dev);
523         return sprintf(buf,"%d\n", (data->fan_main_ctrl & (1 << nr)) ? 1 : 0);
524 }
525 static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
526                 char *buf)
527 {
528         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
529         int nr = sensor_attr->index;
530
531         struct it87_data *data = it87_update_device(dev);
532         return sprintf(buf,"%d\n", data->manual_pwm_ctl[nr]);
533 }
534 static ssize_t show_pwm_freq(struct device *dev, struct device_attribute *attr,
535                 char *buf)
536 {
537         struct it87_data *data = it87_update_device(dev);
538         int index = (data->fan_ctl >> 4) & 0x07;
539
540         return sprintf(buf, "%u\n", pwm_freq[index]);
541 }
542 static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
543                 const char *buf, size_t count)
544 {
545         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
546         int nr = sensor_attr->index;
547
548         struct i2c_client *client = to_i2c_client(dev);
549         struct it87_data *data = i2c_get_clientdata(client);
550         int val = simple_strtol(buf, NULL, 10);
551         u8 reg = it87_read_value(client, IT87_REG_FAN_DIV);
552
553         mutex_lock(&data->update_lock);
554         switch (nr) {
555         case 0: data->fan_div[nr] = reg & 0x07; break;
556         case 1: data->fan_div[nr] = (reg >> 3) & 0x07; break;
557         case 2: data->fan_div[nr] = (reg & 0x40) ? 3 : 1; break;
558         }
559
560         data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
561         it87_write_value(client, IT87_REG_FAN_MIN(nr), data->fan_min[nr]);
562         mutex_unlock(&data->update_lock);
563         return count;
564 }
565 static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
566                 const char *buf, size_t count)
567 {
568         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
569         int nr = sensor_attr->index;
570
571         struct i2c_client *client = to_i2c_client(dev);
572         struct it87_data *data = i2c_get_clientdata(client);
573         unsigned long val = simple_strtoul(buf, NULL, 10);
574         int min;
575         u8 old;
576
577         mutex_lock(&data->update_lock);
578         old = it87_read_value(client, IT87_REG_FAN_DIV);
579
580         /* Save fan min limit */
581         min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr]));
582
583         switch (nr) {
584         case 0:
585         case 1:
586                 data->fan_div[nr] = DIV_TO_REG(val);
587                 break;
588         case 2:
589                 if (val < 8)
590                         data->fan_div[nr] = 1;
591                 else
592                         data->fan_div[nr] = 3;
593         }
594         val = old & 0x80;
595         val |= (data->fan_div[0] & 0x07);
596         val |= (data->fan_div[1] & 0x07) << 3;
597         if (data->fan_div[2] == 3)
598                 val |= 0x1 << 6;
599         it87_write_value(client, IT87_REG_FAN_DIV, val);
600
601         /* Restore fan min limit */
602         data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
603         it87_write_value(client, IT87_REG_FAN_MIN(nr), data->fan_min[nr]);
604
605         mutex_unlock(&data->update_lock);
606         return count;
607 }
608 static ssize_t set_pwm_enable(struct device *dev,
609                 struct device_attribute *attr, const char *buf, size_t count)
610 {
611         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
612         int nr = sensor_attr->index;
613
614         struct i2c_client *client = to_i2c_client(dev);
615         struct it87_data *data = i2c_get_clientdata(client);
616         int val = simple_strtol(buf, NULL, 10);
617
618         mutex_lock(&data->update_lock);
619
620         if (val == 0) {
621                 int tmp;
622                 /* make sure the fan is on when in on/off mode */
623                 tmp = it87_read_value(client, IT87_REG_FAN_CTL);
624                 it87_write_value(client, IT87_REG_FAN_CTL, tmp | (1 << nr));
625                 /* set on/off mode */
626                 data->fan_main_ctrl &= ~(1 << nr);
627                 it87_write_value(client, IT87_REG_FAN_MAIN_CTRL, data->fan_main_ctrl);
628         } else if (val == 1) {
629                 /* set SmartGuardian mode */
630                 data->fan_main_ctrl |= (1 << nr);
631                 it87_write_value(client, IT87_REG_FAN_MAIN_CTRL, data->fan_main_ctrl);
632                 /* set saved pwm value, clear FAN_CTLX PWM mode bit */
633                 it87_write_value(client, IT87_REG_PWM(nr), PWM_TO_REG(data->manual_pwm_ctl[nr]));
634         } else {
635                 mutex_unlock(&data->update_lock);
636                 return -EINVAL;
637         }
638
639         mutex_unlock(&data->update_lock);
640         return count;
641 }
642 static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
643                 const char *buf, size_t count)
644 {
645         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
646         int nr = sensor_attr->index;
647
648         struct i2c_client *client = to_i2c_client(dev);
649         struct it87_data *data = i2c_get_clientdata(client);
650         int val = simple_strtol(buf, NULL, 10);
651
652         if (val < 0 || val > 255)
653                 return -EINVAL;
654
655         mutex_lock(&data->update_lock);
656         data->manual_pwm_ctl[nr] = val;
657         if (data->fan_main_ctrl & (1 << nr))
658                 it87_write_value(client, IT87_REG_PWM(nr), PWM_TO_REG(data->manual_pwm_ctl[nr]));
659         mutex_unlock(&data->update_lock);
660         return count;
661 }
662 static ssize_t set_pwm_freq(struct device *dev,
663                 struct device_attribute *attr, const char *buf, size_t count)
664 {
665         struct i2c_client *client = to_i2c_client(dev);
666         struct it87_data *data = i2c_get_clientdata(client);
667         unsigned long val = simple_strtoul(buf, NULL, 10);
668         int i;
669
670         /* Search for the nearest available frequency */
671         for (i = 0; i < 7; i++) {
672                 if (val > (pwm_freq[i] + pwm_freq[i+1]) / 2)
673                         break;
674         }
675
676         mutex_lock(&data->update_lock);
677         data->fan_ctl = it87_read_value(client, IT87_REG_FAN_CTL) & 0x8f;
678         data->fan_ctl |= i << 4;
679         it87_write_value(client, IT87_REG_FAN_CTL, data->fan_ctl);
680         mutex_unlock(&data->update_lock);
681
682         return count;
683 }
684
685 #define show_fan_offset(offset)                                 \
686 static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO,         \
687                 show_fan, NULL, offset - 1);                    \
688 static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
689                 show_fan_min, set_fan_min, offset - 1);         \
690 static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
691                 show_fan_div, set_fan_div, offset - 1);
692
693 show_fan_offset(1);
694 show_fan_offset(2);
695 show_fan_offset(3);
696
697 #define show_pwm_offset(offset)                                         \
698 static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR,      \
699                 show_pwm_enable, set_pwm_enable, offset - 1);           \
700 static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR,               \
701                 show_pwm, set_pwm, offset - 1);                         \
702 static DEVICE_ATTR(pwm##offset##_freq,                                  \
703                 (offset == 1 ? S_IRUGO | S_IWUSR : S_IRUGO),            \
704                 show_pwm_freq, (offset == 1 ? set_pwm_freq : NULL));
705
706 show_pwm_offset(1);
707 show_pwm_offset(2);
708 show_pwm_offset(3);
709
710 /* A different set of callbacks for 16-bit fans */
711 static ssize_t show_fan16(struct device *dev, struct device_attribute *attr,
712                 char *buf)
713 {
714         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
715         int nr = sensor_attr->index;
716         struct it87_data *data = it87_update_device(dev);
717         return sprintf(buf, "%d\n", FAN16_FROM_REG(data->fan[nr]));
718 }
719
720 static ssize_t show_fan16_min(struct device *dev, struct device_attribute *attr,
721                 char *buf)
722 {
723         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
724         int nr = sensor_attr->index;
725         struct it87_data *data = it87_update_device(dev);
726         return sprintf(buf, "%d\n", FAN16_FROM_REG(data->fan_min[nr]));
727 }
728
729 static ssize_t set_fan16_min(struct device *dev, struct device_attribute *attr,
730                 const char *buf, size_t count)
731 {
732         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
733         int nr = sensor_attr->index;
734         struct i2c_client *client = to_i2c_client(dev);
735         struct it87_data *data = i2c_get_clientdata(client);
736         int val = simple_strtol(buf, NULL, 10);
737
738         mutex_lock(&data->update_lock);
739         data->fan_min[nr] = FAN16_TO_REG(val);
740         it87_write_value(client, IT87_REG_FAN_MIN(nr),
741                          data->fan_min[nr] & 0xff);
742         it87_write_value(client, IT87_REG_FANX_MIN(nr),
743                          data->fan_min[nr] >> 8);
744         mutex_unlock(&data->update_lock);
745         return count;
746 }
747
748 /* We want to use the same sysfs file names as 8-bit fans, but we need
749    different variable names, so we have to use SENSOR_ATTR instead of
750    SENSOR_DEVICE_ATTR. */
751 #define show_fan16_offset(offset) \
752 static struct sensor_device_attribute sensor_dev_attr_fan##offset##_input16 \
753         = SENSOR_ATTR(fan##offset##_input, S_IRUGO,             \
754                 show_fan16, NULL, offset - 1);                  \
755 static struct sensor_device_attribute sensor_dev_attr_fan##offset##_min16 \
756         = SENSOR_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR,     \
757                 show_fan16_min, set_fan16_min, offset - 1)
758
759 show_fan16_offset(1);
760 show_fan16_offset(2);
761 show_fan16_offset(3);
762
763 /* Alarms */
764 static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf)
765 {
766         struct it87_data *data = it87_update_device(dev);
767         return sprintf(buf, "%u\n", data->alarms);
768 }
769 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
770
771 static ssize_t
772 show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf)
773 {
774         struct it87_data *data = it87_update_device(dev);
775         return sprintf(buf, "%u\n", data->vrm);
776 }
777 static ssize_t
778 store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
779 {
780         struct i2c_client *client = to_i2c_client(dev);
781         struct it87_data *data = i2c_get_clientdata(client);
782         u32 val;
783
784         val = simple_strtoul(buf, NULL, 10);
785         data->vrm = val;
786
787         return count;
788 }
789 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
790
791 static ssize_t
792 show_vid_reg(struct device *dev, struct device_attribute *attr, char *buf)
793 {
794         struct it87_data *data = it87_update_device(dev);
795         return sprintf(buf, "%ld\n", (long) vid_from_reg(data->vid, data->vrm));
796 }
797 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
798
799 static struct attribute *it87_attributes[] = {
800         &sensor_dev_attr_in0_input.dev_attr.attr,
801         &sensor_dev_attr_in1_input.dev_attr.attr,
802         &sensor_dev_attr_in2_input.dev_attr.attr,
803         &sensor_dev_attr_in3_input.dev_attr.attr,
804         &sensor_dev_attr_in4_input.dev_attr.attr,
805         &sensor_dev_attr_in5_input.dev_attr.attr,
806         &sensor_dev_attr_in6_input.dev_attr.attr,
807         &sensor_dev_attr_in7_input.dev_attr.attr,
808         &sensor_dev_attr_in8_input.dev_attr.attr,
809         &sensor_dev_attr_in0_min.dev_attr.attr,
810         &sensor_dev_attr_in1_min.dev_attr.attr,
811         &sensor_dev_attr_in2_min.dev_attr.attr,
812         &sensor_dev_attr_in3_min.dev_attr.attr,
813         &sensor_dev_attr_in4_min.dev_attr.attr,
814         &sensor_dev_attr_in5_min.dev_attr.attr,
815         &sensor_dev_attr_in6_min.dev_attr.attr,
816         &sensor_dev_attr_in7_min.dev_attr.attr,
817         &sensor_dev_attr_in0_max.dev_attr.attr,
818         &sensor_dev_attr_in1_max.dev_attr.attr,
819         &sensor_dev_attr_in2_max.dev_attr.attr,
820         &sensor_dev_attr_in3_max.dev_attr.attr,
821         &sensor_dev_attr_in4_max.dev_attr.attr,
822         &sensor_dev_attr_in5_max.dev_attr.attr,
823         &sensor_dev_attr_in6_max.dev_attr.attr,
824         &sensor_dev_attr_in7_max.dev_attr.attr,
825
826         &sensor_dev_attr_temp1_input.dev_attr.attr,
827         &sensor_dev_attr_temp2_input.dev_attr.attr,
828         &sensor_dev_attr_temp3_input.dev_attr.attr,
829         &sensor_dev_attr_temp1_max.dev_attr.attr,
830         &sensor_dev_attr_temp2_max.dev_attr.attr,
831         &sensor_dev_attr_temp3_max.dev_attr.attr,
832         &sensor_dev_attr_temp1_min.dev_attr.attr,
833         &sensor_dev_attr_temp2_min.dev_attr.attr,
834         &sensor_dev_attr_temp3_min.dev_attr.attr,
835         &sensor_dev_attr_temp1_type.dev_attr.attr,
836         &sensor_dev_attr_temp2_type.dev_attr.attr,
837         &sensor_dev_attr_temp3_type.dev_attr.attr,
838
839         &dev_attr_alarms.attr,
840         NULL
841 };
842
843 static const struct attribute_group it87_group = {
844         .attrs = it87_attributes,
845 };
846
847 static struct attribute *it87_attributes_opt[] = {
848         &sensor_dev_attr_fan1_input16.dev_attr.attr,
849         &sensor_dev_attr_fan1_min16.dev_attr.attr,
850         &sensor_dev_attr_fan2_input16.dev_attr.attr,
851         &sensor_dev_attr_fan2_min16.dev_attr.attr,
852         &sensor_dev_attr_fan3_input16.dev_attr.attr,
853         &sensor_dev_attr_fan3_min16.dev_attr.attr,
854
855         &sensor_dev_attr_fan1_input.dev_attr.attr,
856         &sensor_dev_attr_fan1_min.dev_attr.attr,
857         &sensor_dev_attr_fan1_div.dev_attr.attr,
858         &sensor_dev_attr_fan2_input.dev_attr.attr,
859         &sensor_dev_attr_fan2_min.dev_attr.attr,
860         &sensor_dev_attr_fan2_div.dev_attr.attr,
861         &sensor_dev_attr_fan3_input.dev_attr.attr,
862         &sensor_dev_attr_fan3_min.dev_attr.attr,
863         &sensor_dev_attr_fan3_div.dev_attr.attr,
864
865         &sensor_dev_attr_pwm1_enable.dev_attr.attr,
866         &sensor_dev_attr_pwm2_enable.dev_attr.attr,
867         &sensor_dev_attr_pwm3_enable.dev_attr.attr,
868         &sensor_dev_attr_pwm1.dev_attr.attr,
869         &sensor_dev_attr_pwm2.dev_attr.attr,
870         &sensor_dev_attr_pwm3.dev_attr.attr,
871
872         &dev_attr_vrm.attr,
873         &dev_attr_cpu0_vid.attr,
874         NULL
875 };
876
877 static const struct attribute_group it87_group_opt = {
878         .attrs = it87_attributes_opt,
879 };
880
881 /* SuperIO detection - will change isa_address if a chip is found */
882 static int __init it87_find(unsigned short *address)
883 {
884         int err = -ENODEV;
885
886         superio_enter();
887         chip_type = superio_inw(DEVID);
888         if (chip_type != IT8712F_DEVID
889          && chip_type != IT8716F_DEVID
890          && chip_type != IT8718F_DEVID
891          && chip_type != IT8705F_DEVID)
892                 goto exit;
893
894         superio_select(PME);
895         if (!(superio_inb(IT87_ACT_REG) & 0x01)) {
896                 pr_info("it87: Device not activated, skipping\n");
897                 goto exit;
898         }
899
900         *address = superio_inw(IT87_BASE_REG) & ~(IT87_EXTENT - 1);
901         if (*address == 0) {
902                 pr_info("it87: Base address not set, skipping\n");
903                 goto exit;
904         }
905
906         err = 0;
907         pr_info("it87: Found IT%04xF chip at 0x%x, revision %d\n",
908                 chip_type, *address, superio_inb(DEVREV) & 0x0f);
909
910         /* Read GPIO config and VID value from LDN 7 (GPIO) */
911         if (chip_type != IT8705F_DEVID) {
912                 int reg;
913
914                 superio_select(GPIO);
915                 if (chip_type == it8718)
916                         vid_value = superio_inb(IT87_SIO_VID_REG);
917
918                 reg = superio_inb(IT87_SIO_PINX2_REG);
919                 if (reg & (1 << 0))
920                         pr_info("it87: in3 is VCC (+5V)\n");
921                 if (reg & (1 << 1))
922                         pr_info("it87: in7 is VCCH (+5V Stand-By)\n");
923         }
924
925 exit:
926         superio_exit();
927         return err;
928 }
929
930 /* This function is called by i2c_probe */
931 static int it87_detect(struct i2c_adapter *adapter)
932 {
933         struct i2c_client *new_client;
934         struct it87_data *data;
935         int err = 0;
936         const char *name;
937         int enable_pwm_interface;
938
939         /* Reserve the ISA region */
940         if (!request_region(isa_address, IT87_EXTENT,
941                             it87_isa_driver.driver.name)){
942                 err = -EBUSY;
943                 goto ERROR0;
944         }
945
946         if (!(data = kzalloc(sizeof(struct it87_data), GFP_KERNEL))) {
947                 err = -ENOMEM;
948                 goto ERROR1;
949         }
950
951         new_client = &data->client;
952         mutex_init(&data->lock);
953         i2c_set_clientdata(new_client, data);
954         new_client->addr = isa_address;
955         new_client->adapter = adapter;
956         new_client->driver = &it87_isa_driver;
957
958         /* Now, we do the remaining detection. */
959         if ((it87_read_value(new_client, IT87_REG_CONFIG) & 0x80)
960          || it87_read_value(new_client, IT87_REG_CHIPID) != 0x90) {
961                 err = -ENODEV;
962                 goto ERROR2;
963         }
964
965         /* Determine the chip type. */
966         switch (chip_type) {
967         case IT8712F_DEVID:
968                 data->type = it8712;
969                 name = "it8712";
970                 break;
971         case IT8716F_DEVID:
972                 data->type = it8716;
973                 name = "it8716";
974                 break;
975         case IT8718F_DEVID:
976                 data->type = it8718;
977                 name = "it8718";
978                 break;
979         default:
980                 data->type = it87;
981                 name = "it87";
982         }
983
984         /* Fill in the remaining client fields and put it into the global list */
985         strlcpy(new_client->name, name, I2C_NAME_SIZE);
986         mutex_init(&data->update_lock);
987
988         /* Tell the I2C layer a new client has arrived */
989         if ((err = i2c_attach_client(new_client)))
990                 goto ERROR2;
991
992         /* Check PWM configuration */
993         enable_pwm_interface = it87_check_pwm(new_client);
994
995         /* Initialize the IT87 chip */
996         it87_init_client(new_client, data);
997
998         /* Register sysfs hooks */
999         if ((err = sysfs_create_group(&new_client->dev.kobj, &it87_group)))
1000                 goto ERROR3;
1001
1002         /* Do not create fan files for disabled fans */
1003         if (data->type == it8716 || data->type == it8718) {
1004                 /* 16-bit tachometers */
1005                 if (data->has_fan & (1 << 0)) {
1006                         if ((err = device_create_file(&new_client->dev,
1007                              &sensor_dev_attr_fan1_input16.dev_attr))
1008                          || (err = device_create_file(&new_client->dev,
1009                              &sensor_dev_attr_fan1_min16.dev_attr)))
1010                                 goto ERROR4;
1011                 }
1012                 if (data->has_fan & (1 << 1)) {
1013                         if ((err = device_create_file(&new_client->dev,
1014                              &sensor_dev_attr_fan2_input16.dev_attr))
1015                          || (err = device_create_file(&new_client->dev,
1016                              &sensor_dev_attr_fan2_min16.dev_attr)))
1017                                 goto ERROR4;
1018                 }
1019                 if (data->has_fan & (1 << 2)) {
1020                         if ((err = device_create_file(&new_client->dev,
1021                              &sensor_dev_attr_fan3_input16.dev_attr))
1022                          || (err = device_create_file(&new_client->dev,
1023                              &sensor_dev_attr_fan3_min16.dev_attr)))
1024                                 goto ERROR4;
1025                 }
1026         } else {
1027                 /* 8-bit tachometers with clock divider */
1028                 if (data->has_fan & (1 << 0)) {
1029                         if ((err = device_create_file(&new_client->dev,
1030                              &sensor_dev_attr_fan1_input.dev_attr))
1031                          || (err = device_create_file(&new_client->dev,
1032                              &sensor_dev_attr_fan1_min.dev_attr))
1033                          || (err = device_create_file(&new_client->dev,
1034                              &sensor_dev_attr_fan1_div.dev_attr)))
1035                                 goto ERROR4;
1036                 }
1037                 if (data->has_fan & (1 << 1)) {
1038                         if ((err = device_create_file(&new_client->dev,
1039                              &sensor_dev_attr_fan2_input.dev_attr))
1040                          || (err = device_create_file(&new_client->dev,
1041                              &sensor_dev_attr_fan2_min.dev_attr))
1042                          || (err = device_create_file(&new_client->dev,
1043                              &sensor_dev_attr_fan2_div.dev_attr)))
1044                                 goto ERROR4;
1045                 }
1046                 if (data->has_fan & (1 << 2)) {
1047                         if ((err = device_create_file(&new_client->dev,
1048                              &sensor_dev_attr_fan3_input.dev_attr))
1049                          || (err = device_create_file(&new_client->dev,
1050                              &sensor_dev_attr_fan3_min.dev_attr))
1051                          || (err = device_create_file(&new_client->dev,
1052                              &sensor_dev_attr_fan3_div.dev_attr)))
1053                                 goto ERROR4;
1054                 }
1055         }
1056
1057         if (enable_pwm_interface) {
1058                 if ((err = device_create_file(&new_client->dev,
1059                      &sensor_dev_attr_pwm1_enable.dev_attr))
1060                  || (err = device_create_file(&new_client->dev,
1061                      &sensor_dev_attr_pwm2_enable.dev_attr))
1062                  || (err = device_create_file(&new_client->dev,
1063                      &sensor_dev_attr_pwm3_enable.dev_attr))
1064                  || (err = device_create_file(&new_client->dev,
1065                      &sensor_dev_attr_pwm1.dev_attr))
1066                  || (err = device_create_file(&new_client->dev,
1067                      &sensor_dev_attr_pwm2.dev_attr))
1068                  || (err = device_create_file(&new_client->dev,
1069                      &sensor_dev_attr_pwm3.dev_attr))
1070                  || (err = device_create_file(&new_client->dev,
1071                      &dev_attr_pwm1_freq))
1072                  || (err = device_create_file(&new_client->dev,
1073                      &dev_attr_pwm2_freq))
1074                  || (err = device_create_file(&new_client->dev,
1075                      &dev_attr_pwm3_freq)))
1076                         goto ERROR4;
1077         }
1078
1079         if (data->type == it8712 || data->type == it8716
1080          || data->type == it8718) {
1081                 data->vrm = vid_which_vrm();
1082                 /* VID reading from Super-I/O config space if available */
1083                 data->vid = vid_value;
1084                 if ((err = device_create_file(&new_client->dev,
1085                      &dev_attr_vrm))
1086                  || (err = device_create_file(&new_client->dev,
1087                      &dev_attr_cpu0_vid)))
1088                         goto ERROR4;
1089         }
1090
1091         data->class_dev = hwmon_device_register(&new_client->dev);
1092         if (IS_ERR(data->class_dev)) {
1093                 err = PTR_ERR(data->class_dev);
1094                 goto ERROR4;
1095         }
1096
1097         return 0;
1098
1099 ERROR4:
1100         sysfs_remove_group(&new_client->dev.kobj, &it87_group);
1101         sysfs_remove_group(&new_client->dev.kobj, &it87_group_opt);
1102 ERROR3:
1103         i2c_detach_client(new_client);
1104 ERROR2:
1105         kfree(data);
1106 ERROR1:
1107         release_region(isa_address, IT87_EXTENT);
1108 ERROR0:
1109         return err;
1110 }
1111
1112 static int it87_detach_client(struct i2c_client *client)
1113 {
1114         struct it87_data *data = i2c_get_clientdata(client);
1115         int err;
1116
1117         hwmon_device_unregister(data->class_dev);
1118         sysfs_remove_group(&client->dev.kobj, &it87_group);
1119         sysfs_remove_group(&client->dev.kobj, &it87_group_opt);
1120
1121         if ((err = i2c_detach_client(client)))
1122                 return err;
1123
1124         release_region(client->addr, IT87_EXTENT);
1125         kfree(data);
1126
1127         return 0;
1128 }
1129
1130 /* ISA access must be locked explicitly!
1131    We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks,
1132    would slow down the IT87 access and should not be necessary. */
1133 static int it87_read_value(struct i2c_client *client, u8 reg)
1134 {
1135         struct it87_data *data = i2c_get_clientdata(client);
1136         int res;
1137
1138         mutex_lock(&data->lock);
1139         outb_p(reg, client->addr + IT87_ADDR_REG_OFFSET);
1140         res = inb_p(client->addr + IT87_DATA_REG_OFFSET);
1141         mutex_unlock(&data->lock);
1142
1143         return res;
1144 }
1145
1146 /* ISA access must be locked explicitly!
1147    We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks,
1148    would slow down the IT87 access and should not be necessary. */
1149 static void it87_write_value(struct i2c_client *client, u8 reg, u8 value)
1150 {
1151         struct it87_data *data = i2c_get_clientdata(client);
1152
1153         mutex_lock(&data->lock);
1154         outb_p(reg, client->addr + IT87_ADDR_REG_OFFSET);
1155         outb_p(value, client->addr + IT87_DATA_REG_OFFSET);
1156         mutex_unlock(&data->lock);
1157 }
1158
1159 /* Return 1 if and only if the PWM interface is safe to use */
1160 static int it87_check_pwm(struct i2c_client *client)
1161 {
1162         /* Some BIOSes fail to correctly configure the IT87 fans. All fans off
1163          * and polarity set to active low is sign that this is the case so we
1164          * disable pwm control to protect the user. */
1165         int tmp = it87_read_value(client, IT87_REG_FAN_CTL);
1166         if ((tmp & 0x87) == 0) {
1167                 if (fix_pwm_polarity) {
1168                         /* The user asks us to attempt a chip reconfiguration.
1169                          * This means switching to active high polarity and
1170                          * inverting all fan speed values. */
1171                         int i;
1172                         u8 pwm[3];
1173
1174                         for (i = 0; i < 3; i++)
1175                                 pwm[i] = it87_read_value(client,
1176                                                          IT87_REG_PWM(i));
1177
1178                         /* If any fan is in automatic pwm mode, the polarity
1179                          * might be correct, as suspicious as it seems, so we
1180                          * better don't change anything (but still disable the
1181                          * PWM interface). */
1182                         if (!((pwm[0] | pwm[1] | pwm[2]) & 0x80)) {
1183                                 dev_info(&client->dev, "Reconfiguring PWM to "
1184                                          "active high polarity\n");
1185                                 it87_write_value(client, IT87_REG_FAN_CTL,
1186                                                  tmp | 0x87);
1187                                 for (i = 0; i < 3; i++)
1188                                         it87_write_value(client,
1189                                                          IT87_REG_PWM(i),
1190                                                          0x7f & ~pwm[i]);
1191                                 return 1;
1192                         }
1193
1194                         dev_info(&client->dev, "PWM configuration is "
1195                                  "too broken to be fixed\n");
1196                 }
1197
1198                 dev_info(&client->dev, "Detected broken BIOS "
1199                          "defaults, disabling PWM interface\n");
1200                 return 0;
1201         } else if (fix_pwm_polarity) {
1202                 dev_info(&client->dev, "PWM configuration looks "
1203                          "sane, won't touch\n");
1204         }
1205
1206         return 1;
1207 }
1208
1209 /* Called when we have found a new IT87. */
1210 static void it87_init_client(struct i2c_client *client, struct it87_data *data)
1211 {
1212         int tmp, i;
1213
1214         /* initialize to sane defaults:
1215          * - if the chip is in manual pwm mode, this will be overwritten with
1216          *   the actual settings on the chip (so in this case, initialization
1217          *   is not needed)
1218          * - if in automatic or on/off mode, we could switch to manual mode,
1219          *   read the registers and set manual_pwm_ctl accordingly, but currently
1220          *   this is not implemented, so we initialize to something sane */
1221         for (i = 0; i < 3; i++) {
1222                 data->manual_pwm_ctl[i] = 0xff;
1223         }
1224
1225         /* Some chips seem to have default value 0xff for all limit
1226          * registers. For low voltage limits it makes no sense and triggers
1227          * alarms, so change to 0 instead. For high temperature limits, it
1228          * means -1 degree C, which surprisingly doesn't trigger an alarm,
1229          * but is still confusing, so change to 127 degrees C. */
1230         for (i = 0; i < 8; i++) {
1231                 tmp = it87_read_value(client, IT87_REG_VIN_MIN(i));
1232                 if (tmp == 0xff)
1233                         it87_write_value(client, IT87_REG_VIN_MIN(i), 0);
1234         }
1235         for (i = 0; i < 3; i++) {
1236                 tmp = it87_read_value(client, IT87_REG_TEMP_HIGH(i));
1237                 if (tmp == 0xff)
1238                         it87_write_value(client, IT87_REG_TEMP_HIGH(i), 127);
1239         }
1240
1241         /* Check if temperature channnels are reset manually or by some reason */
1242         tmp = it87_read_value(client, IT87_REG_TEMP_ENABLE);
1243         if ((tmp & 0x3f) == 0) {
1244                 /* Temp1,Temp3=thermistor; Temp2=thermal diode */
1245                 tmp = (tmp & 0xc0) | 0x2a;
1246                 it87_write_value(client, IT87_REG_TEMP_ENABLE, tmp);
1247         }
1248         data->sensor = tmp;
1249
1250         /* Check if voltage monitors are reset manually or by some reason */
1251         tmp = it87_read_value(client, IT87_REG_VIN_ENABLE);
1252         if ((tmp & 0xff) == 0) {
1253                 /* Enable all voltage monitors */
1254                 it87_write_value(client, IT87_REG_VIN_ENABLE, 0xff);
1255         }
1256
1257         /* Check if tachometers are reset manually or by some reason */
1258         data->fan_main_ctrl = it87_read_value(client, IT87_REG_FAN_MAIN_CTRL);
1259         if ((data->fan_main_ctrl & 0x70) == 0) {
1260                 /* Enable all fan tachometers */
1261                 data->fan_main_ctrl |= 0x70;
1262                 it87_write_value(client, IT87_REG_FAN_MAIN_CTRL, data->fan_main_ctrl);
1263         }
1264         data->has_fan = (data->fan_main_ctrl >> 4) & 0x07;
1265
1266         /* Set tachometers to 16-bit mode if needed */
1267         if (data->type == it8716 || data->type == it8718) {
1268                 tmp = it87_read_value(client, IT87_REG_FAN_16BIT);
1269                 if (~tmp & 0x07 & data->has_fan) {
1270                         dev_dbg(&client->dev,
1271                                 "Setting fan1-3 to 16-bit mode\n");
1272                         it87_write_value(client, IT87_REG_FAN_16BIT,
1273                                          tmp | 0x07);
1274                 }
1275         }
1276
1277         /* Set current fan mode registers and the default settings for the
1278          * other mode registers */
1279         for (i = 0; i < 3; i++) {
1280                 if (data->fan_main_ctrl & (1 << i)) {
1281                         /* pwm mode */
1282                         tmp = it87_read_value(client, IT87_REG_PWM(i));
1283                         if (tmp & 0x80) {
1284                                 /* automatic pwm - not yet implemented, but
1285                                  * leave the settings made by the BIOS alone
1286                                  * until a change is requested via the sysfs
1287                                  * interface */
1288                         } else {
1289                                 /* manual pwm */
1290                                 data->manual_pwm_ctl[i] = PWM_FROM_REG(tmp);
1291                         }
1292                 }
1293         }
1294
1295         /* Start monitoring */
1296         it87_write_value(client, IT87_REG_CONFIG,
1297                          (it87_read_value(client, IT87_REG_CONFIG) & 0x36)
1298                          | (update_vbat ? 0x41 : 0x01));
1299 }
1300
1301 static struct it87_data *it87_update_device(struct device *dev)
1302 {
1303         struct i2c_client *client = to_i2c_client(dev);
1304         struct it87_data *data = i2c_get_clientdata(client);
1305         int i;
1306
1307         mutex_lock(&data->update_lock);
1308
1309         if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
1310             || !data->valid) {
1311
1312                 if (update_vbat) {
1313                         /* Cleared after each update, so reenable.  Value
1314                           returned by this read will be previous value */       
1315                         it87_write_value(client, IT87_REG_CONFIG,
1316                            it87_read_value(client, IT87_REG_CONFIG) | 0x40);
1317                 }
1318                 for (i = 0; i <= 7; i++) {
1319                         data->in[i] =
1320                             it87_read_value(client, IT87_REG_VIN(i));
1321                         data->in_min[i] =
1322                             it87_read_value(client, IT87_REG_VIN_MIN(i));
1323                         data->in_max[i] =
1324                             it87_read_value(client, IT87_REG_VIN_MAX(i));
1325                 }
1326                 /* in8 (battery) has no limit registers */
1327                 data->in[8] =
1328                     it87_read_value(client, IT87_REG_VIN(8));
1329
1330                 for (i = 0; i < 3; i++) {
1331                         /* Skip disabled fans */
1332                         if (!(data->has_fan & (1 << i)))
1333                                 continue;
1334
1335                         data->fan_min[i] =
1336                             it87_read_value(client, IT87_REG_FAN_MIN(i));
1337                         data->fan[i] = it87_read_value(client,
1338                                        IT87_REG_FAN(i));
1339                         /* Add high byte if in 16-bit mode */
1340                         if (data->type == it8716 || data->type == it8718) {
1341                                 data->fan[i] |= it87_read_value(client,
1342                                                 IT87_REG_FANX(i)) << 8;
1343                                 data->fan_min[i] |= it87_read_value(client,
1344                                                 IT87_REG_FANX_MIN(i)) << 8;
1345                         }
1346                 }
1347                 for (i = 0; i < 3; i++) {
1348                         data->temp[i] =
1349                             it87_read_value(client, IT87_REG_TEMP(i));
1350                         data->temp_high[i] =
1351                             it87_read_value(client, IT87_REG_TEMP_HIGH(i));
1352                         data->temp_low[i] =
1353                             it87_read_value(client, IT87_REG_TEMP_LOW(i));
1354                 }
1355
1356                 /* Newer chips don't have clock dividers */
1357                 if ((data->has_fan & 0x07) && data->type != it8716
1358                  && data->type != it8718) {
1359                         i = it87_read_value(client, IT87_REG_FAN_DIV);
1360                         data->fan_div[0] = i & 0x07;
1361                         data->fan_div[1] = (i >> 3) & 0x07;
1362                         data->fan_div[2] = (i & 0x40) ? 3 : 1;
1363                 }
1364
1365                 data->alarms =
1366                         it87_read_value(client, IT87_REG_ALARM1) |
1367                         (it87_read_value(client, IT87_REG_ALARM2) << 8) |
1368                         (it87_read_value(client, IT87_REG_ALARM3) << 16);
1369                 data->fan_main_ctrl = it87_read_value(client, IT87_REG_FAN_MAIN_CTRL);
1370                 data->fan_ctl = it87_read_value(client, IT87_REG_FAN_CTL);
1371
1372                 data->sensor = it87_read_value(client, IT87_REG_TEMP_ENABLE);
1373                 /* The 8705 does not have VID capability */
1374                 if (data->type == it8712 || data->type == it8716) {
1375                         data->vid = it87_read_value(client, IT87_REG_VID);
1376                         /* The older IT8712F revisions had only 5 VID pins,
1377                            but we assume it is always safe to read 6 bits. */
1378                         data->vid &= 0x3f;
1379                 }
1380                 data->last_updated = jiffies;
1381                 data->valid = 1;
1382         }
1383
1384         mutex_unlock(&data->update_lock);
1385
1386         return data;
1387 }
1388
1389 static int __init sm_it87_init(void)
1390 {
1391         int res;
1392
1393         if ((res = it87_find(&isa_address)))
1394                 return res;
1395         return i2c_isa_add_driver(&it87_isa_driver);
1396 }
1397
1398 static void __exit sm_it87_exit(void)
1399 {
1400         i2c_isa_del_driver(&it87_isa_driver);
1401 }
1402
1403
1404 MODULE_AUTHOR("Chris Gauthron <chrisg@0-in.com>, "
1405               "Jean Delvare <khali@linux-fr.org>");
1406 MODULE_DESCRIPTION("IT8705F/8712F/8716F/8718F, SiS950 driver");
1407 module_param(update_vbat, bool, 0);
1408 MODULE_PARM_DESC(update_vbat, "Update vbat if set else return powerup value");
1409 module_param(fix_pwm_polarity, bool, 0);
1410 MODULE_PARM_DESC(fix_pwm_polarity, "Force PWM polarity to active high (DANGEROUS)");
1411 MODULE_LICENSE("GPL");
1412
1413 module_init(sm_it87_init);
1414 module_exit(sm_it87_exit);