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