]> git.karo-electronics.de Git - mv-sheeva.git/blob - drivers/hwmon/w83627ehf.c
NFSv4.1 reclaim complete must wait for completion
[mv-sheeva.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
10     Shamelessly ripped from the w83627hf driver
11     Copyright (C) 2003  Mark Studebaker
12
13     Thanks to Leon Moonen, Steve Cliffe and Grant Coady for their help
14     in testing and debugging this driver.
15
16     This driver also supports the W83627EHG, which is the lead-free
17     version of the W83627EHF.
18
19     This program is free software; you can redistribute it and/or modify
20     it under the terms of the GNU General Public License as published by
21     the Free Software Foundation; either version 2 of the License, or
22     (at your option) any later version.
23
24     This program is distributed in the hope that it will be useful,
25     but WITHOUT ANY WARRANTY; without even the implied warranty of
26     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27     GNU General Public License for more details.
28
29     You should have received a copy of the GNU General Public License
30     along with this program; if not, write to the Free Software
31     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
32
33
34     Supports the following chips:
35
36     Chip        #vin    #fan    #pwm    #temp  chip IDs       man ID
37     w83627ehf   10      5       4       3      0x8850 0x88    0x5ca3
38                                                0x8860 0xa1
39     w83627dhg    9      5       4       3      0xa020 0xc1    0x5ca3
40     w83627dhg-p  9      5       4       3      0xb070 0xc1    0x5ca3
41     w83667hg     9      5       3       3      0xa510 0xc1    0x5ca3
42     w83667hg-b   9      5       3       3      0xb350 0xc1    0x5ca3
43 */
44
45 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
46
47 #include <linux/module.h>
48 #include <linux/init.h>
49 #include <linux/slab.h>
50 #include <linux/jiffies.h>
51 #include <linux/platform_device.h>
52 #include <linux/hwmon.h>
53 #include <linux/hwmon-sysfs.h>
54 #include <linux/hwmon-vid.h>
55 #include <linux/err.h>
56 #include <linux/mutex.h>
57 #include <linux/acpi.h>
58 #include <linux/io.h>
59 #include "lm75.h"
60
61 enum kinds { w83627ehf, w83627dhg, w83627dhg_p, w83667hg, w83667hg_b };
62
63 /* used to set data->name = w83627ehf_device_names[data->sio_kind] */
64 static const char * w83627ehf_device_names[] = {
65         "w83627ehf",
66         "w83627dhg",
67         "w83627dhg",
68         "w83667hg",
69         "w83667hg",
70 };
71
72 static unsigned short force_id;
73 module_param(force_id, ushort, 0);
74 MODULE_PARM_DESC(force_id, "Override the detected device ID");
75
76 #define DRVNAME "w83627ehf"
77
78 /*
79  * Super-I/O constants and functions
80  */
81
82 #define W83627EHF_LD_HWM        0x0b
83 #define W83667HG_LD_VID         0x0d
84
85 #define SIO_REG_LDSEL           0x07    /* Logical device select */
86 #define SIO_REG_DEVID           0x20    /* Device ID (2 bytes) */
87 #define SIO_REG_EN_VRM10        0x2C    /* GPIO3, GPIO4 selection */
88 #define SIO_REG_ENABLE          0x30    /* Logical device enable */
89 #define SIO_REG_ADDR            0x60    /* Logical device address (2 bytes) */
90 #define SIO_REG_VID_CTRL        0xF0    /* VID control */
91 #define SIO_REG_VID_DATA        0xF1    /* VID data */
92
93 #define SIO_W83627EHF_ID        0x8850
94 #define SIO_W83627EHG_ID        0x8860
95 #define SIO_W83627DHG_ID        0xa020
96 #define SIO_W83627DHG_P_ID      0xb070
97 #define SIO_W83667HG_ID         0xa510
98 #define SIO_W83667HG_B_ID       0xb350
99 #define SIO_ID_MASK             0xFFF0
100
101 static inline void
102 superio_outb(int ioreg, int reg, int val)
103 {
104         outb(reg, ioreg);
105         outb(val, ioreg + 1);
106 }
107
108 static inline int
109 superio_inb(int ioreg, int reg)
110 {
111         outb(reg, ioreg);
112         return inb(ioreg + 1);
113 }
114
115 static inline void
116 superio_select(int ioreg, int ld)
117 {
118         outb(SIO_REG_LDSEL, ioreg);
119         outb(ld, ioreg + 1);
120 }
121
122 static inline void
123 superio_enter(int ioreg)
124 {
125         outb(0x87, ioreg);
126         outb(0x87, ioreg);
127 }
128
129 static inline void
130 superio_exit(int ioreg)
131 {
132         outb(0xaa, ioreg);
133         outb(0x02, ioreg);
134         outb(0x02, ioreg + 1);
135 }
136
137 /*
138  * ISA constants
139  */
140
141 #define IOREGION_ALIGNMENT      ~7
142 #define IOREGION_OFFSET         5
143 #define IOREGION_LENGTH         2
144 #define ADDR_REG_OFFSET         0
145 #define DATA_REG_OFFSET         1
146
147 #define W83627EHF_REG_BANK              0x4E
148 #define W83627EHF_REG_CONFIG            0x40
149
150 /* Not currently used:
151  * REG_MAN_ID has the value 0x5ca3 for all supported chips.
152  * REG_CHIP_ID == 0x88/0xa1/0xc1 depending on chip model.
153  * REG_MAN_ID is at port 0x4f
154  * REG_CHIP_ID is at port 0x58 */
155
156 static const u16 W83627EHF_REG_FAN[] = { 0x28, 0x29, 0x2a, 0x3f, 0x553 };
157 static const u16 W83627EHF_REG_FAN_MIN[] = { 0x3b, 0x3c, 0x3d, 0x3e, 0x55c };
158
159 /* The W83627EHF registers for nr=7,8,9 are in bank 5 */
160 #define W83627EHF_REG_IN_MAX(nr)        ((nr < 7) ? (0x2b + (nr) * 2) : \
161                                          (0x554 + (((nr) - 7) * 2)))
162 #define W83627EHF_REG_IN_MIN(nr)        ((nr < 7) ? (0x2c + (nr) * 2) : \
163                                          (0x555 + (((nr) - 7) * 2)))
164 #define W83627EHF_REG_IN(nr)            ((nr < 7) ? (0x20 + (nr)) : \
165                                          (0x550 + (nr) - 7))
166
167 #define W83627EHF_REG_TEMP1             0x27
168 #define W83627EHF_REG_TEMP1_HYST        0x3a
169 #define W83627EHF_REG_TEMP1_OVER        0x39
170 static const u16 W83627EHF_REG_TEMP[] = { 0x150, 0x250 };
171 static const u16 W83627EHF_REG_TEMP_HYST[] = { 0x153, 0x253 };
172 static const u16 W83627EHF_REG_TEMP_OVER[] = { 0x155, 0x255 };
173 static const u16 W83627EHF_REG_TEMP_CONFIG[] = { 0x152, 0x252 };
174
175 /* Fan clock dividers are spread over the following five registers */
176 #define W83627EHF_REG_FANDIV1           0x47
177 #define W83627EHF_REG_FANDIV2           0x4B
178 #define W83627EHF_REG_VBAT              0x5D
179 #define W83627EHF_REG_DIODE             0x59
180 #define W83627EHF_REG_SMI_OVT           0x4C
181
182 #define W83627EHF_REG_ALARM1            0x459
183 #define W83627EHF_REG_ALARM2            0x45A
184 #define W83627EHF_REG_ALARM3            0x45B
185
186 /* SmartFan registers */
187 #define W83627EHF_REG_FAN_STEPUP_TIME 0x0f
188 #define W83627EHF_REG_FAN_STEPDOWN_TIME 0x0e
189
190 /* DC or PWM output fan configuration */
191 static const u8 W83627EHF_REG_PWM_ENABLE[] = {
192         0x04,                   /* SYS FAN0 output mode and PWM mode */
193         0x04,                   /* CPU FAN0 output mode and PWM mode */
194         0x12,                   /* AUX FAN mode */
195         0x62,                   /* CPU FAN1 mode */
196 };
197
198 static const u8 W83627EHF_PWM_MODE_SHIFT[] = { 0, 1, 0, 6 };
199 static const u8 W83627EHF_PWM_ENABLE_SHIFT[] = { 2, 4, 1, 4 };
200
201 /* FAN Duty Cycle, be used to control */
202 static const u8 W83627EHF_REG_PWM[] = { 0x01, 0x03, 0x11, 0x61 };
203 static const u8 W83627EHF_REG_TARGET[] = { 0x05, 0x06, 0x13, 0x63 };
204 static const u8 W83627EHF_REG_TOLERANCE[] = { 0x07, 0x07, 0x14, 0x62 };
205
206 /* Advanced Fan control, some values are common for all fans */
207 static const u8 W83627EHF_REG_FAN_START_OUTPUT[] = { 0x0a, 0x0b, 0x16, 0x65 };
208 static const u8 W83627EHF_REG_FAN_STOP_OUTPUT[] = { 0x08, 0x09, 0x15, 0x64 };
209 static const u8 W83627EHF_REG_FAN_STOP_TIME[] = { 0x0c, 0x0d, 0x17, 0x66 };
210
211 static const u8 W83627EHF_REG_FAN_MAX_OUTPUT_COMMON[]
212                                                 = { 0xff, 0x67, 0xff, 0x69 };
213 static const u8 W83627EHF_REG_FAN_STEP_OUTPUT_COMMON[]
214                                                 = { 0xff, 0x68, 0xff, 0x6a };
215
216 static const u8 W83627EHF_REG_FAN_MAX_OUTPUT_W83667_B[] = { 0x67, 0x69, 0x6b };
217 static const u8 W83627EHF_REG_FAN_STEP_OUTPUT_W83667_B[] = { 0x68, 0x6a, 0x6c };
218
219 /*
220  * Conversions
221  */
222
223 /* 1 is PWM mode, output in ms */
224 static inline unsigned int step_time_from_reg(u8 reg, u8 mode)
225 {
226         return mode ? 100 * reg : 400 * reg;
227 }
228
229 static inline u8 step_time_to_reg(unsigned int msec, u8 mode)
230 {
231         return SENSORS_LIMIT((mode ? (msec + 50) / 100 :
232                                                 (msec + 200) / 400), 1, 255);
233 }
234
235 static inline unsigned int
236 fan_from_reg(u8 reg, unsigned int div)
237 {
238         if (reg == 0 || reg == 255)
239                 return 0;
240         return 1350000U / (reg * div);
241 }
242
243 static inline unsigned int
244 div_from_reg(u8 reg)
245 {
246         return 1 << reg;
247 }
248
249 static inline int
250 temp1_from_reg(s8 reg)
251 {
252         return reg * 1000;
253 }
254
255 static inline s8
256 temp1_to_reg(long temp, int min, int max)
257 {
258         if (temp <= min)
259                 return min / 1000;
260         if (temp >= max)
261                 return max / 1000;
262         if (temp < 0)
263                 return (temp - 500) / 1000;
264         return (temp + 500) / 1000;
265 }
266
267 /* Some of analog inputs have internal scaling (2x), 8mV is ADC LSB */
268
269 static u8 scale_in[10] = { 8, 8, 16, 16, 8, 8, 8, 16, 16, 8 };
270
271 static inline long in_from_reg(u8 reg, u8 nr)
272 {
273         return reg * scale_in[nr];
274 }
275
276 static inline u8 in_to_reg(u32 val, u8 nr)
277 {
278         return SENSORS_LIMIT(((val + (scale_in[nr] / 2)) / scale_in[nr]), 0, 255);
279 }
280
281 /*
282  * Data structures and manipulation thereof
283  */
284
285 struct w83627ehf_data {
286         int addr;       /* IO base of hw monitor block */
287         const char *name;
288
289         struct device *hwmon_dev;
290         struct mutex lock;
291
292         const u8 *REG_FAN_START_OUTPUT;
293         const u8 *REG_FAN_STOP_OUTPUT;
294         const u8 *REG_FAN_MAX_OUTPUT;
295         const u8 *REG_FAN_STEP_OUTPUT;
296
297         struct mutex update_lock;
298         char valid;             /* !=0 if following fields are valid */
299         unsigned long last_updated;     /* In jiffies */
300
301         /* Register values */
302         u8 in_num;              /* number of in inputs we have */
303         u8 in[10];              /* Register value */
304         u8 in_max[10];          /* Register value */
305         u8 in_min[10];          /* Register value */
306         u8 fan[5];
307         u8 fan_min[5];
308         u8 fan_div[5];
309         u8 has_fan;             /* some fan inputs can be disabled */
310         u8 temp_type[3];
311         s8 temp1;
312         s8 temp1_max;
313         s8 temp1_max_hyst;
314         s16 temp[2];
315         s16 temp_max[2];
316         s16 temp_max_hyst[2];
317         u32 alarms;
318
319         u8 pwm_mode[4]; /* 0->DC variable voltage, 1->PWM variable duty cycle */
320         u8 pwm_enable[4]; /* 1->manual
321                              2->thermal cruise mode (also called SmartFan I)
322                              3->fan speed cruise mode
323                              4->variable thermal cruise (also called SmartFan III) */
324         u8 pwm_num;             /* number of pwm */
325         u8 pwm[4];
326         u8 target_temp[4];
327         u8 tolerance[4];
328
329         u8 fan_start_output[4]; /* minimum fan speed when spinning up */
330         u8 fan_stop_output[4]; /* minimum fan speed when spinning down */
331         u8 fan_stop_time[4]; /* time at minimum before disabling fan */
332         u8 fan_max_output[4]; /* maximum fan speed */
333         u8 fan_step_output[4]; /* rate of change output value */
334
335         u8 vid;
336         u8 vrm;
337
338         u8 temp3_disable;
339         u8 in6_skip;
340 };
341
342 struct w83627ehf_sio_data {
343         int sioreg;
344         enum kinds kind;
345 };
346
347 static inline int is_word_sized(u16 reg)
348 {
349         return (((reg & 0xff00) == 0x100
350               || (reg & 0xff00) == 0x200)
351              && ((reg & 0x00ff) == 0x50
352               || (reg & 0x00ff) == 0x53
353               || (reg & 0x00ff) == 0x55));
354 }
355
356 /* Registers 0x50-0x5f are banked */
357 static inline void w83627ehf_set_bank(struct w83627ehf_data *data, u16 reg)
358 {
359         if ((reg & 0x00f0) == 0x50) {
360                 outb_p(W83627EHF_REG_BANK, data->addr + ADDR_REG_OFFSET);
361                 outb_p(reg >> 8, data->addr + DATA_REG_OFFSET);
362         }
363 }
364
365 /* Not strictly necessary, but play it safe for now */
366 static inline void w83627ehf_reset_bank(struct w83627ehf_data *data, u16 reg)
367 {
368         if (reg & 0xff00) {
369                 outb_p(W83627EHF_REG_BANK, data->addr + ADDR_REG_OFFSET);
370                 outb_p(0, data->addr + DATA_REG_OFFSET);
371         }
372 }
373
374 static u16 w83627ehf_read_value(struct w83627ehf_data *data, u16 reg)
375 {
376         int res, word_sized = is_word_sized(reg);
377
378         mutex_lock(&data->lock);
379
380         w83627ehf_set_bank(data, reg);
381         outb_p(reg & 0xff, data->addr + ADDR_REG_OFFSET);
382         res = inb_p(data->addr + DATA_REG_OFFSET);
383         if (word_sized) {
384                 outb_p((reg & 0xff) + 1,
385                        data->addr + ADDR_REG_OFFSET);
386                 res = (res << 8) + inb_p(data->addr + DATA_REG_OFFSET);
387         }
388         w83627ehf_reset_bank(data, reg);
389
390         mutex_unlock(&data->lock);
391
392         return res;
393 }
394
395 static int w83627ehf_write_value(struct w83627ehf_data *data, u16 reg, u16 value)
396 {
397         int word_sized = is_word_sized(reg);
398
399         mutex_lock(&data->lock);
400
401         w83627ehf_set_bank(data, reg);
402         outb_p(reg & 0xff, data->addr + ADDR_REG_OFFSET);
403         if (word_sized) {
404                 outb_p(value >> 8, data->addr + DATA_REG_OFFSET);
405                 outb_p((reg & 0xff) + 1,
406                        data->addr + ADDR_REG_OFFSET);
407         }
408         outb_p(value & 0xff, data->addr + DATA_REG_OFFSET);
409         w83627ehf_reset_bank(data, reg);
410
411         mutex_unlock(&data->lock);
412         return 0;
413 }
414
415 /* This function assumes that the caller holds data->update_lock */
416 static void w83627ehf_write_fan_div(struct w83627ehf_data *data, int nr)
417 {
418         u8 reg;
419
420         switch (nr) {
421         case 0:
422                 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV1) & 0xcf)
423                     | ((data->fan_div[0] & 0x03) << 4);
424                 /* fan5 input control bit is write only, compute the value */
425                 reg |= (data->has_fan & (1 << 4)) ? 1 : 0;
426                 w83627ehf_write_value(data, W83627EHF_REG_FANDIV1, reg);
427                 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0xdf)
428                     | ((data->fan_div[0] & 0x04) << 3);
429                 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg);
430                 break;
431         case 1:
432                 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV1) & 0x3f)
433                     | ((data->fan_div[1] & 0x03) << 6);
434                 /* fan5 input control bit is write only, compute the value */
435                 reg |= (data->has_fan & (1 << 4)) ? 1 : 0;
436                 w83627ehf_write_value(data, W83627EHF_REG_FANDIV1, reg);
437                 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0xbf)
438                     | ((data->fan_div[1] & 0x04) << 4);
439                 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg);
440                 break;
441         case 2:
442                 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV2) & 0x3f)
443                     | ((data->fan_div[2] & 0x03) << 6);
444                 w83627ehf_write_value(data, W83627EHF_REG_FANDIV2, reg);
445                 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0x7f)
446                     | ((data->fan_div[2] & 0x04) << 5);
447                 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg);
448                 break;
449         case 3:
450                 reg = (w83627ehf_read_value(data, W83627EHF_REG_DIODE) & 0xfc)
451                     | (data->fan_div[3] & 0x03);
452                 w83627ehf_write_value(data, W83627EHF_REG_DIODE, reg);
453                 reg = (w83627ehf_read_value(data, W83627EHF_REG_SMI_OVT) & 0x7f)
454                     | ((data->fan_div[3] & 0x04) << 5);
455                 w83627ehf_write_value(data, W83627EHF_REG_SMI_OVT, reg);
456                 break;
457         case 4:
458                 reg = (w83627ehf_read_value(data, W83627EHF_REG_DIODE) & 0x73)
459                     | ((data->fan_div[4] & 0x03) << 2)
460                     | ((data->fan_div[4] & 0x04) << 5);
461                 w83627ehf_write_value(data, W83627EHF_REG_DIODE, reg);
462                 break;
463         }
464 }
465
466 static void w83627ehf_update_fan_div(struct w83627ehf_data *data)
467 {
468         int i;
469
470         i = w83627ehf_read_value(data, W83627EHF_REG_FANDIV1);
471         data->fan_div[0] = (i >> 4) & 0x03;
472         data->fan_div[1] = (i >> 6) & 0x03;
473         i = w83627ehf_read_value(data, W83627EHF_REG_FANDIV2);
474         data->fan_div[2] = (i >> 6) & 0x03;
475         i = w83627ehf_read_value(data, W83627EHF_REG_VBAT);
476         data->fan_div[0] |= (i >> 3) & 0x04;
477         data->fan_div[1] |= (i >> 4) & 0x04;
478         data->fan_div[2] |= (i >> 5) & 0x04;
479         if (data->has_fan & ((1 << 3) | (1 << 4))) {
480                 i = w83627ehf_read_value(data, W83627EHF_REG_DIODE);
481                 data->fan_div[3] = i & 0x03;
482                 data->fan_div[4] = ((i >> 2) & 0x03)
483                                  | ((i >> 5) & 0x04);
484         }
485         if (data->has_fan & (1 << 3)) {
486                 i = w83627ehf_read_value(data, W83627EHF_REG_SMI_OVT);
487                 data->fan_div[3] |= (i >> 5) & 0x04;
488         }
489 }
490
491 static struct w83627ehf_data *w83627ehf_update_device(struct device *dev)
492 {
493         struct w83627ehf_data *data = dev_get_drvdata(dev);
494         int pwmcfg = 0, tolerance = 0; /* shut up the compiler */
495         int i;
496
497         mutex_lock(&data->update_lock);
498
499         if (time_after(jiffies, data->last_updated + HZ + HZ/2)
500          || !data->valid) {
501                 /* Fan clock dividers */
502                 w83627ehf_update_fan_div(data);
503
504                 /* Measured voltages and limits */
505                 for (i = 0; i < data->in_num; i++) {
506                         data->in[i] = w83627ehf_read_value(data,
507                                       W83627EHF_REG_IN(i));
508                         data->in_min[i] = w83627ehf_read_value(data,
509                                           W83627EHF_REG_IN_MIN(i));
510                         data->in_max[i] = w83627ehf_read_value(data,
511                                           W83627EHF_REG_IN_MAX(i));
512                 }
513
514                 /* Measured fan speeds and limits */
515                 for (i = 0; i < 5; i++) {
516                         if (!(data->has_fan & (1 << i)))
517                                 continue;
518
519                         data->fan[i] = w83627ehf_read_value(data,
520                                        W83627EHF_REG_FAN[i]);
521                         data->fan_min[i] = w83627ehf_read_value(data,
522                                            W83627EHF_REG_FAN_MIN[i]);
523
524                         /* If we failed to measure the fan speed and clock
525                            divider can be increased, let's try that for next
526                            time */
527                         if (data->fan[i] == 0xff
528                          && data->fan_div[i] < 0x07) {
529                                 dev_dbg(dev, "Increasing fan%d "
530                                         "clock divider from %u to %u\n",
531                                         i + 1, div_from_reg(data->fan_div[i]),
532                                         div_from_reg(data->fan_div[i] + 1));
533                                 data->fan_div[i]++;
534                                 w83627ehf_write_fan_div(data, i);
535                                 /* Preserve min limit if possible */
536                                 if (data->fan_min[i] >= 2
537                                  && data->fan_min[i] != 255)
538                                         w83627ehf_write_value(data,
539                                                 W83627EHF_REG_FAN_MIN[i],
540                                                 (data->fan_min[i] /= 2));
541                         }
542                 }
543
544                 for (i = 0; i < data->pwm_num; i++) {
545                         if (!(data->has_fan & (1 << i)))
546                                 continue;
547
548                         /* pwmcfg, tolerance mapped for i=0, i=1 to same reg */
549                         if (i != 1) {
550                                 pwmcfg = w83627ehf_read_value(data,
551                                                 W83627EHF_REG_PWM_ENABLE[i]);
552                                 tolerance = w83627ehf_read_value(data,
553                                                 W83627EHF_REG_TOLERANCE[i]);
554                         }
555                         data->pwm_mode[i] =
556                                 ((pwmcfg >> W83627EHF_PWM_MODE_SHIFT[i]) & 1)
557                                 ? 0 : 1;
558                         data->pwm_enable[i] =
559                                         ((pwmcfg >> W83627EHF_PWM_ENABLE_SHIFT[i])
560                                                 & 3) + 1;
561                         data->pwm[i] = w83627ehf_read_value(data,
562                                                 W83627EHF_REG_PWM[i]);
563                         data->fan_start_output[i] = w83627ehf_read_value(data,
564                                                 W83627EHF_REG_FAN_START_OUTPUT[i]);
565                         data->fan_stop_output[i] = w83627ehf_read_value(data,
566                                                 W83627EHF_REG_FAN_STOP_OUTPUT[i]);
567                         data->fan_stop_time[i] = w83627ehf_read_value(data,
568                                                 W83627EHF_REG_FAN_STOP_TIME[i]);
569
570                         if (data->REG_FAN_MAX_OUTPUT[i] != 0xff)
571                                 data->fan_max_output[i] =
572                                   w83627ehf_read_value(data,
573                                                data->REG_FAN_MAX_OUTPUT[i]);
574
575                         if (data->REG_FAN_STEP_OUTPUT[i] != 0xff)
576                                 data->fan_step_output[i] =
577                                   w83627ehf_read_value(data,
578                                                data->REG_FAN_STEP_OUTPUT[i]);
579
580                         data->target_temp[i] =
581                                 w83627ehf_read_value(data,
582                                         W83627EHF_REG_TARGET[i]) &
583                                         (data->pwm_mode[i] == 1 ? 0x7f : 0xff);
584                         data->tolerance[i] = (tolerance >> (i == 1 ? 4 : 0))
585                                                                         & 0x0f;
586                 }
587
588                 /* Measured temperatures and limits */
589                 data->temp1 = w83627ehf_read_value(data,
590                               W83627EHF_REG_TEMP1);
591                 data->temp1_max = w83627ehf_read_value(data,
592                                   W83627EHF_REG_TEMP1_OVER);
593                 data->temp1_max_hyst = w83627ehf_read_value(data,
594                                        W83627EHF_REG_TEMP1_HYST);
595                 for (i = 0; i < 2; i++) {
596                         data->temp[i] = w83627ehf_read_value(data,
597                                         W83627EHF_REG_TEMP[i]);
598                         data->temp_max[i] = w83627ehf_read_value(data,
599                                             W83627EHF_REG_TEMP_OVER[i]);
600                         data->temp_max_hyst[i] = w83627ehf_read_value(data,
601                                                  W83627EHF_REG_TEMP_HYST[i]);
602                 }
603
604                 data->alarms = w83627ehf_read_value(data,
605                                         W83627EHF_REG_ALARM1) |
606                                (w83627ehf_read_value(data,
607                                         W83627EHF_REG_ALARM2) << 8) |
608                                (w83627ehf_read_value(data,
609                                         W83627EHF_REG_ALARM3) << 16);
610
611                 data->last_updated = jiffies;
612                 data->valid = 1;
613         }
614
615         mutex_unlock(&data->update_lock);
616         return data;
617 }
618
619 /*
620  * Sysfs callback functions
621  */
622 #define show_in_reg(reg) \
623 static ssize_t \
624 show_##reg(struct device *dev, struct device_attribute *attr, \
625            char *buf) \
626 { \
627         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
628         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
629         int nr = sensor_attr->index; \
630         return sprintf(buf, "%ld\n", in_from_reg(data->reg[nr], nr)); \
631 }
632 show_in_reg(in)
633 show_in_reg(in_min)
634 show_in_reg(in_max)
635
636 #define store_in_reg(REG, reg) \
637 static ssize_t \
638 store_in_##reg (struct device *dev, struct device_attribute *attr, \
639                         const char *buf, size_t count) \
640 { \
641         struct w83627ehf_data *data = dev_get_drvdata(dev); \
642         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
643         int nr = sensor_attr->index; \
644         u32 val = simple_strtoul(buf, NULL, 10); \
645  \
646         mutex_lock(&data->update_lock); \
647         data->in_##reg[nr] = in_to_reg(val, nr); \
648         w83627ehf_write_value(data, W83627EHF_REG_IN_##REG(nr), \
649                               data->in_##reg[nr]); \
650         mutex_unlock(&data->update_lock); \
651         return count; \
652 }
653
654 store_in_reg(MIN, min)
655 store_in_reg(MAX, max)
656
657 static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, char *buf)
658 {
659         struct w83627ehf_data *data = w83627ehf_update_device(dev);
660         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
661         int nr = sensor_attr->index;
662         return sprintf(buf, "%u\n", (data->alarms >> nr) & 0x01);
663 }
664
665 static struct sensor_device_attribute sda_in_input[] = {
666         SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
667         SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
668         SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
669         SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
670         SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
671         SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
672         SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
673         SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
674         SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
675         SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
676 };
677
678 static struct sensor_device_attribute sda_in_alarm[] = {
679         SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
680         SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
681         SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
682         SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
683         SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8),
684         SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 21),
685         SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 20),
686         SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 16),
687         SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 17),
688         SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 19),
689 };
690
691 static struct sensor_device_attribute sda_in_min[] = {
692        SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
693        SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
694        SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
695        SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
696        SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
697        SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
698        SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
699        SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
700        SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
701        SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
702 };
703
704 static struct sensor_device_attribute sda_in_max[] = {
705        SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
706        SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
707        SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
708        SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
709        SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
710        SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
711        SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
712        SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
713        SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
714        SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
715 };
716
717 #define show_fan_reg(reg) \
718 static ssize_t \
719 show_##reg(struct device *dev, struct device_attribute *attr, \
720            char *buf) \
721 { \
722         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
723         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
724         int nr = sensor_attr->index; \
725         return sprintf(buf, "%d\n", \
726                        fan_from_reg(data->reg[nr], \
727                                     div_from_reg(data->fan_div[nr]))); \
728 }
729 show_fan_reg(fan);
730 show_fan_reg(fan_min);
731
732 static ssize_t
733 show_fan_div(struct device *dev, struct device_attribute *attr,
734              char *buf)
735 {
736         struct w83627ehf_data *data = w83627ehf_update_device(dev);
737         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
738         int nr = sensor_attr->index;
739         return sprintf(buf, "%u\n", div_from_reg(data->fan_div[nr]));
740 }
741
742 static ssize_t
743 store_fan_min(struct device *dev, struct device_attribute *attr,
744               const char *buf, size_t count)
745 {
746         struct w83627ehf_data *data = dev_get_drvdata(dev);
747         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
748         int nr = sensor_attr->index;
749         unsigned int val = simple_strtoul(buf, NULL, 10);
750         unsigned int reg;
751         u8 new_div;
752
753         mutex_lock(&data->update_lock);
754         if (!val) {
755                 /* No min limit, alarm disabled */
756                 data->fan_min[nr] = 255;
757                 new_div = data->fan_div[nr]; /* No change */
758                 dev_info(dev, "fan%u low limit and alarm disabled\n", nr + 1);
759         } else if ((reg = 1350000U / val) >= 128 * 255) {
760                 /* Speed below this value cannot possibly be represented,
761                    even with the highest divider (128) */
762                 data->fan_min[nr] = 254;
763                 new_div = 7; /* 128 == (1 << 7) */
764                 dev_warn(dev, "fan%u low limit %u below minimum %u, set to "
765                          "minimum\n", nr + 1, val, fan_from_reg(254, 128));
766         } else if (!reg) {
767                 /* Speed above this value cannot possibly be represented,
768                    even with the lowest divider (1) */
769                 data->fan_min[nr] = 1;
770                 new_div = 0; /* 1 == (1 << 0) */
771                 dev_warn(dev, "fan%u low limit %u above maximum %u, set to "
772                          "maximum\n", nr + 1, val, fan_from_reg(1, 1));
773         } else {
774                 /* Automatically pick the best divider, i.e. the one such
775                    that the min limit will correspond to a register value
776                    in the 96..192 range */
777                 new_div = 0;
778                 while (reg > 192 && new_div < 7) {
779                         reg >>= 1;
780                         new_div++;
781                 }
782                 data->fan_min[nr] = reg;
783         }
784
785         /* Write both the fan clock divider (if it changed) and the new
786            fan min (unconditionally) */
787         if (new_div != data->fan_div[nr]) {
788                 /* Preserve the fan speed reading */
789                 if (data->fan[nr] != 0xff) {
790                         if (new_div > data->fan_div[nr])
791                                 data->fan[nr] >>= new_div - data->fan_div[nr];
792                         else if (data->fan[nr] & 0x80)
793                                 data->fan[nr] = 0xff;
794                         else
795                                 data->fan[nr] <<= data->fan_div[nr] - new_div;
796                 }
797
798                 dev_dbg(dev, "fan%u clock divider changed from %u to %u\n",
799                         nr + 1, div_from_reg(data->fan_div[nr]),
800                         div_from_reg(new_div));
801                 data->fan_div[nr] = new_div;
802                 w83627ehf_write_fan_div(data, nr);
803                 /* Give the chip time to sample a new speed value */
804                 data->last_updated = jiffies;
805         }
806         w83627ehf_write_value(data, W83627EHF_REG_FAN_MIN[nr],
807                               data->fan_min[nr]);
808         mutex_unlock(&data->update_lock);
809
810         return count;
811 }
812
813 static struct sensor_device_attribute sda_fan_input[] = {
814         SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
815         SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
816         SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
817         SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
818         SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
819 };
820
821 static struct sensor_device_attribute sda_fan_alarm[] = {
822         SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6),
823         SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7),
824         SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11),
825         SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 10),
826         SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 23),
827 };
828
829 static struct sensor_device_attribute sda_fan_min[] = {
830         SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
831                     store_fan_min, 0),
832         SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
833                     store_fan_min, 1),
834         SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
835                     store_fan_min, 2),
836         SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
837                     store_fan_min, 3),
838         SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min,
839                     store_fan_min, 4),
840 };
841
842 static struct sensor_device_attribute sda_fan_div[] = {
843         SENSOR_ATTR(fan1_div, S_IRUGO, show_fan_div, NULL, 0),
844         SENSOR_ATTR(fan2_div, S_IRUGO, show_fan_div, NULL, 1),
845         SENSOR_ATTR(fan3_div, S_IRUGO, show_fan_div, NULL, 2),
846         SENSOR_ATTR(fan4_div, S_IRUGO, show_fan_div, NULL, 3),
847         SENSOR_ATTR(fan5_div, S_IRUGO, show_fan_div, NULL, 4),
848 };
849
850 #define show_temp1_reg(reg) \
851 static ssize_t \
852 show_##reg(struct device *dev, struct device_attribute *attr, \
853            char *buf) \
854 { \
855         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
856         return sprintf(buf, "%d\n", temp1_from_reg(data->reg)); \
857 }
858 show_temp1_reg(temp1);
859 show_temp1_reg(temp1_max);
860 show_temp1_reg(temp1_max_hyst);
861
862 #define store_temp1_reg(REG, reg) \
863 static ssize_t \
864 store_temp1_##reg(struct device *dev, struct device_attribute *attr, \
865                   const char *buf, size_t count) \
866 { \
867         struct w83627ehf_data *data = dev_get_drvdata(dev); \
868         long val = simple_strtol(buf, NULL, 10); \
869  \
870         mutex_lock(&data->update_lock); \
871         data->temp1_##reg = temp1_to_reg(val, -128000, 127000); \
872         w83627ehf_write_value(data, W83627EHF_REG_TEMP1_##REG, \
873                               data->temp1_##reg); \
874         mutex_unlock(&data->update_lock); \
875         return count; \
876 }
877 store_temp1_reg(OVER, max);
878 store_temp1_reg(HYST, max_hyst);
879
880 #define show_temp_reg(reg) \
881 static ssize_t \
882 show_##reg(struct device *dev, struct device_attribute *attr, \
883            char *buf) \
884 { \
885         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
886         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
887         int nr = sensor_attr->index; \
888         return sprintf(buf, "%d\n", \
889                        LM75_TEMP_FROM_REG(data->reg[nr])); \
890 }
891 show_temp_reg(temp);
892 show_temp_reg(temp_max);
893 show_temp_reg(temp_max_hyst);
894
895 #define store_temp_reg(REG, reg) \
896 static ssize_t \
897 store_##reg(struct device *dev, struct device_attribute *attr, \
898             const char *buf, size_t count) \
899 { \
900         struct w83627ehf_data *data = dev_get_drvdata(dev); \
901         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
902         int nr = sensor_attr->index; \
903         long val = simple_strtol(buf, NULL, 10); \
904  \
905         mutex_lock(&data->update_lock); \
906         data->reg[nr] = LM75_TEMP_TO_REG(val); \
907         w83627ehf_write_value(data, W83627EHF_REG_TEMP_##REG[nr], \
908                               data->reg[nr]); \
909         mutex_unlock(&data->update_lock); \
910         return count; \
911 }
912 store_temp_reg(OVER, temp_max);
913 store_temp_reg(HYST, temp_max_hyst);
914
915 static ssize_t
916 show_temp_type(struct device *dev, struct device_attribute *attr, char *buf)
917 {
918         struct w83627ehf_data *data = w83627ehf_update_device(dev);
919         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
920         int nr = sensor_attr->index;
921         return sprintf(buf, "%d\n", (int)data->temp_type[nr]);
922 }
923
924 static struct sensor_device_attribute sda_temp_input[] = {
925         SENSOR_ATTR(temp1_input, S_IRUGO, show_temp1, NULL, 0),
926         SENSOR_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 0),
927         SENSOR_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 1),
928 };
929
930 static struct sensor_device_attribute sda_temp_max[] = {
931         SENSOR_ATTR(temp1_max, S_IRUGO | S_IWUSR, show_temp1_max,
932                     store_temp1_max, 0),
933         SENSOR_ATTR(temp2_max, S_IRUGO | S_IWUSR, show_temp_max,
934                     store_temp_max, 0),
935         SENSOR_ATTR(temp3_max, S_IRUGO | S_IWUSR, show_temp_max,
936                     store_temp_max, 1),
937 };
938
939 static struct sensor_device_attribute sda_temp_max_hyst[] = {
940         SENSOR_ATTR(temp1_max_hyst, S_IRUGO | S_IWUSR, show_temp1_max_hyst,
941                     store_temp1_max_hyst, 0),
942         SENSOR_ATTR(temp2_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
943                     store_temp_max_hyst, 0),
944         SENSOR_ATTR(temp3_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
945                     store_temp_max_hyst, 1),
946 };
947
948 static struct sensor_device_attribute sda_temp_alarm[] = {
949         SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4),
950         SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5),
951         SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
952 };
953
954 static struct sensor_device_attribute sda_temp_type[] = {
955         SENSOR_ATTR(temp1_type, S_IRUGO, show_temp_type, NULL, 0),
956         SENSOR_ATTR(temp2_type, S_IRUGO, show_temp_type, NULL, 1),
957         SENSOR_ATTR(temp3_type, S_IRUGO, show_temp_type, NULL, 2),
958 };
959
960 #define show_pwm_reg(reg) \
961 static ssize_t show_##reg (struct device *dev, struct device_attribute *attr, \
962                                 char *buf) \
963 { \
964         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
965         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
966         int nr = sensor_attr->index; \
967         return sprintf(buf, "%d\n", data->reg[nr]); \
968 }
969
970 show_pwm_reg(pwm_mode)
971 show_pwm_reg(pwm_enable)
972 show_pwm_reg(pwm)
973
974 static ssize_t
975 store_pwm_mode(struct device *dev, struct device_attribute *attr,
976                         const char *buf, size_t count)
977 {
978         struct w83627ehf_data *data = dev_get_drvdata(dev);
979         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
980         int nr = sensor_attr->index;
981         u32 val = simple_strtoul(buf, NULL, 10);
982         u16 reg;
983
984         if (val > 1)
985                 return -EINVAL;
986         mutex_lock(&data->update_lock);
987         reg = w83627ehf_read_value(data, W83627EHF_REG_PWM_ENABLE[nr]);
988         data->pwm_mode[nr] = val;
989         reg &= ~(1 << W83627EHF_PWM_MODE_SHIFT[nr]);
990         if (!val)
991                 reg |= 1 << W83627EHF_PWM_MODE_SHIFT[nr];
992         w83627ehf_write_value(data, W83627EHF_REG_PWM_ENABLE[nr], reg);
993         mutex_unlock(&data->update_lock);
994         return count;
995 }
996
997 static ssize_t
998 store_pwm(struct device *dev, struct device_attribute *attr,
999                         const char *buf, size_t count)
1000 {
1001         struct w83627ehf_data *data = dev_get_drvdata(dev);
1002         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1003         int nr = sensor_attr->index;
1004         u32 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 255);
1005
1006         mutex_lock(&data->update_lock);
1007         data->pwm[nr] = val;
1008         w83627ehf_write_value(data, W83627EHF_REG_PWM[nr], val);
1009         mutex_unlock(&data->update_lock);
1010         return count;
1011 }
1012
1013 static ssize_t
1014 store_pwm_enable(struct device *dev, struct device_attribute *attr,
1015                         const char *buf, size_t count)
1016 {
1017         struct w83627ehf_data *data = dev_get_drvdata(dev);
1018         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1019         int nr = sensor_attr->index;
1020         u32 val = simple_strtoul(buf, NULL, 10);
1021         u16 reg;
1022
1023         if (!val || (val > 4))
1024                 return -EINVAL;
1025         mutex_lock(&data->update_lock);
1026         reg = w83627ehf_read_value(data, W83627EHF_REG_PWM_ENABLE[nr]);
1027         data->pwm_enable[nr] = val;
1028         reg &= ~(0x03 << W83627EHF_PWM_ENABLE_SHIFT[nr]);
1029         reg |= (val - 1) << W83627EHF_PWM_ENABLE_SHIFT[nr];
1030         w83627ehf_write_value(data, W83627EHF_REG_PWM_ENABLE[nr], reg);
1031         mutex_unlock(&data->update_lock);
1032         return count;
1033 }
1034
1035
1036 #define show_tol_temp(reg) \
1037 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1038                                 char *buf) \
1039 { \
1040         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1041         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
1042         int nr = sensor_attr->index; \
1043         return sprintf(buf, "%d\n", temp1_from_reg(data->reg[nr])); \
1044 }
1045
1046 show_tol_temp(tolerance)
1047 show_tol_temp(target_temp)
1048
1049 static ssize_t
1050 store_target_temp(struct device *dev, struct device_attribute *attr,
1051                         const char *buf, size_t count)
1052 {
1053         struct w83627ehf_data *data = dev_get_drvdata(dev);
1054         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1055         int nr = sensor_attr->index;
1056         u8 val = temp1_to_reg(simple_strtoul(buf, NULL, 10), 0, 127000);
1057
1058         mutex_lock(&data->update_lock);
1059         data->target_temp[nr] = val;
1060         w83627ehf_write_value(data, W83627EHF_REG_TARGET[nr], val);
1061         mutex_unlock(&data->update_lock);
1062         return count;
1063 }
1064
1065 static ssize_t
1066 store_tolerance(struct device *dev, struct device_attribute *attr,
1067                         const char *buf, size_t count)
1068 {
1069         struct w83627ehf_data *data = dev_get_drvdata(dev);
1070         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1071         int nr = sensor_attr->index;
1072         u16 reg;
1073         /* Limit the temp to 0C - 15C */
1074         u8 val = temp1_to_reg(simple_strtoul(buf, NULL, 10), 0, 15000);
1075
1076         mutex_lock(&data->update_lock);
1077         reg = w83627ehf_read_value(data, W83627EHF_REG_TOLERANCE[nr]);
1078         data->tolerance[nr] = val;
1079         if (nr == 1)
1080                 reg = (reg & 0x0f) | (val << 4);
1081         else
1082                 reg = (reg & 0xf0) | val;
1083         w83627ehf_write_value(data, W83627EHF_REG_TOLERANCE[nr], reg);
1084         mutex_unlock(&data->update_lock);
1085         return count;
1086 }
1087
1088 static struct sensor_device_attribute sda_pwm[] = {
1089         SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 0),
1090         SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 1),
1091         SENSOR_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 2),
1092         SENSOR_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 3),
1093 };
1094
1095 static struct sensor_device_attribute sda_pwm_mode[] = {
1096         SENSOR_ATTR(pwm1_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1097                     store_pwm_mode, 0),
1098         SENSOR_ATTR(pwm2_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1099                     store_pwm_mode, 1),
1100         SENSOR_ATTR(pwm3_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1101                     store_pwm_mode, 2),
1102         SENSOR_ATTR(pwm4_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1103                     store_pwm_mode, 3),
1104 };
1105
1106 static struct sensor_device_attribute sda_pwm_enable[] = {
1107         SENSOR_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1108                     store_pwm_enable, 0),
1109         SENSOR_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1110                     store_pwm_enable, 1),
1111         SENSOR_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1112                     store_pwm_enable, 2),
1113         SENSOR_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1114                     store_pwm_enable, 3),
1115 };
1116
1117 static struct sensor_device_attribute sda_target_temp[] = {
1118         SENSOR_ATTR(pwm1_target, S_IWUSR | S_IRUGO, show_target_temp,
1119                     store_target_temp, 0),
1120         SENSOR_ATTR(pwm2_target, S_IWUSR | S_IRUGO, show_target_temp,
1121                     store_target_temp, 1),
1122         SENSOR_ATTR(pwm3_target, S_IWUSR | S_IRUGO, show_target_temp,
1123                     store_target_temp, 2),
1124         SENSOR_ATTR(pwm4_target, S_IWUSR | S_IRUGO, show_target_temp,
1125                     store_target_temp, 3),
1126 };
1127
1128 static struct sensor_device_attribute sda_tolerance[] = {
1129         SENSOR_ATTR(pwm1_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1130                     store_tolerance, 0),
1131         SENSOR_ATTR(pwm2_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1132                     store_tolerance, 1),
1133         SENSOR_ATTR(pwm3_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1134                     store_tolerance, 2),
1135         SENSOR_ATTR(pwm4_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1136                     store_tolerance, 3),
1137 };
1138
1139 /* Smart Fan registers */
1140
1141 #define fan_functions(reg, REG) \
1142 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1143                        char *buf) \
1144 { \
1145         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1146         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
1147         int nr = sensor_attr->index; \
1148         return sprintf(buf, "%d\n", data->reg[nr]); \
1149 }\
1150 static ssize_t \
1151 store_##reg(struct device *dev, struct device_attribute *attr, \
1152                             const char *buf, size_t count) \
1153 {\
1154         struct w83627ehf_data *data = dev_get_drvdata(dev); \
1155         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
1156         int nr = sensor_attr->index; \
1157         u32 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 1, 255); \
1158         mutex_lock(&data->update_lock); \
1159         data->reg[nr] = val; \
1160         w83627ehf_write_value(data, data->REG_##REG[nr], val); \
1161         mutex_unlock(&data->update_lock); \
1162         return count; \
1163 }
1164
1165 fan_functions(fan_start_output, FAN_START_OUTPUT)
1166 fan_functions(fan_stop_output, FAN_STOP_OUTPUT)
1167 fan_functions(fan_max_output, FAN_MAX_OUTPUT)
1168 fan_functions(fan_step_output, FAN_STEP_OUTPUT)
1169
1170 #define fan_time_functions(reg, REG) \
1171 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1172                                 char *buf) \
1173 { \
1174         struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1175         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
1176         int nr = sensor_attr->index; \
1177         return sprintf(buf, "%d\n", \
1178                         step_time_from_reg(data->reg[nr], data->pwm_mode[nr])); \
1179 } \
1180 \
1181 static ssize_t \
1182 store_##reg(struct device *dev, struct device_attribute *attr, \
1183                         const char *buf, size_t count) \
1184 { \
1185         struct w83627ehf_data *data = dev_get_drvdata(dev); \
1186         struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
1187         int nr = sensor_attr->index; \
1188         u8 val = step_time_to_reg(simple_strtoul(buf, NULL, 10), \
1189                                         data->pwm_mode[nr]); \
1190         mutex_lock(&data->update_lock); \
1191         data->reg[nr] = val; \
1192         w83627ehf_write_value(data, W83627EHF_REG_##REG[nr], val); \
1193         mutex_unlock(&data->update_lock); \
1194         return count; \
1195 } \
1196
1197 fan_time_functions(fan_stop_time, FAN_STOP_TIME)
1198
1199 static ssize_t show_name(struct device *dev, struct device_attribute *attr,
1200                          char *buf)
1201 {
1202         struct w83627ehf_data *data = dev_get_drvdata(dev);
1203
1204         return sprintf(buf, "%s\n", data->name);
1205 }
1206 static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
1207
1208 static struct sensor_device_attribute sda_sf3_arrays_fan4[] = {
1209         SENSOR_ATTR(pwm4_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1210                     store_fan_stop_time, 3),
1211         SENSOR_ATTR(pwm4_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1212                     store_fan_start_output, 3),
1213         SENSOR_ATTR(pwm4_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1214                     store_fan_stop_output, 3),
1215         SENSOR_ATTR(pwm4_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1216                     store_fan_max_output, 3),
1217         SENSOR_ATTR(pwm4_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1218                     store_fan_step_output, 3),
1219 };
1220
1221 static struct sensor_device_attribute sda_sf3_arrays[] = {
1222         SENSOR_ATTR(pwm1_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1223                     store_fan_stop_time, 0),
1224         SENSOR_ATTR(pwm2_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1225                     store_fan_stop_time, 1),
1226         SENSOR_ATTR(pwm3_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1227                     store_fan_stop_time, 2),
1228         SENSOR_ATTR(pwm1_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1229                     store_fan_start_output, 0),
1230         SENSOR_ATTR(pwm2_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1231                     store_fan_start_output, 1),
1232         SENSOR_ATTR(pwm3_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1233                     store_fan_start_output, 2),
1234         SENSOR_ATTR(pwm1_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1235                     store_fan_stop_output, 0),
1236         SENSOR_ATTR(pwm2_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1237                     store_fan_stop_output, 1),
1238         SENSOR_ATTR(pwm3_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1239                     store_fan_stop_output, 2),
1240 };
1241
1242
1243 /*
1244  * pwm1 and pwm3 don't support max and step settings on all chips.
1245  * Need to check support while generating/removing attribute files.
1246  */
1247 static struct sensor_device_attribute sda_sf3_max_step_arrays[] = {
1248         SENSOR_ATTR(pwm1_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1249                     store_fan_max_output, 0),
1250         SENSOR_ATTR(pwm1_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1251                     store_fan_step_output, 0),
1252         SENSOR_ATTR(pwm2_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1253                     store_fan_max_output, 1),
1254         SENSOR_ATTR(pwm2_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1255                     store_fan_step_output, 1),
1256         SENSOR_ATTR(pwm3_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1257                     store_fan_max_output, 2),
1258         SENSOR_ATTR(pwm3_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1259                     store_fan_step_output, 2),
1260 };
1261
1262 static ssize_t
1263 show_vid(struct device *dev, struct device_attribute *attr, char *buf)
1264 {
1265         struct w83627ehf_data *data = dev_get_drvdata(dev);
1266         return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
1267 }
1268 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL);
1269
1270 /*
1271  * Driver and device management
1272  */
1273
1274 static void w83627ehf_device_remove_files(struct device *dev)
1275 {
1276         /* some entries in the following arrays may not have been used in
1277          * device_create_file(), but device_remove_file() will ignore them */
1278         int i;
1279         struct w83627ehf_data *data = dev_get_drvdata(dev);
1280
1281         for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++)
1282                 device_remove_file(dev, &sda_sf3_arrays[i].dev_attr);
1283         for (i = 0; i < ARRAY_SIZE(sda_sf3_max_step_arrays); i++) {
1284                 struct sensor_device_attribute *attr =
1285                   &sda_sf3_max_step_arrays[i];
1286                 if (data->REG_FAN_STEP_OUTPUT[attr->index] != 0xff)
1287                         device_remove_file(dev, &attr->dev_attr);
1288         }
1289         for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan4); i++)
1290                 device_remove_file(dev, &sda_sf3_arrays_fan4[i].dev_attr);
1291         for (i = 0; i < data->in_num; i++) {
1292                 if ((i == 6) && data->in6_skip)
1293                         continue;
1294                 device_remove_file(dev, &sda_in_input[i].dev_attr);
1295                 device_remove_file(dev, &sda_in_alarm[i].dev_attr);
1296                 device_remove_file(dev, &sda_in_min[i].dev_attr);
1297                 device_remove_file(dev, &sda_in_max[i].dev_attr);
1298         }
1299         for (i = 0; i < 5; i++) {
1300                 device_remove_file(dev, &sda_fan_input[i].dev_attr);
1301                 device_remove_file(dev, &sda_fan_alarm[i].dev_attr);
1302                 device_remove_file(dev, &sda_fan_div[i].dev_attr);
1303                 device_remove_file(dev, &sda_fan_min[i].dev_attr);
1304         }
1305         for (i = 0; i < data->pwm_num; i++) {
1306                 device_remove_file(dev, &sda_pwm[i].dev_attr);
1307                 device_remove_file(dev, &sda_pwm_mode[i].dev_attr);
1308                 device_remove_file(dev, &sda_pwm_enable[i].dev_attr);
1309                 device_remove_file(dev, &sda_target_temp[i].dev_attr);
1310                 device_remove_file(dev, &sda_tolerance[i].dev_attr);
1311         }
1312         for (i = 0; i < 3; i++) {
1313                 if ((i == 2) && data->temp3_disable)
1314                         continue;
1315                 device_remove_file(dev, &sda_temp_input[i].dev_attr);
1316                 device_remove_file(dev, &sda_temp_max[i].dev_attr);
1317                 device_remove_file(dev, &sda_temp_max_hyst[i].dev_attr);
1318                 device_remove_file(dev, &sda_temp_alarm[i].dev_attr);
1319                 device_remove_file(dev, &sda_temp_type[i].dev_attr);
1320         }
1321
1322         device_remove_file(dev, &dev_attr_name);
1323         device_remove_file(dev, &dev_attr_cpu0_vid);
1324 }
1325
1326 /* Get the monitoring functions started */
1327 static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data)
1328 {
1329         int i;
1330         u8 tmp, diode;
1331
1332         /* Start monitoring is needed */
1333         tmp = w83627ehf_read_value(data, W83627EHF_REG_CONFIG);
1334         if (!(tmp & 0x01))
1335                 w83627ehf_write_value(data, W83627EHF_REG_CONFIG,
1336                                       tmp | 0x01);
1337
1338         /* Enable temp2 and temp3 if needed */
1339         for (i = 0; i < 2; i++) {
1340                 tmp = w83627ehf_read_value(data,
1341                                            W83627EHF_REG_TEMP_CONFIG[i]);
1342                 if ((i == 1) && data->temp3_disable)
1343                         continue;
1344                 if (tmp & 0x01)
1345                         w83627ehf_write_value(data,
1346                                               W83627EHF_REG_TEMP_CONFIG[i],
1347                                               tmp & 0xfe);
1348         }
1349
1350         /* Enable VBAT monitoring if needed */
1351         tmp = w83627ehf_read_value(data, W83627EHF_REG_VBAT);
1352         if (!(tmp & 0x01))
1353                 w83627ehf_write_value(data, W83627EHF_REG_VBAT, tmp | 0x01);
1354
1355         /* Get thermal sensor types */
1356         diode = w83627ehf_read_value(data, W83627EHF_REG_DIODE);
1357         for (i = 0; i < 3; i++) {
1358                 if ((tmp & (0x02 << i)))
1359                         data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 2;
1360                 else
1361                         data->temp_type[i] = 4; /* thermistor */
1362         }
1363 }
1364
1365 static int __devinit w83627ehf_probe(struct platform_device *pdev)
1366 {
1367         struct device *dev = &pdev->dev;
1368         struct w83627ehf_sio_data *sio_data = dev->platform_data;
1369         struct w83627ehf_data *data;
1370         struct resource *res;
1371         u8 fan4pin, fan5pin, en_vrm10;
1372         int i, err = 0;
1373
1374         res = platform_get_resource(pdev, IORESOURCE_IO, 0);
1375         if (!request_region(res->start, IOREGION_LENGTH, DRVNAME)) {
1376                 err = -EBUSY;
1377                 dev_err(dev, "Failed to request region 0x%lx-0x%lx\n",
1378                         (unsigned long)res->start,
1379                         (unsigned long)res->start + IOREGION_LENGTH - 1);
1380                 goto exit;
1381         }
1382
1383         if (!(data = kzalloc(sizeof(struct w83627ehf_data), GFP_KERNEL))) {
1384                 err = -ENOMEM;
1385                 goto exit_release;
1386         }
1387
1388         data->addr = res->start;
1389         mutex_init(&data->lock);
1390         mutex_init(&data->update_lock);
1391         data->name = w83627ehf_device_names[sio_data->kind];
1392         platform_set_drvdata(pdev, data);
1393
1394         /* 627EHG and 627EHF have 10 voltage inputs; 627DHG and 667HG have 9 */
1395         data->in_num = (sio_data->kind == w83627ehf) ? 10 : 9;
1396         /* 667HG has 3 pwms */
1397         data->pwm_num = (sio_data->kind == w83667hg
1398                          || sio_data->kind == w83667hg_b) ? 3 : 4;
1399
1400         /* Check temp3 configuration bit for 667HG */
1401         if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b) {
1402                 data->temp3_disable = w83627ehf_read_value(data,
1403                                         W83627EHF_REG_TEMP_CONFIG[1]) & 0x01;
1404                 data->in6_skip = !data->temp3_disable;
1405         }
1406
1407         data->REG_FAN_START_OUTPUT = W83627EHF_REG_FAN_START_OUTPUT;
1408         data->REG_FAN_STOP_OUTPUT = W83627EHF_REG_FAN_STOP_OUTPUT;
1409         if (sio_data->kind == w83667hg_b) {
1410                 data->REG_FAN_MAX_OUTPUT =
1411                   W83627EHF_REG_FAN_MAX_OUTPUT_W83667_B;
1412                 data->REG_FAN_STEP_OUTPUT =
1413                   W83627EHF_REG_FAN_STEP_OUTPUT_W83667_B;
1414         } else {
1415                 data->REG_FAN_MAX_OUTPUT =
1416                   W83627EHF_REG_FAN_MAX_OUTPUT_COMMON;
1417                 data->REG_FAN_STEP_OUTPUT =
1418                   W83627EHF_REG_FAN_STEP_OUTPUT_COMMON;
1419         }
1420
1421         /* Initialize the chip */
1422         w83627ehf_init_device(data);
1423
1424         data->vrm = vid_which_vrm();
1425         superio_enter(sio_data->sioreg);
1426         /* Read VID value */
1427         if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b) {
1428                 /* W83667HG has different pins for VID input and output, so
1429                 we can get the VID input values directly at logical device D
1430                 0xe3. */
1431                 superio_select(sio_data->sioreg, W83667HG_LD_VID);
1432                 data->vid = superio_inb(sio_data->sioreg, 0xe3);
1433                 err = device_create_file(dev, &dev_attr_cpu0_vid);
1434                 if (err)
1435                         goto exit_release;
1436         } else {
1437                 superio_select(sio_data->sioreg, W83627EHF_LD_HWM);
1438                 if (superio_inb(sio_data->sioreg, SIO_REG_VID_CTRL) & 0x80) {
1439                         /* Set VID input sensibility if needed. In theory the
1440                            BIOS should have set it, but in practice it's not
1441                            always the case. We only do it for the W83627EHF/EHG
1442                            because the W83627DHG is more complex in this
1443                            respect. */
1444                         if (sio_data->kind == w83627ehf) {
1445                                 en_vrm10 = superio_inb(sio_data->sioreg,
1446                                                        SIO_REG_EN_VRM10);
1447                                 if ((en_vrm10 & 0x08) && data->vrm == 90) {
1448                                         dev_warn(dev, "Setting VID input "
1449                                                  "voltage to TTL\n");
1450                                         superio_outb(sio_data->sioreg,
1451                                                      SIO_REG_EN_VRM10,
1452                                                      en_vrm10 & ~0x08);
1453                                 } else if (!(en_vrm10 & 0x08)
1454                                            && data->vrm == 100) {
1455                                         dev_warn(dev, "Setting VID input "
1456                                                  "voltage to VRM10\n");
1457                                         superio_outb(sio_data->sioreg,
1458                                                      SIO_REG_EN_VRM10,
1459                                                      en_vrm10 | 0x08);
1460                                 }
1461                         }
1462
1463                         data->vid = superio_inb(sio_data->sioreg,
1464                                                 SIO_REG_VID_DATA);
1465                         if (sio_data->kind == w83627ehf) /* 6 VID pins only */
1466                                 data->vid &= 0x3f;
1467
1468                         err = device_create_file(dev, &dev_attr_cpu0_vid);
1469                         if (err)
1470                                 goto exit_release;
1471                 } else {
1472                         dev_info(dev, "VID pins in output mode, CPU VID not "
1473                                  "available\n");
1474                 }
1475         }
1476
1477         /* fan4 and fan5 share some pins with the GPIO and serial flash */
1478         if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b) {
1479                 fan5pin = superio_inb(sio_data->sioreg, 0x27) & 0x20;
1480                 fan4pin = superio_inb(sio_data->sioreg, 0x27) & 0x40;
1481         } else {
1482                 fan5pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x02);
1483                 fan4pin = !(superio_inb(sio_data->sioreg, 0x29) & 0x06);
1484         }
1485         superio_exit(sio_data->sioreg);
1486
1487         /* It looks like fan4 and fan5 pins can be alternatively used
1488            as fan on/off switches, but fan5 control is write only :/
1489            We assume that if the serial interface is disabled, designers
1490            connected fan5 as input unless they are emitting log 1, which
1491            is not the default. */
1492
1493         data->has_fan = 0x07; /* fan1, fan2 and fan3 */
1494         i = w83627ehf_read_value(data, W83627EHF_REG_FANDIV1);
1495         if ((i & (1 << 2)) && fan4pin)
1496                 data->has_fan |= (1 << 3);
1497         if (!(i & (1 << 1)) && fan5pin)
1498                 data->has_fan |= (1 << 4);
1499
1500         /* Read fan clock dividers immediately */
1501         w83627ehf_update_fan_div(data);
1502
1503         /* Register sysfs hooks */
1504         for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++)
1505                 if ((err = device_create_file(dev,
1506                         &sda_sf3_arrays[i].dev_attr)))
1507                         goto exit_remove;
1508
1509         for (i = 0; i < ARRAY_SIZE(sda_sf3_max_step_arrays); i++) {
1510                 struct sensor_device_attribute *attr =
1511                   &sda_sf3_max_step_arrays[i];
1512                 if (data->REG_FAN_STEP_OUTPUT[attr->index] != 0xff) {
1513                         err = device_create_file(dev, &attr->dev_attr);
1514                         if (err)
1515                                 goto exit_remove;
1516                 }
1517         }
1518         /* if fan4 is enabled create the sf3 files for it */
1519         if ((data->has_fan & (1 << 3)) && data->pwm_num >= 4)
1520                 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan4); i++) {
1521                         if ((err = device_create_file(dev,
1522                                 &sda_sf3_arrays_fan4[i].dev_attr)))
1523                                 goto exit_remove;
1524                 }
1525
1526         for (i = 0; i < data->in_num; i++) {
1527                 if ((i == 6) && data->in6_skip)
1528                         continue;
1529                 if ((err = device_create_file(dev, &sda_in_input[i].dev_attr))
1530                         || (err = device_create_file(dev,
1531                                 &sda_in_alarm[i].dev_attr))
1532                         || (err = device_create_file(dev,
1533                                 &sda_in_min[i].dev_attr))
1534                         || (err = device_create_file(dev,
1535                                 &sda_in_max[i].dev_attr)))
1536                         goto exit_remove;
1537         }
1538
1539         for (i = 0; i < 5; i++) {
1540                 if (data->has_fan & (1 << i)) {
1541                         if ((err = device_create_file(dev,
1542                                         &sda_fan_input[i].dev_attr))
1543                                 || (err = device_create_file(dev,
1544                                         &sda_fan_alarm[i].dev_attr))
1545                                 || (err = device_create_file(dev,
1546                                         &sda_fan_div[i].dev_attr))
1547                                 || (err = device_create_file(dev,
1548                                         &sda_fan_min[i].dev_attr)))
1549                                 goto exit_remove;
1550                         if (i < data->pwm_num &&
1551                                 ((err = device_create_file(dev,
1552                                         &sda_pwm[i].dev_attr))
1553                                 || (err = device_create_file(dev,
1554                                         &sda_pwm_mode[i].dev_attr))
1555                                 || (err = device_create_file(dev,
1556                                         &sda_pwm_enable[i].dev_attr))
1557                                 || (err = device_create_file(dev,
1558                                         &sda_target_temp[i].dev_attr))
1559                                 || (err = device_create_file(dev,
1560                                         &sda_tolerance[i].dev_attr))))
1561                                 goto exit_remove;
1562                 }
1563         }
1564
1565         for (i = 0; i < 3; i++) {
1566                 if ((i == 2) && data->temp3_disable)
1567                         continue;
1568                 if ((err = device_create_file(dev,
1569                                 &sda_temp_input[i].dev_attr))
1570                         || (err = device_create_file(dev,
1571                                 &sda_temp_max[i].dev_attr))
1572                         || (err = device_create_file(dev,
1573                                 &sda_temp_max_hyst[i].dev_attr))
1574                         || (err = device_create_file(dev,
1575                                 &sda_temp_alarm[i].dev_attr))
1576                         || (err = device_create_file(dev,
1577                                 &sda_temp_type[i].dev_attr)))
1578                         goto exit_remove;
1579         }
1580
1581         err = device_create_file(dev, &dev_attr_name);
1582         if (err)
1583                 goto exit_remove;
1584
1585         data->hwmon_dev = hwmon_device_register(dev);
1586         if (IS_ERR(data->hwmon_dev)) {
1587                 err = PTR_ERR(data->hwmon_dev);
1588                 goto exit_remove;
1589         }
1590
1591         return 0;
1592
1593 exit_remove:
1594         w83627ehf_device_remove_files(dev);
1595         kfree(data);
1596         platform_set_drvdata(pdev, NULL);
1597 exit_release:
1598         release_region(res->start, IOREGION_LENGTH);
1599 exit:
1600         return err;
1601 }
1602
1603 static int __devexit w83627ehf_remove(struct platform_device *pdev)
1604 {
1605         struct w83627ehf_data *data = platform_get_drvdata(pdev);
1606
1607         hwmon_device_unregister(data->hwmon_dev);
1608         w83627ehf_device_remove_files(&pdev->dev);
1609         release_region(data->addr, IOREGION_LENGTH);
1610         platform_set_drvdata(pdev, NULL);
1611         kfree(data);
1612
1613         return 0;
1614 }
1615
1616 static struct platform_driver w83627ehf_driver = {
1617         .driver = {
1618                 .owner  = THIS_MODULE,
1619                 .name   = DRVNAME,
1620         },
1621         .probe          = w83627ehf_probe,
1622         .remove         = __devexit_p(w83627ehf_remove),
1623 };
1624
1625 /* w83627ehf_find() looks for a '627 in the Super-I/O config space */
1626 static int __init w83627ehf_find(int sioaddr, unsigned short *addr,
1627                                  struct w83627ehf_sio_data *sio_data)
1628 {
1629         static const char __initdata sio_name_W83627EHF[] = "W83627EHF";
1630         static const char __initdata sio_name_W83627EHG[] = "W83627EHG";
1631         static const char __initdata sio_name_W83627DHG[] = "W83627DHG";
1632         static const char __initdata sio_name_W83627DHG_P[] = "W83627DHG-P";
1633         static const char __initdata sio_name_W83667HG[] = "W83667HG";
1634         static const char __initdata sio_name_W83667HG_B[] = "W83667HG-B";
1635
1636         u16 val;
1637         const char *sio_name;
1638
1639         superio_enter(sioaddr);
1640
1641         if (force_id)
1642                 val = force_id;
1643         else
1644                 val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8)
1645                     | superio_inb(sioaddr, SIO_REG_DEVID + 1);
1646         switch (val & SIO_ID_MASK) {
1647         case SIO_W83627EHF_ID:
1648                 sio_data->kind = w83627ehf;
1649                 sio_name = sio_name_W83627EHF;
1650                 break;
1651         case SIO_W83627EHG_ID:
1652                 sio_data->kind = w83627ehf;
1653                 sio_name = sio_name_W83627EHG;
1654                 break;
1655         case SIO_W83627DHG_ID:
1656                 sio_data->kind = w83627dhg;
1657                 sio_name = sio_name_W83627DHG;
1658                 break;
1659         case SIO_W83627DHG_P_ID:
1660                 sio_data->kind = w83627dhg_p;
1661                 sio_name = sio_name_W83627DHG_P;
1662                 break;
1663         case SIO_W83667HG_ID:
1664                 sio_data->kind = w83667hg;
1665                 sio_name = sio_name_W83667HG;
1666                 break;
1667         case SIO_W83667HG_B_ID:
1668                 sio_data->kind = w83667hg_b;
1669                 sio_name = sio_name_W83667HG_B;
1670                 break;
1671         default:
1672                 if (val != 0xffff)
1673                         pr_debug("unsupported chip ID: 0x%04x\n", val);
1674                 superio_exit(sioaddr);
1675                 return -ENODEV;
1676         }
1677
1678         /* We have a known chip, find the HWM I/O address */
1679         superio_select(sioaddr, W83627EHF_LD_HWM);
1680         val = (superio_inb(sioaddr, SIO_REG_ADDR) << 8)
1681             | superio_inb(sioaddr, SIO_REG_ADDR + 1);
1682         *addr = val & IOREGION_ALIGNMENT;
1683         if (*addr == 0) {
1684                 pr_err("Refusing to enable a Super-I/O device with a base I/O port 0\n");
1685                 superio_exit(sioaddr);
1686                 return -ENODEV;
1687         }
1688
1689         /* Activate logical device if needed */
1690         val = superio_inb(sioaddr, SIO_REG_ENABLE);
1691         if (!(val & 0x01)) {
1692                 pr_warn("Forcibly enabling Super-I/O. Sensor is probably unusable.\n");
1693                 superio_outb(sioaddr, SIO_REG_ENABLE, val | 0x01);
1694         }
1695
1696         superio_exit(sioaddr);
1697         pr_info("Found %s chip at %#x\n", sio_name, *addr);
1698         sio_data->sioreg = sioaddr;
1699
1700         return 0;
1701 }
1702
1703 /* when Super-I/O functions move to a separate file, the Super-I/O
1704  * bus will manage the lifetime of the device and this module will only keep
1705  * track of the w83627ehf driver. But since we platform_device_alloc(), we
1706  * must keep track of the device */
1707 static struct platform_device *pdev;
1708
1709 static int __init sensors_w83627ehf_init(void)
1710 {
1711         int err;
1712         unsigned short address;
1713         struct resource res;
1714         struct w83627ehf_sio_data sio_data;
1715
1716         /* initialize sio_data->kind and sio_data->sioreg.
1717          *
1718          * when Super-I/O functions move to a separate file, the Super-I/O
1719          * driver will probe 0x2e and 0x4e and auto-detect the presence of a
1720          * w83627ehf hardware monitor, and call probe() */
1721         if (w83627ehf_find(0x2e, &address, &sio_data) &&
1722             w83627ehf_find(0x4e, &address, &sio_data))
1723                 return -ENODEV;
1724
1725         err = platform_driver_register(&w83627ehf_driver);
1726         if (err)
1727                 goto exit;
1728
1729         if (!(pdev = platform_device_alloc(DRVNAME, address))) {
1730                 err = -ENOMEM;
1731                 pr_err("Device allocation failed\n");
1732                 goto exit_unregister;
1733         }
1734
1735         err = platform_device_add_data(pdev, &sio_data,
1736                                        sizeof(struct w83627ehf_sio_data));
1737         if (err) {
1738                 pr_err("Platform data allocation failed\n");
1739                 goto exit_device_put;
1740         }
1741
1742         memset(&res, 0, sizeof(res));
1743         res.name = DRVNAME;
1744         res.start = address + IOREGION_OFFSET;
1745         res.end = address + IOREGION_OFFSET + IOREGION_LENGTH - 1;
1746         res.flags = IORESOURCE_IO;
1747
1748         err = acpi_check_resource_conflict(&res);
1749         if (err)
1750                 goto exit_device_put;
1751
1752         err = platform_device_add_resources(pdev, &res, 1);
1753         if (err) {
1754                 pr_err("Device resource addition failed (%d)\n", err);
1755                 goto exit_device_put;
1756         }
1757
1758         /* platform_device_add calls probe() */
1759         err = platform_device_add(pdev);
1760         if (err) {
1761                 pr_err("Device addition failed (%d)\n", err);
1762                 goto exit_device_put;
1763         }
1764
1765         return 0;
1766
1767 exit_device_put:
1768         platform_device_put(pdev);
1769 exit_unregister:
1770         platform_driver_unregister(&w83627ehf_driver);
1771 exit:
1772         return err;
1773 }
1774
1775 static void __exit sensors_w83627ehf_exit(void)
1776 {
1777         platform_device_unregister(pdev);
1778         platform_driver_unregister(&w83627ehf_driver);
1779 }
1780
1781 MODULE_AUTHOR("Jean Delvare <khali@linux-fr.org>");
1782 MODULE_DESCRIPTION("W83627EHF driver");
1783 MODULE_LICENSE("GPL");
1784
1785 module_init(sensors_w83627ehf_init);
1786 module_exit(sensors_w83627ehf_exit);