xref: /openbmc/linux/drivers/hwmon/w83793.c (revision 22246614)
1 /*
2     w83793.c - Linux kernel driver for hardware monitoring
3     Copyright (C) 2006 Winbond Electronics Corp.
4                   Yuan Mu
5                   Rudolf Marek <r.marek@assembler.cz>
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 - version 2.
10 
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15 
16     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software
18     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19     02110-1301 USA.
20 */
21 
22 /*
23     Supports following chips:
24 
25     Chip	#vin	#fanin	#pwm	#temp	wchipid	vendid	i2c	ISA
26     w83793	10	12	8	6	0x7b	0x5ca3	yes	no
27 */
28 
29 #include <linux/module.h>
30 #include <linux/init.h>
31 #include <linux/slab.h>
32 #include <linux/i2c.h>
33 #include <linux/hwmon.h>
34 #include <linux/hwmon-vid.h>
35 #include <linux/hwmon-sysfs.h>
36 #include <linux/err.h>
37 #include <linux/mutex.h>
38 
39 /* Addresses to scan */
40 static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
41 						I2C_CLIENT_END };
42 
43 /* Insmod parameters */
44 I2C_CLIENT_INSMOD_1(w83793);
45 I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: "
46 		       "{bus, clientaddr, subclientaddr1, subclientaddr2}");
47 
48 static int reset;
49 module_param(reset, bool, 0);
50 MODULE_PARM_DESC(reset, "Set to 1 to reset chip, not recommended");
51 
52 /*
53    Address 0x00, 0x0d, 0x0e, 0x0f in all three banks are reserved
54    as ID, Bank Select registers
55 */
56 #define W83793_REG_BANKSEL		0x00
57 #define W83793_REG_VENDORID		0x0d
58 #define W83793_REG_CHIPID		0x0e
59 #define W83793_REG_DEVICEID		0x0f
60 
61 #define W83793_REG_CONFIG		0x40
62 #define W83793_REG_MFC			0x58
63 #define W83793_REG_FANIN_CTRL		0x5c
64 #define W83793_REG_FANIN_SEL		0x5d
65 #define W83793_REG_I2C_ADDR		0x0b
66 #define W83793_REG_I2C_SUBADDR		0x0c
67 #define W83793_REG_VID_INA		0x05
68 #define W83793_REG_VID_INB		0x06
69 #define W83793_REG_VID_LATCHA		0x07
70 #define W83793_REG_VID_LATCHB		0x08
71 #define W83793_REG_VID_CTRL		0x59
72 
73 static u16 W83793_REG_TEMP_MODE[2] = { 0x5e, 0x5f };
74 
75 #define TEMP_READ	0
76 #define TEMP_CRIT	1
77 #define TEMP_CRIT_HYST	2
78 #define TEMP_WARN	3
79 #define TEMP_WARN_HYST	4
80 /* only crit and crit_hyst affect real-time alarm status
81    current crit crit_hyst warn warn_hyst */
82 static u16 W83793_REG_TEMP[][5] = {
83 	{0x1c, 0x78, 0x79, 0x7a, 0x7b},
84 	{0x1d, 0x7c, 0x7d, 0x7e, 0x7f},
85 	{0x1e, 0x80, 0x81, 0x82, 0x83},
86 	{0x1f, 0x84, 0x85, 0x86, 0x87},
87 	{0x20, 0x88, 0x89, 0x8a, 0x8b},
88 	{0x21, 0x8c, 0x8d, 0x8e, 0x8f},
89 };
90 
91 #define W83793_REG_TEMP_LOW_BITS	0x22
92 
93 #define W83793_REG_BEEP(index)		(0x53 + (index))
94 #define W83793_REG_ALARM(index)		(0x4b + (index))
95 
96 #define W83793_REG_CLR_CHASSIS		0x4a	/* SMI MASK4 */
97 #define W83793_REG_IRQ_CTRL		0x50
98 #define W83793_REG_OVT_CTRL		0x51
99 #define W83793_REG_OVT_BEEP		0x52
100 
101 #define IN_READ				0
102 #define IN_MAX				1
103 #define IN_LOW				2
104 static const u16 W83793_REG_IN[][3] = {
105 	/* Current, High, Low */
106 	{0x10, 0x60, 0x61},	/* Vcore A	*/
107 	{0x11, 0x62, 0x63},	/* Vcore B	*/
108 	{0x12, 0x64, 0x65},	/* Vtt		*/
109 	{0x14, 0x6a, 0x6b},	/* VSEN1	*/
110 	{0x15, 0x6c, 0x6d},	/* VSEN2	*/
111 	{0x16, 0x6e, 0x6f},	/* +3VSEN	*/
112 	{0x17, 0x70, 0x71},	/* +12VSEN	*/
113 	{0x18, 0x72, 0x73},	/* 5VDD		*/
114 	{0x19, 0x74, 0x75},	/* 5VSB		*/
115 	{0x1a, 0x76, 0x77},	/* VBAT		*/
116 };
117 
118 /* Low Bits of Vcore A/B Vtt Read/High/Low */
119 static const u16 W83793_REG_IN_LOW_BITS[] = { 0x1b, 0x68, 0x69 };
120 static u8 scale_in[] = { 2, 2, 2, 16, 16, 16, 8, 24, 24, 16 };
121 static u8 scale_in_add[] = { 0, 0, 0, 0, 0, 0, 0, 150, 150, 0 };
122 
123 #define W83793_REG_FAN(index)		(0x23 + 2 * (index))	/* High byte */
124 #define W83793_REG_FAN_MIN(index)	(0x90 + 2 * (index))	/* High byte */
125 
126 #define W83793_REG_PWM_DEFAULT		0xb2
127 #define W83793_REG_PWM_ENABLE		0x207
128 #define W83793_REG_PWM_UPTIME		0xc3	/* Unit in 0.1 second */
129 #define W83793_REG_PWM_DOWNTIME		0xc4	/* Unit in 0.1 second */
130 #define W83793_REG_TEMP_CRITICAL	0xc5
131 
132 #define PWM_DUTY			0
133 #define PWM_START			1
134 #define PWM_NONSTOP			2
135 #define PWM_STOP_TIME			3
136 #define W83793_REG_PWM(index, nr)	(((nr) == 0 ? 0xb3 : \
137 					 (nr) == 1 ? 0x220 : 0x218) + (index))
138 
139 /* bit field, fan1 is bit0, fan2 is bit1 ... */
140 #define W83793_REG_TEMP_FAN_MAP(index)	(0x201 + (index))
141 #define W83793_REG_TEMP_TOL(index)	(0x208 + (index))
142 #define W83793_REG_TEMP_CRUISE(index)	(0x210 + (index))
143 #define W83793_REG_PWM_STOP_TIME(index)	(0x228 + (index))
144 #define W83793_REG_SF2_TEMP(index, nr)	(0x230 + ((index) << 4) + (nr))
145 #define W83793_REG_SF2_PWM(index, nr)	(0x238 + ((index) << 4) + (nr))
146 
147 static inline unsigned long FAN_FROM_REG(u16 val)
148 {
149 	if ((val >= 0xfff) || (val == 0))
150 		return	0;
151 	return (1350000UL / val);
152 }
153 
154 static inline u16 FAN_TO_REG(long rpm)
155 {
156 	if (rpm <= 0)
157 		return 0x0fff;
158 	return SENSORS_LIMIT((1350000 + (rpm >> 1)) / rpm, 1, 0xffe);
159 }
160 
161 static inline unsigned long TIME_FROM_REG(u8 reg)
162 {
163 	return (reg * 100);
164 }
165 
166 static inline u8 TIME_TO_REG(unsigned long val)
167 {
168 	return SENSORS_LIMIT((val + 50) / 100, 0, 0xff);
169 }
170 
171 static inline long TEMP_FROM_REG(s8 reg)
172 {
173 	return (reg * 1000);
174 }
175 
176 static inline s8 TEMP_TO_REG(long val, s8 min, s8 max)
177 {
178 	return SENSORS_LIMIT((val + (val < 0 ? -500 : 500)) / 1000, min, max);
179 }
180 
181 struct w83793_data {
182 	struct i2c_client client;
183 	struct i2c_client *lm75[2];
184 	struct device *hwmon_dev;
185 	struct mutex update_lock;
186 	char valid;			/* !=0 if following fields are valid */
187 	unsigned long last_updated;	/* In jiffies */
188 	unsigned long last_nonvolatile;	/* In jiffies, last time we update the
189 					   nonvolatile registers */
190 
191 	u8 bank;
192 	u8 vrm;
193 	u8 vid[2];
194 	u8 in[10][3];		/* Register value, read/high/low */
195 	u8 in_low_bits[3];	/* Additional resolution for VCore A/B Vtt */
196 
197 	u16 has_fan;		/* Only fan1- fan5 has own pins */
198 	u16 fan[12];		/* Register value combine */
199 	u16 fan_min[12];	/* Register value combine */
200 
201 	s8 temp[6][5];		/* current, crit, crit_hyst,warn, warn_hyst */
202 	u8 temp_low_bits;	/* Additional resolution TD1-TD4 */
203 	u8 temp_mode[2];	/* byte 0: Temp D1-D4 mode each has 2 bits
204 				   byte 1: Temp R1,R2 mode, each has 1 bit */
205 	u8 temp_critical;	/* If reached all fan will be at full speed */
206 	u8 temp_fan_map[6];	/* Temp controls which pwm fan, bit field */
207 
208 	u8 has_pwm;
209 	u8 has_temp;
210 	u8 has_vid;
211 	u8 pwm_enable;		/* Register value, each Temp has 1 bit */
212 	u8 pwm_uptime;		/* Register value */
213 	u8 pwm_downtime;	/* Register value */
214 	u8 pwm_default;		/* All fan default pwm, next poweron valid */
215 	u8 pwm[8][3];		/* Register value */
216 	u8 pwm_stop_time[8];
217 	u8 temp_cruise[6];
218 
219 	u8 alarms[5];		/* realtime status registers */
220 	u8 beeps[5];
221 	u8 beep_enable;
222 	u8 tolerance[3];	/* Temp tolerance(Smart Fan I/II) */
223 	u8 sf2_pwm[6][7];	/* Smart FanII: Fan duty cycle */
224 	u8 sf2_temp[6][7];	/* Smart FanII: Temp level point */
225 };
226 
227 static u8 w83793_read_value(struct i2c_client *client, u16 reg);
228 static int w83793_write_value(struct i2c_client *client, u16 reg, u8 value);
229 static int w83793_attach_adapter(struct i2c_adapter *adapter);
230 static int w83793_detect(struct i2c_adapter *adapter, int address, int kind);
231 static int w83793_detach_client(struct i2c_client *client);
232 static void w83793_init_client(struct i2c_client *client);
233 static void w83793_update_nonvolatile(struct device *dev);
234 static struct w83793_data *w83793_update_device(struct device *dev);
235 
236 static struct i2c_driver w83793_driver = {
237 	.driver = {
238 		   .name = "w83793",
239 	},
240 	.attach_adapter = w83793_attach_adapter,
241 	.detach_client = w83793_detach_client,
242 };
243 
244 static ssize_t
245 show_vrm(struct device *dev, struct device_attribute *attr, char *buf)
246 {
247 	struct w83793_data *data = dev_get_drvdata(dev);
248 	return sprintf(buf, "%d\n", data->vrm);
249 }
250 
251 static ssize_t
252 show_vid(struct device *dev, struct device_attribute *attr, char *buf)
253 {
254 	struct w83793_data *data = w83793_update_device(dev);
255 	struct sensor_device_attribute_2 *sensor_attr =
256 	    to_sensor_dev_attr_2(attr);
257 	int index = sensor_attr->index;
258 
259 	return sprintf(buf, "%d\n", vid_from_reg(data->vid[index], data->vrm));
260 }
261 
262 static ssize_t
263 store_vrm(struct device *dev, struct device_attribute *attr,
264 	  const char *buf, size_t count)
265 {
266 	struct w83793_data *data = dev_get_drvdata(dev);
267 	data->vrm = simple_strtoul(buf, NULL, 10);
268 	return count;
269 }
270 
271 #define ALARM_STATUS			0
272 #define BEEP_ENABLE			1
273 static ssize_t
274 show_alarm_beep(struct device *dev, struct device_attribute *attr, char *buf)
275 {
276 	struct w83793_data *data = w83793_update_device(dev);
277 	struct sensor_device_attribute_2 *sensor_attr =
278 	    to_sensor_dev_attr_2(attr);
279 	int nr = sensor_attr->nr;
280 	int index = sensor_attr->index >> 3;
281 	int bit = sensor_attr->index & 0x07;
282 	u8 val;
283 
284 	if (ALARM_STATUS == nr) {
285 		val = (data->alarms[index] >> (bit)) & 1;
286 	} else {		/* BEEP_ENABLE */
287 		val = (data->beeps[index] >> (bit)) & 1;
288 	}
289 
290 	return sprintf(buf, "%u\n", val);
291 }
292 
293 static ssize_t
294 store_beep(struct device *dev, struct device_attribute *attr,
295 	   const char *buf, size_t count)
296 {
297 	struct i2c_client *client = to_i2c_client(dev);
298 	struct w83793_data *data = i2c_get_clientdata(client);
299 	struct sensor_device_attribute_2 *sensor_attr =
300 	    to_sensor_dev_attr_2(attr);
301 	int index = sensor_attr->index >> 3;
302 	int shift = sensor_attr->index & 0x07;
303 	u8 beep_bit = 1 << shift;
304 	u8 val;
305 
306 	val = simple_strtoul(buf, NULL, 10);
307 	if (val != 0 && val != 1)
308 		return -EINVAL;
309 
310 	mutex_lock(&data->update_lock);
311 	data->beeps[index] = w83793_read_value(client, W83793_REG_BEEP(index));
312 	data->beeps[index] &= ~beep_bit;
313 	data->beeps[index] |= val << shift;
314 	w83793_write_value(client, W83793_REG_BEEP(index), data->beeps[index]);
315 	mutex_unlock(&data->update_lock);
316 
317 	return count;
318 }
319 
320 static ssize_t
321 show_beep_enable(struct device *dev, struct device_attribute *attr, char *buf)
322 {
323 	struct w83793_data *data = w83793_update_device(dev);
324 	return sprintf(buf, "%u\n", (data->beep_enable >> 1) & 0x01);
325 }
326 
327 static ssize_t
328 store_beep_enable(struct device *dev, struct device_attribute *attr,
329 		  const char *buf, size_t count)
330 {
331 	struct i2c_client *client = to_i2c_client(dev);
332 	struct w83793_data *data = i2c_get_clientdata(client);
333 	u8 val = simple_strtoul(buf, NULL, 10);
334 
335 	if (val != 0 && val != 1)
336 		return -EINVAL;
337 
338 	mutex_lock(&data->update_lock);
339 	data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP)
340 			    & 0xfd;
341 	data->beep_enable |= val << 1;
342 	w83793_write_value(client, W83793_REG_OVT_BEEP, data->beep_enable);
343 	mutex_unlock(&data->update_lock);
344 
345 	return count;
346 }
347 
348 /* Write any value to clear chassis alarm */
349 static ssize_t
350 store_chassis_clear(struct device *dev,
351 		    struct device_attribute *attr, const char *buf,
352 		    size_t count)
353 {
354 	struct i2c_client *client = to_i2c_client(dev);
355 	struct w83793_data *data = i2c_get_clientdata(client);
356 	u8 val;
357 
358 	mutex_lock(&data->update_lock);
359 	val = w83793_read_value(client, W83793_REG_CLR_CHASSIS);
360 	val |= 0x80;
361 	w83793_write_value(client, W83793_REG_CLR_CHASSIS, val);
362 	mutex_unlock(&data->update_lock);
363 	return count;
364 }
365 
366 #define FAN_INPUT			0
367 #define FAN_MIN				1
368 static ssize_t
369 show_fan(struct device *dev, struct device_attribute *attr, char *buf)
370 {
371 	struct sensor_device_attribute_2 *sensor_attr =
372 	    to_sensor_dev_attr_2(attr);
373 	int nr = sensor_attr->nr;
374 	int index = sensor_attr->index;
375 	struct w83793_data *data = w83793_update_device(dev);
376 	u16 val;
377 
378 	if (FAN_INPUT == nr) {
379 		val = data->fan[index] & 0x0fff;
380 	} else {
381 		val = data->fan_min[index] & 0x0fff;
382 	}
383 
384 	return sprintf(buf, "%lu\n", FAN_FROM_REG(val));
385 }
386 
387 static ssize_t
388 store_fan_min(struct device *dev, struct device_attribute *attr,
389 	      const char *buf, size_t count)
390 {
391 	struct sensor_device_attribute_2 *sensor_attr =
392 	    to_sensor_dev_attr_2(attr);
393 	int index = sensor_attr->index;
394 	struct i2c_client *client = to_i2c_client(dev);
395 	struct w83793_data *data = i2c_get_clientdata(client);
396 	u16 val = FAN_TO_REG(simple_strtoul(buf, NULL, 10));
397 
398 	mutex_lock(&data->update_lock);
399 	data->fan_min[index] = val;
400 	w83793_write_value(client, W83793_REG_FAN_MIN(index),
401 			   (val >> 8) & 0xff);
402 	w83793_write_value(client, W83793_REG_FAN_MIN(index) + 1, val & 0xff);
403 	mutex_unlock(&data->update_lock);
404 
405 	return count;
406 }
407 
408 static ssize_t
409 show_pwm(struct device *dev, struct device_attribute *attr, char *buf)
410 {
411 	struct sensor_device_attribute_2 *sensor_attr =
412 	    to_sensor_dev_attr_2(attr);
413 	struct w83793_data *data = w83793_update_device(dev);
414 	u16 val;
415 	int nr = sensor_attr->nr;
416 	int index = sensor_attr->index;
417 
418 	if (PWM_STOP_TIME == nr)
419 		val = TIME_FROM_REG(data->pwm_stop_time[index]);
420 	else
421 		val = (data->pwm[index][nr] & 0x3f) << 2;
422 
423 	return sprintf(buf, "%d\n", val);
424 }
425 
426 static ssize_t
427 store_pwm(struct device *dev, struct device_attribute *attr,
428 	  const char *buf, size_t count)
429 {
430 	struct i2c_client *client = to_i2c_client(dev);
431 	struct w83793_data *data = i2c_get_clientdata(client);
432 	struct sensor_device_attribute_2 *sensor_attr =
433 	    to_sensor_dev_attr_2(attr);
434 	int nr = sensor_attr->nr;
435 	int index = sensor_attr->index;
436 	u8 val;
437 
438 	mutex_lock(&data->update_lock);
439 	if (PWM_STOP_TIME == nr) {
440 		val = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
441 		data->pwm_stop_time[index] = val;
442 		w83793_write_value(client, W83793_REG_PWM_STOP_TIME(index),
443 				   val);
444 	} else {
445 		val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 0xff)
446 		      >> 2;
447 		data->pwm[index][nr] =
448 		    w83793_read_value(client, W83793_REG_PWM(index, nr)) & 0xc0;
449 		data->pwm[index][nr] |= val;
450 		w83793_write_value(client, W83793_REG_PWM(index, nr),
451 							data->pwm[index][nr]);
452 	}
453 
454 	mutex_unlock(&data->update_lock);
455 	return count;
456 }
457 
458 static ssize_t
459 show_temp(struct device *dev, struct device_attribute *attr, char *buf)
460 {
461 	struct sensor_device_attribute_2 *sensor_attr =
462 	    to_sensor_dev_attr_2(attr);
463 	int nr = sensor_attr->nr;
464 	int index = sensor_attr->index;
465 	struct w83793_data *data = w83793_update_device(dev);
466 	long temp = TEMP_FROM_REG(data->temp[index][nr]);
467 
468 	if (TEMP_READ == nr && index < 4) {	/* Only TD1-TD4 have low bits */
469 		int low = ((data->temp_low_bits >> (index * 2)) & 0x03) * 250;
470 		temp += temp > 0 ? low : -low;
471 	}
472 	return sprintf(buf, "%ld\n", temp);
473 }
474 
475 static ssize_t
476 store_temp(struct device *dev, struct device_attribute *attr,
477 	   const char *buf, size_t count)
478 {
479 	struct sensor_device_attribute_2 *sensor_attr =
480 	    to_sensor_dev_attr_2(attr);
481 	int nr = sensor_attr->nr;
482 	int index = sensor_attr->index;
483 	struct i2c_client *client = to_i2c_client(dev);
484 	struct w83793_data *data = i2c_get_clientdata(client);
485 	long tmp = simple_strtol(buf, NULL, 10);
486 
487 	mutex_lock(&data->update_lock);
488 	data->temp[index][nr] = TEMP_TO_REG(tmp, -128, 127);
489 	w83793_write_value(client, W83793_REG_TEMP[index][nr],
490 			   data->temp[index][nr]);
491 	mutex_unlock(&data->update_lock);
492 	return count;
493 }
494 
495 /*
496 	TD1-TD4
497 	each has 4 mode:(2 bits)
498 	0:	Stop monitor
499 	1:	Use internal temp sensor(default)
500 	2:	Reserved
501 	3:	Use sensor in Intel CPU and get result by PECI
502 
503 	TR1-TR2
504 	each has 2 mode:(1 bit)
505 	0:	Disable temp sensor monitor
506 	1:	To enable temp sensors monitor
507 */
508 
509 /* 0 disable, 6 PECI */
510 static u8 TO_TEMP_MODE[] = { 0, 0, 0, 6 };
511 
512 static ssize_t
513 show_temp_mode(struct device *dev, struct device_attribute *attr, char *buf)
514 {
515 	struct w83793_data *data = w83793_update_device(dev);
516 	struct sensor_device_attribute_2 *sensor_attr =
517 	    to_sensor_dev_attr_2(attr);
518 	int index = sensor_attr->index;
519 	u8 mask = (index < 4) ? 0x03 : 0x01;
520 	u8 shift = (index < 4) ? (2 * index) : (index - 4);
521 	u8 tmp;
522 	index = (index < 4) ? 0 : 1;
523 
524 	tmp = (data->temp_mode[index] >> shift) & mask;
525 
526 	/* for the internal sensor, found out if diode or thermistor */
527 	if (tmp == 1) {
528 		tmp = index == 0 ? 3 : 4;
529 	} else {
530 		tmp = TO_TEMP_MODE[tmp];
531 	}
532 
533 	return sprintf(buf, "%d\n", tmp);
534 }
535 
536 static ssize_t
537 store_temp_mode(struct device *dev, struct device_attribute *attr,
538 		const char *buf, size_t count)
539 {
540 	struct i2c_client *client = to_i2c_client(dev);
541 	struct w83793_data *data = i2c_get_clientdata(client);
542 	struct sensor_device_attribute_2 *sensor_attr =
543 	    to_sensor_dev_attr_2(attr);
544 	int index = sensor_attr->index;
545 	u8 mask = (index < 4) ? 0x03 : 0x01;
546 	u8 shift = (index < 4) ? (2 * index) : (index - 4);
547 	u8 val = simple_strtoul(buf, NULL, 10);
548 
549 	/* transform the sysfs interface values into table above */
550 	if ((val == 6) && (index < 4)) {
551 		val -= 3;
552 	} else if ((val == 3 && index < 4)
553 		|| (val == 4 && index >= 4)) {
554 		/* transform diode or thermistor into internal enable */
555 		val = !!val;
556 	} else {
557 		return -EINVAL;
558 	}
559 
560 	index = (index < 4) ? 0 : 1;
561 	mutex_lock(&data->update_lock);
562 	data->temp_mode[index] =
563 	    w83793_read_value(client, W83793_REG_TEMP_MODE[index]);
564 	data->temp_mode[index] &= ~(mask << shift);
565 	data->temp_mode[index] |= val << shift;
566 	w83793_write_value(client, W83793_REG_TEMP_MODE[index],
567 							data->temp_mode[index]);
568 	mutex_unlock(&data->update_lock);
569 
570 	return count;
571 }
572 
573 #define SETUP_PWM_DEFAULT		0
574 #define SETUP_PWM_UPTIME		1	/* Unit in 0.1s */
575 #define SETUP_PWM_DOWNTIME		2	/* Unit in 0.1s */
576 #define SETUP_TEMP_CRITICAL		3
577 static ssize_t
578 show_sf_setup(struct device *dev, struct device_attribute *attr, char *buf)
579 {
580 	struct sensor_device_attribute_2 *sensor_attr =
581 	    to_sensor_dev_attr_2(attr);
582 	int nr = sensor_attr->nr;
583 	struct w83793_data *data = w83793_update_device(dev);
584 	u32 val = 0;
585 
586 	if (SETUP_PWM_DEFAULT == nr) {
587 		val = (data->pwm_default & 0x3f) << 2;
588 	} else if (SETUP_PWM_UPTIME == nr) {
589 		val = TIME_FROM_REG(data->pwm_uptime);
590 	} else if (SETUP_PWM_DOWNTIME == nr) {
591 		val = TIME_FROM_REG(data->pwm_downtime);
592 	} else if (SETUP_TEMP_CRITICAL == nr) {
593 		val = TEMP_FROM_REG(data->temp_critical & 0x7f);
594 	}
595 
596 	return sprintf(buf, "%d\n", val);
597 }
598 
599 static ssize_t
600 store_sf_setup(struct device *dev, struct device_attribute *attr,
601 	       const char *buf, size_t count)
602 {
603 	struct sensor_device_attribute_2 *sensor_attr =
604 	    to_sensor_dev_attr_2(attr);
605 	int nr = sensor_attr->nr;
606 	struct i2c_client *client = to_i2c_client(dev);
607 	struct w83793_data *data = i2c_get_clientdata(client);
608 
609 	mutex_lock(&data->update_lock);
610 	if (SETUP_PWM_DEFAULT == nr) {
611 		data->pwm_default =
612 		    w83793_read_value(client, W83793_REG_PWM_DEFAULT) & 0xc0;
613 		data->pwm_default |= SENSORS_LIMIT(simple_strtoul(buf, NULL,
614 								  10),
615 						   0, 0xff) >> 2;
616 		w83793_write_value(client, W83793_REG_PWM_DEFAULT,
617 							data->pwm_default);
618 	} else if (SETUP_PWM_UPTIME == nr) {
619 		data->pwm_uptime = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
620 		data->pwm_uptime += data->pwm_uptime == 0 ? 1 : 0;
621 		w83793_write_value(client, W83793_REG_PWM_UPTIME,
622 							data->pwm_uptime);
623 	} else if (SETUP_PWM_DOWNTIME == nr) {
624 		data->pwm_downtime = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
625 		data->pwm_downtime += data->pwm_downtime == 0 ? 1 : 0;
626 		w83793_write_value(client, W83793_REG_PWM_DOWNTIME,
627 							data->pwm_downtime);
628 	} else {		/* SETUP_TEMP_CRITICAL */
629 		data->temp_critical =
630 		    w83793_read_value(client, W83793_REG_TEMP_CRITICAL) & 0x80;
631 		data->temp_critical |= TEMP_TO_REG(simple_strtol(buf, NULL, 10),
632 						   0, 0x7f);
633 		w83793_write_value(client, W83793_REG_TEMP_CRITICAL,
634 							data->temp_critical);
635 	}
636 
637 	mutex_unlock(&data->update_lock);
638 	return count;
639 }
640 
641 /*
642 	Temp SmartFan control
643 	TEMP_FAN_MAP
644 	Temp channel control which pwm fan, bitfield, bit 0 indicate pwm1...
645 	It's possible two or more temp channels control the same fan, w83793
646 	always prefers to pick the most critical request and applies it to
647 	the related Fan.
648 	It's possible one fan is not in any mapping of 6 temp channels, this
649 	means the fan is manual mode
650 
651 	TEMP_PWM_ENABLE
652 	Each temp channel has its own SmartFan mode, and temp channel
653 	control	fans that are set by TEMP_FAN_MAP
654 	0:	SmartFanII mode
655 	1:	Thermal Cruise Mode
656 
657 	TEMP_CRUISE
658 	Target temperature in thermal cruise mode, w83793 will try to turn
659 	fan speed to keep the temperature of target device around this
660 	temperature.
661 
662 	TEMP_TOLERANCE
663 	If Temp higher or lower than target with this tolerance, w83793
664 	will take actions to speed up or slow down the fan to keep the
665 	temperature within the tolerance range.
666 */
667 
668 #define TEMP_FAN_MAP			0
669 #define TEMP_PWM_ENABLE			1
670 #define TEMP_CRUISE			2
671 #define TEMP_TOLERANCE			3
672 static ssize_t
673 show_sf_ctrl(struct device *dev, struct device_attribute *attr, char *buf)
674 {
675 	struct sensor_device_attribute_2 *sensor_attr =
676 	    to_sensor_dev_attr_2(attr);
677 	int nr = sensor_attr->nr;
678 	int index = sensor_attr->index;
679 	struct w83793_data *data = w83793_update_device(dev);
680 	u32 val;
681 
682 	if (TEMP_FAN_MAP == nr) {
683 		val = data->temp_fan_map[index];
684 	} else if (TEMP_PWM_ENABLE == nr) {
685 		/* +2 to transfrom into 2 and 3 to conform with sysfs intf */
686 		val = ((data->pwm_enable >> index) & 0x01) + 2;
687 	} else if (TEMP_CRUISE == nr) {
688 		val = TEMP_FROM_REG(data->temp_cruise[index] & 0x7f);
689 	} else {		/* TEMP_TOLERANCE */
690 		val = data->tolerance[index >> 1] >> ((index & 0x01) ? 4 : 0);
691 		val = TEMP_FROM_REG(val & 0x0f);
692 	}
693 	return sprintf(buf, "%d\n", val);
694 }
695 
696 static ssize_t
697 store_sf_ctrl(struct device *dev, struct device_attribute *attr,
698 	      const char *buf, size_t count)
699 {
700 	struct sensor_device_attribute_2 *sensor_attr =
701 	    to_sensor_dev_attr_2(attr);
702 	int nr = sensor_attr->nr;
703 	int index = sensor_attr->index;
704 	struct i2c_client *client = to_i2c_client(dev);
705 	struct w83793_data *data = i2c_get_clientdata(client);
706 	u32 val;
707 
708 	mutex_lock(&data->update_lock);
709 	if (TEMP_FAN_MAP == nr) {
710 		val = simple_strtoul(buf, NULL, 10) & 0xff;
711 		w83793_write_value(client, W83793_REG_TEMP_FAN_MAP(index), val);
712 		data->temp_fan_map[index] = val;
713 	} else if (TEMP_PWM_ENABLE == nr) {
714 		val = simple_strtoul(buf, NULL, 10);
715 		if (2 == val || 3 == val) {
716 			data->pwm_enable =
717 			    w83793_read_value(client, W83793_REG_PWM_ENABLE);
718 			if (val - 2)
719 				data->pwm_enable |= 1 << index;
720 			else
721 				data->pwm_enable &= ~(1 << index);
722 			w83793_write_value(client, W83793_REG_PWM_ENABLE,
723 							data->pwm_enable);
724 		} else {
725 			mutex_unlock(&data->update_lock);
726 			return -EINVAL;
727 		}
728 	} else if (TEMP_CRUISE == nr) {
729 		data->temp_cruise[index] =
730 		    w83793_read_value(client, W83793_REG_TEMP_CRUISE(index));
731 		val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x7f);
732 		data->temp_cruise[index] &= 0x80;
733 		data->temp_cruise[index] |= val;
734 
735 		w83793_write_value(client, W83793_REG_TEMP_CRUISE(index),
736 						data->temp_cruise[index]);
737 	} else {		/* TEMP_TOLERANCE */
738 		int i = index >> 1;
739 		u8 shift = (index & 0x01) ? 4 : 0;
740 		data->tolerance[i] =
741 		    w83793_read_value(client, W83793_REG_TEMP_TOL(i));
742 
743 		val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x0f);
744 		data->tolerance[i] &= ~(0x0f << shift);
745 		data->tolerance[i] |= val << shift;
746 		w83793_write_value(client, W83793_REG_TEMP_TOL(i),
747 							data->tolerance[i]);
748 	}
749 
750 	mutex_unlock(&data->update_lock);
751 	return count;
752 }
753 
754 static ssize_t
755 show_sf2_pwm(struct device *dev, struct device_attribute *attr, char *buf)
756 {
757 	struct sensor_device_attribute_2 *sensor_attr =
758 	    to_sensor_dev_attr_2(attr);
759 	int nr = sensor_attr->nr;
760 	int index = sensor_attr->index;
761 	struct w83793_data *data = w83793_update_device(dev);
762 
763 	return sprintf(buf, "%d\n", (data->sf2_pwm[index][nr] & 0x3f) << 2);
764 }
765 
766 static ssize_t
767 store_sf2_pwm(struct device *dev, struct device_attribute *attr,
768 	      const char *buf, size_t count)
769 {
770 	struct i2c_client *client = to_i2c_client(dev);
771 	struct w83793_data *data = i2c_get_clientdata(client);
772 	struct sensor_device_attribute_2 *sensor_attr =
773 	    to_sensor_dev_attr_2(attr);
774 	int nr = sensor_attr->nr;
775 	int index = sensor_attr->index;
776 	u8 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 0xff) >> 2;
777 
778 	mutex_lock(&data->update_lock);
779 	data->sf2_pwm[index][nr] =
780 	    w83793_read_value(client, W83793_REG_SF2_PWM(index, nr)) & 0xc0;
781 	data->sf2_pwm[index][nr] |= val;
782 	w83793_write_value(client, W83793_REG_SF2_PWM(index, nr),
783 						data->sf2_pwm[index][nr]);
784 	mutex_unlock(&data->update_lock);
785 	return count;
786 }
787 
788 static ssize_t
789 show_sf2_temp(struct device *dev, struct device_attribute *attr, char *buf)
790 {
791 	struct sensor_device_attribute_2 *sensor_attr =
792 	    to_sensor_dev_attr_2(attr);
793 	int nr = sensor_attr->nr;
794 	int index = sensor_attr->index;
795 	struct w83793_data *data = w83793_update_device(dev);
796 
797 	return sprintf(buf, "%ld\n",
798 		       TEMP_FROM_REG(data->sf2_temp[index][nr] & 0x7f));
799 }
800 
801 static ssize_t
802 store_sf2_temp(struct device *dev, struct device_attribute *attr,
803 	       const char *buf, size_t count)
804 {
805 	struct i2c_client *client = to_i2c_client(dev);
806 	struct w83793_data *data = i2c_get_clientdata(client);
807 	struct sensor_device_attribute_2 *sensor_attr =
808 	    to_sensor_dev_attr_2(attr);
809 	int nr = sensor_attr->nr;
810 	int index = sensor_attr->index;
811 	u8 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x7f);
812 
813 	mutex_lock(&data->update_lock);
814 	data->sf2_temp[index][nr] =
815 	    w83793_read_value(client, W83793_REG_SF2_TEMP(index, nr)) & 0x80;
816 	data->sf2_temp[index][nr] |= val;
817 	w83793_write_value(client, W83793_REG_SF2_TEMP(index, nr),
818 					     data->sf2_temp[index][nr]);
819 	mutex_unlock(&data->update_lock);
820 	return count;
821 }
822 
823 /* only Vcore A/B and Vtt have additional 2 bits precision */
824 static ssize_t
825 show_in(struct device *dev, struct device_attribute *attr, char *buf)
826 {
827 	struct sensor_device_attribute_2 *sensor_attr =
828 	    to_sensor_dev_attr_2(attr);
829 	int nr = sensor_attr->nr;
830 	int index = sensor_attr->index;
831 	struct w83793_data *data = w83793_update_device(dev);
832 	u16 val = data->in[index][nr];
833 
834 	if (index < 3) {
835 		val <<= 2;
836 		val += (data->in_low_bits[nr] >> (index * 2)) & 0x3;
837 	}
838 	/* voltage inputs 5VDD and 5VSB needs 150mV offset */
839 	val = val * scale_in[index] + scale_in_add[index];
840 	return sprintf(buf, "%d\n", val);
841 }
842 
843 static ssize_t
844 store_in(struct device *dev, struct device_attribute *attr,
845 	 const char *buf, size_t count)
846 {
847 	struct sensor_device_attribute_2 *sensor_attr =
848 	    to_sensor_dev_attr_2(attr);
849 	int nr = sensor_attr->nr;
850 	int index = sensor_attr->index;
851 	struct i2c_client *client = to_i2c_client(dev);
852 	struct w83793_data *data = i2c_get_clientdata(client);
853 	u32 val;
854 
855 	val =
856 	    (simple_strtoul(buf, NULL, 10) +
857 	     scale_in[index] / 2) / scale_in[index];
858 	mutex_lock(&data->update_lock);
859 	if (index > 2) {
860 		/* fix the limit values of 5VDD and 5VSB to ALARM mechanism */
861 		if (1 == nr || 2 == nr) {
862 			val -= scale_in_add[index] / scale_in[index];
863 		}
864 		val = SENSORS_LIMIT(val, 0, 255);
865 	} else {
866 		val = SENSORS_LIMIT(val, 0, 0x3FF);
867 		data->in_low_bits[nr] =
868 		    w83793_read_value(client, W83793_REG_IN_LOW_BITS[nr]);
869 		data->in_low_bits[nr] &= ~(0x03 << (2 * index));
870 		data->in_low_bits[nr] |= (val & 0x03) << (2 * index);
871 		w83793_write_value(client, W83793_REG_IN_LOW_BITS[nr],
872 						     data->in_low_bits[nr]);
873 		val >>= 2;
874 	}
875 	data->in[index][nr] = val;
876 	w83793_write_value(client, W83793_REG_IN[index][nr],
877 							data->in[index][nr]);
878 	mutex_unlock(&data->update_lock);
879 	return count;
880 }
881 
882 #define NOT_USED			-1
883 
884 #define SENSOR_ATTR_IN(index)						\
885 	SENSOR_ATTR_2(in##index##_input, S_IRUGO, show_in, NULL,	\
886 		IN_READ, index),					\
887 	SENSOR_ATTR_2(in##index##_max, S_IRUGO | S_IWUSR, show_in,	\
888 		store_in, IN_MAX, index),				\
889 	SENSOR_ATTR_2(in##index##_min, S_IRUGO | S_IWUSR, show_in,	\
890 		store_in, IN_LOW, index),				\
891 	SENSOR_ATTR_2(in##index##_alarm, S_IRUGO, show_alarm_beep,	\
892 		NULL, ALARM_STATUS, index + ((index > 2) ? 1 : 0)),	\
893 	SENSOR_ATTR_2(in##index##_beep, S_IWUSR | S_IRUGO,		\
894 		show_alarm_beep, store_beep, BEEP_ENABLE,		\
895 		index + ((index > 2) ? 1 : 0))
896 
897 #define SENSOR_ATTR_FAN(index)						\
898 	SENSOR_ATTR_2(fan##index##_alarm, S_IRUGO, show_alarm_beep,	\
899 		NULL, ALARM_STATUS, index + 17),			\
900 	SENSOR_ATTR_2(fan##index##_beep, S_IWUSR | S_IRUGO,		\
901 		show_alarm_beep, store_beep, BEEP_ENABLE, index + 17),	\
902 	SENSOR_ATTR_2(fan##index##_input, S_IRUGO, show_fan,		\
903 		NULL, FAN_INPUT, index - 1),				\
904 	SENSOR_ATTR_2(fan##index##_min, S_IWUSR | S_IRUGO,		\
905 		show_fan, store_fan_min, FAN_MIN, index - 1)
906 
907 #define SENSOR_ATTR_PWM(index)						\
908 	SENSOR_ATTR_2(pwm##index, S_IWUSR | S_IRUGO, show_pwm,		\
909 		store_pwm, PWM_DUTY, index - 1),			\
910 	SENSOR_ATTR_2(pwm##index##_nonstop, S_IWUSR | S_IRUGO,		\
911 		show_pwm, store_pwm, PWM_NONSTOP, index - 1),		\
912 	SENSOR_ATTR_2(pwm##index##_start, S_IWUSR | S_IRUGO,		\
913 		show_pwm, store_pwm, PWM_START, index - 1),		\
914 	SENSOR_ATTR_2(pwm##index##_stop_time, S_IWUSR | S_IRUGO,	\
915 		show_pwm, store_pwm, PWM_STOP_TIME, index - 1)
916 
917 #define SENSOR_ATTR_TEMP(index)						\
918 	SENSOR_ATTR_2(temp##index##_type, S_IRUGO | S_IWUSR,		\
919 		show_temp_mode, store_temp_mode, NOT_USED, index - 1),	\
920 	SENSOR_ATTR_2(temp##index##_input, S_IRUGO, show_temp,		\
921 		NULL, TEMP_READ, index - 1),				\
922 	SENSOR_ATTR_2(temp##index##_max, S_IRUGO | S_IWUSR, show_temp,	\
923 		store_temp, TEMP_CRIT, index - 1),			\
924 	SENSOR_ATTR_2(temp##index##_max_hyst, S_IRUGO | S_IWUSR,	\
925 		show_temp, store_temp, TEMP_CRIT_HYST, index - 1),	\
926 	SENSOR_ATTR_2(temp##index##_warn, S_IRUGO | S_IWUSR, show_temp,	\
927 		store_temp, TEMP_WARN, index - 1),			\
928 	SENSOR_ATTR_2(temp##index##_warn_hyst, S_IRUGO | S_IWUSR,	\
929 		show_temp, store_temp, TEMP_WARN_HYST, index - 1),	\
930 	SENSOR_ATTR_2(temp##index##_alarm, S_IRUGO,			\
931 		show_alarm_beep, NULL, ALARM_STATUS, index + 11),	\
932 	SENSOR_ATTR_2(temp##index##_beep, S_IWUSR | S_IRUGO,		\
933 		show_alarm_beep, store_beep, BEEP_ENABLE, index + 11),	\
934 	SENSOR_ATTR_2(temp##index##_auto_channels_pwm,			\
935 		S_IRUGO | S_IWUSR, show_sf_ctrl, store_sf_ctrl,		\
936 		TEMP_FAN_MAP, index - 1),				\
937 	SENSOR_ATTR_2(temp##index##_pwm_enable, S_IWUSR | S_IRUGO,	\
938 		show_sf_ctrl, store_sf_ctrl, TEMP_PWM_ENABLE,		\
939 		index - 1),						\
940 	SENSOR_ATTR_2(thermal_cruise##index, S_IRUGO | S_IWUSR,		\
941 		show_sf_ctrl, store_sf_ctrl, TEMP_CRUISE, index - 1),	\
942 	SENSOR_ATTR_2(tolerance##index, S_IRUGO | S_IWUSR, show_sf_ctrl,\
943 		store_sf_ctrl, TEMP_TOLERANCE, index - 1),		\
944 	SENSOR_ATTR_2(temp##index##_auto_point1_pwm, S_IRUGO | S_IWUSR, \
945 		show_sf2_pwm, store_sf2_pwm, 0, index - 1),		\
946 	SENSOR_ATTR_2(temp##index##_auto_point2_pwm, S_IRUGO | S_IWUSR, \
947 		show_sf2_pwm, store_sf2_pwm, 1, index - 1),		\
948 	SENSOR_ATTR_2(temp##index##_auto_point3_pwm, S_IRUGO | S_IWUSR, \
949 		show_sf2_pwm, store_sf2_pwm, 2, index - 1),		\
950 	SENSOR_ATTR_2(temp##index##_auto_point4_pwm, S_IRUGO | S_IWUSR, \
951 		show_sf2_pwm, store_sf2_pwm, 3, index - 1),		\
952 	SENSOR_ATTR_2(temp##index##_auto_point5_pwm, S_IRUGO | S_IWUSR, \
953 		show_sf2_pwm, store_sf2_pwm, 4, index - 1),		\
954 	SENSOR_ATTR_2(temp##index##_auto_point6_pwm, S_IRUGO | S_IWUSR, \
955 		show_sf2_pwm, store_sf2_pwm, 5, index - 1),		\
956 	SENSOR_ATTR_2(temp##index##_auto_point7_pwm, S_IRUGO | S_IWUSR, \
957 		show_sf2_pwm, store_sf2_pwm, 6, index - 1),		\
958 	SENSOR_ATTR_2(temp##index##_auto_point1_temp, S_IRUGO | S_IWUSR,\
959 		show_sf2_temp, store_sf2_temp, 0, index - 1),		\
960 	SENSOR_ATTR_2(temp##index##_auto_point2_temp, S_IRUGO | S_IWUSR,\
961 		show_sf2_temp, store_sf2_temp, 1, index - 1),		\
962 	SENSOR_ATTR_2(temp##index##_auto_point3_temp, S_IRUGO | S_IWUSR,\
963 		show_sf2_temp, store_sf2_temp, 2, index - 1),		\
964 	SENSOR_ATTR_2(temp##index##_auto_point4_temp, S_IRUGO | S_IWUSR,\
965 		show_sf2_temp, store_sf2_temp, 3, index - 1),		\
966 	SENSOR_ATTR_2(temp##index##_auto_point5_temp, S_IRUGO | S_IWUSR,\
967 		show_sf2_temp, store_sf2_temp, 4, index - 1),		\
968 	SENSOR_ATTR_2(temp##index##_auto_point6_temp, S_IRUGO | S_IWUSR,\
969 		show_sf2_temp, store_sf2_temp, 5, index - 1),		\
970 	SENSOR_ATTR_2(temp##index##_auto_point7_temp, S_IRUGO | S_IWUSR,\
971 		show_sf2_temp, store_sf2_temp, 6, index - 1)
972 
973 static struct sensor_device_attribute_2 w83793_sensor_attr_2[] = {
974 	SENSOR_ATTR_IN(0),
975 	SENSOR_ATTR_IN(1),
976 	SENSOR_ATTR_IN(2),
977 	SENSOR_ATTR_IN(3),
978 	SENSOR_ATTR_IN(4),
979 	SENSOR_ATTR_IN(5),
980 	SENSOR_ATTR_IN(6),
981 	SENSOR_ATTR_IN(7),
982 	SENSOR_ATTR_IN(8),
983 	SENSOR_ATTR_IN(9),
984 	SENSOR_ATTR_FAN(1),
985 	SENSOR_ATTR_FAN(2),
986 	SENSOR_ATTR_FAN(3),
987 	SENSOR_ATTR_FAN(4),
988 	SENSOR_ATTR_FAN(5),
989 	SENSOR_ATTR_PWM(1),
990 	SENSOR_ATTR_PWM(2),
991 	SENSOR_ATTR_PWM(3),
992 };
993 
994 static struct sensor_device_attribute_2 w83793_temp[] = {
995 	SENSOR_ATTR_TEMP(1),
996 	SENSOR_ATTR_TEMP(2),
997 	SENSOR_ATTR_TEMP(3),
998 	SENSOR_ATTR_TEMP(4),
999 	SENSOR_ATTR_TEMP(5),
1000 	SENSOR_ATTR_TEMP(6),
1001 };
1002 
1003 /* Fan6-Fan12 */
1004 static struct sensor_device_attribute_2 w83793_left_fan[] = {
1005 	SENSOR_ATTR_FAN(6),
1006 	SENSOR_ATTR_FAN(7),
1007 	SENSOR_ATTR_FAN(8),
1008 	SENSOR_ATTR_FAN(9),
1009 	SENSOR_ATTR_FAN(10),
1010 	SENSOR_ATTR_FAN(11),
1011 	SENSOR_ATTR_FAN(12),
1012 };
1013 
1014 /* Pwm4-Pwm8 */
1015 static struct sensor_device_attribute_2 w83793_left_pwm[] = {
1016 	SENSOR_ATTR_PWM(4),
1017 	SENSOR_ATTR_PWM(5),
1018 	SENSOR_ATTR_PWM(6),
1019 	SENSOR_ATTR_PWM(7),
1020 	SENSOR_ATTR_PWM(8),
1021 };
1022 
1023 static struct sensor_device_attribute_2 w83793_vid[] = {
1024 	SENSOR_ATTR_2(cpu0_vid, S_IRUGO, show_vid, NULL, NOT_USED, 0),
1025 	SENSOR_ATTR_2(cpu1_vid, S_IRUGO, show_vid, NULL, NOT_USED, 1),
1026 };
1027 static DEVICE_ATTR(vrm, S_IWUSR | S_IRUGO, show_vrm, store_vrm);
1028 
1029 static struct sensor_device_attribute_2 sda_single_files[] = {
1030 	SENSOR_ATTR_2(chassis, S_IWUSR | S_IRUGO, show_alarm_beep,
1031 		      store_chassis_clear, ALARM_STATUS, 30),
1032 	SENSOR_ATTR_2(beep_enable, S_IWUSR | S_IRUGO, show_beep_enable,
1033 		      store_beep_enable, NOT_USED, NOT_USED),
1034 	SENSOR_ATTR_2(pwm_default, S_IWUSR | S_IRUGO, show_sf_setup,
1035 		      store_sf_setup, SETUP_PWM_DEFAULT, NOT_USED),
1036 	SENSOR_ATTR_2(pwm_uptime, S_IWUSR | S_IRUGO, show_sf_setup,
1037 		      store_sf_setup, SETUP_PWM_UPTIME, NOT_USED),
1038 	SENSOR_ATTR_2(pwm_downtime, S_IWUSR | S_IRUGO, show_sf_setup,
1039 		      store_sf_setup, SETUP_PWM_DOWNTIME, NOT_USED),
1040 	SENSOR_ATTR_2(temp_critical, S_IWUSR | S_IRUGO, show_sf_setup,
1041 		      store_sf_setup, SETUP_TEMP_CRITICAL, NOT_USED),
1042 };
1043 
1044 static void w83793_init_client(struct i2c_client *client)
1045 {
1046 	if (reset) {
1047 		w83793_write_value(client, W83793_REG_CONFIG, 0x80);
1048 	}
1049 
1050 	/* Start monitoring */
1051 	w83793_write_value(client, W83793_REG_CONFIG,
1052 			   w83793_read_value(client, W83793_REG_CONFIG) | 0x01);
1053 
1054 }
1055 
1056 static int w83793_attach_adapter(struct i2c_adapter *adapter)
1057 {
1058 	if (!(adapter->class & I2C_CLASS_HWMON))
1059 		return 0;
1060 	return i2c_probe(adapter, &addr_data, w83793_detect);
1061 }
1062 
1063 static int w83793_detach_client(struct i2c_client *client)
1064 {
1065 	struct w83793_data *data = i2c_get_clientdata(client);
1066 	struct device *dev = &client->dev;
1067 	int err, i;
1068 
1069 	/* main client */
1070 	if (data) {
1071 		hwmon_device_unregister(data->hwmon_dev);
1072 
1073 		for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1074 			device_remove_file(dev,
1075 					   &w83793_sensor_attr_2[i].dev_attr);
1076 
1077 		for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1078 			device_remove_file(dev, &sda_single_files[i].dev_attr);
1079 
1080 		for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1081 			device_remove_file(dev, &w83793_vid[i].dev_attr);
1082 		device_remove_file(dev, &dev_attr_vrm);
1083 
1084 		for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1085 			device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1086 
1087 		for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1088 			device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1089 
1090 		for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1091 			device_remove_file(dev, &w83793_temp[i].dev_attr);
1092 	}
1093 
1094 	if ((err = i2c_detach_client(client)))
1095 		return err;
1096 
1097 	/* main client */
1098 	if (data)
1099 		kfree(data);
1100 	/* subclient */
1101 	else
1102 		kfree(client);
1103 
1104 	return 0;
1105 }
1106 
1107 static int
1108 w83793_create_subclient(struct i2c_adapter *adapter,
1109 			struct i2c_client *client, int addr,
1110 			struct i2c_client **sub_cli)
1111 {
1112 	int err = 0;
1113 	struct i2c_client *sub_client;
1114 
1115 	(*sub_cli) = sub_client =
1116 	    kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
1117 	if (!(sub_client)) {
1118 		return -ENOMEM;
1119 	}
1120 	sub_client->addr = 0x48 + addr;
1121 	i2c_set_clientdata(sub_client, NULL);
1122 	sub_client->adapter = adapter;
1123 	sub_client->driver = &w83793_driver;
1124 	strlcpy(sub_client->name, "w83793 subclient", I2C_NAME_SIZE);
1125 	if ((err = i2c_attach_client(sub_client))) {
1126 		dev_err(&client->dev, "subclient registration "
1127 			"at address 0x%x failed\n", sub_client->addr);
1128 		kfree(sub_client);
1129 	}
1130 	return err;
1131 }
1132 
1133 static int
1134 w83793_detect_subclients(struct i2c_adapter *adapter, int address,
1135 			 int kind, struct i2c_client *client)
1136 {
1137 	int i, id, err;
1138 	u8 tmp;
1139 	struct w83793_data *data = i2c_get_clientdata(client);
1140 
1141 	id = i2c_adapter_id(adapter);
1142 	if (force_subclients[0] == id && force_subclients[1] == address) {
1143 		for (i = 2; i <= 3; i++) {
1144 			if (force_subclients[i] < 0x48
1145 			    || force_subclients[i] > 0x4f) {
1146 				dev_err(&client->dev,
1147 					"invalid subclient "
1148 					"address %d; must be 0x48-0x4f\n",
1149 					force_subclients[i]);
1150 				err = -EINVAL;
1151 				goto ERROR_SC_0;
1152 			}
1153 		}
1154 		w83793_write_value(client, W83793_REG_I2C_SUBADDR,
1155 				   (force_subclients[2] & 0x07) |
1156 				   ((force_subclients[3] & 0x07) << 4));
1157 	}
1158 
1159 	tmp = w83793_read_value(client, W83793_REG_I2C_SUBADDR);
1160 	if (!(tmp & 0x08)) {
1161 		err =
1162 		    w83793_create_subclient(adapter, client, tmp & 0x7,
1163 					    &data->lm75[0]);
1164 		if (err < 0)
1165 			goto ERROR_SC_0;
1166 	}
1167 	if (!(tmp & 0x80)) {
1168 		if ((data->lm75[0] != NULL)
1169 		    && ((tmp & 0x7) == ((tmp >> 4) & 0x7))) {
1170 			dev_err(&client->dev,
1171 				"duplicate addresses 0x%x, "
1172 				"use force_subclients\n", data->lm75[0]->addr);
1173 			err = -ENODEV;
1174 			goto ERROR_SC_1;
1175 		}
1176 		err = w83793_create_subclient(adapter, client,
1177 					      (tmp >> 4) & 0x7, &data->lm75[1]);
1178 		if (err < 0)
1179 			goto ERROR_SC_1;
1180 	}
1181 
1182 	return 0;
1183 
1184 	/* Undo inits in case of errors */
1185 
1186 ERROR_SC_1:
1187 	if (data->lm75[0] != NULL) {
1188 		i2c_detach_client(data->lm75[0]);
1189 		kfree(data->lm75[0]);
1190 	}
1191 ERROR_SC_0:
1192 	return err;
1193 }
1194 
1195 static int w83793_detect(struct i2c_adapter *adapter, int address, int kind)
1196 {
1197 	int i;
1198 	u8 tmp, val;
1199 	struct i2c_client *client;
1200 	struct device *dev;
1201 	struct w83793_data *data;
1202 	int files_fan = ARRAY_SIZE(w83793_left_fan) / 7;
1203 	int files_pwm = ARRAY_SIZE(w83793_left_pwm) / 5;
1204 	int files_temp = ARRAY_SIZE(w83793_temp) / 6;
1205 	int err = 0;
1206 
1207 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1208 		goto exit;
1209 	}
1210 
1211 	/* OK. For now, we presume we have a valid client. We now create the
1212 	   client structure, even though we cannot fill it completely yet.
1213 	   But it allows us to access w83793_{read,write}_value. */
1214 
1215 	if (!(data = kzalloc(sizeof(struct w83793_data), GFP_KERNEL))) {
1216 		err = -ENOMEM;
1217 		goto exit;
1218 	}
1219 
1220 	client = &data->client;
1221 	dev = &client->dev;
1222 	i2c_set_clientdata(client, data);
1223 	client->addr = address;
1224 	client->adapter = adapter;
1225 	client->driver = &w83793_driver;
1226 
1227 	data->bank = i2c_smbus_read_byte_data(client, W83793_REG_BANKSEL);
1228 
1229 	/* Now, we do the remaining detection. */
1230 	if (kind < 0) {
1231 		tmp = data->bank & 0x80 ? 0x5c : 0xa3;
1232 		/* Check Winbond vendor ID */
1233 		if (tmp != i2c_smbus_read_byte_data(client,
1234 							W83793_REG_VENDORID)) {
1235 			pr_debug("w83793: Detection failed at check "
1236 				 "vendor id\n");
1237 			err = -ENODEV;
1238 			goto free_mem;
1239 		}
1240 
1241 		/* If Winbond chip, address of chip and W83793_REG_I2C_ADDR
1242 		   should match */
1243 		if ((data->bank & 0x07) == 0
1244 		 && i2c_smbus_read_byte_data(client, W83793_REG_I2C_ADDR) !=
1245 		    (address << 1)) {
1246 			pr_debug("w83793: Detection failed at check "
1247 				 "i2c addr\n");
1248 			err = -ENODEV;
1249 			goto free_mem;
1250 		}
1251 
1252 	}
1253 
1254 	/* We have either had a force parameter, or we have already detected the
1255 	   Winbond. Determine the chip type now */
1256 
1257 	if (kind <= 0) {
1258 		if (0x7b == w83793_read_value(client, W83793_REG_CHIPID)) {
1259 			kind = w83793;
1260 		} else {
1261 			if (kind == 0)
1262 				dev_warn(&adapter->dev, "w83793: Ignoring "
1263 					 "'force' parameter for unknown chip "
1264 					 "at address 0x%02x\n", address);
1265 			err = -ENODEV;
1266 			goto free_mem;
1267 		}
1268 	}
1269 
1270 	/* Fill in the remaining client fields and put into the global list */
1271 	strlcpy(client->name, "w83793", I2C_NAME_SIZE);
1272 
1273 	mutex_init(&data->update_lock);
1274 
1275 	/* Tell the I2C layer a new client has arrived */
1276 	if ((err = i2c_attach_client(client)))
1277 		goto free_mem;
1278 
1279 	if ((err = w83793_detect_subclients(adapter, address, kind, client)))
1280 		goto detach_client;
1281 
1282 	/* Initialize the chip */
1283 	w83793_init_client(client);
1284 
1285 	/*
1286 	   Only fan 1-5 has their own input pins,
1287 	   Pwm 1-3 has their own pins
1288 	 */
1289 	data->has_fan = 0x1f;
1290 	data->has_pwm = 0x07;
1291 	tmp = w83793_read_value(client, W83793_REG_MFC);
1292 	val = w83793_read_value(client, W83793_REG_FANIN_CTRL);
1293 
1294 	/* check the function of pins 49-56 */
1295 	if (tmp & 0x80) {
1296 		data->has_vid |= 0x2;	/* has VIDB */
1297 	} else {
1298 		data->has_pwm |= 0x18;	/* pwm 4,5 */
1299 		if (val & 0x01) {	/* fan 6 */
1300 			data->has_fan |= 0x20;
1301 			data->has_pwm |= 0x20;
1302 		}
1303 		if (val & 0x02) {	/* fan 7 */
1304 			data->has_fan |= 0x40;
1305 			data->has_pwm |= 0x40;
1306 		}
1307 		if (!(tmp & 0x40) && (val & 0x04)) {	/* fan 8 */
1308 			data->has_fan |= 0x80;
1309 			data->has_pwm |= 0x80;
1310 		}
1311 	}
1312 
1313 	/* check the function of pins 37-40 */
1314 	if (!(tmp & 0x29))
1315 		data->has_vid |= 0x1;	/* has VIDA */
1316 	if (0x08 == (tmp & 0x0c)) {
1317 		if (val & 0x08)	/* fan 9 */
1318 			data->has_fan |= 0x100;
1319 		if (val & 0x10)	/* fan 10 */
1320 			data->has_fan |= 0x200;
1321 	}
1322 	if (0x20 == (tmp & 0x30)) {
1323 		if (val & 0x20)	/* fan 11 */
1324 			data->has_fan |= 0x400;
1325 		if (val & 0x40)	/* fan 12 */
1326 			data->has_fan |= 0x800;
1327 	}
1328 
1329 	if ((tmp & 0x01) && (val & 0x04)) {	/* fan 8, second location */
1330 		data->has_fan |= 0x80;
1331 		data->has_pwm |= 0x80;
1332 	}
1333 
1334 	tmp = w83793_read_value(client, W83793_REG_FANIN_SEL);
1335 	if ((tmp & 0x01) && (val & 0x08)) {	/* fan 9, second location */
1336 		data->has_fan |= 0x100;
1337 	}
1338 	if ((tmp & 0x02) && (val & 0x10)) {	/* fan 10, second location */
1339 		data->has_fan |= 0x200;
1340 	}
1341 	if ((tmp & 0x04) && (val & 0x20)) {	/* fan 11, second location */
1342 		data->has_fan |= 0x400;
1343 	}
1344 	if ((tmp & 0x08) && (val & 0x40)) {	/* fan 12, second location */
1345 		data->has_fan |= 0x800;
1346 	}
1347 
1348 	/* check the temp1-6 mode, ignore former AMDSI selected inputs */
1349 	tmp = w83793_read_value(client,W83793_REG_TEMP_MODE[0]);
1350 	if (tmp & 0x01)
1351 		data->has_temp |= 0x01;
1352 	if (tmp & 0x04)
1353 		data->has_temp |= 0x02;
1354 	if (tmp & 0x10)
1355 		data->has_temp |= 0x04;
1356 	if (tmp & 0x40)
1357 		data->has_temp |= 0x08;
1358 
1359 	tmp = w83793_read_value(client,W83793_REG_TEMP_MODE[1]);
1360 	if (tmp & 0x01)
1361 		data->has_temp |= 0x10;
1362 	if (tmp & 0x02)
1363 		data->has_temp |= 0x20;
1364 
1365 	/* Register sysfs hooks */
1366 	for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++) {
1367 		err = device_create_file(dev,
1368 					 &w83793_sensor_attr_2[i].dev_attr);
1369 		if (err)
1370 			goto exit_remove;
1371 	}
1372 
1373 	for (i = 0; i < ARRAY_SIZE(w83793_vid); i++) {
1374 		if (!(data->has_vid & (1 << i)))
1375 			continue;
1376 		err = device_create_file(dev, &w83793_vid[i].dev_attr);
1377 		if (err)
1378 			goto exit_remove;
1379 	}
1380 	if (data->has_vid) {
1381 		data->vrm = vid_which_vrm();
1382 		err = device_create_file(dev, &dev_attr_vrm);
1383 		if (err)
1384 			goto exit_remove;
1385 	}
1386 
1387 	for (i = 0; i < ARRAY_SIZE(sda_single_files); i++) {
1388 		err = device_create_file(dev, &sda_single_files[i].dev_attr);
1389 		if (err)
1390 			goto exit_remove;
1391 
1392 	}
1393 
1394 	for (i = 0; i < 6; i++) {
1395 		int j;
1396 		if (!(data->has_temp & (1 << i)))
1397 			continue;
1398 		for (j = 0; j < files_temp; j++) {
1399 			err = device_create_file(dev,
1400 						&w83793_temp[(i) * files_temp
1401 								+ j].dev_attr);
1402 			if (err)
1403 				goto exit_remove;
1404 		}
1405 	}
1406 
1407 	for (i = 5; i < 12; i++) {
1408 		int j;
1409 		if (!(data->has_fan & (1 << i)))
1410 			continue;
1411 		for (j = 0; j < files_fan; j++) {
1412 			err = device_create_file(dev,
1413 					   &w83793_left_fan[(i - 5) * files_fan
1414 								+ j].dev_attr);
1415 			if (err)
1416 				goto exit_remove;
1417 		}
1418 	}
1419 
1420 	for (i = 3; i < 8; i++) {
1421 		int j;
1422 		if (!(data->has_pwm & (1 << i)))
1423 			continue;
1424 		for (j = 0; j < files_pwm; j++) {
1425 			err = device_create_file(dev,
1426 					   &w83793_left_pwm[(i - 3) * files_pwm
1427 								+ j].dev_attr);
1428 			if (err)
1429 				goto exit_remove;
1430 		}
1431 	}
1432 
1433 	data->hwmon_dev = hwmon_device_register(dev);
1434 	if (IS_ERR(data->hwmon_dev)) {
1435 		err = PTR_ERR(data->hwmon_dev);
1436 		goto exit_remove;
1437 	}
1438 
1439 	return 0;
1440 
1441 	/* Unregister sysfs hooks */
1442 
1443 exit_remove:
1444 	for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1445 		device_remove_file(dev, &w83793_sensor_attr_2[i].dev_attr);
1446 
1447 	for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1448 		device_remove_file(dev, &sda_single_files[i].dev_attr);
1449 
1450 	for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1451 		device_remove_file(dev, &w83793_vid[i].dev_attr);
1452 
1453 	for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1454 		device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1455 
1456 	for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1457 		device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1458 
1459 	for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1460 		device_remove_file(dev, &w83793_temp[i].dev_attr);
1461 
1462 	if (data->lm75[0] != NULL) {
1463 		i2c_detach_client(data->lm75[0]);
1464 		kfree(data->lm75[0]);
1465 	}
1466 	if (data->lm75[1] != NULL) {
1467 		i2c_detach_client(data->lm75[1]);
1468 		kfree(data->lm75[1]);
1469 	}
1470 detach_client:
1471 	i2c_detach_client(client);
1472 free_mem:
1473 	kfree(data);
1474 exit:
1475 	return err;
1476 }
1477 
1478 static void w83793_update_nonvolatile(struct device *dev)
1479 {
1480 	struct i2c_client *client = to_i2c_client(dev);
1481 	struct w83793_data *data = i2c_get_clientdata(client);
1482 	int i, j;
1483 	/*
1484 	   They are somewhat "stable" registers, and to update them everytime
1485 	   takes so much time, it's just not worthy. Update them in a long
1486 	   interval to avoid exception.
1487 	 */
1488 	if (!(time_after(jiffies, data->last_nonvolatile + HZ * 300)
1489 	      || !data->valid))
1490 		return;
1491 	/* update voltage limits */
1492 	for (i = 1; i < 3; i++) {
1493 		for (j = 0; j < ARRAY_SIZE(data->in); j++) {
1494 			data->in[j][i] =
1495 			    w83793_read_value(client, W83793_REG_IN[j][i]);
1496 		}
1497 		data->in_low_bits[i] =
1498 		    w83793_read_value(client, W83793_REG_IN_LOW_BITS[i]);
1499 	}
1500 
1501 	for (i = 0; i < ARRAY_SIZE(data->fan_min); i++) {
1502 		/* Update the Fan measured value and limits */
1503 		if (!(data->has_fan & (1 << i))) {
1504 			continue;
1505 		}
1506 		data->fan_min[i] =
1507 		    w83793_read_value(client, W83793_REG_FAN_MIN(i)) << 8;
1508 		data->fan_min[i] |=
1509 		    w83793_read_value(client, W83793_REG_FAN_MIN(i) + 1);
1510 	}
1511 
1512 	for (i = 0; i < ARRAY_SIZE(data->temp_fan_map); i++) {
1513 		if (!(data->has_temp & (1 << i)))
1514 			continue;
1515 		data->temp_fan_map[i] =
1516 		    w83793_read_value(client, W83793_REG_TEMP_FAN_MAP(i));
1517 		for (j = 1; j < 5; j++) {
1518 			data->temp[i][j] =
1519 			    w83793_read_value(client, W83793_REG_TEMP[i][j]);
1520 		}
1521 		data->temp_cruise[i] =
1522 		    w83793_read_value(client, W83793_REG_TEMP_CRUISE(i));
1523 		for (j = 0; j < 7; j++) {
1524 			data->sf2_pwm[i][j] =
1525 			    w83793_read_value(client, W83793_REG_SF2_PWM(i, j));
1526 			data->sf2_temp[i][j] =
1527 			    w83793_read_value(client,
1528 					      W83793_REG_SF2_TEMP(i, j));
1529 		}
1530 	}
1531 
1532 	for (i = 0; i < ARRAY_SIZE(data->temp_mode); i++)
1533 		data->temp_mode[i] =
1534 		    w83793_read_value(client, W83793_REG_TEMP_MODE[i]);
1535 
1536 	for (i = 0; i < ARRAY_SIZE(data->tolerance); i++) {
1537 		data->tolerance[i] =
1538 		    w83793_read_value(client, W83793_REG_TEMP_TOL(i));
1539 	}
1540 
1541 	for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
1542 		if (!(data->has_pwm & (1 << i)))
1543 			continue;
1544 		data->pwm[i][PWM_NONSTOP] =
1545 		    w83793_read_value(client, W83793_REG_PWM(i, PWM_NONSTOP));
1546 		data->pwm[i][PWM_START] =
1547 		    w83793_read_value(client, W83793_REG_PWM(i, PWM_START));
1548 		data->pwm_stop_time[i] =
1549 		    w83793_read_value(client, W83793_REG_PWM_STOP_TIME(i));
1550 	}
1551 
1552 	data->pwm_default = w83793_read_value(client, W83793_REG_PWM_DEFAULT);
1553 	data->pwm_enable = w83793_read_value(client, W83793_REG_PWM_ENABLE);
1554 	data->pwm_uptime = w83793_read_value(client, W83793_REG_PWM_UPTIME);
1555 	data->pwm_downtime = w83793_read_value(client, W83793_REG_PWM_DOWNTIME);
1556 	data->temp_critical =
1557 	    w83793_read_value(client, W83793_REG_TEMP_CRITICAL);
1558 	data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP);
1559 
1560 	for (i = 0; i < ARRAY_SIZE(data->beeps); i++) {
1561 		data->beeps[i] = w83793_read_value(client, W83793_REG_BEEP(i));
1562 	}
1563 
1564 	data->last_nonvolatile = jiffies;
1565 }
1566 
1567 static struct w83793_data *w83793_update_device(struct device *dev)
1568 {
1569 	struct i2c_client *client = to_i2c_client(dev);
1570 	struct w83793_data *data = i2c_get_clientdata(client);
1571 	int i;
1572 
1573 	mutex_lock(&data->update_lock);
1574 
1575 	if (!(time_after(jiffies, data->last_updated + HZ * 2)
1576 	      || !data->valid))
1577 		goto END;
1578 
1579 	/* Update the voltages measured value and limits */
1580 	for (i = 0; i < ARRAY_SIZE(data->in); i++)
1581 		data->in[i][IN_READ] =
1582 		    w83793_read_value(client, W83793_REG_IN[i][IN_READ]);
1583 
1584 	data->in_low_bits[IN_READ] =
1585 	    w83793_read_value(client, W83793_REG_IN_LOW_BITS[IN_READ]);
1586 
1587 	for (i = 0; i < ARRAY_SIZE(data->fan); i++) {
1588 		if (!(data->has_fan & (1 << i))) {
1589 			continue;
1590 		}
1591 		data->fan[i] =
1592 		    w83793_read_value(client, W83793_REG_FAN(i)) << 8;
1593 		data->fan[i] |=
1594 		    w83793_read_value(client, W83793_REG_FAN(i) + 1);
1595 	}
1596 
1597 	for (i = 0; i < ARRAY_SIZE(data->temp); i++) {
1598 		if (!(data->has_temp & (1 << i)))
1599 			continue;
1600 		data->temp[i][TEMP_READ] =
1601 		    w83793_read_value(client, W83793_REG_TEMP[i][TEMP_READ]);
1602 	}
1603 
1604 	data->temp_low_bits =
1605 	    w83793_read_value(client, W83793_REG_TEMP_LOW_BITS);
1606 
1607 	for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
1608 		if (data->has_pwm & (1 << i))
1609 			data->pwm[i][PWM_DUTY] =
1610 			    w83793_read_value(client,
1611 					      W83793_REG_PWM(i, PWM_DUTY));
1612 	}
1613 
1614 	for (i = 0; i < ARRAY_SIZE(data->alarms); i++)
1615 		data->alarms[i] =
1616 		    w83793_read_value(client, W83793_REG_ALARM(i));
1617 	if (data->has_vid & 0x01)
1618 		data->vid[0] = w83793_read_value(client, W83793_REG_VID_INA);
1619 	if (data->has_vid & 0x02)
1620 		data->vid[1] = w83793_read_value(client, W83793_REG_VID_INB);
1621 	w83793_update_nonvolatile(dev);
1622 	data->last_updated = jiffies;
1623 	data->valid = 1;
1624 
1625 END:
1626 	mutex_unlock(&data->update_lock);
1627 	return data;
1628 }
1629 
1630 /* Ignore the possibility that somebody change bank outside the driver
1631    Must be called with data->update_lock held, except during initialization */
1632 static u8 w83793_read_value(struct i2c_client *client, u16 reg)
1633 {
1634 	struct w83793_data *data = i2c_get_clientdata(client);
1635 	u8 res = 0xff;
1636 	u8 new_bank = reg >> 8;
1637 
1638 	new_bank |= data->bank & 0xfc;
1639 	if (data->bank != new_bank) {
1640 		if (i2c_smbus_write_byte_data
1641 		    (client, W83793_REG_BANKSEL, new_bank) >= 0)
1642 			data->bank = new_bank;
1643 		else {
1644 			dev_err(&client->dev,
1645 				"set bank to %d failed, fall back "
1646 				"to bank %d, read reg 0x%x error\n",
1647 				new_bank, data->bank, reg);
1648 			res = 0x0;	/* read 0x0 from the chip */
1649 			goto END;
1650 		}
1651 	}
1652 	res = i2c_smbus_read_byte_data(client, reg & 0xff);
1653 END:
1654 	return res;
1655 }
1656 
1657 /* Must be called with data->update_lock held, except during initialization */
1658 static int w83793_write_value(struct i2c_client *client, u16 reg, u8 value)
1659 {
1660 	struct w83793_data *data = i2c_get_clientdata(client);
1661 	int res;
1662 	u8 new_bank = reg >> 8;
1663 
1664 	new_bank |= data->bank & 0xfc;
1665 	if (data->bank != new_bank) {
1666 		if ((res = i2c_smbus_write_byte_data
1667 		    (client, W83793_REG_BANKSEL, new_bank)) >= 0)
1668 			data->bank = new_bank;
1669 		else {
1670 			dev_err(&client->dev,
1671 				"set bank to %d failed, fall back "
1672 				"to bank %d, write reg 0x%x error\n",
1673 				new_bank, data->bank, reg);
1674 			goto END;
1675 		}
1676 	}
1677 
1678 	res = i2c_smbus_write_byte_data(client, reg & 0xff, value);
1679 END:
1680 	return res;
1681 }
1682 
1683 static int __init sensors_w83793_init(void)
1684 {
1685 	return i2c_add_driver(&w83793_driver);
1686 }
1687 
1688 static void __exit sensors_w83793_exit(void)
1689 {
1690 	i2c_del_driver(&w83793_driver);
1691 }
1692 
1693 MODULE_AUTHOR("Yuan Mu");
1694 MODULE_DESCRIPTION("w83793 driver");
1695 MODULE_LICENSE("GPL");
1696 
1697 module_init(sensors_w83793_init);
1698 module_exit(sensors_w83793_exit);
1699