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