xref: /linux/drivers/hwmon/w83791d.c (revision 5f4123be3cdb1dbd77fa9d6d2bb96bb9689a0a19)
1 /*
2     w83791d.c - Part of lm_sensors, Linux kernel modules for hardware
3                 monitoring
4 
5     Copyright (C) 2006-2007 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.
31 
32     The w83791g chip is the same as the w83791d but lead-free.
33 */
34 
35 #include <linux/module.h>
36 #include <linux/init.h>
37 #include <linux/slab.h>
38 #include <linux/i2c.h>
39 #include <linux/hwmon.h>
40 #include <linux/hwmon-vid.h>
41 #include <linux/hwmon-sysfs.h>
42 #include <linux/err.h>
43 #include <linux/mutex.h>
44 
45 #define NUMBER_OF_VIN		10
46 #define NUMBER_OF_FANIN		5
47 #define NUMBER_OF_TEMPIN	3
48 
49 /* Addresses to scan */
50 static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
51 						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 
237 	/* fan divisors max out at 128 */
238 	val = SENSORS_LIMIT(val, 1, 128) >> 1;
239 	for (i = 0; i < 7; i++) {
240 		if (val == 0)
241 			break;
242 		val >>= 1;
243 	}
244 	return (u8) i;
245 }
246 
247 struct w83791d_data {
248 	struct device *hwmon_dev;
249 	struct mutex update_lock;
250 
251 	char valid;			/* !=0 if following fields are valid */
252 	unsigned long last_updated;	/* In jiffies */
253 
254 	/* array of 2 pointers to subclients */
255 	struct i2c_client *lm75[2];
256 
257 	/* volts */
258 	u8 in[NUMBER_OF_VIN];		/* Register value */
259 	u8 in_max[NUMBER_OF_VIN];	/* Register value */
260 	u8 in_min[NUMBER_OF_VIN];	/* Register value */
261 
262 	/* fans */
263 	u8 fan[NUMBER_OF_FANIN];	/* Register value */
264 	u8 fan_min[NUMBER_OF_FANIN];	/* Register value */
265 	u8 fan_div[NUMBER_OF_FANIN];	/* Register encoding, shifted right */
266 
267 	/* Temperature sensors */
268 
269 	s8 temp1[3];		/* current, over, thyst */
270 	s16 temp_add[2][3];	/* fixed point value. Top 8 bits are the
271 				   integral part, bottom 8 bits are the
272 				   fractional part. We only use the top
273 				   9 bits as the resolution is only
274 				   to the 0.5 degree C...
275 				   two sensors with three values
276 				   (cur, over, hyst)  */
277 
278 	/* Misc */
279 	u32 alarms;		/* realtime status register encoding,combined */
280 	u8 beep_enable;		/* Global beep enable */
281 	u32 beep_mask;		/* Mask off specific beeps */
282 	u8 vid;			/* Register encoding, combined */
283 	u8 vrm;			/* hwmon-vid */
284 };
285 
286 static int w83791d_probe(struct i2c_client *client,
287 			 const struct i2c_device_id *id);
288 static int w83791d_detect(struct i2c_client *client, int kind,
289 			  struct i2c_board_info *info);
290 static int w83791d_remove(struct i2c_client *client);
291 
292 static int w83791d_read(struct i2c_client *client, u8 register);
293 static int w83791d_write(struct i2c_client *client, u8 register, u8 value);
294 static struct w83791d_data *w83791d_update_device(struct device *dev);
295 
296 #ifdef DEBUG
297 static void w83791d_print_debug(struct w83791d_data *data, struct device *dev);
298 #endif
299 
300 static void w83791d_init_client(struct i2c_client *client);
301 
302 static const struct i2c_device_id w83791d_id[] = {
303 	{ "w83791d", w83791d },
304 	{ }
305 };
306 MODULE_DEVICE_TABLE(i2c, w83791d_id);
307 
308 static struct i2c_driver w83791d_driver = {
309 	.class		= I2C_CLASS_HWMON,
310 	.driver = {
311 		.name = "w83791d",
312 	},
313 	.probe		= w83791d_probe,
314 	.remove		= w83791d_remove,
315 	.id_table	= w83791d_id,
316 	.detect		= w83791d_detect,
317 	.address_data	= &addr_data,
318 };
319 
320 /* following are the sysfs callback functions */
321 #define show_in_reg(reg) \
322 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
323 			char *buf) \
324 { \
325 	struct sensor_device_attribute *sensor_attr = \
326 						to_sensor_dev_attr(attr); \
327 	struct w83791d_data *data = w83791d_update_device(dev); \
328 	int nr = sensor_attr->index; \
329 	return sprintf(buf,"%d\n", IN_FROM_REG(data->reg[nr])); \
330 }
331 
332 show_in_reg(in);
333 show_in_reg(in_min);
334 show_in_reg(in_max);
335 
336 #define store_in_reg(REG, reg) \
337 static ssize_t store_in_##reg(struct device *dev, \
338 				struct device_attribute *attr, \
339 				const char *buf, size_t count) \
340 { \
341 	struct sensor_device_attribute *sensor_attr = \
342 						to_sensor_dev_attr(attr); \
343 	struct i2c_client *client = to_i2c_client(dev); \
344 	struct w83791d_data *data = i2c_get_clientdata(client); \
345 	unsigned long val = simple_strtoul(buf, NULL, 10); \
346 	int nr = sensor_attr->index; \
347 	 \
348 	mutex_lock(&data->update_lock); \
349 	data->in_##reg[nr] = IN_TO_REG(val); \
350 	w83791d_write(client, W83791D_REG_IN_##REG[nr], data->in_##reg[nr]); \
351 	mutex_unlock(&data->update_lock); \
352 	 \
353 	return count; \
354 }
355 store_in_reg(MIN, min);
356 store_in_reg(MAX, max);
357 
358 static struct sensor_device_attribute sda_in_input[] = {
359 	SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
360 	SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
361 	SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
362 	SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
363 	SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
364 	SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
365 	SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
366 	SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
367 	SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
368 	SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
369 };
370 
371 static struct sensor_device_attribute sda_in_min[] = {
372 	SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
373 	SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
374 	SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
375 	SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
376 	SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
377 	SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
378 	SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
379 	SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
380 	SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
381 	SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
382 };
383 
384 static struct sensor_device_attribute sda_in_max[] = {
385 	SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
386 	SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
387 	SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
388 	SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
389 	SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
390 	SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
391 	SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
392 	SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
393 	SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
394 	SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
395 };
396 
397 
398 static ssize_t show_beep(struct device *dev, struct device_attribute *attr,
399 			char *buf)
400 {
401 	struct sensor_device_attribute *sensor_attr =
402 						to_sensor_dev_attr(attr);
403 	struct w83791d_data *data = w83791d_update_device(dev);
404 	int bitnr = sensor_attr->index;
405 
406 	return sprintf(buf, "%d\n", (data->beep_mask >> bitnr) & 1);
407 }
408 
409 static ssize_t store_beep(struct device *dev, struct device_attribute *attr,
410 			const char *buf, size_t count)
411 {
412 	struct sensor_device_attribute *sensor_attr =
413 						to_sensor_dev_attr(attr);
414 	struct i2c_client *client = to_i2c_client(dev);
415 	struct w83791d_data *data = i2c_get_clientdata(client);
416 	int bitnr = sensor_attr->index;
417 	int bytenr = bitnr / 8;
418 	long val = simple_strtol(buf, NULL, 10) ? 1 : 0;
419 
420 	mutex_lock(&data->update_lock);
421 
422 	data->beep_mask &= ~(0xff << (bytenr * 8));
423 	data->beep_mask |= w83791d_read(client, W83791D_REG_BEEP_CTRL[bytenr])
424 		<< (bytenr * 8);
425 
426 	data->beep_mask &= ~(1 << bitnr);
427 	data->beep_mask |= val << bitnr;
428 
429 	w83791d_write(client, W83791D_REG_BEEP_CTRL[bytenr],
430 		(data->beep_mask >> (bytenr * 8)) & 0xff);
431 
432 	mutex_unlock(&data->update_lock);
433 
434 	return count;
435 }
436 
437 static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
438 			char *buf)
439 {
440 	struct sensor_device_attribute *sensor_attr =
441 						to_sensor_dev_attr(attr);
442 	struct w83791d_data *data = w83791d_update_device(dev);
443 	int bitnr = sensor_attr->index;
444 
445 	return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
446 }
447 
448 /* Note: The bitmask for the beep enable/disable is different than
449    the bitmask for the alarm. */
450 static struct sensor_device_attribute sda_in_beep[] = {
451 	SENSOR_ATTR(in0_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 0),
452 	SENSOR_ATTR(in1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 13),
453 	SENSOR_ATTR(in2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 2),
454 	SENSOR_ATTR(in3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 3),
455 	SENSOR_ATTR(in4_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 8),
456 	SENSOR_ATTR(in5_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 9),
457 	SENSOR_ATTR(in6_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 10),
458 	SENSOR_ATTR(in7_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 16),
459 	SENSOR_ATTR(in8_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 17),
460 	SENSOR_ATTR(in9_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 14),
461 };
462 
463 static struct sensor_device_attribute sda_in_alarm[] = {
464 	SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
465 	SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
466 	SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
467 	SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
468 	SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8),
469 	SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 9),
470 	SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 10),
471 	SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 19),
472 	SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 20),
473 	SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 14),
474 };
475 
476 #define show_fan_reg(reg) \
477 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
478 				char *buf) \
479 { \
480 	struct sensor_device_attribute *sensor_attr = \
481 						to_sensor_dev_attr(attr); \
482 	struct w83791d_data *data = w83791d_update_device(dev); \
483 	int nr = sensor_attr->index; \
484 	return sprintf(buf,"%d\n", \
485 		FAN_FROM_REG(data->reg[nr], DIV_FROM_REG(data->fan_div[nr]))); \
486 }
487 
488 show_fan_reg(fan);
489 show_fan_reg(fan_min);
490 
491 static ssize_t store_fan_min(struct device *dev, struct device_attribute *attr,
492 				const char *buf, size_t count)
493 {
494 	struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
495 	struct i2c_client *client = to_i2c_client(dev);
496 	struct w83791d_data *data = i2c_get_clientdata(client);
497 	unsigned long val = simple_strtoul(buf, NULL, 10);
498 	int nr = sensor_attr->index;
499 
500 	mutex_lock(&data->update_lock);
501 	data->fan_min[nr] = fan_to_reg(val, DIV_FROM_REG(data->fan_div[nr]));
502 	w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
503 	mutex_unlock(&data->update_lock);
504 
505 	return count;
506 }
507 
508 static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
509 				char *buf)
510 {
511 	struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
512 	int nr = sensor_attr->index;
513 	struct w83791d_data *data = w83791d_update_device(dev);
514 	return sprintf(buf, "%u\n", DIV_FROM_REG(data->fan_div[nr]));
515 }
516 
517 /* Note: we save and restore the fan minimum here, because its value is
518    determined in part by the fan divisor.  This follows the principle of
519    least suprise; the user doesn't expect the fan minimum to change just
520    because the divisor changed. */
521 static ssize_t store_fan_div(struct device *dev, struct device_attribute *attr,
522 				const char *buf, size_t count)
523 {
524 	struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
525 	struct i2c_client *client = to_i2c_client(dev);
526 	struct w83791d_data *data = i2c_get_clientdata(client);
527 	int nr = sensor_attr->index;
528 	unsigned long min;
529 	u8 tmp_fan_div;
530 	u8 fan_div_reg;
531 	u8 vbat_reg;
532 	int indx = 0;
533 	u8 keep_mask = 0;
534 	u8 new_shift = 0;
535 
536 	/* Save fan_min */
537 	min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr]));
538 
539 	mutex_lock(&data->update_lock);
540 	data->fan_div[nr] = div_to_reg(nr, simple_strtoul(buf, NULL, 10));
541 
542 	switch (nr) {
543 	case 0:
544 		indx = 0;
545 		keep_mask = 0xcf;
546 		new_shift = 4;
547 		break;
548 	case 1:
549 		indx = 0;
550 		keep_mask = 0x3f;
551 		new_shift = 6;
552 		break;
553 	case 2:
554 		indx = 1;
555 		keep_mask = 0x3f;
556 		new_shift = 6;
557 		break;
558 	case 3:
559 		indx = 2;
560 		keep_mask = 0xf8;
561 		new_shift = 0;
562 		break;
563 	case 4:
564 		indx = 2;
565 		keep_mask = 0x8f;
566 		new_shift = 4;
567 		break;
568 #ifdef DEBUG
569 	default:
570 		dev_warn(dev, "store_fan_div: Unexpected nr seen: %d\n", nr);
571 		count = -EINVAL;
572 		goto err_exit;
573 #endif
574 	}
575 
576 	fan_div_reg = w83791d_read(client, W83791D_REG_FAN_DIV[indx])
577 			& keep_mask;
578 	tmp_fan_div = (data->fan_div[nr] << new_shift) & ~keep_mask;
579 
580 	w83791d_write(client, W83791D_REG_FAN_DIV[indx],
581 				fan_div_reg | tmp_fan_div);
582 
583 	/* Bit 2 of fans 0-2 is stored in the vbat register (bits 5-7) */
584 	if (nr < 3) {
585 		keep_mask = ~(1 << (nr + 5));
586 		vbat_reg = w83791d_read(client, W83791D_REG_VBAT)
587 				& keep_mask;
588 		tmp_fan_div = (data->fan_div[nr] << (3 + nr)) & ~keep_mask;
589 		w83791d_write(client, W83791D_REG_VBAT,
590 				vbat_reg | tmp_fan_div);
591 	}
592 
593 	/* Restore fan_min */
594 	data->fan_min[nr] = fan_to_reg(min, DIV_FROM_REG(data->fan_div[nr]));
595 	w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
596 
597 #ifdef DEBUG
598 err_exit:
599 #endif
600 	mutex_unlock(&data->update_lock);
601 
602 	return count;
603 }
604 
605 static struct sensor_device_attribute sda_fan_input[] = {
606 	SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
607 	SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
608 	SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
609 	SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
610 	SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
611 };
612 
613 static struct sensor_device_attribute sda_fan_min[] = {
614 	SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO,
615 			show_fan_min, store_fan_min, 0),
616 	SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO,
617 			show_fan_min, store_fan_min, 1),
618 	SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO,
619 			show_fan_min, store_fan_min, 2),
620 	SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO,
621 			show_fan_min, store_fan_min, 3),
622 	SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO,
623 			show_fan_min, store_fan_min, 4),
624 };
625 
626 static struct sensor_device_attribute sda_fan_div[] = {
627 	SENSOR_ATTR(fan1_div, S_IWUSR | S_IRUGO,
628 			show_fan_div, store_fan_div, 0),
629 	SENSOR_ATTR(fan2_div, S_IWUSR | S_IRUGO,
630 			show_fan_div, store_fan_div, 1),
631 	SENSOR_ATTR(fan3_div, S_IWUSR | S_IRUGO,
632 			show_fan_div, store_fan_div, 2),
633 	SENSOR_ATTR(fan4_div, S_IWUSR | S_IRUGO,
634 			show_fan_div, store_fan_div, 3),
635 	SENSOR_ATTR(fan5_div, S_IWUSR | S_IRUGO,
636 			show_fan_div, store_fan_div, 4),
637 };
638 
639 static struct sensor_device_attribute sda_fan_beep[] = {
640 	SENSOR_ATTR(fan1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 6),
641 	SENSOR_ATTR(fan2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 7),
642 	SENSOR_ATTR(fan3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 11),
643 	SENSOR_ATTR(fan4_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 21),
644 	SENSOR_ATTR(fan5_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 22),
645 };
646 
647 static struct sensor_device_attribute sda_fan_alarm[] = {
648 	SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6),
649 	SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7),
650 	SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11),
651 	SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 21),
652 	SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 22),
653 };
654 
655 /* read/write the temperature1, includes measured value and limits */
656 static ssize_t show_temp1(struct device *dev, struct device_attribute *devattr,
657 				char *buf)
658 {
659 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
660 	struct w83791d_data *data = w83791d_update_device(dev);
661 	return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp1[attr->index]));
662 }
663 
664 static ssize_t store_temp1(struct device *dev, struct device_attribute *devattr,
665 				const char *buf, size_t count)
666 {
667 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
668 	struct i2c_client *client = to_i2c_client(dev);
669 	struct w83791d_data *data = i2c_get_clientdata(client);
670 	long val = simple_strtol(buf, NULL, 10);
671 	int nr = attr->index;
672 
673 	mutex_lock(&data->update_lock);
674 	data->temp1[nr] = TEMP1_TO_REG(val);
675 	w83791d_write(client, W83791D_REG_TEMP1[nr], data->temp1[nr]);
676 	mutex_unlock(&data->update_lock);
677 	return count;
678 }
679 
680 /* read/write temperature2-3, includes measured value and limits */
681 static ssize_t show_temp23(struct device *dev, struct device_attribute *devattr,
682 				char *buf)
683 {
684 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
685 	struct w83791d_data *data = w83791d_update_device(dev);
686 	int nr = attr->nr;
687 	int index = attr->index;
688 	return sprintf(buf, "%d\n", TEMP23_FROM_REG(data->temp_add[nr][index]));
689 }
690 
691 static ssize_t store_temp23(struct device *dev,
692 				struct device_attribute *devattr,
693 				const char *buf, size_t count)
694 {
695 	struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
696 	struct i2c_client *client = to_i2c_client(dev);
697 	struct w83791d_data *data = i2c_get_clientdata(client);
698 	long val = simple_strtol(buf, NULL, 10);
699 	int nr = attr->nr;
700 	int index = attr->index;
701 
702 	mutex_lock(&data->update_lock);
703 	data->temp_add[nr][index] = TEMP23_TO_REG(val);
704 	w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2],
705 				data->temp_add[nr][index] >> 8);
706 	w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2 + 1],
707 				data->temp_add[nr][index] & 0x80);
708 	mutex_unlock(&data->update_lock);
709 
710 	return count;
711 }
712 
713 static struct sensor_device_attribute_2 sda_temp_input[] = {
714 	SENSOR_ATTR_2(temp1_input, S_IRUGO, show_temp1, NULL, 0, 0),
715 	SENSOR_ATTR_2(temp2_input, S_IRUGO, show_temp23, NULL, 0, 0),
716 	SENSOR_ATTR_2(temp3_input, S_IRUGO, show_temp23, NULL, 1, 0),
717 };
718 
719 static struct sensor_device_attribute_2 sda_temp_max[] = {
720 	SENSOR_ATTR_2(temp1_max, S_IRUGO | S_IWUSR,
721 			show_temp1, store_temp1, 0, 1),
722 	SENSOR_ATTR_2(temp2_max, S_IRUGO | S_IWUSR,
723 			show_temp23, store_temp23, 0, 1),
724 	SENSOR_ATTR_2(temp3_max, S_IRUGO | S_IWUSR,
725 			show_temp23, store_temp23, 1, 1),
726 };
727 
728 static struct sensor_device_attribute_2 sda_temp_max_hyst[] = {
729 	SENSOR_ATTR_2(temp1_max_hyst, S_IRUGO | S_IWUSR,
730 			show_temp1, store_temp1, 0, 2),
731 	SENSOR_ATTR_2(temp2_max_hyst, S_IRUGO | S_IWUSR,
732 			show_temp23, store_temp23, 0, 2),
733 	SENSOR_ATTR_2(temp3_max_hyst, S_IRUGO | S_IWUSR,
734 			show_temp23, store_temp23, 1, 2),
735 };
736 
737 /* Note: The bitmask for the beep enable/disable is different than
738    the bitmask for the alarm. */
739 static struct sensor_device_attribute sda_temp_beep[] = {
740 	SENSOR_ATTR(temp1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 4),
741 	SENSOR_ATTR(temp2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 5),
742 	SENSOR_ATTR(temp3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 1),
743 };
744 
745 static struct sensor_device_attribute sda_temp_alarm[] = {
746 	SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4),
747 	SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5),
748 	SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
749 };
750 
751 /* get reatime status of all sensors items: voltage, temp, fan */
752 static ssize_t show_alarms_reg(struct device *dev,
753 				struct device_attribute *attr, char *buf)
754 {
755 	struct w83791d_data *data = w83791d_update_device(dev);
756 	return sprintf(buf, "%u\n", data->alarms);
757 }
758 
759 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
760 
761 /* Beep control */
762 
763 #define GLOBAL_BEEP_ENABLE_SHIFT	15
764 #define GLOBAL_BEEP_ENABLE_MASK		(1 << GLOBAL_BEEP_ENABLE_SHIFT)
765 
766 static ssize_t show_beep_enable(struct device *dev,
767 				struct device_attribute *attr, char *buf)
768 {
769 	struct w83791d_data *data = w83791d_update_device(dev);
770 	return sprintf(buf, "%d\n", data->beep_enable);
771 }
772 
773 static ssize_t show_beep_mask(struct device *dev,
774 				struct device_attribute *attr, char *buf)
775 {
776 	struct w83791d_data *data = w83791d_update_device(dev);
777 	return sprintf(buf, "%d\n", BEEP_MASK_FROM_REG(data->beep_mask));
778 }
779 
780 
781 static ssize_t store_beep_mask(struct device *dev,
782 				struct device_attribute *attr,
783 				const char *buf, size_t count)
784 {
785 	struct i2c_client *client = to_i2c_client(dev);
786 	struct w83791d_data *data = i2c_get_clientdata(client);
787 	long val = simple_strtol(buf, NULL, 10);
788 	int i;
789 
790 	mutex_lock(&data->update_lock);
791 
792 	/* The beep_enable state overrides any enabling request from
793 	   the masks */
794 	data->beep_mask = BEEP_MASK_TO_REG(val) & ~GLOBAL_BEEP_ENABLE_MASK;
795 	data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
796 
797 	val = data->beep_mask;
798 
799 	for (i = 0; i < 3; i++) {
800 		w83791d_write(client, W83791D_REG_BEEP_CTRL[i], (val & 0xff));
801 		val >>= 8;
802 	}
803 
804 	mutex_unlock(&data->update_lock);
805 
806 	return count;
807 }
808 
809 static ssize_t store_beep_enable(struct device *dev,
810 				struct device_attribute *attr,
811 				const char *buf, size_t count)
812 {
813 	struct i2c_client *client = to_i2c_client(dev);
814 	struct w83791d_data *data = i2c_get_clientdata(client);
815 	long val = simple_strtol(buf, NULL, 10);
816 
817 	mutex_lock(&data->update_lock);
818 
819 	data->beep_enable = val ? 1 : 0;
820 
821 	/* Keep the full mask value in sync with the current enable */
822 	data->beep_mask &= ~GLOBAL_BEEP_ENABLE_MASK;
823 	data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
824 
825 	/* The global control is in the second beep control register
826 	   so only need to update that register */
827 	val = (data->beep_mask >> 8) & 0xff;
828 
829 	w83791d_write(client, W83791D_REG_BEEP_CTRL[1], val);
830 
831 	mutex_unlock(&data->update_lock);
832 
833 	return count;
834 }
835 
836 static struct sensor_device_attribute sda_beep_ctrl[] = {
837 	SENSOR_ATTR(beep_enable, S_IRUGO | S_IWUSR,
838 			show_beep_enable, store_beep_enable, 0),
839 	SENSOR_ATTR(beep_mask, S_IRUGO | S_IWUSR,
840 			show_beep_mask, store_beep_mask, 1)
841 };
842 
843 /* cpu voltage regulation information */
844 static ssize_t show_vid_reg(struct device *dev,
845 				struct device_attribute *attr, char *buf)
846 {
847 	struct w83791d_data *data = w83791d_update_device(dev);
848 	return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
849 }
850 
851 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
852 
853 static ssize_t show_vrm_reg(struct device *dev,
854 				struct device_attribute *attr, char *buf)
855 {
856 	struct w83791d_data *data = dev_get_drvdata(dev);
857 	return sprintf(buf, "%d\n", data->vrm);
858 }
859 
860 static ssize_t store_vrm_reg(struct device *dev,
861 				struct device_attribute *attr,
862 				const char *buf, size_t count)
863 {
864 	struct w83791d_data *data = dev_get_drvdata(dev);
865 
866 	/* No lock needed as vrm is internal to the driver
867 	   (not read from a chip register) and so is not
868 	   updated in w83791d_update_device() */
869 	data->vrm = simple_strtoul(buf, NULL, 10);
870 
871 	return count;
872 }
873 
874 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
875 
876 #define IN_UNIT_ATTRS(X) \
877 	&sda_in_input[X].dev_attr.attr, \
878 	&sda_in_min[X].dev_attr.attr,   \
879 	&sda_in_max[X].dev_attr.attr,   \
880 	&sda_in_beep[X].dev_attr.attr,  \
881 	&sda_in_alarm[X].dev_attr.attr
882 
883 #define FAN_UNIT_ATTRS(X) \
884 	&sda_fan_input[X].dev_attr.attr,        \
885 	&sda_fan_min[X].dev_attr.attr,          \
886 	&sda_fan_div[X].dev_attr.attr,          \
887 	&sda_fan_beep[X].dev_attr.attr,         \
888 	&sda_fan_alarm[X].dev_attr.attr
889 
890 #define TEMP_UNIT_ATTRS(X) \
891 	&sda_temp_input[X].dev_attr.attr,       \
892 	&sda_temp_max[X].dev_attr.attr,         \
893 	&sda_temp_max_hyst[X].dev_attr.attr,    \
894 	&sda_temp_beep[X].dev_attr.attr,        \
895 	&sda_temp_alarm[X].dev_attr.attr
896 
897 static struct attribute *w83791d_attributes[] = {
898 	IN_UNIT_ATTRS(0),
899 	IN_UNIT_ATTRS(1),
900 	IN_UNIT_ATTRS(2),
901 	IN_UNIT_ATTRS(3),
902 	IN_UNIT_ATTRS(4),
903 	IN_UNIT_ATTRS(5),
904 	IN_UNIT_ATTRS(6),
905 	IN_UNIT_ATTRS(7),
906 	IN_UNIT_ATTRS(8),
907 	IN_UNIT_ATTRS(9),
908 	FAN_UNIT_ATTRS(0),
909 	FAN_UNIT_ATTRS(1),
910 	FAN_UNIT_ATTRS(2),
911 	FAN_UNIT_ATTRS(3),
912 	FAN_UNIT_ATTRS(4),
913 	TEMP_UNIT_ATTRS(0),
914 	TEMP_UNIT_ATTRS(1),
915 	TEMP_UNIT_ATTRS(2),
916 	&dev_attr_alarms.attr,
917 	&sda_beep_ctrl[0].dev_attr.attr,
918 	&sda_beep_ctrl[1].dev_attr.attr,
919 	&dev_attr_cpu0_vid.attr,
920 	&dev_attr_vrm.attr,
921 	NULL
922 };
923 
924 static const struct attribute_group w83791d_group = {
925 	.attrs = w83791d_attributes,
926 };
927 
928 
929 static int w83791d_detect_subclients(struct i2c_client *client)
930 {
931 	struct i2c_adapter *adapter = client->adapter;
932 	struct w83791d_data *data = i2c_get_clientdata(client);
933 	int address = client->addr;
934 	int i, id, err;
935 	u8 val;
936 
937 	id = i2c_adapter_id(adapter);
938 	if (force_subclients[0] == id && force_subclients[1] == address) {
939 		for (i = 2; i <= 3; i++) {
940 			if (force_subclients[i] < 0x48 ||
941 			    force_subclients[i] > 0x4f) {
942 				dev_err(&client->dev,
943 					"invalid subclient "
944 					"address %d; must be 0x48-0x4f\n",
945 					force_subclients[i]);
946 				err = -ENODEV;
947 				goto error_sc_0;
948 			}
949 		}
950 		w83791d_write(client, W83791D_REG_I2C_SUBADDR,
951 					(force_subclients[2] & 0x07) |
952 					((force_subclients[3] & 0x07) << 4));
953 	}
954 
955 	val = w83791d_read(client, W83791D_REG_I2C_SUBADDR);
956 	if (!(val & 0x08)) {
957 		data->lm75[0] = i2c_new_dummy(adapter, 0x48 + (val & 0x7));
958 	}
959 	if (!(val & 0x80)) {
960 		if ((data->lm75[0] != NULL) &&
961 				((val & 0x7) == ((val >> 4) & 0x7))) {
962 			dev_err(&client->dev,
963 				"duplicate addresses 0x%x, "
964 				"use force_subclient\n",
965 				data->lm75[0]->addr);
966 			err = -ENODEV;
967 			goto error_sc_1;
968 		}
969 		data->lm75[1] = i2c_new_dummy(adapter,
970 					      0x48 + ((val >> 4) & 0x7));
971 	}
972 
973 	return 0;
974 
975 /* Undo inits in case of errors */
976 
977 error_sc_1:
978 	if (data->lm75[0] != NULL)
979 		i2c_unregister_device(data->lm75[0]);
980 error_sc_0:
981 	return err;
982 }
983 
984 
985 /* Return 0 if detection is successful, -ENODEV otherwise */
986 static int w83791d_detect(struct i2c_client *client, int kind,
987 			  struct i2c_board_info *info)
988 {
989 	struct i2c_adapter *adapter = client->adapter;
990 	int val1, val2;
991 	unsigned short address = client->addr;
992 
993 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
994 		return -ENODEV;
995 	}
996 
997 	/* The w83791d may be stuck in some other bank than bank 0. This may
998 	   make reading other information impossible. Specify a force=...
999 	   parameter, and the Winbond will be reset to the right bank. */
1000 	if (kind < 0) {
1001 		if (w83791d_read(client, W83791D_REG_CONFIG) & 0x80) {
1002 			return -ENODEV;
1003 		}
1004 		val1 = w83791d_read(client, W83791D_REG_BANK);
1005 		val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
1006 		/* Check for Winbond ID if in bank 0 */
1007 		if (!(val1 & 0x07)) {
1008 			/* yes it is Bank0 */
1009 			if (((!(val1 & 0x80)) && (val2 != 0xa3)) ||
1010 			    ((val1 & 0x80) && (val2 != 0x5c))) {
1011 				return -ENODEV;
1012 			}
1013 		}
1014 		/* If Winbond chip, address of chip and W83791D_REG_I2C_ADDR
1015 		   should match */
1016 		if (w83791d_read(client, W83791D_REG_I2C_ADDR) != address) {
1017 			return -ENODEV;
1018 		}
1019 	}
1020 
1021 	/* We either have a force parameter or we have reason to
1022 	   believe it is a Winbond chip. Either way, we want bank 0 and
1023 	   Vendor ID high byte */
1024 	val1 = w83791d_read(client, W83791D_REG_BANK) & 0x78;
1025 	w83791d_write(client, W83791D_REG_BANK, val1 | 0x80);
1026 
1027 	/* Verify it is a Winbond w83791d */
1028 	if (kind <= 0) {
1029 		/* get vendor ID */
1030 		val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
1031 		if (val2 != 0x5c) {	/* the vendor is NOT Winbond */
1032 			return -ENODEV;
1033 		}
1034 		val1 = w83791d_read(client, W83791D_REG_WCHIPID);
1035 		if (val1 == 0x71) {
1036 			kind = w83791d;
1037 		} else {
1038 			if (kind == 0)
1039 				dev_warn(&adapter->dev,
1040 					"w83791d: Ignoring 'force' parameter "
1041 					"for unknown chip at adapter %d, "
1042 					"address 0x%02x\n",
1043 					i2c_adapter_id(adapter), address);
1044 			return -ENODEV;
1045 		}
1046 	}
1047 
1048 	strlcpy(info->type, "w83791d", I2C_NAME_SIZE);
1049 
1050 	return 0;
1051 }
1052 
1053 static int w83791d_probe(struct i2c_client *client,
1054 			 const struct i2c_device_id *id)
1055 {
1056 	struct w83791d_data *data;
1057 	struct device *dev = &client->dev;
1058 	int i, err;
1059 
1060 #ifdef DEBUG
1061 	int val1;
1062 	val1 = w83791d_read(client, W83791D_REG_DID_VID4);
1063 	dev_dbg(dev, "Device ID version: %d.%d (0x%02x)\n",
1064 			(val1 >> 5) & 0x07, (val1 >> 1) & 0x0f, val1);
1065 #endif
1066 
1067 	data = kzalloc(sizeof(struct w83791d_data), GFP_KERNEL);
1068 	if (!data) {
1069 		err = -ENOMEM;
1070 		goto error0;
1071 	}
1072 
1073 	i2c_set_clientdata(client, data);
1074 	mutex_init(&data->update_lock);
1075 
1076 	err = w83791d_detect_subclients(client);
1077 	if (err)
1078 		goto error1;
1079 
1080 	/* Initialize the chip */
1081 	w83791d_init_client(client);
1082 
1083 	/* If the fan_div is changed, make sure there is a rational
1084 	   fan_min in place */
1085 	for (i = 0; i < NUMBER_OF_FANIN; i++) {
1086 		data->fan_min[i] = w83791d_read(client, W83791D_REG_FAN_MIN[i]);
1087 	}
1088 
1089 	/* Register sysfs hooks */
1090 	if ((err = sysfs_create_group(&client->dev.kobj, &w83791d_group)))
1091 		goto error3;
1092 
1093 	/* Everything is ready, now register the working device */
1094 	data->hwmon_dev = hwmon_device_register(dev);
1095 	if (IS_ERR(data->hwmon_dev)) {
1096 		err = PTR_ERR(data->hwmon_dev);
1097 		goto error4;
1098 	}
1099 
1100 	return 0;
1101 
1102 error4:
1103 	sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1104 error3:
1105 	if (data->lm75[0] != NULL)
1106 		i2c_unregister_device(data->lm75[0]);
1107 	if (data->lm75[1] != NULL)
1108 		i2c_unregister_device(data->lm75[1]);
1109 error1:
1110 	kfree(data);
1111 error0:
1112 	return err;
1113 }
1114 
1115 static int w83791d_remove(struct i2c_client *client)
1116 {
1117 	struct w83791d_data *data = i2c_get_clientdata(client);
1118 
1119 	hwmon_device_unregister(data->hwmon_dev);
1120 	sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1121 
1122 	if (data->lm75[0] != NULL)
1123 		i2c_unregister_device(data->lm75[0]);
1124 	if (data->lm75[1] != NULL)
1125 		i2c_unregister_device(data->lm75[1]);
1126 
1127 	kfree(data);
1128 	return 0;
1129 }
1130 
1131 static void w83791d_init_client(struct i2c_client *client)
1132 {
1133 	struct w83791d_data *data = i2c_get_clientdata(client);
1134 	u8 tmp;
1135 	u8 old_beep;
1136 
1137 	/* The difference between reset and init is that reset
1138 	   does a hard reset of the chip via index 0x40, bit 7,
1139 	   but init simply forces certain registers to have "sane"
1140 	   values. The hope is that the BIOS has done the right
1141 	   thing (which is why the default is reset=0, init=0),
1142 	   but if not, reset is the hard hammer and init
1143 	   is the soft mallet both of which are trying to whack
1144 	   things into place...
1145 	   NOTE: The data sheet makes a distinction between
1146 	   "power on defaults" and "reset by MR". As far as I can tell,
1147 	   the hard reset puts everything into a power-on state so I'm
1148 	   not sure what "reset by MR" means or how it can happen.
1149 	   */
1150 	if (reset || init) {
1151 		/* keep some BIOS settings when we... */
1152 		old_beep = w83791d_read(client, W83791D_REG_BEEP_CONFIG);
1153 
1154 		if (reset) {
1155 			/* ... reset the chip and ... */
1156 			w83791d_write(client, W83791D_REG_CONFIG, 0x80);
1157 		}
1158 
1159 		/* ... disable power-on abnormal beep */
1160 		w83791d_write(client, W83791D_REG_BEEP_CONFIG, old_beep | 0x80);
1161 
1162 		/* disable the global beep (not done by hard reset) */
1163 		tmp = w83791d_read(client, W83791D_REG_BEEP_CTRL[1]);
1164 		w83791d_write(client, W83791D_REG_BEEP_CTRL[1], tmp & 0xef);
1165 
1166 		if (init) {
1167 			/* Make sure monitoring is turned on for add-ons */
1168 			tmp = w83791d_read(client, W83791D_REG_TEMP2_CONFIG);
1169 			if (tmp & 1) {
1170 				w83791d_write(client, W83791D_REG_TEMP2_CONFIG,
1171 					tmp & 0xfe);
1172 			}
1173 
1174 			tmp = w83791d_read(client, W83791D_REG_TEMP3_CONFIG);
1175 			if (tmp & 1) {
1176 				w83791d_write(client, W83791D_REG_TEMP3_CONFIG,
1177 					tmp & 0xfe);
1178 			}
1179 
1180 			/* Start monitoring */
1181 			tmp = w83791d_read(client, W83791D_REG_CONFIG) & 0xf7;
1182 			w83791d_write(client, W83791D_REG_CONFIG, tmp | 0x01);
1183 		}
1184 	}
1185 
1186 	data->vrm = vid_which_vrm();
1187 }
1188 
1189 static struct w83791d_data *w83791d_update_device(struct device *dev)
1190 {
1191 	struct i2c_client *client = to_i2c_client(dev);
1192 	struct w83791d_data *data = i2c_get_clientdata(client);
1193 	int i, j;
1194 	u8 reg_array_tmp[3];
1195 	u8 vbat_reg;
1196 
1197 	mutex_lock(&data->update_lock);
1198 
1199 	if (time_after(jiffies, data->last_updated + (HZ * 3))
1200 			|| !data->valid) {
1201 		dev_dbg(dev, "Starting w83791d device update\n");
1202 
1203 		/* Update the voltages measured value and limits */
1204 		for (i = 0; i < NUMBER_OF_VIN; i++) {
1205 			data->in[i] = w83791d_read(client,
1206 						W83791D_REG_IN[i]);
1207 			data->in_max[i] = w83791d_read(client,
1208 						W83791D_REG_IN_MAX[i]);
1209 			data->in_min[i] = w83791d_read(client,
1210 						W83791D_REG_IN_MIN[i]);
1211 		}
1212 
1213 		/* Update the fan counts and limits */
1214 		for (i = 0; i < NUMBER_OF_FANIN; i++) {
1215 			/* Update the Fan measured value and limits */
1216 			data->fan[i] = w83791d_read(client,
1217 						W83791D_REG_FAN[i]);
1218 			data->fan_min[i] = w83791d_read(client,
1219 						W83791D_REG_FAN_MIN[i]);
1220 		}
1221 
1222 		/* Update the fan divisor */
1223 		for (i = 0; i < 3; i++) {
1224 			reg_array_tmp[i] = w83791d_read(client,
1225 						W83791D_REG_FAN_DIV[i]);
1226 		}
1227 		data->fan_div[0] = (reg_array_tmp[0] >> 4) & 0x03;
1228 		data->fan_div[1] = (reg_array_tmp[0] >> 6) & 0x03;
1229 		data->fan_div[2] = (reg_array_tmp[1] >> 6) & 0x03;
1230 		data->fan_div[3] = reg_array_tmp[2] & 0x07;
1231 		data->fan_div[4] = (reg_array_tmp[2] >> 4) & 0x07;
1232 
1233 		/* The fan divisor for fans 0-2 get bit 2 from
1234 		   bits 5-7 respectively of vbat register */
1235 		vbat_reg = w83791d_read(client, W83791D_REG_VBAT);
1236 		for (i = 0; i < 3; i++)
1237 			data->fan_div[i] |= (vbat_reg >> (3 + i)) & 0x04;
1238 
1239 		/* Update the first temperature sensor */
1240 		for (i = 0; i < 3; i++) {
1241 			data->temp1[i] = w83791d_read(client,
1242 						W83791D_REG_TEMP1[i]);
1243 		}
1244 
1245 		/* Update the rest of the temperature sensors */
1246 		for (i = 0; i < 2; i++) {
1247 			for (j = 0; j < 3; j++) {
1248 				data->temp_add[i][j] =
1249 					(w83791d_read(client,
1250 					W83791D_REG_TEMP_ADD[i][j * 2]) << 8) |
1251 					w83791d_read(client,
1252 					W83791D_REG_TEMP_ADD[i][j * 2 + 1]);
1253 			}
1254 		}
1255 
1256 		/* Update the realtime status */
1257 		data->alarms =
1258 			w83791d_read(client, W83791D_REG_ALARM1) +
1259 			(w83791d_read(client, W83791D_REG_ALARM2) << 8) +
1260 			(w83791d_read(client, W83791D_REG_ALARM3) << 16);
1261 
1262 		/* Update the beep configuration information */
1263 		data->beep_mask =
1264 			w83791d_read(client, W83791D_REG_BEEP_CTRL[0]) +
1265 			(w83791d_read(client, W83791D_REG_BEEP_CTRL[1]) << 8) +
1266 			(w83791d_read(client, W83791D_REG_BEEP_CTRL[2]) << 16);
1267 
1268 		/* Extract global beep enable flag */
1269 		data->beep_enable =
1270 			(data->beep_mask >> GLOBAL_BEEP_ENABLE_SHIFT) & 0x01;
1271 
1272 		/* Update the cpu voltage information */
1273 		i = w83791d_read(client, W83791D_REG_VID_FANDIV);
1274 		data->vid = i & 0x0f;
1275 		data->vid |= (w83791d_read(client, W83791D_REG_DID_VID4) & 0x01)
1276 				<< 4;
1277 
1278 		data->last_updated = jiffies;
1279 		data->valid = 1;
1280 	}
1281 
1282 	mutex_unlock(&data->update_lock);
1283 
1284 #ifdef DEBUG
1285 	w83791d_print_debug(data, dev);
1286 #endif
1287 
1288 	return data;
1289 }
1290 
1291 #ifdef DEBUG
1292 static void w83791d_print_debug(struct w83791d_data *data, struct device *dev)
1293 {
1294 	int i = 0, j = 0;
1295 
1296 	dev_dbg(dev, "======Start of w83791d debug values======\n");
1297 	dev_dbg(dev, "%d set of Voltages: ===>\n", NUMBER_OF_VIN);
1298 	for (i = 0; i < NUMBER_OF_VIN; i++) {
1299 		dev_dbg(dev, "vin[%d] is:     0x%02x\n", i, data->in[i]);
1300 		dev_dbg(dev, "vin[%d] min is: 0x%02x\n", i, data->in_min[i]);
1301 		dev_dbg(dev, "vin[%d] max is: 0x%02x\n", i, data->in_max[i]);
1302 	}
1303 	dev_dbg(dev, "%d set of Fan Counts/Divisors: ===>\n", NUMBER_OF_FANIN);
1304 	for (i = 0; i < NUMBER_OF_FANIN; i++) {
1305 		dev_dbg(dev, "fan[%d] is:     0x%02x\n", i, data->fan[i]);
1306 		dev_dbg(dev, "fan[%d] min is: 0x%02x\n", i, data->fan_min[i]);
1307 		dev_dbg(dev, "fan_div[%d] is: 0x%02x\n", i, data->fan_div[i]);
1308 	}
1309 
1310 	/* temperature math is signed, but only print out the
1311 	   bits that matter */
1312 	dev_dbg(dev, "%d set of Temperatures: ===>\n", NUMBER_OF_TEMPIN);
1313 	for (i = 0; i < 3; i++) {
1314 		dev_dbg(dev, "temp1[%d] is: 0x%02x\n", i, (u8) data->temp1[i]);
1315 	}
1316 	for (i = 0; i < 2; i++) {
1317 		for (j = 0; j < 3; j++) {
1318 			dev_dbg(dev, "temp_add[%d][%d] is: 0x%04x\n", i, j,
1319 				(u16) data->temp_add[i][j]);
1320 		}
1321 	}
1322 
1323 	dev_dbg(dev, "Misc Information: ===>\n");
1324 	dev_dbg(dev, "alarm is:     0x%08x\n", data->alarms);
1325 	dev_dbg(dev, "beep_mask is: 0x%08x\n", data->beep_mask);
1326 	dev_dbg(dev, "beep_enable is: %d\n", data->beep_enable);
1327 	dev_dbg(dev, "vid is: 0x%02x\n", data->vid);
1328 	dev_dbg(dev, "vrm is: 0x%02x\n", data->vrm);
1329 	dev_dbg(dev, "=======End of w83791d debug values========\n");
1330 	dev_dbg(dev, "\n");
1331 }
1332 #endif
1333 
1334 static int __init sensors_w83791d_init(void)
1335 {
1336 	return i2c_add_driver(&w83791d_driver);
1337 }
1338 
1339 static void __exit sensors_w83791d_exit(void)
1340 {
1341 	i2c_del_driver(&w83791d_driver);
1342 }
1343 
1344 MODULE_AUTHOR("Charles Spirakis <bezaur@gmail.com>");
1345 MODULE_DESCRIPTION("W83791D driver");
1346 MODULE_LICENSE("GPL");
1347 
1348 module_init(sensors_w83791d_init);
1349 module_exit(sensors_w83791d_exit);
1350