Merge branch 'for-2.6.39/core' of git://git.kernel.dk/linux-2.6-block
[pandora-kernel.git] / drivers / hwmon / w83627ehf.c
1 /*
2     w83627ehf - Driver for the hardware monitoring functionality of
3                 the Winbond W83627EHF Super-I/O chip
4     Copyright (C) 2005  Jean Delvare <khali@linux-fr.org>
5     Copyright (C) 2006  Yuan Mu (Winbond),
6                         Rudolf Marek <r.marek@assembler.cz>
7                         David Hubbard <david.c.hubbard@gmail.com>
8                         Daniel J Blueman <daniel.blueman@gmail.com>
9     Copyright (C) 2010  Sheng-Yuan Huang (Nuvoton) (PS00)
10
11     Shamelessly ripped from the w83627hf driver
12     Copyright (C) 2003  Mark Studebaker
13
14     Thanks to Leon Moonen, Steve Cliffe and Grant Coady for their help
15     in testing and debugging this driver.
16
17     This driver also supports the W83627EHG, which is the lead-free
18     version of the W83627EHF.
19
20     This program is free software; you can redistribute it and/or modify
21     it under the terms of the GNU General Public License as published by
22     the Free Software Foundation; either version 2 of the License, or
23     (at your option) any later version.
24
25     This program is distributed in the hope that it will be useful,
26     but WITHOUT ANY WARRANTY; without even the implied warranty of
27     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
28     GNU General Public License for more details.
29
30     You should have received a copy of the GNU General Public License
31     along with this program; if not, write to the Free Software
32     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
33
34
35     Supports the following chips:
36
37     Chip        #vin    #fan    #pwm    #temp  chip IDs       man ID
38     w83627ehf   10      5       4       3      0x8850 0x88    0x5ca3
39                                                0x8860 0xa1
40     w83627dhg    9      5       4       3      0xa020 0xc1    0x5ca3
41     w83627dhg-p  9      5       4       3      0xb070 0xc1    0x5ca3
42     w83667hg     9      5       3       3      0xa510 0xc1    0x5ca3
43     w83667hg-b   9      5       3       4      0xb350 0xc1    0x5ca3
44     nct6775f     9      4       3       9      0xb470 0xc1    0x5ca3
45     nct6776f     9      5       3       9      0xC330 0xc1    0x5ca3
46 */
47
48 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
49
50 #include <linux/module.h>
51 #include <linux/init.h>
52 #include <linux/slab.h>
53 #include <linux/jiffies.h>
54 #include <linux/platform_device.h>
55 #include <linux/hwmon.h>
56 #include <linux/hwmon-sysfs.h>
57 #include <linux/hwmon-vid.h>
58 #include <linux/err.h>
59 #include <linux/mutex.h>
60 #include <linux/acpi.h>
61 #include <linux/io.h>
62 #include "lm75.h"
63
64 enum kinds { w83627ehf, w83627dhg, w83627dhg_p, w83667hg, w83667hg_b, nct6775,
65         nct6776 };
66
67 /* used to set data->name = w83627ehf_device_names[data->sio_kind] */
68 static const char * const w83627ehf_device_names[] = {
69         "w83627ehf",
70         "w83627dhg",
71         "w83627dhg",
72         "w83667hg",
73         "w83667hg",
74         "nct6775",
75         "nct6776",
76 };
77
78 static unsigned short force_id;
79 module_param(force_id, ushort, 0);
80 MODULE_PARM_DESC(force_id, "Override the detected device ID");
81
82 static unsigned short fan_debounce;
83 module_param(fan_debounce, ushort, 0);
84 MODULE_PARM_DESC(fan_debounce, "Enable debouncing for fan RPM signal");
85
86 #define DRVNAME "w83627ehf"
87
88 /*
89  * Super-I/O constants and functions
90  */
91
92 #define W83627EHF_LD_HWM        0x0b
93 #define W83667HG_LD_VID         0x0d
94
95 #define SIO_REG_LDSEL           0x07    /* Logical device select */
96 #define SIO_REG_DEVID           0x20    /* Device ID (2 bytes) */
97 #define SIO_REG_EN_VRM10        0x2C    /* GPIO3, GPIO4 selection */
98 #define SIO_REG_ENABLE          0x30    /* Logical device enable */
99 #define SIO_REG_ADDR            0x60    /* Logical device address (2 bytes) */
100 #define SIO_REG_VID_CTRL        0xF0    /* VID control */
101 #define SIO_REG_VID_DATA        0xF1    /* VID data */
102
103 #define SIO_W83627EHF_ID        0x8850
104 #define SIO_W83627EHG_ID        0x8860
105 #define SIO_W83627DHG_ID        0xa020
106 #define SIO_W83627DHG_P_ID      0xb070
107 #define SIO_W83667HG_ID         0xa510
108 #define SIO_W83667HG_B_ID       0xb350
109 #define SIO_NCT6775_ID          0xb470
110 #define SIO_NCT6776_ID          0xc330
111 #define SIO_ID_MASK             0xFFF0
112
113 static inline void
114 superio_outb(int ioreg, int reg, int val)
115 {
116         outb(reg, ioreg);
117         outb(val, ioreg + 1);
118 }
119
120 static inline int
121 superio_inb(int ioreg, int reg)
122 {
123         outb(reg, ioreg);
124         return inb(ioreg + 1);
125 }
126
127 static inline void
128 superio_select(int ioreg, int ld)
129 {
130         outb(SIO_REG_LDSEL, ioreg);
131         outb(ld, ioreg + 1);
132 }
133
134 static inline void
135 superio_enter(int ioreg)
136 {
137         outb(0x87, ioreg);
138         outb(0x87, ioreg);
139 }
140
141 static inline void
142 superio_exit(int ioreg)
143 {
144         outb(0xaa, ioreg);
145         outb(0x02, ioreg);
146         outb(0x02, ioreg + 1);
147 }
148
149 /*
150  * ISA constants
151  */
152
153 #define IOREGION_ALIGNMENT      (~7)
154 #define IOREGION_OFFSET         5
155 #define IOREGION_LENGTH         2
156 #define ADDR_REG_OFFSET         0
157 #define DATA_REG_OFFSET         1
158
159 #define W83627EHF_REG_BANK              0x4E
160 #define W83627EHF_REG_CONFIG            0x40
161
162 /* Not currently used:
163  * REG_MAN_ID has the value 0x5ca3 for all supported chips.
164  * REG_CHIP_ID == 0x88/0xa1/0xc1 depending on chip model.
165  * REG_MAN_ID is at port 0x4f
166  * REG_CHIP_ID is at port 0x58 */
167
168 static const u16 W83627EHF_REG_FAN[] = { 0x28, 0x29, 0x2a, 0x3f, 0x553 };
169 static const u16 W83627EHF_REG_FAN_MIN[] = { 0x3b, 0x3c, 0x3d, 0x3e, 0x55c };
170
171 /* The W83627EHF registers for nr=7,8,9 are in bank 5 */
172 #define W83627EHF_REG_IN_MAX(nr)        ((nr < 7) ? (0x2b + (nr) * 2) : \
173                                          (0x554 + (((nr) - 7) * 2)))
174 #define W83627EHF_REG_IN_MIN(nr)        ((nr < 7) ? (0x2c + (nr) * 2) : \
175                                          (0x555 + (((nr) - 7) * 2)))
176 #define W83627EHF_REG_IN(nr)            ((nr < 7) ? (0x20 + (nr)) : \
177                                          (0x550 + (nr) - 7))
178
179 static const u16 W83627EHF_REG_TEMP[] = { 0x27, 0x150, 0x250, 0x7e };
180 static const u16 W83627EHF_REG_TEMP_HYST[] = { 0x3a, 0x153, 0x253, 0 };
181 static const u16 W83627EHF_REG_TEMP_OVER[] = { 0x39, 0x155, 0x255, 0 };
182 static const u16 W83627EHF_REG_TEMP_CONFIG[] = { 0, 0x152, 0x252, 0 };
183
184 /* Fan clock dividers are spread over the following five registers */
185 #define W83627EHF_REG_FANDIV1           0x47
186 #define W83627EHF_REG_FANDIV2           0x4B
187 #define W83627EHF_REG_VBAT              0x5D
188 #define W83627EHF_REG_DIODE             0x59
189 #define W83627EHF_REG_SMI_OVT           0x4C
190
191 /* NCT6775F has its own fan divider registers */
192 #define NCT6775_REG_FANDIV1             0x506
193 #define NCT6775_REG_FANDIV2             0x507
194 #define NCT6775_REG_FAN_DEBOUNCE        0xf0
195
196 #define W83627EHF_REG_ALARM1            0x459
197 #define W83627EHF_REG_ALARM2            0x45A
198 #define W83627EHF_REG_ALARM3            0x45B
199
200 /* SmartFan registers */
201 #define W83627EHF_REG_FAN_STEPUP_TIME 0x0f
202 #define W83627EHF_REG_FAN_STEPDOWN_TIME 0x0e
203
204 /* DC or PWM output fan configuration */
205 static const u8 W83627EHF_REG_PWM_ENABLE[] = {
206         0x04,                   /* SYS FAN0 output mode and PWM mode */
207         0x04,                   /* CPU FAN0 output mode and PWM mode */
208         0x12,                   /* AUX FAN mode */
209         0x62,                   /* CPU FAN1 mode */
210 };
211
212 static const u8 W83627EHF_PWM_MODE_SHIFT[] = { 0, 1, 0, 6 };
213 static const u8 W83627EHF_PWM_ENABLE_SHIFT[] = { 2, 4, 1, 4 };
214
215 /* FAN Duty Cycle, be used to control */
216 static const u16 W83627EHF_REG_PWM[] = { 0x01, 0x03, 0x11, 0x61 };
217 static const u16 W83627EHF_REG_TARGET[] = { 0x05, 0x06, 0x13, 0x63 };
218 static const u8 W83627EHF_REG_TOLERANCE[] = { 0x07, 0x07, 0x14, 0x62 };
219
220 /* Advanced Fan control, some values are common for all fans */
221 static const u16 W83627EHF_REG_FAN_START_OUTPUT[] = { 0x0a, 0x0b, 0x16, 0x65 };
222 static const u16 W83627EHF_REG_FAN_STOP_OUTPUT[] = { 0x08, 0x09, 0x15, 0x64 };
223 static const u16 W83627EHF_REG_FAN_STOP_TIME[] = { 0x0c, 0x0d, 0x17, 0x66 };
224
225 static const u16 W83627EHF_REG_FAN_MAX_OUTPUT_COMMON[]
226                                                 = { 0xff, 0x67, 0xff, 0x69 };
227 static const u16 W83627EHF_REG_FAN_STEP_OUTPUT_COMMON[]
228                                                 = { 0xff, 0x68, 0xff, 0x6a };
229
230 static const u16 W83627EHF_REG_FAN_MAX_OUTPUT_W83667_B[] = { 0x67, 0x69, 0x6b };
231 static const u16 W83627EHF_REG_FAN_STEP_OUTPUT_W83667_B[]
232                                                 = { 0x68, 0x6a, 0x6c };
233
234 static const u16 NCT6775_REG_TARGET[] = { 0x101, 0x201, 0x301 };
235 static const u16 NCT6775_REG_FAN_MODE[] = { 0x102, 0x202, 0x302 };
236 static const u16 NCT6775_REG_FAN_STOP_OUTPUT[] = { 0x105, 0x205, 0x305 };
237 static const u16 NCT6775_REG_FAN_START_OUTPUT[] = { 0x106, 0x206, 0x306 };
238 static const u16 NCT6775_REG_FAN_STOP_TIME[] = { 0x107, 0x207, 0x307 };
239 static const u16 NCT6775_REG_PWM[] = { 0x109, 0x209, 0x309 };
240 static const u16 NCT6775_REG_FAN_MAX_OUTPUT[] = { 0x10a, 0x20a, 0x30a };
241 static const u16 NCT6775_REG_FAN_STEP_OUTPUT[] = { 0x10b, 0x20b, 0x30b };
242 static const u16 NCT6775_REG_FAN[] = { 0x630, 0x632, 0x634, 0x636, 0x638 };
243 static const u16 NCT6776_REG_FAN_MIN[] = { 0x63a, 0x63c, 0x63e, 0x640, 0x642};
244
245 static const u16 NCT6775_REG_TEMP[]
246         = { 0x27, 0x150, 0x250, 0x73, 0x75, 0x77, 0x62b, 0x62c, 0x62d };
247 static const u16 NCT6775_REG_TEMP_CONFIG[]
248         = { 0, 0x152, 0x252, 0, 0, 0, 0x628, 0x629, 0x62A };
249 static const u16 NCT6775_REG_TEMP_HYST[]
250         = { 0x3a, 0x153, 0x253, 0, 0, 0, 0x673, 0x678, 0x67D };
251 static const u16 NCT6775_REG_TEMP_OVER[]
252         = { 0x39, 0x155, 0x255, 0, 0, 0, 0x672, 0x677, 0x67C };
253 static const u16 NCT6775_REG_TEMP_SOURCE[]
254         = { 0x621, 0x622, 0x623, 0x100, 0x200, 0x300, 0x624, 0x625, 0x626 };
255
256 static const char *const w83667hg_b_temp_label[] = {
257         "SYSTIN",
258         "CPUTIN",
259         "AUXTIN",
260         "AMDTSI",
261         "PECI Agent 1",
262         "PECI Agent 2",
263         "PECI Agent 3",
264         "PECI Agent 4"
265 };
266
267 static const char *const nct6775_temp_label[] = {
268         "",
269         "SYSTIN",
270         "CPUTIN",
271         "AUXTIN",
272         "AMD SB-TSI",
273         "PECI Agent 0",
274         "PECI Agent 1",
275         "PECI Agent 2",
276         "PECI Agent 3",
277         "PECI Agent 4",
278         "PECI Agent 5",
279         "PECI Agent 6",
280         "PECI Agent 7",
281         "PCH_CHIP_CPU_MAX_TEMP",
282         "PCH_CHIP_TEMP",
283         "PCH_CPU_TEMP",
284         "PCH_MCH_TEMP",
285         "PCH_DIM0_TEMP",
286         "PCH_DIM1_TEMP",
287         "PCH_DIM2_TEMP",
288         "PCH_DIM3_TEMP"
289 };
290
291 static const char *const nct6776_temp_label[] = {
292         "",
293         "SYSTIN",
294         "CPUTIN",
295         "AUXTIN",
296         "SMBUSMASTER 0",
297         "SMBUSMASTER 1",
298         "SMBUSMASTER 2",
299         "SMBUSMASTER 3",
300         "SMBUSMASTER 4",
301         "SMBUSMASTER 5",
302         "SMBUSMASTER 6",
303         "SMBUSMASTER 7",
304         "PECI Agent 0",
305         "PECI Agent 1",
306         "PCH_CHIP_CPU_MAX_TEMP",
307         "PCH_CHIP_TEMP",
308         "PCH_CPU_TEMP",
309         "PCH_MCH_TEMP",
310         "PCH_DIM0_TEMP",
311         "PCH_DIM1_TEMP",
312         "PCH_DIM2_TEMP",
313         "PCH_DIM3_TEMP",
314         "BYTE_TEMP"
315 };
316
317 #define NUM_REG_TEMP    ARRAY_SIZE(NCT6775_REG_TEMP)
318
319 static inline int is_word_sized(u16 reg)
320 {
321         return ((((reg & 0xff00) == 0x100
322               || (reg & 0xff00) == 0x200)
323              && ((reg & 0x00ff) == 0x50
324               || (reg & 0x00ff) == 0x53
325               || (reg & 0x00ff) == 0x55))
326              || (reg & 0xfff0) == 0x630
327              || reg == 0x640 || reg == 0x642
328              || ((reg & 0xfff0) == 0x650
329                  && (reg & 0x000f) >= 0x06)
330              || reg == 0x73 || reg == 0x75 || reg == 0x77
331                 );
332 }
333
334 /*
335  * Conversions
336  */
337
338 /* 1 is PWM mode, output in ms */
339 static inline unsigned int step_time_from_reg(u8 reg, u8 mode)
340 {
341         return mode ? 100 * reg : 400 * reg;
342 }
343
344 static inline u8 step_time_to_reg(unsigned int msec, u8 mode)
345 {
346         return SENSORS_LIMIT((mode ? (msec + 50) / 100 :
347                                                 (msec + 200) / 400), 1, 255);
348 }
349
350 static unsigned int fan_from_reg8(u16 reg, unsigned int divreg)
351 {
352         if (reg == 0 || reg == 255)
353                 return 0;
354         return 1350000U / (reg << divreg);
355 }
356
357 static unsigned int fan_from_reg13(u16 reg, unsigned int divreg)
358 {
359         if ((reg & 0xff1f) == 0xff1f)
360                 return 0;
361
362         reg = (reg & 0x1f) | ((reg & 0xff00) >> 3);
363
364         if (reg == 0)
365                 return 0;
366
367         return 1350000U / reg;
368 }
369
370 static unsigned int fan_from_reg16(u16 reg, unsigned int divreg)
371 {
372         if (reg == 0 || reg == 0xffff)
373                 return 0;
374
375         /*
376          * Even though the registers are 16 bit wide, the fan divisor
377          * still applies.
378          */
379         return 1350000U / (reg << divreg);
380 }
381
382 static inline unsigned int
383 div_from_reg(u8 reg)
384 {
385         return 1 << reg;
386 }
387
388 static inline int
389 temp_from_reg(u16 reg, s16 regval)
390 {
391         if (is_word_sized(reg))
392                 return LM75_TEMP_FROM_REG(regval);
393         return regval * 1000;
394 }
395
396 static inline u16
397 temp_to_reg(u16 reg, long temp)
398 {
399         if (is_word_sized(reg))
400                 return LM75_TEMP_TO_REG(temp);
401         return DIV_ROUND_CLOSEST(SENSORS_LIMIT(temp, -127000, 128000), 1000);
402 }
403
404 /* Some of analog inputs have internal scaling (2x), 8mV is ADC LSB */
405
406 static u8 scale_in[10] = { 8, 8, 16, 16, 8, 8, 8, 16, 16, 8 };
407
408 static inline long in_from_reg(u8 reg, u8 nr)
409 {
410         return reg * scale_in[nr];
411 }
412
413 static inline u8 in_to_reg(u32 val, u8 nr)
414 {
415         return SENSORS_LIMIT(((val + (scale_in[nr] / 2)) / scale_in[nr]), 0,
416                              255);
417 }
418
419 /*
420  * Data structures and manipulation thereof
421  */
422
423 struct w83627ehf_data {
424         int addr;       /* IO base of hw monitor block */
425         const char *name;
426
427         struct device *hwmon_dev;
428         struct mutex lock;
429
430         u16 reg_temp[NUM_REG_TEMP];
431         u16 reg_temp_over[NUM_REG_TEMP];
432         u16 reg_temp_hyst[NUM_REG_TEMP];
433         u16 reg_temp_config[NUM_REG_TEMP];
434         u8 temp_src[NUM_REG_TEMP];
435         const char * const *temp_label;
436
437         const u16 *REG_PWM;
438         const u16 *REG_TARGET;
439         const u16 *REG_FAN;
440         const u16 *REG_FAN_MIN;
441         const u16 *REG_FAN_START_OUTPUT;
442         const u16 *REG_FAN_STOP_OUTPUT;
443         const u16 *REG_FAN_STOP_TIME;
444         const u16 *REG_FAN_MAX_OUTPUT;
445         const u16 *REG_FAN_STEP_OUTPUT;
446
447         unsigned int (*fan_from_reg)(u16 reg, unsigned int divreg);
448         unsigned int (*fan_from_reg_min)(u16 reg, unsigned int divreg);
449
450         struct mutex update_lock;
451         char valid;             /* !=0 if following fields are valid */
452         unsigned long last_updated;     /* In jiffies */
453
454         /* Register values */
455         u8 bank;                /* current register bank */
456         u8 in_num;              /* number of in inputs we have */
457         u8 in[10];              /* Register value */
458         u8 in_max[10];          /* Register value */
459         u8 in_min[10];          /* Register value */
460         unsigned int rpm[5];
461         u16 fan_min[5];
462         u8 fan_div[5];
463         u8 has_fan;             /* some fan inputs can be disabled */
464         u8 has_fan_min;         /* some fans don't have min register */
465         bool has_fan_div;
466         u8 temp_type[3];
467         s16 temp[9];
468         s16 temp_max[9];
469         s16 temp_max_hyst[9];
470         u32 alarms;
471
472         u8 pwm_mode[4]; /* 0->DC variable voltage, 1->PWM variable duty cycle */
473         u8 pwm_enable[4]; /* 1->manual
474                              2->thermal cruise mode (also called SmartFan I)
475                              3->fan speed cruise mode
476                              4->variable thermal cruise (also called
477                                 SmartFan III)
478                              5->enhanced variable thermal cruise (also called
479                                 SmartFan IV) */
480         u8 pwm_enable_orig[4];  /* original value of pwm_enable */
481         u8 pwm_num;             /* number of pwm */
482         u8 pwm[4];
483         u8 target_temp[4];
484         u8 tolerance[4];
485
486         u8 fan_start_output[4]; /* minimum fan speed when spinning up */
487         u8 fan_stop_output[4]; /* minimum fan speed when spinning down */
488         u8 fan_stop_time[4]; /* time at minimum before disabling fan */
489         u8 fan_max_output[4]; /* maximum fan speed */
490         u8 fan_step_output[4]; /* rate of change output value */
491
492         u8 vid;
493         u8 vrm;
494
495         u16 have_temp;
496         u8 in6_skip;
497 };
498
499 struct w83627ehf_sio_data {
500         int sioreg;
501         enum kinds kind;
502 };
503
504 /*
505  * On older chips, only registers 0x50-0x5f are banked.
506  * On more recent chips, all registers are banked.
507  * Assume that is the case and set the bank number for each access.
508  * Cache the bank number so it only needs to be set if it changes.
509  */
510 static inline void w83627ehf_set_bank(struct w83627ehf_data *data, u16 reg)
511 {
512         u8 bank = reg >> 8;
513         if (data->bank != bank) {
514                 outb_p(W83627EHF_REG_BANK, data->addr + ADDR_REG_OFFSET);
515                 outb_p(bank, data->addr + DATA_REG_OFFSET);
516                 data->bank = bank;
517         }
518 }
519
520 static u16 w83627ehf_read_value(struct w83627ehf_data *data, u16 reg)
521 {
522         int res, word_sized = is_word_sized(reg);
523
524         mutex_lock(&data->lock);
525
526         w83627ehf_set_bank(data, reg);
527         outb_p(reg & 0xff, data->addr + ADDR_REG_OFFSET);
528         res = inb_p(data->addr + DATA_REG_OFFSET);
529         if (word_sized) {
530                 outb_p((reg & 0xff) + 1,
531                        data->addr + ADDR_REG_OFFSET);
532                 res = (res << 8) + inb_p(data->addr + DATA_REG_OFFSET);
533         }
534
535         mutex_unlock(&data->lock);
536         return res;
537 }
538
539 static int w83627ehf_write_value(struct w83627ehf_data *data, u16 reg,
540                                  u16 value)
541 {
542         int word_sized = is_word_sized(reg);
543
544         mutex_lock(&data->lock);
545
546         w83627ehf_set_bank(data, reg);
547         outb_p(reg & 0xff, data->addr + ADDR_REG_OFFSET);
548         if (word_sized) {
549                 outb_p(value >> 8, data->addr + DATA_REG_OFFSET);
550                 outb_p((reg & 0xff) + 1,
551                        data->addr + ADDR_REG_OFFSET);
552         }
553         outb_p(value & 0xff, data->addr + DATA_REG_OFFSET);
554
555         mutex_unlock(&data->lock);
556         return 0;
557 }
558
559 /* This function assumes that the caller holds data->update_lock */
560 static void nct6775_write_fan_div(struct w83627ehf_data *data, int nr)
561 {
562         u8 reg;
563
564         switch (nr) {
565         case 0:
566                 reg = (w83627ehf_read_value(data, NCT6775_REG_FANDIV1) & 0x70)
567                     | (data->fan_div[0] & 0x7);
568                 w83627ehf_write_value(data, NCT6775_REG_FANDIV1, reg);
569                 break;
570         case 1:
571                 reg = (w83627ehf_read_value(data, NCT6775_REG_FANDIV1) & 0x7)
572                     | ((data->fan_div[1] << 4) & 0x70);
573                 w83627ehf_write_value(data, NCT6775_REG_FANDIV1, reg);
574         case 2:
575                 reg = (w83627ehf_read_value(data, NCT6775_REG_FANDIV2) & 0x70)
576                     | (data->fan_div[2] & 0x7);
577                 w83627ehf_write_value(data, NCT6775_REG_FANDIV2, reg);
578                 break;
579         case 3:
580                 reg = (w83627ehf_read_value(data, NCT6775_REG_FANDIV2) & 0x7)
581                     | ((data->fan_div[3] << 4) & 0x70);
582                 w83627ehf_write_value(data, NCT6775_REG_FANDIV2, reg);
583                 break;
584         }
585 }
586
587 /* This function assumes that the caller holds data->update_lock */
588 static void w83627ehf_write_fan_div(struct w83627ehf_data *data, int nr)
589 {
590         u8 reg;
591
592         switch (nr) {
593         case 0:
594                 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV1) & 0xcf)
595                     | ((data->fan_div[0] & 0x03) << 4);
596                 /* fan5 input control bit is write only, compute the value */
597                 reg |= (data->has_fan & (1 << 4)) ? 1 : 0;
598                 w83627ehf_write_value(data, W83627EHF_REG_FANDIV1, reg);
599                 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0xdf)
600                     | ((data->fan_div[0] & 0x04) << 3);
601                 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg);
602                 break;
603         case 1:
604                 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV1) & 0x3f)
605                     | ((data->fan_div[1] & 0x03) << 6);
606                 /* fan5 input control bit is write only, compute the value */
607                 reg |= (data->has_fan & (1 << 4)) ? 1 : 0;
608                 w83627ehf_write_value(data, W83627EHF_REG_FANDIV1, reg);
609                 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0xbf)
610                     | ((data->fan_div[1] & 0x04) << 4);
611                 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg);
612                 break;
613         case 2:
614                 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV2) & 0x3f)
615                     | ((data->fan_div[2] & 0x03) << 6);
616                 w83627ehf_write_value(data, W83627EHF_REG_FANDIV2, reg);
617                 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0x7f)
618                     | ((data->fan_div[2] & 0x04) << 5);
619                 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg);
620                 break;
621         case 3:
622                 reg = (w83627ehf_read_value(data, W83627EHF_REG_DIODE) & 0xfc)
623                     | (data->fan_div[3] & 0x03);
624                 w83627ehf_write_value(data, W83627EHF_REG_DIODE, reg);
625                 reg = (w83627ehf_read_value(data, W83627EHF_REG_SMI_OVT) & 0x7f)
626                     | ((data->fan_div[3] & 0x04) << 5);
627                 w83627ehf_write_value(data, W83627EHF_REG_SMI_OVT, reg);
628                 break;
629         case 4:
630                 reg = (w83627ehf_read_value(data, W83627EHF_REG_DIODE) & 0x73)
631                     | ((data->fan_div[4] & 0x03) << 2)
632                     | ((data->fan_div[4] & 0x04) << 5);
633                 w83627ehf_write_value(data, W83627EHF_REG_DIODE, reg);
634                 break;
635         }
636 }
637
638 static void w83627ehf_write_fan_div_common(struct device *dev,
639                                            struct w83627ehf_data *data, int nr)
640 {
641         struct w83627ehf_sio_data *sio_data = dev->platform_data;
642
643         if (sio_data->kind == nct6776)
644                 ; /* no dividers, do nothing */
645         else if (sio_data->kind == nct6775)
646                 nct6775_write_fan_div(data, nr);
647         else
648                 w83627ehf_write_fan_div(data, nr);
649 }
650
651 static void nct6775_update_fan_div(struct w83627ehf_data *data)
652 {
653         u8 i;
654
655         i = w83627ehf_read_value(data, NCT6775_REG_FANDIV1);
656         data->fan_div[0] = i & 0x7;
657         data->fan_div[1] = (i & 0x70) >> 4;
658         i = w83627ehf_read_value(data, NCT6775_REG_FANDIV2);
659         data->fan_div[2] = i & 0x7;
660         if (data->has_fan & (1<<3))
661                 data->fan_div[3] = (i & 0x70) >> 4;
662 }
663
664 static void w83627ehf_update_fan_div(struct w83627ehf_data *data)
665 {
666         int i;
667
668         i = w83627ehf_read_value(data, W83627EHF_REG_FANDIV1);
669         data->fan_div[0] = (i >> 4) & 0x03;
670         data->fan_div[1] = (i >> 6) & 0x03;
671         i = w83627ehf_read_value(data, W83627EHF_REG_FANDIV2);
672         data->fan_div[2] = (i >> 6) & 0x03;
673         i = w83627ehf_read_value(data, W83627EHF_REG_VBAT);
674         data->fan_div[0] |= (i >> 3) & 0x04;
675         data->fan_div[1] |= (i >> 4) & 0x04;
676         data->fan_div[2] |= (i >> 5) & 0x04;
677         if (data->has_fan & ((1 << 3) | (1 << 4))) {
678                 i = w83627ehf_read_value(data, W83627EHF_REG_DIODE);
679                 data->fan_div[3] = i & 0x03;
680                 data->fan_div[4] = ((i >> 2) & 0x03)
681                                  | ((i >> 5) & 0x04);
682         }
683         if (data->has_fan & (1 << 3)) {
684                 i = w83627ehf_read_value(data, W83627EHF_REG_SMI_OVT);
685                 data->fan_div[3] |= (i >> 5) & 0x04;
686         }
687 }
688
689 static void w83627ehf_update_fan_div_common(struct device *dev,
690                                             struct w83627ehf_data *data)
691 {
692         struct w83627ehf_sio_data *sio_data = dev->platform_data;
693
694         if (sio_data->kind == nct6776)
695                 ; /* no dividers, do nothing */
696         else if (sio_data->kind == nct6775)
697                 nct6775_update_fan_div(data);
698         else
699                 w83627ehf_update_fan_div(data);
700 }
701
702 static void nct6775_update_pwm(struct w83627ehf_data *data)
703 {
704         int i;
705         int pwmcfg, fanmodecfg;
706
707         for (i = 0; i < data->pwm_num; i++) {
708                 pwmcfg = w83627ehf_read_value(data,
709                                               W83627EHF_REG_PWM_ENABLE[i]);
710                 fanmodecfg = w83627ehf_read_value(data,
711                                                   NCT6775_REG_FAN_MODE[i]);
712                 data->pwm_mode[i] =
713                   ((pwmcfg >> W83627EHF_PWM_MODE_SHIFT[i]) & 1) ? 0 : 1;
714                 data->pwm_enable[i] = ((fanmodecfg >> 4) & 7) + 1;
715                 data->tolerance[i] = fanmodecfg & 0x0f;
716                 data->pwm[i] = w83627ehf_read_value(data, data->REG_PWM[i]);
717         }
718 }
719
720 static void w83627ehf_update_pwm(struct w83627ehf_data *data)
721 {
722         int i;
723         int pwmcfg = 0, tolerance = 0; /* shut up the compiler */
724
725         for (i = 0; i < data->pwm_num; i++) {
726                 if (!(data->has_fan & (1 << i)))
727                         continue;
728
729                 /* pwmcfg, tolerance mapped for i=0, i=1 to same reg */
730                 if (i != 1) {
731                         pwmcfg = w83627ehf_read_value(data,
732                                         W83627EHF_REG_PWM_ENABLE[i]);
733                         tolerance = w83627ehf_read_value(data,
734                                         W83627EHF_REG_TOLERANCE[i]);
735                 }
736                 data->pwm_mode[i] =
737                         ((pwmcfg >> W83627EHF_PWM_MODE_SHIFT[i]) & 1) ? 0 : 1;
738                 data->pwm_enable[i] = ((pwmcfg >> W83627EHF_PWM_ENABLE_SHIFT[i])
739                                        & 3) + 1;
740                 data->pwm[i] = w83627ehf_read_value(data, data->REG_PWM[i]);
741
742                 data->tolerance[i] = (tolerance >> (i == 1 ? 4 : 0)) & 0x0f;
743         }
744 }
745
746 static void w83627ehf_update_pwm_common(struct device *dev,
747                                         struct w83627ehf_data *data)
748 {
749         struct w83627ehf_sio_data *sio_data = dev->platform_data;
750
751         if (sio_data->kind == nct6775 || sio_data->kind == nct6776)
752                 nct6775_update_pwm(data);
753         else
754                 w83627ehf_update_pwm(data);
755 }
756
757 static struct w83627ehf_data *w83627ehf_update_device(struct device *dev)
758 {
759         struct w83627ehf_data *data = dev_get_drvdata(dev);
760         struct w83627ehf_sio_data *sio_data = dev->platform_data;
761
762         int i;
763
764         mutex_lock(&data->update_lock);
765
766         if (time_after(jiffies, data->last_updated + HZ + HZ/2)
767          || !data->valid) {
768                 /* Fan clock dividers */
769                 w83627ehf_update_fan_div_common(dev, data);
770
771                 /* Measured voltages and limits */
772                 for (i = 0; i < data->in_num; i++) {
773                         data->in[i] = w83627ehf_read_value(data,
774                                       W83627EHF_REG_IN(i));
775                         data->in_min[i] = w83627ehf_read_value(data,
776                                           W83627EHF_REG_IN_MIN(i));
777                         data->in_max[i] = w83627ehf_read_value(data,
778                                           W83627EHF_REG_IN_MAX(i));
779                 }
780
781                 /* Measured fan speeds and limits */
782                 for (i = 0; i < 5; i++) {
783                         u16 reg;
784
785                         if (!(data->has_fan & (1 << i)))
786                                 continue;
787
788                         reg = w83627ehf_read_value(data, data->REG_FAN[i]);
789                         data->rpm[i] = data->fan_from_reg(reg,
790                                                           data->fan_div[i]);
791
792                         if (data->has_fan_min & (1 << i))
793                                 data->fan_min[i] = w83627ehf_read_value(data,
794                                            data->REG_FAN_MIN[i]);
795
796                         /* If we failed to measure the fan speed and clock
797                            divider can be increased, let's try that for next
798                            time */
799                         if (data->has_fan_div
800                             && (reg >= 0xff || (sio_data->kind == nct6775
801                                                 && reg == 0x00))
802                             && data->fan_div[i] < 0x07) {
803                                 dev_dbg(dev, "Increasing fan%d "
804                                         "clock divider from %u to %u\n",
805                                         i + 1, div_from_reg(data->fan_div[i]),
806                                         div_from_reg(data->fan_div[i] + 1));
807                                 data->fan_div[i]++;
808                                 w83627ehf_write_fan_div_common(dev, data, i);
809                                 /* Preserve min limit if possible */
810                                 if ((data->has_fan_min & (1 << i))
811                                  && data->fan_min[i] >= 2
812                                  && data->fan_min[i] != 255)
813                                         w83627ehf_write_value(data,
814                                                 data->REG_FAN_MIN[i],
815                                                 (data->fan_min[i] /= 2));
816                         }
817                 }
818
819                 w83627ehf_update_pwm_common(dev, data);
820
821                 for (i = 0; i < data->pwm_num; i++) {
822                         if (!(data->has_fan & (1 << i)))
823                                 continue;
824
825                         data->fan_start_output[i] =
826                           w83627ehf_read_value(data,
827                                                data->REG_FAN_START_OUTPUT[i]);
828                         data->fan_stop_output[i] =
829                           w83627ehf_read_value(data,
830                                                data->REG_FAN_STOP_OUTPUT[i]);
831                         data->fan_stop_time[i] =
832                           w83627ehf_read_value(data,
833                                                data->REG_FAN_STOP_TIME[i]);
834
835                         if (data->REG_FAN_MAX_OUTPUT &&
836                             data->REG_FAN_MAX_OUTPUT[i] != 0xff)
837                                 data->fan_max_output[i] =
838                                   w83627ehf_read_value(data,
839                                                 data->REG_FAN_MAX_OUTPUT[i]);
840
841                         if (data->REG_FAN_STEP_OUTPUT &&
842                             data->REG_FAN_STEP_OUTPUT[i] != 0xff)
843                                 data->fan_step_output[i] =
844                                   w83627ehf_read_value(data,
845                                                 data->REG_FAN_STEP_OUTPUT[i]);
846
847                         data->target_temp[i] =
848                                 w83627ehf_read_value(data,
849                                         data->REG_TARGET[i]) &
850                                         (data->pwm_mode[i] == 1 ? 0x7f : 0xff);
851                 }
852
853                 /* Measured temperatures and limits */
854                 for (i = 0; i < NUM_REG_TEMP; i++) {
855                         if (!(data->have_temp & (1 << i)))
856                                 continue;
857                         data->temp[i] = w83627ehf_read_value(data,
858                                                 data->reg_temp[i]);
859                         if (data->reg_temp_over[i])
860                                 data->temp_max[i]
861                                   = w83627ehf_read_value(data,
862                                                 data->reg_temp_over[i]);
863                         if (data->reg_temp_hyst[i])
864                                 data->temp_max_hyst[i]
865                                   = w83627ehf_read_value(data,
866                                                 data->reg_temp_hyst[i]);
867                 }
868
869                 data->alarms = w83627ehf_read_value(data,
870                                         W83627EHF_REG_ALARM1) |
871                                (w83627ehf_read_value(data,
872                                         W83627EHF_REG_ALARM2) << 8) |
873                                (w83627ehf_read_value(data,
874                                         W83627EHF_REG_ALARM3) << 16);
875
876                 data->last_updated = jiffies;
877                 data->valid = 1;
878         }
879
880         mutex_unlock(&data->update_lock);
881         return data;
882 }
883
884 /*
885  * Sysfs callback functions
886  */
887 #define show_in_reg(reg) \
888 static ssize_t \
889 show_##reg(struct device *dev, struct device_attribute *attr, \
890            char *buf) \
891 { \
892         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
893         struct sensor_device_attribute *sensor_attr = \
894                 to_sensor_dev_attr(attr); \
895         int nr = sensor_attr->index; \
896         return sprintf(buf, "%ld\n", in_from_reg(data->reg[nr], nr)); \
897 }
898 show_in_reg(in)
899 show_in_reg(in_min)
900 show_in_reg(in_max)
901
902 #define store_in_reg(REG, reg) \
903 static ssize_t \
904 store_in_##reg(struct device *dev, struct device_attribute *attr, \
905                const char *buf, size_t count) \
906 { \
907         struct w83627ehf_data *data = dev_get_drvdata(dev); \
908         struct sensor_device_attribute *sensor_attr = \
909                 to_sensor_dev_attr(attr); \
910         int nr = sensor_attr->index; \
911         unsigned long val; \
912         int err; \
913         err = strict_strtoul(buf, 10, &val); \
914         if (err < 0) \
915                 return err; \
916         mutex_lock(&data->update_lock); \
917         data->in_##reg[nr] = in_to_reg(val, nr); \
918         w83627ehf_write_value(data, W83627EHF_REG_IN_##REG(nr), \
919                               data->in_##reg[nr]); \
920         mutex_unlock(&data->update_lock); \
921         return count; \
922 }
923
924 store_in_reg(MIN, min)
925 store_in_reg(MAX, max)
926
927 static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
928                           char *buf)
929 {
930         struct w83627ehf_data *data = w83627ehf_update_device(dev);
931         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
932         int nr = sensor_attr->index;
933         return sprintf(buf, "%u\n", (data->alarms >> nr) & 0x01);
934 }
935
936 static struct sensor_device_attribute sda_in_input[] = {
937         SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
938         SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
939         SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
940         SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
941         SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
942         SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
943         SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
944         SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
945         SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
946         SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
947 };
948
949 static struct sensor_device_attribute sda_in_alarm[] = {
950         SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
951         SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
952         SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
953         SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
954         SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8),
955         SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 21),
956         SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 20),
957         SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 16),
958         SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 17),
959         SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 19),
960 };
961
962 static struct sensor_device_attribute sda_in_min[] = {
963         SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
964         SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
965         SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
966         SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
967         SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
968         SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
969         SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
970         SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
971         SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
972         SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
973 };
974
975 static struct sensor_device_attribute sda_in_max[] = {
976         SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
977         SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
978         SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
979         SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
980         SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
981         SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
982         SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
983         SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
984         SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
985         SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
986 };
987
988 static ssize_t
989 show_fan(struct device *dev, struct device_attribute *attr, char *buf)
990 {
991         struct w83627ehf_data *data = w83627ehf_update_device(dev);
992         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
993         int nr = sensor_attr->index;
994         return sprintf(buf, "%d\n", data->rpm[nr]);
995 }
996
997 static ssize_t
998 show_fan_min(struct device *dev, struct device_attribute *attr, char *buf)
999 {
1000         struct w83627ehf_data *data = w83627ehf_update_device(dev);
1001         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1002         int nr = sensor_attr->index;
1003         return sprintf(buf, "%d\n",
1004                        data->fan_from_reg_min(data->fan_min[nr],
1005                                               data->fan_div[nr]));
1006 }
1007
1008 static ssize_t
1009 show_fan_div(struct device *dev, struct device_attribute *attr,
1010              char *buf)
1011 {
1012         struct w83627ehf_data *data = w83627ehf_update_device(dev);
1013         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1014         int nr = sensor_attr->index;
1015         return sprintf(buf, "%u\n", div_from_reg(data->fan_div[nr]));
1016 }
1017
1018 static ssize_t
1019 store_fan_min(struct device *dev, struct device_attribute *attr,
1020               const char *buf, size_t count)
1021 {
1022         struct w83627ehf_data *data = dev_get_drvdata(dev);
1023         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1024         int nr = sensor_attr->index;
1025         unsigned long val;
1026         int err;
1027         unsigned int reg;
1028         u8 new_div;
1029
1030         err = strict_strtoul(buf, 10, &val);
1031         if (err < 0)
1032                 return err;
1033
1034         mutex_lock(&data->update_lock);
1035         if (!data->has_fan_div) {
1036                 /*
1037                  * Only NCT6776F for now, so we know that this is a 13 bit
1038                  * register
1039                  */
1040                 if (!val) {
1041                         val = 0xff1f;
1042                 } else {
1043                         if (val > 1350000U)
1044                                 val = 135000U;
1045                         val = 1350000U / val;
1046                         val = (val & 0x1f) | ((val << 3) & 0xff00);
1047                 }
1048                 data->fan_min[nr] = val;
1049                 goto done;      /* Leave fan divider alone */
1050         }
1051         if (!val) {
1052                 /* No min limit, alarm disabled */
1053                 data->fan_min[nr] = 255;
1054                 new_div = data->fan_div[nr]; /* No change */
1055                 dev_info(dev, "fan%u low limit and alarm disabled\n", nr + 1);
1056         } else if ((reg = 1350000U / val) >= 128 * 255) {
1057                 /* Speed below this value cannot possibly be represented,
1058                    even with the highest divider (128) */
1059                 data->fan_min[nr] = 254;
1060                 new_div = 7; /* 128 == (1 << 7) */
1061                 dev_warn(dev, "fan%u low limit %lu below minimum %u, set to "
1062                          "minimum\n", nr + 1, val,
1063                          data->fan_from_reg_min(254, 7));
1064         } else if (!reg) {
1065                 /* Speed above this value cannot possibly be represented,
1066                    even with the lowest divider (1) */
1067                 data->fan_min[nr] = 1;
1068                 new_div = 0; /* 1 == (1 << 0) */
1069                 dev_warn(dev, "fan%u low limit %lu above maximum %u, set to "
1070                          "maximum\n", nr + 1, val,
1071                          data->fan_from_reg_min(1, 0));
1072         } else {
1073                 /* Automatically pick the best divider, i.e. the one such
1074                    that the min limit will correspond to a register value
1075                    in the 96..192 range */
1076                 new_div = 0;
1077                 while (reg > 192 && new_div < 7) {
1078                         reg >>= 1;
1079                         new_div++;
1080                 }
1081                 data->fan_min[nr] = reg;
1082         }
1083
1084         /* Write both the fan clock divider (if it changed) and the new
1085            fan min (unconditionally) */
1086         if (new_div != data->fan_div[nr]) {
1087                 dev_dbg(dev, "fan%u clock divider changed from %u to %u\n",
1088                         nr + 1, div_from_reg(data->fan_div[nr]),
1089                         div_from_reg(new_div));
1090                 data->fan_div[nr] = new_div;
1091                 w83627ehf_write_fan_div_common(dev, data, nr);
1092                 /* Give the chip time to sample a new speed value */
1093                 data->last_updated = jiffies;
1094         }
1095 done:
1096         w83627ehf_write_value(data, data->REG_FAN_MIN[nr],
1097                               data->fan_min[nr]);
1098         mutex_unlock(&data->update_lock);
1099
1100         return count;
1101 }
1102
1103 static struct sensor_device_attribute sda_fan_input[] = {
1104         SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
1105         SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
1106         SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
1107         SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
1108         SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
1109 };
1110
1111 static struct sensor_device_attribute sda_fan_alarm[] = {
1112         SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6),
1113         SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7),
1114         SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11),
1115         SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 10),
1116         SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 23),
1117 };
1118
1119 static struct sensor_device_attribute sda_fan_min[] = {
1120         SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
1121                     store_fan_min, 0),
1122         SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
1123                     store_fan_min, 1),
1124         SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
1125                     store_fan_min, 2),
1126         SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
1127                     store_fan_min, 3),
1128         SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min,
1129                     store_fan_min, 4),
1130 };
1131
1132 static struct sensor_device_attribute sda_fan_div[] = {
1133         SENSOR_ATTR(fan1_div, S_IRUGO, show_fan_div, NULL, 0),
1134         SENSOR_ATTR(fan2_div, S_IRUGO, show_fan_div, NULL, 1),
1135         SENSOR_ATTR(fan3_div, S_IRUGO, show_fan_div, NULL, 2),
1136         SENSOR_ATTR(fan4_div, S_IRUGO, show_fan_div, NULL, 3),
1137         SENSOR_ATTR(fan5_div, S_IRUGO, show_fan_div, NULL, 4),
1138 };
1139
1140 static ssize_t
1141 show_temp_label(struct device *dev, struct device_attribute *attr, char *buf)
1142 {
1143         struct w83627ehf_data *data = w83627ehf_update_device(dev);
1144         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1145         int nr = sensor_attr->index;
1146         return sprintf(buf, "%s\n", data->temp_label[data->temp_src[nr]]);
1147 }
1148
1149 #define show_temp_reg(addr, reg) \
1150 static ssize_t \
1151 show_##reg(struct device *dev, struct device_attribute *attr, \
1152            char *buf) \
1153 { \
1154         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1155         struct sensor_device_attribute *sensor_attr = \
1156                 to_sensor_dev_attr(attr); \
1157         int nr = sensor_attr->index; \
1158         return sprintf(buf, "%d\n", \
1159                        temp_from_reg(data->addr[nr], data->reg[nr])); \
1160 }
1161 show_temp_reg(reg_temp, temp);
1162 show_temp_reg(reg_temp_over, temp_max);
1163 show_temp_reg(reg_temp_hyst, temp_max_hyst);
1164
1165 #define store_temp_reg(addr, reg) \
1166 static ssize_t \
1167 store_##reg(struct device *dev, struct device_attribute *attr, \
1168             const char *buf, size_t count) \
1169 { \
1170         struct w83627ehf_data *data = dev_get_drvdata(dev); \
1171         struct sensor_device_attribute *sensor_attr = \
1172                 to_sensor_dev_attr(attr); \
1173         int nr = sensor_attr->index; \
1174         int err; \
1175         long val; \
1176         err = strict_strtol(buf, 10, &val); \
1177         if (err < 0) \
1178                 return err; \
1179         mutex_lock(&data->update_lock); \
1180         data->reg[nr] = temp_to_reg(data->addr[nr], val); \
1181         w83627ehf_write_value(data, data->addr[nr], \
1182                               data->reg[nr]); \
1183         mutex_unlock(&data->update_lock); \
1184         return count; \
1185 }
1186 store_temp_reg(reg_temp_over, temp_max);
1187 store_temp_reg(reg_temp_hyst, temp_max_hyst);
1188
1189 static ssize_t
1190 show_temp_type(struct device *dev, struct device_attribute *attr, char *buf)
1191 {
1192         struct w83627ehf_data *data = w83627ehf_update_device(dev);
1193         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1194         int nr = sensor_attr->index;
1195         return sprintf(buf, "%d\n", (int)data->temp_type[nr]);
1196 }
1197
1198 static struct sensor_device_attribute sda_temp_input[] = {
1199         SENSOR_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0),
1200         SENSOR_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1),
1201         SENSOR_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2),
1202         SENSOR_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3),
1203         SENSOR_ATTR(temp5_input, S_IRUGO, show_temp, NULL, 4),
1204         SENSOR_ATTR(temp6_input, S_IRUGO, show_temp, NULL, 5),
1205         SENSOR_ATTR(temp7_input, S_IRUGO, show_temp, NULL, 6),
1206         SENSOR_ATTR(temp8_input, S_IRUGO, show_temp, NULL, 7),
1207         SENSOR_ATTR(temp9_input, S_IRUGO, show_temp, NULL, 8),
1208 };
1209
1210 static struct sensor_device_attribute sda_temp_label[] = {
1211         SENSOR_ATTR(temp1_label, S_IRUGO, show_temp_label, NULL, 0),
1212         SENSOR_ATTR(temp2_label, S_IRUGO, show_temp_label, NULL, 1),
1213         SENSOR_ATTR(temp3_label, S_IRUGO, show_temp_label, NULL, 2),
1214         SENSOR_ATTR(temp4_label, S_IRUGO, show_temp_label, NULL, 3),
1215         SENSOR_ATTR(temp5_label, S_IRUGO, show_temp_label, NULL, 4),
1216         SENSOR_ATTR(temp6_label, S_IRUGO, show_temp_label, NULL, 5),
1217         SENSOR_ATTR(temp7_label, S_IRUGO, show_temp_label, NULL, 6),
1218         SENSOR_ATTR(temp8_label, S_IRUGO, show_temp_label, NULL, 7),
1219         SENSOR_ATTR(temp9_label, S_IRUGO, show_temp_label, NULL, 8),
1220 };
1221
1222 static struct sensor_device_attribute sda_temp_max[] = {
1223         SENSOR_ATTR(temp1_max, S_IRUGO | S_IWUSR, show_temp_max,
1224                     store_temp_max, 0),
1225         SENSOR_ATTR(temp2_max, S_IRUGO | S_IWUSR, show_temp_max,
1226                     store_temp_max, 1),
1227         SENSOR_ATTR(temp3_max, S_IRUGO | S_IWUSR, show_temp_max,
1228                     store_temp_max, 2),
1229         SENSOR_ATTR(temp4_max, S_IRUGO | S_IWUSR, show_temp_max,
1230                     store_temp_max, 3),
1231         SENSOR_ATTR(temp5_max, S_IRUGO | S_IWUSR, show_temp_max,
1232                     store_temp_max, 4),
1233         SENSOR_ATTR(temp6_max, S_IRUGO | S_IWUSR, show_temp_max,
1234                     store_temp_max, 5),
1235         SENSOR_ATTR(temp7_max, S_IRUGO | S_IWUSR, show_temp_max,
1236                     store_temp_max, 6),
1237         SENSOR_ATTR(temp8_max, S_IRUGO | S_IWUSR, show_temp_max,
1238                     store_temp_max, 7),
1239         SENSOR_ATTR(temp9_max, S_IRUGO | S_IWUSR, show_temp_max,
1240                     store_temp_max, 8),
1241 };
1242
1243 static struct sensor_device_attribute sda_temp_max_hyst[] = {
1244         SENSOR_ATTR(temp1_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1245                     store_temp_max_hyst, 0),
1246         SENSOR_ATTR(temp2_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1247                     store_temp_max_hyst, 1),
1248         SENSOR_ATTR(temp3_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1249                     store_temp_max_hyst, 2),
1250         SENSOR_ATTR(temp4_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1251                     store_temp_max_hyst, 3),
1252         SENSOR_ATTR(temp5_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1253                     store_temp_max_hyst, 4),
1254         SENSOR_ATTR(temp6_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1255                     store_temp_max_hyst, 5),
1256         SENSOR_ATTR(temp7_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1257                     store_temp_max_hyst, 6),
1258         SENSOR_ATTR(temp8_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1259                     store_temp_max_hyst, 7),
1260         SENSOR_ATTR(temp9_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1261                     store_temp_max_hyst, 8),
1262 };
1263
1264 static struct sensor_device_attribute sda_temp_alarm[] = {
1265         SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4),
1266         SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5),
1267         SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
1268 };
1269
1270 static struct sensor_device_attribute sda_temp_type[] = {
1271         SENSOR_ATTR(temp1_type, S_IRUGO, show_temp_type, NULL, 0),
1272         SENSOR_ATTR(temp2_type, S_IRUGO, show_temp_type, NULL, 1),
1273         SENSOR_ATTR(temp3_type, S_IRUGO, show_temp_type, NULL, 2),
1274 };
1275
1276 #define show_pwm_reg(reg) \
1277 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1278                           char *buf) \
1279 { \
1280         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1281         struct sensor_device_attribute *sensor_attr = \
1282                 to_sensor_dev_attr(attr); \
1283         int nr = sensor_attr->index; \
1284         return sprintf(buf, "%d\n", data->reg[nr]); \
1285 }
1286
1287 show_pwm_reg(pwm_mode)
1288 show_pwm_reg(pwm_enable)
1289 show_pwm_reg(pwm)
1290
1291 static ssize_t
1292 store_pwm_mode(struct device *dev, struct device_attribute *attr,
1293                         const char *buf, size_t count)
1294 {
1295         struct w83627ehf_data *data = dev_get_drvdata(dev);
1296         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1297         int nr = sensor_attr->index;
1298         unsigned long val;
1299         int err;
1300         u16 reg;
1301
1302         err = strict_strtoul(buf, 10, &val);
1303         if (err < 0)
1304                 return err;
1305
1306         if (val > 1)
1307                 return -EINVAL;
1308         mutex_lock(&data->update_lock);
1309         reg = w83627ehf_read_value(data, W83627EHF_REG_PWM_ENABLE[nr]);
1310         data->pwm_mode[nr] = val;
1311         reg &= ~(1 << W83627EHF_PWM_MODE_SHIFT[nr]);
1312         if (!val)
1313                 reg |= 1 << W83627EHF_PWM_MODE_SHIFT[nr];
1314         w83627ehf_write_value(data, W83627EHF_REG_PWM_ENABLE[nr], reg);
1315         mutex_unlock(&data->update_lock);
1316         return count;
1317 }
1318
1319 static ssize_t
1320 store_pwm(struct device *dev, struct device_attribute *attr,
1321                         const char *buf, size_t count)
1322 {
1323         struct w83627ehf_data *data = dev_get_drvdata(dev);
1324         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1325         int nr = sensor_attr->index;
1326         unsigned long val;
1327         int err;
1328
1329         err = strict_strtoul(buf, 10, &val);
1330         if (err < 0)
1331                 return err;
1332
1333         val = SENSORS_LIMIT(val, 0, 255);
1334
1335         mutex_lock(&data->update_lock);
1336         data->pwm[nr] = val;
1337         w83627ehf_write_value(data, data->REG_PWM[nr], val);
1338         mutex_unlock(&data->update_lock);
1339         return count;
1340 }
1341
1342 static ssize_t
1343 store_pwm_enable(struct device *dev, struct device_attribute *attr,
1344                         const char *buf, size_t count)
1345 {
1346         struct w83627ehf_data *data = dev_get_drvdata(dev);
1347         struct w83627ehf_sio_data *sio_data = dev->platform_data;
1348         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1349         int nr = sensor_attr->index;
1350         unsigned long val;
1351         int err;
1352         u16 reg;
1353
1354         err = strict_strtoul(buf, 10, &val);
1355         if (err < 0)
1356                 return err;
1357
1358         if (!val || (val > 4 && val != data->pwm_enable_orig[nr]))
1359                 return -EINVAL;
1360         /* SmartFan III mode is not supported on NCT6776F */
1361         if (sio_data->kind == nct6776 && val == 4)
1362                 return -EINVAL;
1363
1364         mutex_lock(&data->update_lock);
1365         data->pwm_enable[nr] = val;
1366         if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
1367                 reg = w83627ehf_read_value(data,
1368                                            NCT6775_REG_FAN_MODE[nr]);
1369                 reg &= 0x0f;
1370                 reg |= (val - 1) << 4;
1371                 w83627ehf_write_value(data,
1372                                       NCT6775_REG_FAN_MODE[nr], reg);
1373         } else {
1374                 reg = w83627ehf_read_value(data, W83627EHF_REG_PWM_ENABLE[nr]);
1375                 reg &= ~(0x03 << W83627EHF_PWM_ENABLE_SHIFT[nr]);
1376                 reg |= (val - 1) << W83627EHF_PWM_ENABLE_SHIFT[nr];
1377                 w83627ehf_write_value(data, W83627EHF_REG_PWM_ENABLE[nr], reg);
1378         }
1379         mutex_unlock(&data->update_lock);
1380         return count;
1381 }
1382
1383
1384 #define show_tol_temp(reg) \
1385 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1386                                 char *buf) \
1387 { \
1388         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1389         struct sensor_device_attribute *sensor_attr = \
1390                 to_sensor_dev_attr(attr); \
1391         int nr = sensor_attr->index; \
1392         return sprintf(buf, "%d\n", data->reg[nr] * 1000); \
1393 }
1394
1395 show_tol_temp(tolerance)
1396 show_tol_temp(target_temp)
1397
1398 static ssize_t
1399 store_target_temp(struct device *dev, struct device_attribute *attr,
1400                         const char *buf, size_t count)
1401 {
1402         struct w83627ehf_data *data = dev_get_drvdata(dev);
1403         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1404         int nr = sensor_attr->index;
1405         long val;
1406         int err;
1407
1408         err = strict_strtol(buf, 10, &val);
1409         if (err < 0)
1410                 return err;
1411
1412         val = SENSORS_LIMIT(DIV_ROUND_CLOSEST(val, 1000), 0, 127);
1413
1414         mutex_lock(&data->update_lock);
1415         data->target_temp[nr] = val;
1416         w83627ehf_write_value(data, data->REG_TARGET[nr], val);
1417         mutex_unlock(&data->update_lock);
1418         return count;
1419 }
1420
1421 static ssize_t
1422 store_tolerance(struct device *dev, struct device_attribute *attr,
1423                         const char *buf, size_t count)
1424 {
1425         struct w83627ehf_data *data = dev_get_drvdata(dev);
1426         struct w83627ehf_sio_data *sio_data = dev->platform_data;
1427         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1428         int nr = sensor_attr->index;
1429         u16 reg;
1430         long val;
1431         int err;
1432
1433         err = strict_strtol(buf, 10, &val);
1434         if (err < 0)
1435                 return err;
1436
1437         /* Limit the temp to 0C - 15C */
1438         val = SENSORS_LIMIT(DIV_ROUND_CLOSEST(val, 1000), 0, 15);
1439
1440         mutex_lock(&data->update_lock);
1441         if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
1442                 /* Limit tolerance further for NCT6776F */
1443                 if (sio_data->kind == nct6776 && val > 7)
1444                         val = 7;
1445                 reg = w83627ehf_read_value(data, NCT6775_REG_FAN_MODE[nr]);
1446                 reg = (reg & 0xf0) | val;
1447                 w83627ehf_write_value(data, NCT6775_REG_FAN_MODE[nr], reg);
1448         } else {
1449                 reg = w83627ehf_read_value(data, W83627EHF_REG_TOLERANCE[nr]);
1450                 if (nr == 1)
1451                         reg = (reg & 0x0f) | (val << 4);
1452                 else
1453                         reg = (reg & 0xf0) | val;
1454                 w83627ehf_write_value(data, W83627EHF_REG_TOLERANCE[nr], reg);
1455         }
1456         data->tolerance[nr] = val;
1457         mutex_unlock(&data->update_lock);
1458         return count;
1459 }
1460
1461 static struct sensor_device_attribute sda_pwm[] = {
1462         SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 0),
1463         SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 1),
1464         SENSOR_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 2),
1465         SENSOR_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 3),
1466 };
1467
1468 static struct sensor_device_attribute sda_pwm_mode[] = {
1469         SENSOR_ATTR(pwm1_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1470                     store_pwm_mode, 0),
1471         SENSOR_ATTR(pwm2_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1472                     store_pwm_mode, 1),
1473         SENSOR_ATTR(pwm3_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1474                     store_pwm_mode, 2),
1475         SENSOR_ATTR(pwm4_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1476                     store_pwm_mode, 3),
1477 };
1478
1479 static struct sensor_device_attribute sda_pwm_enable[] = {
1480         SENSOR_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1481                     store_pwm_enable, 0),
1482         SENSOR_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1483                     store_pwm_enable, 1),
1484         SENSOR_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1485                     store_pwm_enable, 2),
1486         SENSOR_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1487                     store_pwm_enable, 3),
1488 };
1489
1490 static struct sensor_device_attribute sda_target_temp[] = {
1491         SENSOR_ATTR(pwm1_target, S_IWUSR | S_IRUGO, show_target_temp,
1492                     store_target_temp, 0),
1493         SENSOR_ATTR(pwm2_target, S_IWUSR | S_IRUGO, show_target_temp,
1494                     store_target_temp, 1),
1495         SENSOR_ATTR(pwm3_target, S_IWUSR | S_IRUGO, show_target_temp,
1496                     store_target_temp, 2),
1497         SENSOR_ATTR(pwm4_target, S_IWUSR | S_IRUGO, show_target_temp,
1498                     store_target_temp, 3),
1499 };
1500
1501 static struct sensor_device_attribute sda_tolerance[] = {
1502         SENSOR_ATTR(pwm1_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1503                     store_tolerance, 0),
1504         SENSOR_ATTR(pwm2_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1505                     store_tolerance, 1),
1506         SENSOR_ATTR(pwm3_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1507                     store_tolerance, 2),
1508         SENSOR_ATTR(pwm4_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1509                     store_tolerance, 3),
1510 };
1511
1512 /* Smart Fan registers */
1513
1514 #define fan_functions(reg, REG) \
1515 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1516                        char *buf) \
1517 { \
1518         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1519         struct sensor_device_attribute *sensor_attr = \
1520                 to_sensor_dev_attr(attr); \
1521         int nr = sensor_attr->index; \
1522         return sprintf(buf, "%d\n", data->reg[nr]); \
1523 } \
1524 static ssize_t \
1525 store_##reg(struct device *dev, struct device_attribute *attr, \
1526                             const char *buf, size_t count) \
1527 { \
1528         struct w83627ehf_data *data = dev_get_drvdata(dev); \
1529         struct sensor_device_attribute *sensor_attr = \
1530                 to_sensor_dev_attr(attr); \
1531         int nr = sensor_attr->index; \
1532         unsigned long val; \
1533         int err; \
1534         err = strict_strtoul(buf, 10, &val); \
1535         if (err < 0) \
1536                 return err; \
1537         val = SENSORS_LIMIT(val, 1, 255); \
1538         mutex_lock(&data->update_lock); \
1539         data->reg[nr] = val; \
1540         w83627ehf_write_value(data, data->REG_##REG[nr], val); \
1541         mutex_unlock(&data->update_lock); \
1542         return count; \
1543 }
1544
1545 fan_functions(fan_start_output, FAN_START_OUTPUT)
1546 fan_functions(fan_stop_output, FAN_STOP_OUTPUT)
1547 fan_functions(fan_max_output, FAN_MAX_OUTPUT)
1548 fan_functions(fan_step_output, FAN_STEP_OUTPUT)
1549
1550 #define fan_time_functions(reg, REG) \
1551 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1552                                 char *buf) \
1553 { \
1554         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1555         struct sensor_device_attribute *sensor_attr = \
1556                 to_sensor_dev_attr(attr); \
1557         int nr = sensor_attr->index; \
1558         return sprintf(buf, "%d\n", \
1559                         step_time_from_reg(data->reg[nr], \
1560                                            data->pwm_mode[nr])); \
1561 } \
1562 \
1563 static ssize_t \
1564 store_##reg(struct device *dev, struct device_attribute *attr, \
1565                         const char *buf, size_t count) \
1566 { \
1567         struct w83627ehf_data *data = dev_get_drvdata(dev); \
1568         struct sensor_device_attribute *sensor_attr = \
1569                 to_sensor_dev_attr(attr); \
1570         int nr = sensor_attr->index; \
1571         unsigned long val; \
1572         int err; \
1573         err = strict_strtoul(buf, 10, &val); \
1574         if (err < 0) \
1575                 return err; \
1576         val = step_time_to_reg(val, data->pwm_mode[nr]); \
1577         mutex_lock(&data->update_lock); \
1578         data->reg[nr] = val; \
1579         w83627ehf_write_value(data, W83627EHF_REG_##REG[nr], val); \
1580         mutex_unlock(&data->update_lock); \
1581         return count; \
1582 } \
1583
1584 fan_time_functions(fan_stop_time, FAN_STOP_TIME)
1585
1586 static ssize_t show_name(struct device *dev, struct device_attribute *attr,
1587                          char *buf)
1588 {
1589         struct w83627ehf_data *data = dev_get_drvdata(dev);
1590
1591         return sprintf(buf, "%s\n", data->name);
1592 }
1593 static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
1594
1595 static struct sensor_device_attribute sda_sf3_arrays_fan4[] = {
1596         SENSOR_ATTR(pwm4_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1597                     store_fan_stop_time, 3),
1598         SENSOR_ATTR(pwm4_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1599                     store_fan_start_output, 3),
1600         SENSOR_ATTR(pwm4_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1601                     store_fan_stop_output, 3),
1602         SENSOR_ATTR(pwm4_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1603                     store_fan_max_output, 3),
1604         SENSOR_ATTR(pwm4_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1605                     store_fan_step_output, 3),
1606 };
1607
1608 static struct sensor_device_attribute sda_sf3_arrays[] = {
1609         SENSOR_ATTR(pwm1_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1610                     store_fan_stop_time, 0),
1611         SENSOR_ATTR(pwm2_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1612                     store_fan_stop_time, 1),
1613         SENSOR_ATTR(pwm3_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1614                     store_fan_stop_time, 2),
1615         SENSOR_ATTR(pwm1_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1616                     store_fan_start_output, 0),
1617         SENSOR_ATTR(pwm2_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1618                     store_fan_start_output, 1),
1619         SENSOR_ATTR(pwm3_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1620                     store_fan_start_output, 2),
1621         SENSOR_ATTR(pwm1_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1622                     store_fan_stop_output, 0),
1623         SENSOR_ATTR(pwm2_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1624                     store_fan_stop_output, 1),
1625         SENSOR_ATTR(pwm3_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1626                     store_fan_stop_output, 2),
1627 };
1628
1629
1630 /*
1631  * pwm1 and pwm3 don't support max and step settings on all chips.
1632  * Need to check support while generating/removing attribute files.
1633  */
1634 static struct sensor_device_attribute sda_sf3_max_step_arrays[] = {
1635         SENSOR_ATTR(pwm1_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1636                     store_fan_max_output, 0),
1637         SENSOR_ATTR(pwm1_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1638                     store_fan_step_output, 0),
1639         SENSOR_ATTR(pwm2_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1640                     store_fan_max_output, 1),
1641         SENSOR_ATTR(pwm2_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1642                     store_fan_step_output, 1),
1643         SENSOR_ATTR(pwm3_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1644                     store_fan_max_output, 2),
1645         SENSOR_ATTR(pwm3_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1646                     store_fan_step_output, 2),
1647 };
1648
1649 static ssize_t
1650 show_vid(struct device *dev, struct device_attribute *attr, char *buf)
1651 {
1652         struct w83627ehf_data *data = dev_get_drvdata(dev);
1653         return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
1654 }
1655 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL);
1656
1657 /*
1658  * Driver and device management
1659  */
1660
1661 static void w83627ehf_device_remove_files(struct device *dev)
1662 {
1663         /* some entries in the following arrays may not have been used in
1664          * device_create_file(), but device_remove_file() will ignore them */
1665         int i;
1666         struct w83627ehf_data *data = dev_get_drvdata(dev);
1667
1668         for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++)
1669                 device_remove_file(dev, &sda_sf3_arrays[i].dev_attr);
1670         for (i = 0; i < ARRAY_SIZE(sda_sf3_max_step_arrays); i++) {
1671                 struct sensor_device_attribute *attr =
1672                   &sda_sf3_max_step_arrays[i];
1673                 if (data->REG_FAN_STEP_OUTPUT &&
1674                     data->REG_FAN_STEP_OUTPUT[attr->index] != 0xff)
1675                         device_remove_file(dev, &attr->dev_attr);
1676         }
1677         for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan4); i++)
1678                 device_remove_file(dev, &sda_sf3_arrays_fan4[i].dev_attr);
1679         for (i = 0; i < data->in_num; i++) {
1680                 if ((i == 6) && data->in6_skip)
1681                         continue;
1682                 device_remove_file(dev, &sda_in_input[i].dev_attr);
1683                 device_remove_file(dev, &sda_in_alarm[i].dev_attr);
1684                 device_remove_file(dev, &sda_in_min[i].dev_attr);
1685                 device_remove_file(dev, &sda_in_max[i].dev_attr);
1686         }
1687         for (i = 0; i < 5; i++) {
1688                 device_remove_file(dev, &sda_fan_input[i].dev_attr);
1689                 device_remove_file(dev, &sda_fan_alarm[i].dev_attr);
1690                 device_remove_file(dev, &sda_fan_div[i].dev_attr);
1691                 device_remove_file(dev, &sda_fan_min[i].dev_attr);
1692         }
1693         for (i = 0; i < data->pwm_num; i++) {
1694                 device_remove_file(dev, &sda_pwm[i].dev_attr);
1695                 device_remove_file(dev, &sda_pwm_mode[i].dev_attr);
1696                 device_remove_file(dev, &sda_pwm_enable[i].dev_attr);
1697                 device_remove_file(dev, &sda_target_temp[i].dev_attr);
1698                 device_remove_file(dev, &sda_tolerance[i].dev_attr);
1699         }
1700         for (i = 0; i < NUM_REG_TEMP; i++) {
1701                 if (!(data->have_temp & (1 << i)))
1702                         continue;
1703                 device_remove_file(dev, &sda_temp_input[i].dev_attr);
1704                 device_remove_file(dev, &sda_temp_label[i].dev_attr);
1705                 device_remove_file(dev, &sda_temp_max[i].dev_attr);
1706                 device_remove_file(dev, &sda_temp_max_hyst[i].dev_attr);
1707                 if (i > 2)
1708                         continue;
1709                 device_remove_file(dev, &sda_temp_alarm[i].dev_attr);
1710                 device_remove_file(dev, &sda_temp_type[i].dev_attr);
1711         }
1712
1713         device_remove_file(dev, &dev_attr_name);
1714         device_remove_file(dev, &dev_attr_cpu0_vid);
1715 }
1716
1717 /* Get the monitoring functions started */
1718 static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data)
1719 {
1720         int i;
1721         u8 tmp, diode;
1722
1723         /* Start monitoring is needed */
1724         tmp = w83627ehf_read_value(data, W83627EHF_REG_CONFIG);
1725         if (!(tmp & 0x01))
1726                 w83627ehf_write_value(data, W83627EHF_REG_CONFIG,
1727                                       tmp | 0x01);
1728
1729         /* Enable temperature sensors if needed */
1730         for (i = 0; i < NUM_REG_TEMP; i++) {
1731                 if (!(data->have_temp & (1 << i)))
1732                         continue;
1733                 if (!data->reg_temp_config[i])
1734                         continue;
1735                 tmp = w83627ehf_read_value(data,
1736                                            data->reg_temp_config[i]);
1737                 if (tmp & 0x01)
1738                         w83627ehf_write_value(data,
1739                                               data->reg_temp_config[i],
1740                                               tmp & 0xfe);
1741         }
1742
1743         /* Enable VBAT monitoring if needed */
1744         tmp = w83627ehf_read_value(data, W83627EHF_REG_VBAT);
1745         if (!(tmp & 0x01))
1746                 w83627ehf_write_value(data, W83627EHF_REG_VBAT, tmp | 0x01);
1747
1748         /* Get thermal sensor types */
1749         diode = w83627ehf_read_value(data, W83627EHF_REG_DIODE);
1750         for (i = 0; i < 3; i++) {
1751                 if ((tmp & (0x02 << i)))
1752                         data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 2;
1753                 else
1754                         data->temp_type[i] = 4; /* thermistor */
1755         }
1756 }
1757
1758 static void w82627ehf_swap_tempreg(struct w83627ehf_data *data,
1759                                    int r1, int r2)
1760 {
1761         u16 tmp;
1762
1763         tmp = data->temp_src[r1];
1764         data->temp_src[r1] = data->temp_src[r2];
1765         data->temp_src[r2] = tmp;
1766
1767         tmp = data->reg_temp[r1];
1768         data->reg_temp[r1] = data->reg_temp[r2];
1769         data->reg_temp[r2] = tmp;
1770
1771         tmp = data->reg_temp_over[r1];
1772         data->reg_temp_over[r1] = data->reg_temp_over[r2];
1773         data->reg_temp_over[r2] = tmp;
1774
1775         tmp = data->reg_temp_hyst[r1];
1776         data->reg_temp_hyst[r1] = data->reg_temp_hyst[r2];
1777         data->reg_temp_hyst[r2] = tmp;
1778
1779         tmp = data->reg_temp_config[r1];
1780         data->reg_temp_config[r1] = data->reg_temp_config[r2];
1781         data->reg_temp_config[r2] = tmp;
1782 }
1783
1784 static int __devinit w83627ehf_probe(struct platform_device *pdev)
1785 {
1786         struct device *dev = &pdev->dev;
1787         struct w83627ehf_sio_data *sio_data = dev->platform_data;
1788         struct w83627ehf_data *data;
1789         struct resource *res;
1790         u8 fan3pin, fan4pin, fan4min, fan5pin, en_vrm10;
1791         int i, err = 0;
1792
1793         res = platform_get_resource(pdev, IORESOURCE_IO, 0);
1794         if (!request_region(res->start, IOREGION_LENGTH, DRVNAME)) {
1795                 err = -EBUSY;
1796                 dev_err(dev, "Failed to request region 0x%lx-0x%lx\n",
1797                         (unsigned long)res->start,
1798                         (unsigned long)res->start + IOREGION_LENGTH - 1);
1799                 goto exit;
1800         }
1801
1802         data = kzalloc(sizeof(struct w83627ehf_data), GFP_KERNEL);
1803         if (!data) {
1804                 err = -ENOMEM;
1805                 goto exit_release;
1806         }
1807
1808         data->addr = res->start;
1809         mutex_init(&data->lock);
1810         mutex_init(&data->update_lock);
1811         data->name = w83627ehf_device_names[sio_data->kind];
1812         platform_set_drvdata(pdev, data);
1813
1814         /* 627EHG and 627EHF have 10 voltage inputs; 627DHG and 667HG have 9 */
1815         data->in_num = (sio_data->kind == w83627ehf) ? 10 : 9;
1816         /* 667HG, NCT6775F, and NCT6776F have 3 pwms */
1817         data->pwm_num = (sio_data->kind == w83667hg
1818                          || sio_data->kind == w83667hg_b
1819                          || sio_data->kind == nct6775
1820                          || sio_data->kind == nct6776) ? 3 : 4;
1821
1822         data->have_temp = 0x07;
1823         /* Check temp3 configuration bit for 667HG */
1824         if (sio_data->kind == w83667hg) {
1825                 u8 reg;
1826
1827                 reg = w83627ehf_read_value(data, W83627EHF_REG_TEMP_CONFIG[2]);
1828                 if (reg & 0x01)
1829                         data->have_temp &= ~(1 << 2);
1830                 else
1831                         data->in6_skip = 1;     /* either temp3 or in6 */
1832         }
1833
1834         /* Deal with temperature register setup first. */
1835         if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
1836                 int mask = 0;
1837
1838                 /*
1839                  * Display temperature sensor output only if it monitors
1840                  * a source other than one already reported. Always display
1841                  * first three temperature registers, though.
1842                  */
1843                 for (i = 0; i < NUM_REG_TEMP; i++) {
1844                         u8 src;
1845
1846                         data->reg_temp[i] = NCT6775_REG_TEMP[i];
1847                         data->reg_temp_over[i] = NCT6775_REG_TEMP_OVER[i];
1848                         data->reg_temp_hyst[i] = NCT6775_REG_TEMP_HYST[i];
1849                         data->reg_temp_config[i] = NCT6775_REG_TEMP_CONFIG[i];
1850
1851                         src = w83627ehf_read_value(data,
1852                                                    NCT6775_REG_TEMP_SOURCE[i]);
1853                         src &= 0x1f;
1854                         if (src && !(mask & (1 << src))) {
1855                                 data->have_temp |= 1 << i;
1856                                 mask |= 1 << src;
1857                         }
1858
1859                         data->temp_src[i] = src;
1860
1861                         /*
1862                          * Now do some register swapping if index 0..2 don't
1863                          * point to SYSTIN(1), CPUIN(2), and AUXIN(3).
1864                          * Idea is to have the first three attributes
1865                          * report SYSTIN, CPUIN, and AUXIN if possible
1866                          * without overriding the basic system configuration.
1867                          */
1868                         if (i > 0 && data->temp_src[0] != 1
1869                             && data->temp_src[i] == 1)
1870                                 w82627ehf_swap_tempreg(data, 0, i);
1871                         if (i > 1 && data->temp_src[1] != 2
1872                             && data->temp_src[i] == 2)
1873                                 w82627ehf_swap_tempreg(data, 1, i);
1874                         if (i > 2 && data->temp_src[2] != 3
1875                             && data->temp_src[i] == 3)
1876                                 w82627ehf_swap_tempreg(data, 2, i);
1877                 }
1878                 if (sio_data->kind == nct6776) {
1879                         /*
1880                          * On NCT6776, AUXTIN and VIN3 pins are shared.
1881                          * Only way to detect it is to check if AUXTIN is used
1882                          * as a temperature source, and if that source is
1883                          * enabled.
1884                          *
1885                          * If that is the case, disable in6, which reports VIN3.
1886                          * Otherwise disable temp3.
1887                          */
1888                         if (data->temp_src[2] == 3) {
1889                                 u8 reg;
1890
1891                                 if (data->reg_temp_config[2])
1892                                         reg = w83627ehf_read_value(data,
1893                                                 data->reg_temp_config[2]);
1894                                 else
1895                                         reg = 0; /* Assume AUXTIN is used */
1896
1897                                 if (reg & 0x01)
1898                                         data->have_temp &= ~(1 << 2);
1899                                 else
1900                                         data->in6_skip = 1;
1901                         }
1902                         data->temp_label = nct6776_temp_label;
1903                 } else {
1904                         data->temp_label = nct6775_temp_label;
1905                 }
1906         } else if (sio_data->kind == w83667hg_b) {
1907                 u8 reg;
1908
1909                 /*
1910                  * Temperature sources are selected with bank 0, registers 0x49
1911                  * and 0x4a.
1912                  */
1913                 for (i = 0; i < ARRAY_SIZE(W83627EHF_REG_TEMP); i++) {
1914                         data->reg_temp[i] = W83627EHF_REG_TEMP[i];
1915                         data->reg_temp_over[i] = W83627EHF_REG_TEMP_OVER[i];
1916                         data->reg_temp_hyst[i] = W83627EHF_REG_TEMP_HYST[i];
1917                         data->reg_temp_config[i] = W83627EHF_REG_TEMP_CONFIG[i];
1918                 }
1919                 reg = w83627ehf_read_value(data, 0x4a);
1920                 data->temp_src[0] = reg >> 5;
1921                 reg = w83627ehf_read_value(data, 0x49);
1922                 data->temp_src[1] = reg & 0x07;
1923                 data->temp_src[2] = (reg >> 4) & 0x07;
1924
1925                 /*
1926                  * W83667HG-B has another temperature register at 0x7e.
1927                  * The temperature source is selected with register 0x7d.
1928                  * Support it if the source differs from already reported
1929                  * sources.
1930                  */
1931                 reg = w83627ehf_read_value(data, 0x7d);
1932                 reg &= 0x07;
1933                 if (reg != data->temp_src[0] && reg != data->temp_src[1]
1934                     && reg != data->temp_src[2]) {
1935                         data->temp_src[3] = reg;
1936                         data->have_temp |= 1 << 3;
1937                 }
1938
1939                 /*
1940                  * Chip supports either AUXTIN or VIN3. Try to find out which
1941                  * one.
1942                  */
1943                 reg = w83627ehf_read_value(data, W83627EHF_REG_TEMP_CONFIG[2]);
1944                 if (data->temp_src[2] == 2 && (reg & 0x01))
1945                         data->have_temp &= ~(1 << 2);
1946
1947                 if ((data->temp_src[2] == 2 && (data->have_temp & (1 << 2)))
1948                     || (data->temp_src[3] == 2 && (data->have_temp & (1 << 3))))
1949                         data->in6_skip = 1;
1950
1951                 data->temp_label = w83667hg_b_temp_label;
1952         } else {
1953                 /* Temperature sources are fixed */
1954                 for (i = 0; i < 3; i++) {
1955                         data->reg_temp[i] = W83627EHF_REG_TEMP[i];
1956                         data->reg_temp_over[i] = W83627EHF_REG_TEMP_OVER[i];
1957                         data->reg_temp_hyst[i] = W83627EHF_REG_TEMP_HYST[i];
1958                         data->reg_temp_config[i] = W83627EHF_REG_TEMP_CONFIG[i];
1959                 }
1960         }
1961
1962         if (sio_data->kind == nct6775) {
1963                 data->has_fan_div = true;
1964                 data->fan_from_reg = fan_from_reg16;
1965                 data->fan_from_reg_min = fan_from_reg8;
1966                 data->REG_PWM = NCT6775_REG_PWM;
1967                 data->REG_TARGET = NCT6775_REG_TARGET;
1968                 data->REG_FAN = NCT6775_REG_FAN;
1969                 data->REG_FAN_MIN = W83627EHF_REG_FAN_MIN;
1970                 data->REG_FAN_START_OUTPUT = NCT6775_REG_FAN_START_OUTPUT;
1971                 data->REG_FAN_STOP_OUTPUT = NCT6775_REG_FAN_STOP_OUTPUT;
1972                 data->REG_FAN_STOP_TIME = NCT6775_REG_FAN_STOP_TIME;
1973                 data->REG_FAN_MAX_OUTPUT = NCT6775_REG_FAN_MAX_OUTPUT;
1974                 data->REG_FAN_STEP_OUTPUT = NCT6775_REG_FAN_STEP_OUTPUT;
1975         } else if (sio_data->kind == nct6776) {
1976                 data->has_fan_div = false;
1977                 data->fan_from_reg = fan_from_reg13;
1978                 data->fan_from_reg_min = fan_from_reg13;
1979                 data->REG_PWM = NCT6775_REG_PWM;
1980                 data->REG_TARGET = NCT6775_REG_TARGET;
1981                 data->REG_FAN = NCT6775_REG_FAN;
1982                 data->REG_FAN_MIN = NCT6776_REG_FAN_MIN;
1983                 data->REG_FAN_START_OUTPUT = NCT6775_REG_FAN_START_OUTPUT;
1984                 data->REG_FAN_STOP_OUTPUT = NCT6775_REG_FAN_STOP_OUTPUT;
1985                 data->REG_FAN_STOP_TIME = NCT6775_REG_FAN_STOP_TIME;
1986         } else if (sio_data->kind == w83667hg_b) {
1987                 data->has_fan_div = true;
1988                 data->fan_from_reg = fan_from_reg8;
1989                 data->fan_from_reg_min = fan_from_reg8;
1990                 data->REG_PWM = W83627EHF_REG_PWM;
1991                 data->REG_TARGET = W83627EHF_REG_TARGET;
1992                 data->REG_FAN = W83627EHF_REG_FAN;
1993                 data->REG_FAN_MIN = W83627EHF_REG_FAN_MIN;
1994                 data->REG_FAN_START_OUTPUT = W83627EHF_REG_FAN_START_OUTPUT;
1995                 data->REG_FAN_STOP_OUTPUT = W83627EHF_REG_FAN_STOP_OUTPUT;
1996                 data->REG_FAN_STOP_TIME = W83627EHF_REG_FAN_STOP_TIME;
1997                 data->REG_FAN_MAX_OUTPUT =
1998                   W83627EHF_REG_FAN_MAX_OUTPUT_W83667_B;
1999                 data->REG_FAN_STEP_OUTPUT =
2000                   W83627EHF_REG_FAN_STEP_OUTPUT_W83667_B;
2001         } else {
2002                 data->has_fan_div = true;
2003                 data->fan_from_reg = fan_from_reg8;
2004                 data->fan_from_reg_min = fan_from_reg8;
2005                 data->REG_PWM = W83627EHF_REG_PWM;
2006                 data->REG_TARGET = W83627EHF_REG_TARGET;
2007                 data->REG_FAN = W83627EHF_REG_FAN;
2008                 data->REG_FAN_MIN = W83627EHF_REG_FAN_MIN;
2009                 data->REG_FAN_START_OUTPUT = W83627EHF_REG_FAN_START_OUTPUT;
2010                 data->REG_FAN_STOP_OUTPUT = W83627EHF_REG_FAN_STOP_OUTPUT;
2011                 data->REG_FAN_STOP_TIME = W83627EHF_REG_FAN_STOP_TIME;
2012                 data->REG_FAN_MAX_OUTPUT =
2013                   W83627EHF_REG_FAN_MAX_OUTPUT_COMMON;
2014                 data->REG_FAN_STEP_OUTPUT =
2015                   W83627EHF_REG_FAN_STEP_OUTPUT_COMMON;
2016         }
2017
2018         /* Initialize the chip */
2019         w83627ehf_init_device(data);
2020
2021         data->vrm = vid_which_vrm();
2022         superio_enter(sio_data->sioreg);
2023         /* Read VID value */
2024         if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b ||
2025             sio_data->kind == nct6775 || sio_data->kind == nct6776) {
2026                 /* W83667HG has different pins for VID input and output, so
2027                 we can get the VID input values directly at logical device D
2028                 0xe3. */
2029                 superio_select(sio_data->sioreg, W83667HG_LD_VID);
2030                 data->vid = superio_inb(sio_data->sioreg, 0xe3);
2031                 err = device_create_file(dev, &dev_attr_cpu0_vid);
2032                 if (err)
2033                         goto exit_release;
2034         } else {
2035                 superio_select(sio_data->sioreg, W83627EHF_LD_HWM);
2036                 if (superio_inb(sio_data->sioreg, SIO_REG_VID_CTRL) & 0x80) {
2037                         /* Set VID input sensibility if needed. In theory the
2038                            BIOS should have set it, but in practice it's not
2039                            always the case. We only do it for the W83627EHF/EHG
2040                            because the W83627DHG is more complex in this
2041                            respect. */
2042                         if (sio_data->kind == w83627ehf) {
2043                                 en_vrm10 = superio_inb(sio_data->sioreg,
2044                                                        SIO_REG_EN_VRM10);
2045                                 if ((en_vrm10 & 0x08) && data->vrm == 90) {
2046                                         dev_warn(dev, "Setting VID input "
2047                                                  "voltage to TTL\n");
2048                                         superio_outb(sio_data->sioreg,
2049                                                      SIO_REG_EN_VRM10,
2050                                                      en_vrm10 & ~0x08);
2051                                 } else if (!(en_vrm10 & 0x08)
2052                                            && data->vrm == 100) {
2053                                         dev_warn(dev, "Setting VID input "
2054                                                  "voltage to VRM10\n");
2055                                         superio_outb(sio_data->sioreg,
2056                                                      SIO_REG_EN_VRM10,
2057                                                      en_vrm10 | 0x08);
2058                                 }
2059                         }
2060
2061                         data->vid = superio_inb(sio_data->sioreg,
2062                                                 SIO_REG_VID_DATA);
2063                         if (sio_data->kind == w83627ehf) /* 6 VID pins only */
2064                                 data->vid &= 0x3f;
2065
2066                         err = device_create_file(dev, &dev_attr_cpu0_vid);
2067                         if (err)
2068                                 goto exit_release;
2069                 } else {
2070                         dev_info(dev, "VID pins in output mode, CPU VID not "
2071                                  "available\n");
2072                 }
2073         }
2074
2075         /* fan4 and fan5 share some pins with the GPIO and serial flash */
2076         if (sio_data->kind == nct6775) {
2077                 /* On NCT6775, fan4 shares pins with the fdc interface */
2078                 fan3pin = 1;
2079                 fan4pin = !(superio_inb(sio_data->sioreg, 0x2A) & 0x80);
2080                 fan4min = 0;
2081                 fan5pin = 0;
2082         } else if (sio_data->kind == nct6776) {
2083                 fan3pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x40);
2084                 fan4pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x01);
2085                 fan5pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x02);
2086                 fan4min = fan4pin;
2087         } else if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b) {
2088                 fan3pin = 1;
2089                 fan4pin = superio_inb(sio_data->sioreg, 0x27) & 0x40;
2090                 fan5pin = superio_inb(sio_data->sioreg, 0x27) & 0x20;
2091                 fan4min = fan4pin;
2092         } else {
2093                 fan3pin = 1;
2094                 fan4pin = !(superio_inb(sio_data->sioreg, 0x29) & 0x06);
2095                 fan5pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x02);
2096                 fan4min = fan4pin;
2097         }
2098
2099         if (fan_debounce &&
2100             (sio_data->kind == nct6775 || sio_data->kind == nct6776)) {
2101                 u8 tmp;
2102
2103                 superio_select(sio_data->sioreg, W83627EHF_LD_HWM);
2104                 tmp = superio_inb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE);
2105                 if (sio_data->kind == nct6776)
2106                         superio_outb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE,
2107                                      0x3e | tmp);
2108                 else
2109                         superio_outb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE,
2110                                      0x1e | tmp);
2111                 pr_info("Enabled fan debounce for chip %s\n", data->name);
2112         }
2113
2114         superio_exit(sio_data->sioreg);
2115
2116         /* It looks like fan4 and fan5 pins can be alternatively used
2117            as fan on/off switches, but fan5 control is write only :/
2118            We assume that if the serial interface is disabled, designers
2119            connected fan5 as input unless they are emitting log 1, which
2120            is not the default. */
2121
2122         data->has_fan = data->has_fan_min = 0x03; /* fan1 and fan2 */
2123
2124         data->has_fan |= (fan3pin << 2);
2125         data->has_fan_min |= (fan3pin << 2);
2126
2127         /*
2128          * NCT6775F and NCT6776F don't have the W83627EHF_REG_FANDIV1 register
2129          */
2130         if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
2131                 data->has_fan |= (fan4pin << 3) | (fan5pin << 4);
2132                 data->has_fan_min |= (fan4min << 3) | (fan5pin << 4);
2133         } else {
2134                 i = w83627ehf_read_value(data, W83627EHF_REG_FANDIV1);
2135                 if ((i & (1 << 2)) && fan4pin) {
2136                         data->has_fan |= (1 << 3);
2137                         data->has_fan_min |= (1 << 3);
2138                 }
2139                 if (!(i & (1 << 1)) && fan5pin) {
2140                         data->has_fan |= (1 << 4);
2141                         data->has_fan_min |= (1 << 4);
2142                 }
2143         }
2144
2145         /* Read fan clock dividers immediately */
2146         w83627ehf_update_fan_div_common(dev, data);
2147
2148         /* Read pwm data to save original values */
2149         w83627ehf_update_pwm_common(dev, data);
2150         for (i = 0; i < data->pwm_num; i++)
2151                 data->pwm_enable_orig[i] = data->pwm_enable[i];
2152
2153         /* Read pwm data to save original values */
2154         w83627ehf_update_pwm_common(dev, data);
2155         for (i = 0; i < data->pwm_num; i++)
2156                 data->pwm_enable_orig[i] = data->pwm_enable[i];
2157
2158         /* Register sysfs hooks */
2159         for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++) {
2160                 err = device_create_file(dev, &sda_sf3_arrays[i].dev_attr);
2161                 if (err)
2162                         goto exit_remove;
2163         }
2164
2165         for (i = 0; i < ARRAY_SIZE(sda_sf3_max_step_arrays); i++) {
2166                 struct sensor_device_attribute *attr =
2167                   &sda_sf3_max_step_arrays[i];
2168                 if (data->REG_FAN_STEP_OUTPUT &&
2169                     data->REG_FAN_STEP_OUTPUT[attr->index] != 0xff) {
2170                         err = device_create_file(dev, &attr->dev_attr);
2171                         if (err)
2172                                 goto exit_remove;
2173                 }
2174         }
2175         /* if fan4 is enabled create the sf3 files for it */
2176         if ((data->has_fan & (1 << 3)) && data->pwm_num >= 4)
2177                 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan4); i++) {
2178                         err = device_create_file(dev,
2179                                         &sda_sf3_arrays_fan4[i].dev_attr);
2180                         if (err)
2181                                 goto exit_remove;
2182                 }
2183
2184         for (i = 0; i < data->in_num; i++) {
2185                 if ((i == 6) && data->in6_skip)
2186                         continue;
2187                 if ((err = device_create_file(dev, &sda_in_input[i].dev_attr))
2188                         || (err = device_create_file(dev,
2189                                 &sda_in_alarm[i].dev_attr))
2190                         || (err = device_create_file(dev,
2191                                 &sda_in_min[i].dev_attr))
2192                         || (err = device_create_file(dev,
2193                                 &sda_in_max[i].dev_attr)))
2194                         goto exit_remove;
2195         }
2196
2197         for (i = 0; i < 5; i++) {
2198                 if (data->has_fan & (1 << i)) {
2199                         if ((err = device_create_file(dev,
2200                                         &sda_fan_input[i].dev_attr))
2201                                 || (err = device_create_file(dev,
2202                                         &sda_fan_alarm[i].dev_attr)))
2203                                 goto exit_remove;
2204                         if (sio_data->kind != nct6776) {
2205                                 err = device_create_file(dev,
2206                                                 &sda_fan_div[i].dev_attr);
2207                                 if (err)
2208                                         goto exit_remove;
2209                         }
2210                         if (data->has_fan_min & (1 << i)) {
2211                                 err = device_create_file(dev,
2212                                                 &sda_fan_min[i].dev_attr);
2213                                 if (err)
2214                                         goto exit_remove;
2215                         }
2216                         if (i < data->pwm_num &&
2217                                 ((err = device_create_file(dev,
2218                                         &sda_pwm[i].dev_attr))
2219                                 || (err = device_create_file(dev,
2220                                         &sda_pwm_mode[i].dev_attr))
2221                                 || (err = device_create_file(dev,
2222                                         &sda_pwm_enable[i].dev_attr))
2223                                 || (err = device_create_file(dev,
2224                                         &sda_target_temp[i].dev_attr))
2225                                 || (err = device_create_file(dev,
2226                                         &sda_tolerance[i].dev_attr))))
2227                                 goto exit_remove;
2228                 }
2229         }
2230
2231         for (i = 0; i < NUM_REG_TEMP; i++) {
2232                 if (!(data->have_temp & (1 << i)))
2233                         continue;
2234                 err = device_create_file(dev, &sda_temp_input[i].dev_attr);
2235                 if (err)
2236                         goto exit_remove;
2237                 if (data->temp_label) {
2238                         err = device_create_file(dev,
2239                                                  &sda_temp_label[i].dev_attr);
2240                         if (err)
2241                                 goto exit_remove;
2242                 }
2243                 if (data->reg_temp_over[i]) {
2244                         err = device_create_file(dev,
2245                                 &sda_temp_max[i].dev_attr);
2246                         if (err)
2247                                 goto exit_remove;
2248                 }
2249                 if (data->reg_temp_hyst[i]) {
2250                         err = device_create_file(dev,
2251                                 &sda_temp_max_hyst[i].dev_attr);
2252                         if (err)
2253                                 goto exit_remove;
2254                 }
2255                 if (i > 2)
2256                         continue;
2257                 if ((err = device_create_file(dev,
2258                                 &sda_temp_alarm[i].dev_attr))
2259                         || (err = device_create_file(dev,
2260                                 &sda_temp_type[i].dev_attr)))
2261                         goto exit_remove;
2262         }
2263
2264         err = device_create_file(dev, &dev_attr_name);
2265         if (err)
2266                 goto exit_remove;
2267
2268         data->hwmon_dev = hwmon_device_register(dev);
2269         if (IS_ERR(data->hwmon_dev)) {
2270                 err = PTR_ERR(data->hwmon_dev);
2271                 goto exit_remove;
2272         }
2273
2274         return 0;
2275
2276 exit_remove:
2277         w83627ehf_device_remove_files(dev);
2278         kfree(data);
2279         platform_set_drvdata(pdev, NULL);
2280 exit_release:
2281         release_region(res->start, IOREGION_LENGTH);
2282 exit:
2283         return err;
2284 }
2285
2286 static int __devexit w83627ehf_remove(struct platform_device *pdev)
2287 {
2288         struct w83627ehf_data *data = platform_get_drvdata(pdev);
2289
2290         hwmon_device_unregister(data->hwmon_dev);
2291         w83627ehf_device_remove_files(&pdev->dev);
2292         release_region(data->addr, IOREGION_LENGTH);
2293         platform_set_drvdata(pdev, NULL);
2294         kfree(data);
2295
2296         return 0;
2297 }
2298
2299 static struct platform_driver w83627ehf_driver = {
2300         .driver = {
2301                 .owner  = THIS_MODULE,
2302                 .name   = DRVNAME,
2303         },
2304         .probe          = w83627ehf_probe,
2305         .remove         = __devexit_p(w83627ehf_remove),
2306 };
2307
2308 /* w83627ehf_find() looks for a '627 in the Super-I/O config space */
2309 static int __init w83627ehf_find(int sioaddr, unsigned short *addr,
2310                                  struct w83627ehf_sio_data *sio_data)
2311 {
2312         static const char __initdata sio_name_W83627EHF[] = "W83627EHF";
2313         static const char __initdata sio_name_W83627EHG[] = "W83627EHG";
2314         static const char __initdata sio_name_W83627DHG[] = "W83627DHG";
2315         static const char __initdata sio_name_W83627DHG_P[] = "W83627DHG-P";
2316         static const char __initdata sio_name_W83667HG[] = "W83667HG";
2317         static const char __initdata sio_name_W83667HG_B[] = "W83667HG-B";
2318         static const char __initdata sio_name_NCT6775[] = "NCT6775F";
2319         static const char __initdata sio_name_NCT6776[] = "NCT6776F";
2320
2321         u16 val;
2322         const char *sio_name;
2323
2324         superio_enter(sioaddr);
2325
2326         if (force_id)
2327                 val = force_id;
2328         else
2329                 val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8)
2330                     | superio_inb(sioaddr, SIO_REG_DEVID + 1);
2331         switch (val & SIO_ID_MASK) {
2332         case SIO_W83627EHF_ID:
2333                 sio_data->kind = w83627ehf;
2334                 sio_name = sio_name_W83627EHF;
2335                 break;
2336         case SIO_W83627EHG_ID:
2337                 sio_data->kind = w83627ehf;
2338                 sio_name = sio_name_W83627EHG;
2339                 break;
2340         case SIO_W83627DHG_ID:
2341                 sio_data->kind = w83627dhg;
2342                 sio_name = sio_name_W83627DHG;
2343                 break;
2344         case SIO_W83627DHG_P_ID:
2345                 sio_data->kind = w83627dhg_p;
2346                 sio_name = sio_name_W83627DHG_P;
2347                 break;
2348         case SIO_W83667HG_ID:
2349                 sio_data->kind = w83667hg;
2350                 sio_name = sio_name_W83667HG;
2351                 break;
2352         case SIO_W83667HG_B_ID:
2353                 sio_data->kind = w83667hg_b;
2354                 sio_name = sio_name_W83667HG_B;
2355                 break;
2356         case SIO_NCT6775_ID:
2357                 sio_data->kind = nct6775;
2358                 sio_name = sio_name_NCT6775;
2359                 break;
2360         case SIO_NCT6776_ID:
2361                 sio_data->kind = nct6776;
2362                 sio_name = sio_name_NCT6776;
2363                 break;
2364         default:
2365                 if (val != 0xffff)
2366                         pr_debug("unsupported chip ID: 0x%04x\n", val);
2367                 superio_exit(sioaddr);
2368                 return -ENODEV;
2369         }
2370
2371         /* We have a known chip, find the HWM I/O address */
2372         superio_select(sioaddr, W83627EHF_LD_HWM);
2373         val = (superio_inb(sioaddr, SIO_REG_ADDR) << 8)
2374             | superio_inb(sioaddr, SIO_REG_ADDR + 1);
2375         *addr = val & IOREGION_ALIGNMENT;
2376         if (*addr == 0) {
2377                 pr_err("Refusing to enable a Super-I/O device with a base I/O port 0\n");
2378                 superio_exit(sioaddr);
2379                 return -ENODEV;
2380         }
2381
2382         /* Activate logical device if needed */
2383         val = superio_inb(sioaddr, SIO_REG_ENABLE);
2384         if (!(val & 0x01)) {
2385                 pr_warn("Forcibly enabling Super-I/O. "
2386                         "Sensor is probably unusable.\n");
2387                 superio_outb(sioaddr, SIO_REG_ENABLE, val | 0x01);
2388         }
2389
2390         superio_exit(sioaddr);
2391         pr_info("Found %s chip at %#x\n", sio_name, *addr);
2392         sio_data->sioreg = sioaddr;
2393
2394         return 0;
2395 }
2396
2397 /* when Super-I/O functions move to a separate file, the Super-I/O
2398  * bus will manage the lifetime of the device and this module will only keep
2399  * track of the w83627ehf driver. But since we platform_device_alloc(), we
2400  * must keep track of the device */
2401 static struct platform_device *pdev;
2402
2403 static int __init sensors_w83627ehf_init(void)
2404 {
2405         int err;
2406         unsigned short address;
2407         struct resource res;
2408         struct w83627ehf_sio_data sio_data;
2409
2410         /* initialize sio_data->kind and sio_data->sioreg.
2411          *
2412          * when Super-I/O functions move to a separate file, the Super-I/O
2413          * driver will probe 0x2e and 0x4e and auto-detect the presence of a
2414          * w83627ehf hardware monitor, and call probe() */
2415         if (w83627ehf_find(0x2e, &address, &sio_data) &&
2416             w83627ehf_find(0x4e, &address, &sio_data))
2417                 return -ENODEV;
2418
2419         err = platform_driver_register(&w83627ehf_driver);
2420         if (err)
2421                 goto exit;
2422
2423         pdev = platform_device_alloc(DRVNAME, address);
2424         if (!pdev) {
2425                 err = -ENOMEM;
2426                 pr_err("Device allocation failed\n");
2427                 goto exit_unregister;
2428         }
2429
2430         err = platform_device_add_data(pdev, &sio_data,
2431                                        sizeof(struct w83627ehf_sio_data));
2432         if (err) {
2433                 pr_err("Platform data allocation failed\n");
2434                 goto exit_device_put;
2435         }
2436
2437         memset(&res, 0, sizeof(res));
2438         res.name = DRVNAME;
2439         res.start = address + IOREGION_OFFSET;
2440         res.end = address + IOREGION_OFFSET + IOREGION_LENGTH - 1;
2441         res.flags = IORESOURCE_IO;
2442
2443         err = acpi_check_resource_conflict(&res);
2444         if (err)
2445                 goto exit_device_put;
2446
2447         err = platform_device_add_resources(pdev, &res, 1);
2448         if (err) {
2449                 pr_err("Device resource addition failed (%d)\n", err);
2450                 goto exit_device_put;
2451         }
2452
2453         /* platform_device_add calls probe() */
2454         err = platform_device_add(pdev);
2455         if (err) {
2456                 pr_err("Device addition failed (%d)\n", err);
2457                 goto exit_device_put;
2458         }
2459
2460         return 0;
2461
2462 exit_device_put:
2463         platform_device_put(pdev);
2464 exit_unregister:
2465         platform_driver_unregister(&w83627ehf_driver);
2466 exit:
2467         return err;
2468 }
2469
2470 static void __exit sensors_w83627ehf_exit(void)
2471 {
2472         platform_device_unregister(pdev);
2473         platform_driver_unregister(&w83627ehf_driver);
2474 }
2475
2476 MODULE_AUTHOR("Jean Delvare <khali@linux-fr.org>");
2477 MODULE_DESCRIPTION("W83627EHF driver");
2478 MODULE_LICENSE("GPL");
2479
2480 module_init(sensors_w83627ehf_init);
2481 module_exit(sensors_w83627ehf_exit);