xref: /linux/drivers/hwmon/w83791d.c (revision 14b42963f64b98ab61fa9723c03d71aa5ef4f862)
1 /*
2     w83791d.c - Part of lm_sensors, Linux kernel modules for hardware
3                 monitoring
4 
5     Copyright (C) 2006 Charles Spirakis <bezaur@gmail.com>
6 
7     This program is free software; you can redistribute it and/or modify
8     it under the terms of the GNU General Public License as published by
9     the Free Software Foundation; either version 2 of the License, or
10     (at your option) any later version.
11 
12     This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15     GNU General Public License for more details.
16 
17     You should have received a copy of the GNU General Public License
18     along with this program; if not, write to the Free Software
19     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21 
22 /*
23     Supports following chips:
24 
25     Chip	#vin	#fanin	#pwm	#temp	wchipid	vendid	i2c	ISA
26     w83791d	10	5	3	3	0x71	0x5ca3	yes	no
27 
28     The w83791d chip appears to be part way between the 83781d and the
29     83792d. Thus, this file is derived from both the w83792d.c and
30     w83781d.c files, but its output is more along the lines of the
31     83781d (which means there are no changes to the user-mode sensors
32     program which treats the 83791d as an 83781d).
33 */
34 
35 #include <linux/config.h>
36 #include <linux/module.h>
37 #include <linux/init.h>
38 #include <linux/slab.h>
39 #include <linux/i2c.h>
40 #include <linux/hwmon.h>
41 #include <linux/hwmon-vid.h>
42 #include <linux/hwmon-sysfs.h>
43 #include <linux/err.h>
44 #include <linux/mutex.h>
45 
46 #define NUMBER_OF_VIN		10
47 #define NUMBER_OF_FANIN		5
48 #define NUMBER_OF_TEMPIN	3
49 
50 /* Addresses to scan */
51 static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f, I2C_CLIENT_END };
52 
53 /* Insmod parameters */
54 I2C_CLIENT_INSMOD_1(w83791d);
55 I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: "
56 			"{bus, clientaddr, subclientaddr1, subclientaddr2}");
57 
58 static int reset;
59 module_param(reset, bool, 0);
60 MODULE_PARM_DESC(reset, "Set to one to force a hardware chip reset");
61 
62 static int init;
63 module_param(init, bool, 0);
64 MODULE_PARM_DESC(init, "Set to one to force extra software initialization");
65 
66 /* The W83791D registers */
67 static const u8 W83791D_REG_IN[NUMBER_OF_VIN] = {
68 	0x20,			/* VCOREA in DataSheet */
69 	0x21,			/* VINR0 in DataSheet */
70 	0x22,			/* +3.3VIN in DataSheet */
71 	0x23,			/* VDD5V in DataSheet */
72 	0x24,			/* +12VIN in DataSheet */
73 	0x25,			/* -12VIN in DataSheet */
74 	0x26,			/* -5VIN in DataSheet */
75 	0xB0,			/* 5VSB in DataSheet */
76 	0xB1,			/* VBAT in DataSheet */
77 	0xB2			/* VINR1 in DataSheet */
78 };
79 
80 static const u8 W83791D_REG_IN_MAX[NUMBER_OF_VIN] = {
81 	0x2B,			/* VCOREA High Limit in DataSheet */
82 	0x2D,			/* VINR0 High Limit in DataSheet */
83 	0x2F,			/* +3.3VIN High Limit in DataSheet */
84 	0x31,			/* VDD5V High Limit in DataSheet */
85 	0x33,			/* +12VIN High Limit in DataSheet */
86 	0x35,			/* -12VIN High Limit in DataSheet */
87 	0x37,			/* -5VIN High Limit in DataSheet */
88 	0xB4,			/* 5VSB High Limit in DataSheet */
89 	0xB6,			/* VBAT High Limit in DataSheet */
90 	0xB8			/* VINR1 High Limit in DataSheet */
91 };
92 static const u8 W83791D_REG_IN_MIN[NUMBER_OF_VIN] = {
93 	0x2C,			/* VCOREA Low Limit in DataSheet */
94 	0x2E,			/* VINR0 Low Limit in DataSheet */
95 	0x30,			/* +3.3VIN Low Limit in DataSheet */
96 	0x32,			/* VDD5V Low Limit in DataSheet */
97 	0x34,			/* +12VIN Low Limit in DataSheet */
98 	0x36,			/* -12VIN Low Limit in DataSheet */
99 	0x38,			/* -5VIN Low Limit in DataSheet */
100 	0xB5,			/* 5VSB Low Limit in DataSheet */
101 	0xB7,			/* VBAT Low Limit in DataSheet */
102 	0xB9			/* VINR1 Low Limit in DataSheet */
103 };
104 static const u8 W83791D_REG_FAN[NUMBER_OF_FANIN] = {
105 	0x28,			/* FAN 1 Count in DataSheet */
106 	0x29,			/* FAN 2 Count in DataSheet */
107 	0x2A,			/* FAN 3 Count in DataSheet */
108 	0xBA,			/* FAN 4 Count in DataSheet */
109 	0xBB,			/* FAN 5 Count in DataSheet */
110 };
111 static const u8 W83791D_REG_FAN_MIN[NUMBER_OF_FANIN] = {
112 	0x3B,			/* FAN 1 Count Low Limit in DataSheet */
113 	0x3C,			/* FAN 2 Count Low Limit in DataSheet */
114 	0x3D,			/* FAN 3 Count Low Limit in DataSheet */
115 	0xBC,			/* FAN 4 Count Low Limit in DataSheet */
116 	0xBD,			/* FAN 5 Count Low Limit in DataSheet */
117 };
118 
119 static const u8 W83791D_REG_FAN_CFG[2] = {
120 	0x84,			/* FAN 1/2 configuration */
121 	0x95,			/* FAN 3 configuration */
122 };
123 
124 static const u8 W83791D_REG_FAN_DIV[3] = {
125 	0x47,			/* contains FAN1 and FAN2 Divisor */
126 	0x4b,			/* contains FAN3 Divisor */
127 	0x5C,			/* contains FAN4 and FAN5 Divisor */
128 };
129 
130 #define W83791D_REG_BANK		0x4E
131 #define W83791D_REG_TEMP2_CONFIG	0xC2
132 #define W83791D_REG_TEMP3_CONFIG	0xCA
133 
134 static const u8 W83791D_REG_TEMP1[3] = {
135 	0x27,			/* TEMP 1 in DataSheet */
136 	0x39,			/* TEMP 1 Over in DataSheet */
137 	0x3A,			/* TEMP 1 Hyst in DataSheet */
138 };
139 
140 static const u8 W83791D_REG_TEMP_ADD[2][6] = {
141 	{0xC0,			/* TEMP 2 in DataSheet */
142 	 0xC1,			/* TEMP 2(0.5 deg) in DataSheet */
143 	 0xC5,			/* TEMP 2 Over High part in DataSheet */
144 	 0xC6,			/* TEMP 2 Over Low part in DataSheet */
145 	 0xC3,			/* TEMP 2 Thyst High part in DataSheet */
146 	 0xC4},			/* TEMP 2 Thyst Low part in DataSheet */
147 	{0xC8,			/* TEMP 3 in DataSheet */
148 	 0xC9,			/* TEMP 3(0.5 deg) in DataSheet */
149 	 0xCD,			/* TEMP 3 Over High part in DataSheet */
150 	 0xCE,			/* TEMP 3 Over Low part in DataSheet */
151 	 0xCB,			/* TEMP 3 Thyst High part in DataSheet */
152 	 0xCC}			/* TEMP 3 Thyst Low part in DataSheet */
153 };
154 
155 #define W83791D_REG_BEEP_CONFIG		0x4D
156 
157 static const u8 W83791D_REG_BEEP_CTRL[3] = {
158 	0x56,			/* BEEP Control Register 1 */
159 	0x57,			/* BEEP Control Register 2 */
160 	0xA3,			/* BEEP Control Register 3 */
161 };
162 
163 #define W83791D_REG_CONFIG		0x40
164 #define W83791D_REG_VID_FANDIV		0x47
165 #define W83791D_REG_DID_VID4		0x49
166 #define W83791D_REG_WCHIPID		0x58
167 #define W83791D_REG_CHIPMAN		0x4F
168 #define W83791D_REG_PIN			0x4B
169 #define W83791D_REG_I2C_SUBADDR		0x4A
170 
171 #define W83791D_REG_ALARM1 0xA9	/* realtime status register1 */
172 #define W83791D_REG_ALARM2 0xAA	/* realtime status register2 */
173 #define W83791D_REG_ALARM3 0xAB	/* realtime status register3 */
174 
175 #define W83791D_REG_VBAT		0x5D
176 #define W83791D_REG_I2C_ADDR		0x48
177 
178 /* The SMBus locks itself. The Winbond W83791D has a bank select register
179    (index 0x4e), but the driver only accesses registers in bank 0. Since
180    we don't switch banks, we don't need any special code to handle
181    locking access between bank switches */
182 static inline int w83791d_read(struct i2c_client *client, u8 reg)
183 {
184 	return i2c_smbus_read_byte_data(client, reg);
185 }
186 
187 static inline int w83791d_write(struct i2c_client *client, u8 reg, u8 value)
188 {
189 	return i2c_smbus_write_byte_data(client, reg, value);
190 }
191 
192 /* The analog voltage inputs have 16mV LSB. Since the sysfs output is
193    in mV as would be measured on the chip input pin, need to just
194    multiply/divide by 16 to translate from/to register values. */
195 #define IN_TO_REG(val)		(SENSORS_LIMIT((((val) + 8) / 16), 0, 255))
196 #define IN_FROM_REG(val)	((val) * 16)
197 
198 static u8 fan_to_reg(long rpm, int div)
199 {
200 	if (rpm == 0)
201 		return 255;
202 	rpm = SENSORS_LIMIT(rpm, 1, 1000000);
203 	return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1, 254);
204 }
205 
206 #define FAN_FROM_REG(val,div)	((val) == 0   ? -1 : \
207 				((val) == 255 ? 0 : \
208 					1350000 / ((val) * (div))))
209 
210 /* for temp1 which is 8-bit resolution, LSB = 1 degree Celsius */
211 #define TEMP1_FROM_REG(val)	((val) * 1000)
212 #define TEMP1_TO_REG(val)	((val) <= -128000 ? -128 : \
213 				 (val) >= 127000 ? 127 : \
214 				 (val) < 0 ? ((val) - 500) / 1000 : \
215 				 ((val) + 500) / 1000)
216 
217 /* for temp2 and temp3 which are 9-bit resolution, LSB = 0.5 degree Celsius
218    Assumes the top 8 bits are the integral amount and the bottom 8 bits
219    are the fractional amount. Since we only have 0.5 degree resolution,
220    the bottom 7 bits will always be zero */
221 #define TEMP23_FROM_REG(val)	((val) / 128 * 500)
222 #define TEMP23_TO_REG(val)	((val) <= -128000 ? 0x8000 : \
223 				 (val) >= 127500 ? 0x7F80 : \
224 				 (val) < 0 ? ((val) - 250) / 500 * 128 : \
225 				 ((val) + 250) / 500 * 128)
226 
227 
228 #define BEEP_MASK_TO_REG(val)		((val) & 0xffffff)
229 #define BEEP_MASK_FROM_REG(val)		((val) & 0xffffff)
230 
231 #define DIV_FROM_REG(val)		(1 << (val))
232 
233 static u8 div_to_reg(int nr, long val)
234 {
235 	int i;
236 	int max;
237 
238 	/* first three fan's divisor max out at 8, rest max out at 128 */
239 	max = (nr < 3) ? 8 : 128;
240 	val = SENSORS_LIMIT(val, 1, max) >> 1;
241 	for (i = 0; i < 7; i++) {
242 		if (val == 0)
243 			break;
244 		val >>= 1;
245 	}
246 	return (u8) i;
247 }
248 
249 struct w83791d_data {
250 	struct i2c_client client;
251 	struct class_device *class_dev;
252 	struct mutex update_lock;
253 
254 	char valid;			/* !=0 if following fields are valid */
255 	unsigned long last_updated;	/* In jiffies */
256 
257 	/* array of 2 pointers to subclients */
258 	struct i2c_client *lm75[2];
259 
260 	/* volts */
261 	u8 in[NUMBER_OF_VIN];		/* Register value */
262 	u8 in_max[NUMBER_OF_VIN];	/* Register value */
263 	u8 in_min[NUMBER_OF_VIN];	/* Register value */
264 
265 	/* fans */
266 	u8 fan[NUMBER_OF_FANIN];	/* Register value */
267 	u8 fan_min[NUMBER_OF_FANIN];	/* Register value */
268 	u8 fan_div[NUMBER_OF_FANIN];	/* Register encoding, shifted right */
269 
270 	/* Temperature sensors */
271 
272 	s8 temp1[3];		/* current, over, thyst */
273 	s16 temp_add[2][3];	/* fixed point value. Top 8 bits are the
274 				   integral part, bottom 8 bits are the
275 				   fractional part. We only use the top
276 				   9 bits as the resolution is only
277 				   to the 0.5 degree C...
278 				   two sensors with three values
279 				   (cur, over, hyst)  */
280 
281 	/* Misc */
282 	u32 alarms;		/* realtime status register encoding,combined */
283 	u8 beep_enable;		/* Global beep enable */
284 	u32 beep_mask;		/* Mask off specific beeps */
285 	u8 vid;			/* Register encoding, combined */
286 	u8 vrm;			/* hwmon-vid */
287 };
288 
289 static int w83791d_attach_adapter(struct i2c_adapter *adapter);
290 static int w83791d_detect(struct i2c_adapter *adapter, int address, int kind);
291 static int w83791d_detach_client(struct i2c_client *client);
292 
293 static int w83791d_read(struct i2c_client *client, u8 register);
294 static int w83791d_write(struct i2c_client *client, u8 register, u8 value);
295 static struct w83791d_data *w83791d_update_device(struct device *dev);
296 
297 #ifdef DEBUG
298 static void w83791d_print_debug(struct w83791d_data *data, struct device *dev);
299 #endif
300 
301 static void w83791d_init_client(struct i2c_client *client);
302 
303 static struct i2c_driver w83791d_driver = {
304 	.driver = {
305 		.name = "w83791d",
306 	},
307 	.attach_adapter = w83791d_attach_adapter,
308 	.detach_client = w83791d_detach_client,
309 };
310 
311 /* following are the sysfs callback functions */
312 #define show_in_reg(reg) \
313 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
314 			char *buf) \
315 { \
316 	struct sensor_device_attribute *sensor_attr = \
317 						to_sensor_dev_attr(attr); \
318 	struct w83791d_data *data = w83791d_update_device(dev); \
319 	int nr = sensor_attr->index; \
320 	return sprintf(buf,"%d\n", IN_FROM_REG(data->reg[nr])); \
321 }
322 
323 show_in_reg(in);
324 show_in_reg(in_min);
325 show_in_reg(in_max);
326 
327 #define store_in_reg(REG, reg) \
328 static ssize_t store_in_##reg(struct device *dev, \
329 				struct device_attribute *attr, \
330 				const char *buf, size_t count) \
331 { \
332 	struct sensor_device_attribute *sensor_attr = \
333 						to_sensor_dev_attr(attr); \
334 	struct i2c_client *client = to_i2c_client(dev); \
335 	struct w83791d_data *data = i2c_get_clientdata(client); \
336 	unsigned long val = simple_strtoul(buf, NULL, 10); \
337 	int nr = sensor_attr->index; \
338 	 \
339 	mutex_lock(&data->update_lock); \
340 	data->in_##reg[nr] = IN_TO_REG(val); \
341 	w83791d_write(client, W83791D_REG_IN_##REG[nr], data->in_##reg[nr]); \
342 	mutex_unlock(&data->update_lock); \
343 	 \
344 	return count; \
345 }
346 store_in_reg(MIN, min);
347 store_in_reg(MAX, max);
348 
349 static struct sensor_device_attribute sda_in_input[] = {
350 	SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
351 	SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
352 	SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
353 	SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
354 	SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
355 	SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
356 	SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
357 	SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
358 	SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
359 	SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
360 };
361 
362 static struct sensor_device_attribute sda_in_min[] = {
363 	SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
364 	SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
365 	SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
366 	SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
367 	SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
368 	SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
369 	SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
370 	SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
371 	SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
372 	SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
373 };
374 
375 static struct sensor_device_attribute sda_in_max[] = {
376 	SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
377 	SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
378 	SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
379 	SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
380 	SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
381 	SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
382 	SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
383 	SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
384 	SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
385 	SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
386 };
387 
388 #define show_fan_reg(reg) \
389 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
390 				char *buf) \
391 { \
392 	struct sensor_device_attribute *sensor_attr = \
393 						to_sensor_dev_attr(attr); \
394 	struct w83791d_data *data = w83791d_update_device(dev); \
395 	int nr = sensor_attr->index; \
396 	return sprintf(buf,"%d\n", \
397 		FAN_FROM_REG(data->reg[nr], DIV_FROM_REG(data->fan_div[nr]))); \
398 }
399 
400 show_fan_reg(fan);
401 show_fan_reg(fan_min);
402 
403 static ssize_t store_fan_min(struct device *dev, struct device_attribute *attr,
404 				const char *buf, size_t count)
405 {
406 	struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
407 	struct i2c_client *client = to_i2c_client(dev);
408 	struct w83791d_data *data = i2c_get_clientdata(client);
409 	unsigned long val = simple_strtoul(buf, NULL, 10);
410 	int nr = sensor_attr->index;
411 
412 	mutex_lock(&data->update_lock);
413 	data->fan_min[nr] = fan_to_reg(val, DIV_FROM_REG(data->fan_div[nr]));
414 	w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
415 	mutex_unlock(&data->update_lock);
416 
417 	return count;
418 }
419 
420 static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
421 				char *buf)
422 {
423 	struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
424 	int nr = sensor_attr->index;
425 	struct w83791d_data *data = w83791d_update_device(dev);
426 	return sprintf(buf, "%u\n", DIV_FROM_REG(data->fan_div[nr]));
427 }
428 
429 /* Note: we save and restore the fan minimum here, because its value is
430    determined in part by the fan divisor.  This follows the principle of
431    least suprise; the user doesn't expect the fan minimum to change just
432    because the divisor changed. */
433 static ssize_t store_fan_div(struct device *dev, struct device_attribute *attr,
434 				const char *buf, size_t count)
435 {
436 	struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
437 	struct i2c_client *client = to_i2c_client(dev);
438 	struct w83791d_data *data = i2c_get_clientdata(client);
439 	int nr = sensor_attr->index;
440 	unsigned long min;
441 	u8 tmp_fan_div;
442 	u8 fan_div_reg;
443 	int indx = 0;
444 	u8 keep_mask = 0;
445 	u8 new_shift = 0;
446 
447 	/* Save fan_min */
448 	min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr]));
449 
450 	mutex_lock(&data->update_lock);
451 	data->fan_div[nr] = div_to_reg(nr, simple_strtoul(buf, NULL, 10));
452 
453 	switch (nr) {
454 	case 0:
455 		indx = 0;
456 		keep_mask = 0xcf;
457 		new_shift = 4;
458 		break;
459 	case 1:
460 		indx = 0;
461 		keep_mask = 0x3f;
462 		new_shift = 6;
463 		break;
464 	case 2:
465 		indx = 1;
466 		keep_mask = 0x3f;
467 		new_shift = 6;
468 		break;
469 	case 3:
470 		indx = 2;
471 		keep_mask = 0xf8;
472 		new_shift = 0;
473 		break;
474 	case 4:
475 		indx = 2;
476 		keep_mask = 0x8f;
477 		new_shift = 4;
478 		break;
479 #ifdef DEBUG
480 	default:
481 		dev_warn(dev, "store_fan_div: Unexpected nr seen: %d\n", nr);
482 		count = -EINVAL;
483 		goto err_exit;
484 #endif
485 	}
486 
487 	fan_div_reg = w83791d_read(client, W83791D_REG_FAN_DIV[indx])
488 			& keep_mask;
489 	tmp_fan_div = (data->fan_div[nr] << new_shift) & ~keep_mask;
490 
491 	w83791d_write(client, W83791D_REG_FAN_DIV[indx],
492 				fan_div_reg | tmp_fan_div);
493 
494 	/* Restore fan_min */
495 	data->fan_min[nr] = fan_to_reg(min, DIV_FROM_REG(data->fan_div[nr]));
496 	w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
497 
498 #ifdef DEBUG
499 err_exit:
500 #endif
501 	mutex_unlock(&data->update_lock);
502 
503 	return count;
504 }
505 
506 static struct sensor_device_attribute sda_fan_input[] = {
507 	SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
508 	SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
509 	SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
510 	SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
511 	SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
512 };
513 
514 static struct sensor_device_attribute sda_fan_min[] = {
515 	SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO,
516 			show_fan_min, store_fan_min, 0),
517 	SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO,
518 			show_fan_min, store_fan_min, 1),
519 	SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO,
520 			show_fan_min, store_fan_min, 2),
521 	SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO,
522 			show_fan_min, store_fan_min, 3),
523 	SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO,
524 			show_fan_min, store_fan_min, 4),
525 };
526 
527 static struct sensor_device_attribute sda_fan_div[] = {
528 	SENSOR_ATTR(fan1_div, S_IWUSR | S_IRUGO,
529 			show_fan_div, store_fan_div, 0),
530 	SENSOR_ATTR(fan2_div, S_IWUSR | S_IRUGO,
531 			show_fan_div, store_fan_div, 1),
532 	SENSOR_ATTR(fan3_div, S_IWUSR | S_IRUGO,
533 			show_fan_div, store_fan_div, 2),
534 	SENSOR_ATTR(fan4_div, S_IWUSR | S_IRUGO,
535 			show_fan_div, store_fan_div, 3),
536 	SENSOR_ATTR(fan5_div, S_IWUSR | S_IRUGO,
537 			show_fan_div, store_fan_div, 4),
538 };
539 
540 /* read/write the temperature1, includes measured value and limits */
541 static ssize_t show_temp1(struct device *dev, struct device_attribute *devattr,
542 				char *buf)
543 {
544 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
545 	struct w83791d_data *data = w83791d_update_device(dev);
546 	return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp1[attr->index]));
547 }
548 
549 static ssize_t store_temp1(struct device *dev, struct device_attribute *devattr,
550 				const char *buf, size_t count)
551 {
552 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
553 	struct i2c_client *client = to_i2c_client(dev);
554 	struct w83791d_data *data = i2c_get_clientdata(client);
555 	long val = simple_strtol(buf, NULL, 10);
556 	int nr = attr->index;
557 
558 	mutex_lock(&data->update_lock);
559 	data->temp1[nr] = TEMP1_TO_REG(val);
560 	w83791d_write(client, W83791D_REG_TEMP1[nr], data->temp1[nr]);
561 	mutex_unlock(&data->update_lock);
562 	return count;
563 }
564 
565 /* read/write temperature2-3, includes measured value and limits */
566 static ssize_t show_temp23(struct device *dev, struct device_attribute *devattr,
567 				char *buf)
568 {
569 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
570 	struct w83791d_data *data = w83791d_update_device(dev);
571 	int nr = attr->nr;
572 	int index = attr->index;
573 	return sprintf(buf, "%d\n", TEMP23_FROM_REG(data->temp_add[nr][index]));
574 }
575 
576 static ssize_t store_temp23(struct device *dev,
577 				struct device_attribute *devattr,
578 				const char *buf, size_t count)
579 {
580 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
581 	struct i2c_client *client = to_i2c_client(dev);
582 	struct w83791d_data *data = i2c_get_clientdata(client);
583 	long val = simple_strtol(buf, NULL, 10);
584 	int nr = attr->nr;
585 	int index = attr->index;
586 
587 	mutex_lock(&data->update_lock);
588 	data->temp_add[nr][index] = TEMP23_TO_REG(val);
589 	w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2],
590 				data->temp_add[nr][index] >> 8);
591 	w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2 + 1],
592 				data->temp_add[nr][index] & 0x80);
593 	mutex_unlock(&data->update_lock);
594 
595 	return count;
596 }
597 
598 static struct sensor_device_attribute_2 sda_temp_input[] = {
599 	SENSOR_ATTR_2(temp1_input, S_IRUGO, show_temp1, NULL, 0, 0),
600 	SENSOR_ATTR_2(temp2_input, S_IRUGO, show_temp23, NULL, 0, 0),
601 	SENSOR_ATTR_2(temp3_input, S_IRUGO, show_temp23, NULL, 1, 0),
602 };
603 
604 static struct sensor_device_attribute_2 sda_temp_max[] = {
605 	SENSOR_ATTR_2(temp1_max, S_IRUGO | S_IWUSR,
606 			show_temp1, store_temp1, 0, 1),
607 	SENSOR_ATTR_2(temp2_max, S_IRUGO | S_IWUSR,
608 			show_temp23, store_temp23, 0, 1),
609 	SENSOR_ATTR_2(temp3_max, S_IRUGO | S_IWUSR,
610 			show_temp23, store_temp23, 1, 1),
611 };
612 
613 static struct sensor_device_attribute_2 sda_temp_max_hyst[] = {
614 	SENSOR_ATTR_2(temp1_max_hyst, S_IRUGO | S_IWUSR,
615 			show_temp1, store_temp1, 0, 2),
616 	SENSOR_ATTR_2(temp2_max_hyst, S_IRUGO | S_IWUSR,
617 			show_temp23, store_temp23, 0, 2),
618 	SENSOR_ATTR_2(temp3_max_hyst, S_IRUGO | S_IWUSR,
619 			show_temp23, store_temp23, 1, 2),
620 };
621 
622 
623 /* get reatime status of all sensors items: voltage, temp, fan */
624 static ssize_t show_alarms_reg(struct device *dev,
625 				struct device_attribute *attr, char *buf)
626 {
627 	struct w83791d_data *data = w83791d_update_device(dev);
628 	return sprintf(buf, "%u\n", data->alarms);
629 }
630 
631 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
632 
633 /* Beep control */
634 
635 #define GLOBAL_BEEP_ENABLE_SHIFT	15
636 #define GLOBAL_BEEP_ENABLE_MASK		(1 << GLOBAL_BEEP_ENABLE_SHIFT)
637 
638 static ssize_t show_beep_enable(struct device *dev,
639 				struct device_attribute *attr, char *buf)
640 {
641 	struct w83791d_data *data = w83791d_update_device(dev);
642 	return sprintf(buf, "%d\n", data->beep_enable);
643 }
644 
645 static ssize_t show_beep_mask(struct device *dev,
646 				struct device_attribute *attr, char *buf)
647 {
648 	struct w83791d_data *data = w83791d_update_device(dev);
649 	return sprintf(buf, "%d\n", BEEP_MASK_FROM_REG(data->beep_mask));
650 }
651 
652 
653 static ssize_t store_beep_mask(struct device *dev,
654 				struct device_attribute *attr,
655 				const char *buf, size_t count)
656 {
657 	struct i2c_client *client = to_i2c_client(dev);
658 	struct w83791d_data *data = i2c_get_clientdata(client);
659 	long val = simple_strtol(buf, NULL, 10);
660 	int i;
661 
662 	mutex_lock(&data->update_lock);
663 
664 	/* The beep_enable state overrides any enabling request from
665 	   the masks */
666 	data->beep_mask = BEEP_MASK_TO_REG(val) & ~GLOBAL_BEEP_ENABLE_MASK;
667 	data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
668 
669 	val = data->beep_mask;
670 
671 	for (i = 0; i < 3; i++) {
672 		w83791d_write(client, W83791D_REG_BEEP_CTRL[i], (val & 0xff));
673 		val >>= 8;
674 	}
675 
676 	mutex_unlock(&data->update_lock);
677 
678 	return count;
679 }
680 
681 static ssize_t store_beep_enable(struct device *dev,
682 				struct device_attribute *attr,
683 				const char *buf, size_t count)
684 {
685 	struct i2c_client *client = to_i2c_client(dev);
686 	struct w83791d_data *data = i2c_get_clientdata(client);
687 	long val = simple_strtol(buf, NULL, 10);
688 
689 	mutex_lock(&data->update_lock);
690 
691 	data->beep_enable = val ? 1 : 0;
692 
693 	/* Keep the full mask value in sync with the current enable */
694 	data->beep_mask &= ~GLOBAL_BEEP_ENABLE_MASK;
695 	data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
696 
697 	/* The global control is in the second beep control register
698 	   so only need to update that register */
699 	val = (data->beep_mask >> 8) & 0xff;
700 
701 	w83791d_write(client, W83791D_REG_BEEP_CTRL[1], val);
702 
703 	mutex_unlock(&data->update_lock);
704 
705 	return count;
706 }
707 
708 static struct sensor_device_attribute sda_beep_ctrl[] = {
709 	SENSOR_ATTR(beep_enable, S_IRUGO | S_IWUSR,
710 			show_beep_enable, store_beep_enable, 0),
711 	SENSOR_ATTR(beep_mask, S_IRUGO | S_IWUSR,
712 			show_beep_mask, store_beep_mask, 1)
713 };
714 
715 /* cpu voltage regulation information */
716 static ssize_t show_vid_reg(struct device *dev,
717 				struct device_attribute *attr, char *buf)
718 {
719 	struct w83791d_data *data = w83791d_update_device(dev);
720 	return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
721 }
722 
723 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
724 
725 static ssize_t show_vrm_reg(struct device *dev,
726 				struct device_attribute *attr, char *buf)
727 {
728 	struct w83791d_data *data = w83791d_update_device(dev);
729 	return sprintf(buf, "%d\n", data->vrm);
730 }
731 
732 static ssize_t store_vrm_reg(struct device *dev,
733 				struct device_attribute *attr,
734 				const char *buf, size_t count)
735 {
736 	struct i2c_client *client = to_i2c_client(dev);
737 	struct w83791d_data *data = i2c_get_clientdata(client);
738 	unsigned long val = simple_strtoul(buf, NULL, 10);
739 
740 	/* No lock needed as vrm is internal to the driver
741 	   (not read from a chip register) and so is not
742 	   updated in w83791d_update_device() */
743 	data->vrm = val;
744 
745 	return count;
746 }
747 
748 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
749 
750 /* This function is called when:
751      * w83791d_driver is inserted (when this module is loaded), for each
752        available adapter
753      * when a new adapter is inserted (and w83791d_driver is still present) */
754 static int w83791d_attach_adapter(struct i2c_adapter *adapter)
755 {
756 	if (!(adapter->class & I2C_CLASS_HWMON))
757 		return 0;
758 	return i2c_probe(adapter, &addr_data, w83791d_detect);
759 }
760 
761 
762 static int w83791d_create_subclient(struct i2c_adapter *adapter,
763 				struct i2c_client *client, int addr,
764 				struct i2c_client **sub_cli)
765 {
766 	int err;
767 	struct i2c_client *sub_client;
768 
769 	(*sub_cli) = sub_client =
770 			kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
771 	if (!(sub_client)) {
772 		return -ENOMEM;
773 	}
774 	sub_client->addr = 0x48 + addr;
775 	i2c_set_clientdata(sub_client, NULL);
776 	sub_client->adapter = adapter;
777 	sub_client->driver = &w83791d_driver;
778 	strlcpy(sub_client->name, "w83791d subclient", I2C_NAME_SIZE);
779 	if ((err = i2c_attach_client(sub_client))) {
780 		dev_err(&client->dev, "subclient registration "
781 			"at address 0x%x failed\n", sub_client->addr);
782 		kfree(sub_client);
783 		return err;
784 	}
785 	return 0;
786 }
787 
788 
789 static int w83791d_detect_subclients(struct i2c_adapter *adapter, int address,
790 				int kind, struct i2c_client *client)
791 {
792 	struct w83791d_data *data = i2c_get_clientdata(client);
793 	int i, id, err;
794 	u8 val;
795 
796 	id = i2c_adapter_id(adapter);
797 	if (force_subclients[0] == id && force_subclients[1] == address) {
798 		for (i = 2; i <= 3; i++) {
799 			if (force_subclients[i] < 0x48 ||
800 			    force_subclients[i] > 0x4f) {
801 				dev_err(&client->dev,
802 					"invalid subclient "
803 					"address %d; must be 0x48-0x4f\n",
804 					force_subclients[i]);
805 				err = -ENODEV;
806 				goto error_sc_0;
807 			}
808 		}
809 		w83791d_write(client, W83791D_REG_I2C_SUBADDR,
810 					(force_subclients[2] & 0x07) |
811 					((force_subclients[3] & 0x07) << 4));
812 	}
813 
814 	val = w83791d_read(client, W83791D_REG_I2C_SUBADDR);
815 	if (!(val & 0x08)) {
816 		err = w83791d_create_subclient(adapter, client,
817 						val & 0x7, &data->lm75[0]);
818 		if (err < 0)
819 			goto error_sc_0;
820 	}
821 	if (!(val & 0x80)) {
822 		if ((data->lm75[0] != NULL) &&
823 				((val & 0x7) == ((val >> 4) & 0x7))) {
824 			dev_err(&client->dev,
825 				"duplicate addresses 0x%x, "
826 				"use force_subclient\n",
827 				data->lm75[0]->addr);
828 			err = -ENODEV;
829 			goto error_sc_1;
830 		}
831 		err = w83791d_create_subclient(adapter, client,
832 					(val >> 4) & 0x7, &data->lm75[1]);
833 		if (err < 0)
834 			goto error_sc_1;
835 	}
836 
837 	return 0;
838 
839 /* Undo inits in case of errors */
840 
841 error_sc_1:
842 	if (data->lm75[0] != NULL) {
843 		i2c_detach_client(data->lm75[0]);
844 		kfree(data->lm75[0]);
845 	}
846 error_sc_0:
847 	return err;
848 }
849 
850 
851 static int w83791d_detect(struct i2c_adapter *adapter, int address, int kind)
852 {
853 	struct i2c_client *client;
854 	struct device *dev;
855 	struct w83791d_data *data;
856 	int i, val1, val2;
857 	int err = 0;
858 	const char *client_name = "";
859 
860 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
861 		goto error0;
862 	}
863 
864 	/* OK. For now, we presume we have a valid client. We now create the
865 	   client structure, even though we cannot fill it completely yet.
866 	   But it allows us to access w83791d_{read,write}_value. */
867 	if (!(data = kzalloc(sizeof(struct w83791d_data), GFP_KERNEL))) {
868 		err = -ENOMEM;
869 		goto error0;
870 	}
871 
872 	client = &data->client;
873 	dev = &client->dev;
874 	i2c_set_clientdata(client, data);
875 	client->addr = address;
876 	client->adapter = adapter;
877 	client->driver = &w83791d_driver;
878 	mutex_init(&data->update_lock);
879 
880 	/* Now, we do the remaining detection. */
881 
882 	/* The w83791d may be stuck in some other bank than bank 0. This may
883 	   make reading other information impossible. Specify a force=...
884 	   parameter, and the Winbond will be reset to the right bank. */
885 	if (kind < 0) {
886 		if (w83791d_read(client, W83791D_REG_CONFIG) & 0x80) {
887 			dev_dbg(dev, "Detection failed at step 1\n");
888 			goto error1;
889 		}
890 		val1 = w83791d_read(client, W83791D_REG_BANK);
891 		val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
892 		/* Check for Winbond ID if in bank 0 */
893 		if (!(val1 & 0x07)) {
894 			/* yes it is Bank0 */
895 			if (((!(val1 & 0x80)) && (val2 != 0xa3)) ||
896 			    ((val1 & 0x80) && (val2 != 0x5c))) {
897 				dev_dbg(dev, "Detection failed at step 2\n");
898 				goto error1;
899 			}
900 		}
901 		/* If Winbond chip, address of chip and W83791D_REG_I2C_ADDR
902 		   should match */
903 		if (w83791d_read(client, W83791D_REG_I2C_ADDR) != address) {
904 			dev_dbg(dev, "Detection failed at step 3\n");
905 			goto error1;
906 		}
907 	}
908 
909 	/* We either have a force parameter or we have reason to
910 	   believe it is a Winbond chip. Either way, we want bank 0 and
911 	   Vendor ID high byte */
912 	val1 = w83791d_read(client, W83791D_REG_BANK) & 0x78;
913 	w83791d_write(client, W83791D_REG_BANK, val1 | 0x80);
914 
915 	/* Verify it is a Winbond w83791d */
916 	if (kind <= 0) {
917 		/* get vendor ID */
918 		val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
919 		if (val2 != 0x5c) {	/* the vendor is NOT Winbond */
920 			dev_dbg(dev, "Detection failed at step 4\n");
921 			goto error1;
922 		}
923 		val1 = w83791d_read(client, W83791D_REG_WCHIPID);
924 		if (val1 == 0x71) {
925 			kind = w83791d;
926 		} else {
927 			if (kind == 0)
928 				dev_warn(dev,
929 					"w83791d: Ignoring 'force' parameter "
930 					"for unknown chip at adapter %d, "
931 					"address 0x%02x\n",
932 					i2c_adapter_id(adapter), address);
933 			goto error1;
934 		}
935 	}
936 
937 	if (kind == w83791d) {
938 		client_name = "w83791d";
939 	} else {
940 		dev_err(dev, "w83791d: Internal error: unknown kind (%d)?!?",
941 			kind);
942 		goto error1;
943 	}
944 
945 #ifdef DEBUG
946 	val1 = w83791d_read(client, W83791D_REG_DID_VID4);
947 	dev_dbg(dev, "Device ID version: %d.%d (0x%02x)\n",
948 			(val1 >> 5) & 0x07, (val1 >> 1) & 0x0f, val1);
949 #endif
950 
951 	/* Fill in the remaining client fields and put into the global list */
952 	strlcpy(client->name, client_name, I2C_NAME_SIZE);
953 
954 	/* Tell the I2C layer a new client has arrived */
955 	if ((err = i2c_attach_client(client)))
956 		goto error1;
957 
958 	if ((err = w83791d_detect_subclients(adapter, address, kind, client)))
959 		goto error2;
960 
961 	/* Initialize the chip */
962 	w83791d_init_client(client);
963 
964 	/* If the fan_div is changed, make sure there is a rational
965 	   fan_min in place */
966 	for (i = 0; i < NUMBER_OF_FANIN; i++) {
967 		data->fan_min[i] = w83791d_read(client, W83791D_REG_FAN_MIN[i]);
968 	}
969 
970 	/* Register sysfs hooks */
971 	data->class_dev = hwmon_device_register(dev);
972 	if (IS_ERR(data->class_dev)) {
973 		err = PTR_ERR(data->class_dev);
974 		goto error3;
975 	}
976 
977 	for (i = 0; i < NUMBER_OF_VIN; i++) {
978 		device_create_file(dev, &sda_in_input[i].dev_attr);
979 		device_create_file(dev, &sda_in_min[i].dev_attr);
980 		device_create_file(dev, &sda_in_max[i].dev_attr);
981 	}
982 
983 	for (i = 0; i < NUMBER_OF_FANIN; i++) {
984 		device_create_file(dev, &sda_fan_input[i].dev_attr);
985 		device_create_file(dev, &sda_fan_div[i].dev_attr);
986 		device_create_file(dev, &sda_fan_min[i].dev_attr);
987 	}
988 
989 	for (i = 0; i < NUMBER_OF_TEMPIN; i++) {
990 		device_create_file(dev, &sda_temp_input[i].dev_attr);
991 		device_create_file(dev, &sda_temp_max[i].dev_attr);
992 		device_create_file(dev, &sda_temp_max_hyst[i].dev_attr);
993 	}
994 
995 	device_create_file(dev, &dev_attr_alarms);
996 
997 	for (i = 0; i < ARRAY_SIZE(sda_beep_ctrl); i++) {
998 		device_create_file(dev, &sda_beep_ctrl[i].dev_attr);
999 	}
1000 
1001 	device_create_file(dev, &dev_attr_cpu0_vid);
1002 	device_create_file(dev, &dev_attr_vrm);
1003 
1004 	return 0;
1005 
1006 error3:
1007 	if (data->lm75[0] != NULL) {
1008 		i2c_detach_client(data->lm75[0]);
1009 		kfree(data->lm75[0]);
1010 	}
1011 	if (data->lm75[1] != NULL) {
1012 		i2c_detach_client(data->lm75[1]);
1013 		kfree(data->lm75[1]);
1014 	}
1015 error2:
1016 	i2c_detach_client(client);
1017 error1:
1018 	kfree(data);
1019 error0:
1020 	return err;
1021 }
1022 
1023 static int w83791d_detach_client(struct i2c_client *client)
1024 {
1025 	struct w83791d_data *data = i2c_get_clientdata(client);
1026 	int err;
1027 
1028 	/* main client */
1029 	if (data)
1030 		hwmon_device_unregister(data->class_dev);
1031 
1032 	if ((err = i2c_detach_client(client)))
1033 		return err;
1034 
1035 	/* main client */
1036 	if (data)
1037 		kfree(data);
1038 	/* subclient */
1039 	else
1040 		kfree(client);
1041 
1042 	return 0;
1043 }
1044 
1045 static void w83791d_init_client(struct i2c_client *client)
1046 {
1047 	struct w83791d_data *data = i2c_get_clientdata(client);
1048 	u8 tmp;
1049 	u8 old_beep;
1050 
1051 	/* The difference between reset and init is that reset
1052 	   does a hard reset of the chip via index 0x40, bit 7,
1053 	   but init simply forces certain registers to have "sane"
1054 	   values. The hope is that the BIOS has done the right
1055 	   thing (which is why the default is reset=0, init=0),
1056 	   but if not, reset is the hard hammer and init
1057 	   is the soft mallet both of which are trying to whack
1058 	   things into place...
1059 	   NOTE: The data sheet makes a distinction between
1060 	   "power on defaults" and "reset by MR". As far as I can tell,
1061 	   the hard reset puts everything into a power-on state so I'm
1062 	   not sure what "reset by MR" means or how it can happen.
1063 	   */
1064 	if (reset || init) {
1065 		/* keep some BIOS settings when we... */
1066 		old_beep = w83791d_read(client, W83791D_REG_BEEP_CONFIG);
1067 
1068 		if (reset) {
1069 			/* ... reset the chip and ... */
1070 			w83791d_write(client, W83791D_REG_CONFIG, 0x80);
1071 		}
1072 
1073 		/* ... disable power-on abnormal beep */
1074 		w83791d_write(client, W83791D_REG_BEEP_CONFIG, old_beep | 0x80);
1075 
1076 		/* disable the global beep (not done by hard reset) */
1077 		tmp = w83791d_read(client, W83791D_REG_BEEP_CTRL[1]);
1078 		w83791d_write(client, W83791D_REG_BEEP_CTRL[1], tmp & 0xef);
1079 
1080 		if (init) {
1081 			/* Make sure monitoring is turned on for add-ons */
1082 			tmp = w83791d_read(client, W83791D_REG_TEMP2_CONFIG);
1083 			if (tmp & 1) {
1084 				w83791d_write(client, W83791D_REG_TEMP2_CONFIG,
1085 					tmp & 0xfe);
1086 			}
1087 
1088 			tmp = w83791d_read(client, W83791D_REG_TEMP3_CONFIG);
1089 			if (tmp & 1) {
1090 				w83791d_write(client, W83791D_REG_TEMP3_CONFIG,
1091 					tmp & 0xfe);
1092 			}
1093 
1094 			/* Start monitoring */
1095 			tmp = w83791d_read(client, W83791D_REG_CONFIG) & 0xf7;
1096 			w83791d_write(client, W83791D_REG_CONFIG, tmp | 0x01);
1097 		}
1098 	}
1099 
1100 	data->vrm = vid_which_vrm();
1101 }
1102 
1103 static struct w83791d_data *w83791d_update_device(struct device *dev)
1104 {
1105 	struct i2c_client *client = to_i2c_client(dev);
1106 	struct w83791d_data *data = i2c_get_clientdata(client);
1107 	int i, j;
1108 	u8 reg_array_tmp[3];
1109 
1110 	mutex_lock(&data->update_lock);
1111 
1112 	if (time_after(jiffies, data->last_updated + (HZ * 3))
1113 			|| !data->valid) {
1114 		dev_dbg(dev, "Starting w83791d device update\n");
1115 
1116 		/* Update the voltages measured value and limits */
1117 		for (i = 0; i < NUMBER_OF_VIN; i++) {
1118 			data->in[i] = w83791d_read(client,
1119 						W83791D_REG_IN[i]);
1120 			data->in_max[i] = w83791d_read(client,
1121 						W83791D_REG_IN_MAX[i]);
1122 			data->in_min[i] = w83791d_read(client,
1123 						W83791D_REG_IN_MIN[i]);
1124 		}
1125 
1126 		/* Update the fan counts and limits */
1127 		for (i = 0; i < NUMBER_OF_FANIN; i++) {
1128 			/* Update the Fan measured value and limits */
1129 			data->fan[i] = w83791d_read(client,
1130 						W83791D_REG_FAN[i]);
1131 			data->fan_min[i] = w83791d_read(client,
1132 						W83791D_REG_FAN_MIN[i]);
1133 		}
1134 
1135 		/* Update the fan divisor */
1136 		for (i = 0; i < 3; i++) {
1137 			reg_array_tmp[i] = w83791d_read(client,
1138 						W83791D_REG_FAN_DIV[i]);
1139 		}
1140 		data->fan_div[0] = (reg_array_tmp[0] >> 4) & 0x03;
1141 		data->fan_div[1] = (reg_array_tmp[0] >> 6) & 0x03;
1142 		data->fan_div[2] = (reg_array_tmp[1] >> 6) & 0x03;
1143 		data->fan_div[3] = reg_array_tmp[2] & 0x07;
1144 		data->fan_div[4] = (reg_array_tmp[2] >> 4) & 0x07;
1145 
1146 		/* Update the first temperature sensor */
1147 		for (i = 0; i < 3; i++) {
1148 			data->temp1[i] = w83791d_read(client,
1149 						W83791D_REG_TEMP1[i]);
1150 		}
1151 
1152 		/* Update the rest of the temperature sensors */
1153 		for (i = 0; i < 2; i++) {
1154 			for (j = 0; j < 3; j++) {
1155 				data->temp_add[i][j] =
1156 					(w83791d_read(client,
1157 					W83791D_REG_TEMP_ADD[i][j * 2]) << 8) |
1158 					w83791d_read(client,
1159 					W83791D_REG_TEMP_ADD[i][j * 2 + 1]);
1160 			}
1161 		}
1162 
1163 		/* Update the realtime status */
1164 		data->alarms =
1165 			w83791d_read(client, W83791D_REG_ALARM1) +
1166 			(w83791d_read(client, W83791D_REG_ALARM2) << 8) +
1167 			(w83791d_read(client, W83791D_REG_ALARM3) << 16);
1168 
1169 		/* Update the beep configuration information */
1170 		data->beep_mask =
1171 			w83791d_read(client, W83791D_REG_BEEP_CTRL[0]) +
1172 			(w83791d_read(client, W83791D_REG_BEEP_CTRL[1]) << 8) +
1173 			(w83791d_read(client, W83791D_REG_BEEP_CTRL[2]) << 16);
1174 
1175 		data->beep_enable =
1176 			(data->beep_mask >> GLOBAL_BEEP_ENABLE_SHIFT) & 0x01;
1177 
1178 		/* Update the cpu voltage information */
1179 		i = w83791d_read(client, W83791D_REG_VID_FANDIV);
1180 		data->vid = i & 0x0f;
1181 		data->vid |= (w83791d_read(client, W83791D_REG_DID_VID4) & 0x01)
1182 				<< 4;
1183 
1184 		data->last_updated = jiffies;
1185 		data->valid = 1;
1186 	}
1187 
1188 	mutex_unlock(&data->update_lock);
1189 
1190 #ifdef DEBUG
1191 	w83791d_print_debug(data, dev);
1192 #endif
1193 
1194 	return data;
1195 }
1196 
1197 #ifdef DEBUG
1198 static void w83791d_print_debug(struct w83791d_data *data, struct device *dev)
1199 {
1200 	int i = 0, j = 0;
1201 
1202 	dev_dbg(dev, "======Start of w83791d debug values======\n");
1203 	dev_dbg(dev, "%d set of Voltages: ===>\n", NUMBER_OF_VIN);
1204 	for (i = 0; i < NUMBER_OF_VIN; i++) {
1205 		dev_dbg(dev, "vin[%d] is:     0x%02x\n", i, data->in[i]);
1206 		dev_dbg(dev, "vin[%d] min is: 0x%02x\n", i, data->in_min[i]);
1207 		dev_dbg(dev, "vin[%d] max is: 0x%02x\n", i, data->in_max[i]);
1208 	}
1209 	dev_dbg(dev, "%d set of Fan Counts/Divisors: ===>\n", NUMBER_OF_FANIN);
1210 	for (i = 0; i < NUMBER_OF_FANIN; i++) {
1211 		dev_dbg(dev, "fan[%d] is:     0x%02x\n", i, data->fan[i]);
1212 		dev_dbg(dev, "fan[%d] min is: 0x%02x\n", i, data->fan_min[i]);
1213 		dev_dbg(dev, "fan_div[%d] is: 0x%02x\n", i, data->fan_div[i]);
1214 	}
1215 
1216 	/* temperature math is signed, but only print out the
1217 	   bits that matter */
1218 	dev_dbg(dev, "%d set of Temperatures: ===>\n", NUMBER_OF_TEMPIN);
1219 	for (i = 0; i < 3; i++) {
1220 		dev_dbg(dev, "temp1[%d] is: 0x%02x\n", i, (u8) data->temp1[i]);
1221 	}
1222 	for (i = 0; i < 2; i++) {
1223 		for (j = 0; j < 3; j++) {
1224 			dev_dbg(dev, "temp_add[%d][%d] is: 0x%04x\n", i, j,
1225 				(u16) data->temp_add[i][j]);
1226 		}
1227 	}
1228 
1229 	dev_dbg(dev, "Misc Information: ===>\n");
1230 	dev_dbg(dev, "alarm is:     0x%08x\n", data->alarms);
1231 	dev_dbg(dev, "beep_mask is: 0x%08x\n", data->beep_mask);
1232 	dev_dbg(dev, "beep_enable is: %d\n", data->beep_enable);
1233 	dev_dbg(dev, "vid is: 0x%02x\n", data->vid);
1234 	dev_dbg(dev, "vrm is: 0x%02x\n", data->vrm);
1235 	dev_dbg(dev, "=======End of w83791d debug values========\n");
1236 	dev_dbg(dev, "\n");
1237 }
1238 #endif
1239 
1240 static int __init sensors_w83791d_init(void)
1241 {
1242 	return i2c_add_driver(&w83791d_driver);
1243 }
1244 
1245 static void __exit sensors_w83791d_exit(void)
1246 {
1247 	i2c_del_driver(&w83791d_driver);
1248 }
1249 
1250 MODULE_AUTHOR("Charles Spirakis <bezaur@gmail.com>");
1251 MODULE_DESCRIPTION("W83791D driver");
1252 MODULE_LICENSE("GPL");
1253 
1254 module_init(sensors_w83791d_init);
1255 module_exit(sensors_w83791d_exit);
1256