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