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