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