xref: /openbmc/linux/drivers/hwmon/adt7462.c (revision 94c7b6fc)
1 /*
2  * A hwmon driver for the Analog Devices ADT7462
3  * Copyright (C) 2008 IBM
4  *
5  * Author: Darrick J. Wong <darrick.wong@oracle.com>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  */
21 
22 #include <linux/module.h>
23 #include <linux/jiffies.h>
24 #include <linux/i2c.h>
25 #include <linux/hwmon.h>
26 #include <linux/hwmon-sysfs.h>
27 #include <linux/err.h>
28 #include <linux/mutex.h>
29 #include <linux/log2.h>
30 #include <linux/slab.h>
31 
32 /* Addresses to scan */
33 static const unsigned short normal_i2c[] = { 0x58, 0x5C, I2C_CLIENT_END };
34 
35 /* ADT7462 registers */
36 #define ADT7462_REG_DEVICE			0x3D
37 #define ADT7462_REG_VENDOR			0x3E
38 #define ADT7462_REG_REVISION			0x3F
39 
40 #define ADT7462_REG_MIN_TEMP_BASE_ADDR		0x44
41 #define ADT7462_REG_MIN_TEMP_MAX_ADDR		0x47
42 #define ADT7462_REG_MAX_TEMP_BASE_ADDR		0x48
43 #define ADT7462_REG_MAX_TEMP_MAX_ADDR		0x4B
44 #define ADT7462_REG_TEMP_BASE_ADDR		0x88
45 #define ADT7462_REG_TEMP_MAX_ADDR		0x8F
46 
47 #define ADT7462_REG_FAN_BASE_ADDR		0x98
48 #define ADT7462_REG_FAN_MAX_ADDR		0x9F
49 #define ADT7462_REG_FAN2_BASE_ADDR		0xA2
50 #define ADT7462_REG_FAN2_MAX_ADDR		0xA9
51 #define ADT7462_REG_FAN_ENABLE			0x07
52 #define ADT7462_REG_FAN_MIN_BASE_ADDR		0x78
53 #define ADT7462_REG_FAN_MIN_MAX_ADDR		0x7F
54 
55 #define ADT7462_REG_CFG2			0x02
56 #define		ADT7462_FSPD_MASK		0x20
57 
58 #define ADT7462_REG_PWM_BASE_ADDR		0xAA
59 #define ADT7462_REG_PWM_MAX_ADDR		0xAD
60 #define	ADT7462_REG_PWM_MIN_BASE_ADDR		0x28
61 #define ADT7462_REG_PWM_MIN_MAX_ADDR		0x2B
62 #define ADT7462_REG_PWM_MAX			0x2C
63 #define ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR	0x5C
64 #define ADT7462_REG_PWM_TEMP_MIN_MAX_ADDR	0x5F
65 #define ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR	0x60
66 #define ADT7462_REG_PWM_TEMP_RANGE_MAX_ADDR	0x63
67 #define	ADT7462_PWM_HYST_MASK			0x0F
68 #define	ADT7462_PWM_RANGE_MASK			0xF0
69 #define		ADT7462_PWM_RANGE_SHIFT		4
70 #define ADT7462_REG_PWM_CFG_BASE_ADDR		0x21
71 #define ADT7462_REG_PWM_CFG_MAX_ADDR		0x24
72 #define		ADT7462_PWM_CHANNEL_MASK	0xE0
73 #define		ADT7462_PWM_CHANNEL_SHIFT	5
74 
75 #define ADT7462_REG_PIN_CFG_BASE_ADDR		0x10
76 #define ADT7462_REG_PIN_CFG_MAX_ADDR		0x13
77 #define		ADT7462_PIN7_INPUT		0x01	/* cfg0 */
78 #define		ADT7462_DIODE3_INPUT		0x20
79 #define		ADT7462_DIODE1_INPUT		0x40
80 #define		ADT7462_VID_INPUT		0x80
81 #define		ADT7462_PIN22_INPUT		0x04	/* cfg1 */
82 #define		ADT7462_PIN21_INPUT		0x08
83 #define		ADT7462_PIN19_INPUT		0x10
84 #define		ADT7462_PIN15_INPUT		0x20
85 #define		ADT7462_PIN13_INPUT		0x40
86 #define		ADT7462_PIN8_INPUT		0x80
87 #define		ADT7462_PIN23_MASK		0x03
88 #define		ADT7462_PIN23_SHIFT		0
89 #define		ADT7462_PIN26_MASK		0x0C	/* cfg2 */
90 #define		ADT7462_PIN26_SHIFT		2
91 #define		ADT7462_PIN25_MASK		0x30
92 #define		ADT7462_PIN25_SHIFT		4
93 #define		ADT7462_PIN24_MASK		0xC0
94 #define		ADT7462_PIN24_SHIFT		6
95 #define		ADT7462_PIN26_VOLT_INPUT	0x08
96 #define		ADT7462_PIN25_VOLT_INPUT	0x20
97 #define		ADT7462_PIN28_SHIFT		4	/* cfg3 */
98 #define		ADT7462_PIN28_VOLT		0x5
99 
100 #define ADT7462_REG_ALARM1			0xB8
101 #define	ADT7462_LT_ALARM			0x02
102 #define		ADT7462_R1T_ALARM		0x04
103 #define		ADT7462_R2T_ALARM		0x08
104 #define		ADT7462_R3T_ALARM		0x10
105 #define ADT7462_REG_ALARM2			0xBB
106 #define		ADT7462_V0_ALARM		0x01
107 #define		ADT7462_V1_ALARM		0x02
108 #define		ADT7462_V2_ALARM		0x04
109 #define		ADT7462_V3_ALARM		0x08
110 #define		ADT7462_V4_ALARM		0x10
111 #define		ADT7462_V5_ALARM		0x20
112 #define		ADT7462_V6_ALARM		0x40
113 #define		ADT7462_V7_ALARM		0x80
114 #define ADT7462_REG_ALARM3			0xBC
115 #define		ADT7462_V8_ALARM		0x08
116 #define		ADT7462_V9_ALARM		0x10
117 #define		ADT7462_V10_ALARM		0x20
118 #define		ADT7462_V11_ALARM		0x40
119 #define		ADT7462_V12_ALARM		0x80
120 #define ADT7462_REG_ALARM4			0xBD
121 #define		ADT7462_F0_ALARM		0x01
122 #define		ADT7462_F1_ALARM		0x02
123 #define		ADT7462_F2_ALARM		0x04
124 #define		ADT7462_F3_ALARM		0x08
125 #define		ADT7462_F4_ALARM		0x10
126 #define		ADT7462_F5_ALARM		0x20
127 #define		ADT7462_F6_ALARM		0x40
128 #define		ADT7462_F7_ALARM		0x80
129 #define ADT7462_ALARM1				0x0000
130 #define ADT7462_ALARM2				0x0100
131 #define ADT7462_ALARM3				0x0200
132 #define ADT7462_ALARM4				0x0300
133 #define ADT7462_ALARM_REG_SHIFT			8
134 #define ADT7462_ALARM_FLAG_MASK			0x0F
135 
136 #define ADT7462_TEMP_COUNT		4
137 #define ADT7462_TEMP_REG(x)		(ADT7462_REG_TEMP_BASE_ADDR + ((x) * 2))
138 #define ADT7462_TEMP_MIN_REG(x)		(ADT7462_REG_MIN_TEMP_BASE_ADDR + (x))
139 #define ADT7462_TEMP_MAX_REG(x)		(ADT7462_REG_MAX_TEMP_BASE_ADDR + (x))
140 #define TEMP_FRAC_OFFSET		6
141 
142 #define ADT7462_FAN_COUNT		8
143 #define ADT7462_REG_FAN_MIN(x)		(ADT7462_REG_FAN_MIN_BASE_ADDR + (x))
144 
145 #define ADT7462_PWM_COUNT		4
146 #define ADT7462_REG_PWM(x)		(ADT7462_REG_PWM_BASE_ADDR + (x))
147 #define ADT7462_REG_PWM_MIN(x)		(ADT7462_REG_PWM_MIN_BASE_ADDR + (x))
148 #define ADT7462_REG_PWM_TMIN(x)		\
149 	(ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR + (x))
150 #define ADT7462_REG_PWM_TRANGE(x)	\
151 	(ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR + (x))
152 
153 #define ADT7462_PIN_CFG_REG_COUNT	4
154 #define ADT7462_REG_PIN_CFG(x)		(ADT7462_REG_PIN_CFG_BASE_ADDR + (x))
155 #define ADT7462_REG_PWM_CFG(x)		(ADT7462_REG_PWM_CFG_BASE_ADDR + (x))
156 
157 #define ADT7462_ALARM_REG_COUNT		4
158 
159 /*
160  * The chip can measure 13 different voltage sources:
161  *
162  * 1. +12V1 (pin 7)
163  * 2. Vccp1/+2.5V/+1.8V/+1.5V (pin 23)
164  * 3. +12V3 (pin 22)
165  * 4. +5V (pin 21)
166  * 5. +1.25V/+0.9V (pin 19)
167  * 6. +2.5V/+1.8V (pin 15)
168  * 7. +3.3v (pin 13)
169  * 8. +12V2 (pin 8)
170  * 9. Vbatt/FSB_Vtt (pin 26)
171  * A. +3.3V/+1.2V1 (pin 25)
172  * B. Vccp2/+2.5V/+1.8V/+1.5V (pin 24)
173  * C. +1.5V ICH (only if BOTH pin 28/29 are set to +1.5V)
174  * D. +1.5V 3GPIO (only if BOTH pin 28/29 are set to +1.5V)
175  *
176  * Each of these 13 has a factor to convert raw to voltage.  Even better,
177  * the pins can be connected to other sensors (tach/gpio/hot/etc), which
178  * makes the bookkeeping tricky.
179  *
180  * Some, but not all, of these voltages have low/high limits.
181  */
182 #define ADT7462_VOLT_COUNT	13
183 
184 #define ADT7462_VENDOR		0x41
185 #define ADT7462_DEVICE		0x62
186 /* datasheet only mentions a revision 4 */
187 #define ADT7462_REVISION	0x04
188 
189 /* How often do we reread sensors values? (In jiffies) */
190 #define SENSOR_REFRESH_INTERVAL	(2 * HZ)
191 
192 /* How often do we reread sensor limit values? (In jiffies) */
193 #define LIMIT_REFRESH_INTERVAL	(60 * HZ)
194 
195 /* datasheet says to divide this number by the fan reading to get fan rpm */
196 #define FAN_PERIOD_TO_RPM(x)	((90000 * 60) / (x))
197 #define FAN_RPM_TO_PERIOD	FAN_PERIOD_TO_RPM
198 #define FAN_PERIOD_INVALID	65535
199 #define FAN_DATA_VALID(x)	((x) && (x) != FAN_PERIOD_INVALID)
200 
201 #define MASK_AND_SHIFT(value, prefix)	\
202 	(((value) & prefix##_MASK) >> prefix##_SHIFT)
203 
204 struct adt7462_data {
205 	struct device		*hwmon_dev;
206 	struct attribute_group	attrs;
207 	struct mutex		lock;
208 	char			sensors_valid;
209 	char			limits_valid;
210 	unsigned long		sensors_last_updated;	/* In jiffies */
211 	unsigned long		limits_last_updated;	/* In jiffies */
212 
213 	u8			temp[ADT7462_TEMP_COUNT];
214 				/* bits 6-7 are quarter pieces of temp */
215 	u8			temp_frac[ADT7462_TEMP_COUNT];
216 	u8			temp_min[ADT7462_TEMP_COUNT];
217 	u8			temp_max[ADT7462_TEMP_COUNT];
218 	u16			fan[ADT7462_FAN_COUNT];
219 	u8			fan_enabled;
220 	u8			fan_min[ADT7462_FAN_COUNT];
221 	u8			cfg2;
222 	u8			pwm[ADT7462_PWM_COUNT];
223 	u8			pin_cfg[ADT7462_PIN_CFG_REG_COUNT];
224 	u8			voltages[ADT7462_VOLT_COUNT];
225 	u8			volt_max[ADT7462_VOLT_COUNT];
226 	u8			volt_min[ADT7462_VOLT_COUNT];
227 	u8			pwm_min[ADT7462_PWM_COUNT];
228 	u8			pwm_tmin[ADT7462_PWM_COUNT];
229 	u8			pwm_trange[ADT7462_PWM_COUNT];
230 	u8			pwm_max;	/* only one per chip */
231 	u8			pwm_cfg[ADT7462_PWM_COUNT];
232 	u8			alarms[ADT7462_ALARM_REG_COUNT];
233 };
234 
235 static int adt7462_probe(struct i2c_client *client,
236 			 const struct i2c_device_id *id);
237 static int adt7462_detect(struct i2c_client *client,
238 			  struct i2c_board_info *info);
239 static int adt7462_remove(struct i2c_client *client);
240 
241 static const struct i2c_device_id adt7462_id[] = {
242 	{ "adt7462", 0 },
243 	{ }
244 };
245 MODULE_DEVICE_TABLE(i2c, adt7462_id);
246 
247 static struct i2c_driver adt7462_driver = {
248 	.class		= I2C_CLASS_HWMON,
249 	.driver = {
250 		.name	= "adt7462",
251 	},
252 	.probe		= adt7462_probe,
253 	.remove		= adt7462_remove,
254 	.id_table	= adt7462_id,
255 	.detect		= adt7462_detect,
256 	.address_list	= normal_i2c,
257 };
258 
259 /*
260  * 16-bit registers on the ADT7462 are low-byte first.  The data sheet says
261  * that the low byte must be read before the high byte.
262  */
263 static inline int adt7462_read_word_data(struct i2c_client *client, u8 reg)
264 {
265 	u16 foo;
266 	foo = i2c_smbus_read_byte_data(client, reg);
267 	foo |= ((u16)i2c_smbus_read_byte_data(client, reg + 1) << 8);
268 	return foo;
269 }
270 
271 /* For some reason these registers are not contiguous. */
272 static int ADT7462_REG_FAN(int fan)
273 {
274 	if (fan < 4)
275 		return ADT7462_REG_FAN_BASE_ADDR + (2 * fan);
276 	return ADT7462_REG_FAN2_BASE_ADDR + (2 * (fan - 4));
277 }
278 
279 /* Voltage registers are scattered everywhere */
280 static int ADT7462_REG_VOLT_MAX(struct adt7462_data *data, int which)
281 {
282 	switch (which) {
283 	case 0:
284 		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
285 			return 0x7C;
286 		break;
287 	case 1:
288 		return 0x69;
289 	case 2:
290 		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
291 			return 0x7F;
292 		break;
293 	case 3:
294 		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
295 			return 0x7E;
296 		break;
297 	case 4:
298 		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
299 			return 0x4B;
300 		break;
301 	case 5:
302 		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
303 			return 0x49;
304 		break;
305 	case 6:
306 		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
307 			return 0x68;
308 		break;
309 	case 7:
310 		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
311 			return 0x7D;
312 		break;
313 	case 8:
314 		if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
315 			return 0x6C;
316 		break;
317 	case 9:
318 		if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
319 			return 0x6B;
320 		break;
321 	case 10:
322 		return 0x6A;
323 	case 11:
324 		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
325 					ADT7462_PIN28_VOLT &&
326 		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
327 			return 0x50;
328 		break;
329 	case 12:
330 		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
331 					ADT7462_PIN28_VOLT &&
332 		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
333 			return 0x4C;
334 		break;
335 	}
336 	return 0;
337 }
338 
339 static int ADT7462_REG_VOLT_MIN(struct adt7462_data *data, int which)
340 {
341 	switch (which) {
342 	case 0:
343 		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
344 			return 0x6D;
345 		break;
346 	case 1:
347 		return 0x72;
348 	case 2:
349 		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
350 			return 0x6F;
351 		break;
352 	case 3:
353 		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
354 			return 0x71;
355 		break;
356 	case 4:
357 		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
358 			return 0x47;
359 		break;
360 	case 5:
361 		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
362 			return 0x45;
363 		break;
364 	case 6:
365 		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
366 			return 0x70;
367 		break;
368 	case 7:
369 		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
370 			return 0x6E;
371 		break;
372 	case 8:
373 		if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
374 			return 0x75;
375 		break;
376 	case 9:
377 		if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
378 			return 0x74;
379 		break;
380 	case 10:
381 		return 0x73;
382 	case 11:
383 		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
384 					ADT7462_PIN28_VOLT &&
385 		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
386 			return 0x76;
387 		break;
388 	case 12:
389 		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
390 					ADT7462_PIN28_VOLT &&
391 		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
392 			return 0x77;
393 		break;
394 	}
395 	return 0;
396 }
397 
398 static int ADT7462_REG_VOLT(struct adt7462_data *data, int which)
399 {
400 	switch (which) {
401 	case 0:
402 		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
403 			return 0xA3;
404 		break;
405 	case 1:
406 		return 0x90;
407 	case 2:
408 		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
409 			return 0xA9;
410 		break;
411 	case 3:
412 		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
413 			return 0xA7;
414 		break;
415 	case 4:
416 		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
417 			return 0x8F;
418 		break;
419 	case 5:
420 		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
421 			return 0x8B;
422 		break;
423 	case 6:
424 		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
425 			return 0x96;
426 		break;
427 	case 7:
428 		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
429 			return 0xA5;
430 		break;
431 	case 8:
432 		if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
433 			return 0x93;
434 		break;
435 	case 9:
436 		if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
437 			return 0x92;
438 		break;
439 	case 10:
440 		return 0x91;
441 	case 11:
442 		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
443 					ADT7462_PIN28_VOLT &&
444 		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
445 			return 0x94;
446 		break;
447 	case 12:
448 		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
449 					ADT7462_PIN28_VOLT &&
450 		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
451 			return 0x95;
452 		break;
453 	}
454 	return -ENODEV;
455 }
456 
457 /* Provide labels for sysfs */
458 static const char *voltage_label(struct adt7462_data *data, int which)
459 {
460 	switch (which) {
461 	case 0:
462 		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
463 			return "+12V1";
464 		break;
465 	case 1:
466 		switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) {
467 		case 0:
468 			return "Vccp1";
469 		case 1:
470 			return "+2.5V";
471 		case 2:
472 			return "+1.8V";
473 		case 3:
474 			return "+1.5V";
475 		}
476 	case 2:
477 		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
478 			return "+12V3";
479 		break;
480 	case 3:
481 		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
482 			return "+5V";
483 		break;
484 	case 4:
485 		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) {
486 			if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
487 				return "+0.9V";
488 			return "+1.25V";
489 		}
490 		break;
491 	case 5:
492 		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) {
493 			if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
494 				return "+1.8V";
495 			return "+2.5V";
496 		}
497 		break;
498 	case 6:
499 		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
500 			return "+3.3V";
501 		break;
502 	case 7:
503 		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
504 			return "+12V2";
505 		break;
506 	case 8:
507 		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) {
508 		case 0:
509 			return "Vbatt";
510 		case 1:
511 			return "FSB_Vtt";
512 		}
513 		break;
514 	case 9:
515 		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) {
516 		case 0:
517 			return "+3.3V";
518 		case 1:
519 			return "+1.2V1";
520 		}
521 		break;
522 	case 10:
523 		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) {
524 		case 0:
525 			return "Vccp2";
526 		case 1:
527 			return "+2.5V";
528 		case 2:
529 			return "+1.8V";
530 		case 3:
531 			return "+1.5";
532 		}
533 	case 11:
534 		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
535 					ADT7462_PIN28_VOLT &&
536 		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
537 			return "+1.5V ICH";
538 		break;
539 	case 12:
540 		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
541 					ADT7462_PIN28_VOLT &&
542 		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
543 			return "+1.5V 3GPIO";
544 		break;
545 	}
546 	return "N/A";
547 }
548 
549 /* Multipliers are actually in uV, not mV. */
550 static int voltage_multiplier(struct adt7462_data *data, int which)
551 {
552 	switch (which) {
553 	case 0:
554 		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
555 			return 62500;
556 		break;
557 	case 1:
558 		switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) {
559 		case 0:
560 			if (data->pin_cfg[0] & ADT7462_VID_INPUT)
561 				return 12500;
562 			return 6250;
563 		case 1:
564 			return 13000;
565 		case 2:
566 			return 9400;
567 		case 3:
568 			return 7800;
569 		}
570 	case 2:
571 		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
572 			return 62500;
573 		break;
574 	case 3:
575 		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
576 			return 26000;
577 		break;
578 	case 4:
579 		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) {
580 			if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
581 				return 4690;
582 			return 6500;
583 		}
584 		break;
585 	case 5:
586 		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) {
587 			if (data->pin_cfg[1] & ADT7462_PIN15_INPUT)
588 				return 9400;
589 			return 13000;
590 		}
591 		break;
592 	case 6:
593 		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
594 			return 17200;
595 		break;
596 	case 7:
597 		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
598 			return 62500;
599 		break;
600 	case 8:
601 		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) {
602 		case 0:
603 			return 15600;
604 		case 1:
605 			return 6250;
606 		}
607 		break;
608 	case 9:
609 		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) {
610 		case 0:
611 			return 17200;
612 		case 1:
613 			return 6250;
614 		}
615 		break;
616 	case 10:
617 		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) {
618 		case 0:
619 			return 6250;
620 		case 1:
621 			return 13000;
622 		case 2:
623 			return 9400;
624 		case 3:
625 			return 7800;
626 		}
627 	case 11:
628 	case 12:
629 		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
630 					ADT7462_PIN28_VOLT &&
631 		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
632 			return 7800;
633 	}
634 	return 0;
635 }
636 
637 static int temp_enabled(struct adt7462_data *data, int which)
638 {
639 	switch (which) {
640 	case 0:
641 	case 2:
642 		return 1;
643 	case 1:
644 		if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT)
645 			return 1;
646 		break;
647 	case 3:
648 		if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT)
649 			return 1;
650 		break;
651 	}
652 	return 0;
653 }
654 
655 static const char *temp_label(struct adt7462_data *data, int which)
656 {
657 	switch (which) {
658 	case 0:
659 		return "local";
660 	case 1:
661 		if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT)
662 			return "remote1";
663 		break;
664 	case 2:
665 		return "remote2";
666 	case 3:
667 		if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT)
668 			return "remote3";
669 		break;
670 	}
671 	return "N/A";
672 }
673 
674 /* Map Trange register values to mC */
675 #define NUM_TRANGE_VALUES	16
676 static const int trange_values[NUM_TRANGE_VALUES] = {
677 	2000,
678 	2500,
679 	3300,
680 	4000,
681 	5000,
682 	6700,
683 	8000,
684 	10000,
685 	13300,
686 	16000,
687 	20000,
688 	26700,
689 	32000,
690 	40000,
691 	53300,
692 	80000
693 };
694 
695 static int find_trange_value(int trange)
696 {
697 	int i;
698 
699 	for (i = 0; i < NUM_TRANGE_VALUES; i++)
700 		if (trange_values[i] == trange)
701 			return i;
702 
703 	return -EINVAL;
704 }
705 
706 static struct adt7462_data *adt7462_update_device(struct device *dev)
707 {
708 	struct i2c_client *client = to_i2c_client(dev);
709 	struct adt7462_data *data = i2c_get_clientdata(client);
710 	unsigned long local_jiffies = jiffies;
711 	int i;
712 
713 	mutex_lock(&data->lock);
714 	if (time_before(local_jiffies, data->sensors_last_updated +
715 		SENSOR_REFRESH_INTERVAL)
716 		&& data->sensors_valid)
717 		goto no_sensor_update;
718 
719 	for (i = 0; i < ADT7462_TEMP_COUNT; i++) {
720 		/*
721 		 * Reading the fractional register locks the integral
722 		 * register until both have been read.
723 		 */
724 		data->temp_frac[i] = i2c_smbus_read_byte_data(client,
725 						ADT7462_TEMP_REG(i));
726 		data->temp[i] = i2c_smbus_read_byte_data(client,
727 						ADT7462_TEMP_REG(i) + 1);
728 	}
729 
730 	for (i = 0; i < ADT7462_FAN_COUNT; i++)
731 		data->fan[i] = adt7462_read_word_data(client,
732 						ADT7462_REG_FAN(i));
733 
734 	data->fan_enabled = i2c_smbus_read_byte_data(client,
735 					ADT7462_REG_FAN_ENABLE);
736 
737 	for (i = 0; i < ADT7462_PWM_COUNT; i++)
738 		data->pwm[i] = i2c_smbus_read_byte_data(client,
739 						ADT7462_REG_PWM(i));
740 
741 	for (i = 0; i < ADT7462_PIN_CFG_REG_COUNT; i++)
742 		data->pin_cfg[i] = i2c_smbus_read_byte_data(client,
743 				ADT7462_REG_PIN_CFG(i));
744 
745 	for (i = 0; i < ADT7462_VOLT_COUNT; i++) {
746 		int reg = ADT7462_REG_VOLT(data, i);
747 		if (!reg)
748 			data->voltages[i] = 0;
749 		else
750 			data->voltages[i] = i2c_smbus_read_byte_data(client,
751 								     reg);
752 	}
753 
754 	data->alarms[0] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM1);
755 	data->alarms[1] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM2);
756 	data->alarms[2] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM3);
757 	data->alarms[3] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM4);
758 
759 	data->sensors_last_updated = local_jiffies;
760 	data->sensors_valid = 1;
761 
762 no_sensor_update:
763 	if (time_before(local_jiffies, data->limits_last_updated +
764 		LIMIT_REFRESH_INTERVAL)
765 		&& data->limits_valid)
766 		goto out;
767 
768 	for (i = 0; i < ADT7462_TEMP_COUNT; i++) {
769 		data->temp_min[i] = i2c_smbus_read_byte_data(client,
770 						ADT7462_TEMP_MIN_REG(i));
771 		data->temp_max[i] = i2c_smbus_read_byte_data(client,
772 						ADT7462_TEMP_MAX_REG(i));
773 	}
774 
775 	for (i = 0; i < ADT7462_FAN_COUNT; i++)
776 		data->fan_min[i] = i2c_smbus_read_byte_data(client,
777 						ADT7462_REG_FAN_MIN(i));
778 
779 	for (i = 0; i < ADT7462_VOLT_COUNT; i++) {
780 		int reg = ADT7462_REG_VOLT_MAX(data, i);
781 		data->volt_max[i] =
782 			(reg ? i2c_smbus_read_byte_data(client, reg) : 0);
783 
784 		reg = ADT7462_REG_VOLT_MIN(data, i);
785 		data->volt_min[i] =
786 			(reg ? i2c_smbus_read_byte_data(client, reg) : 0);
787 	}
788 
789 	for (i = 0; i < ADT7462_PWM_COUNT; i++) {
790 		data->pwm_min[i] = i2c_smbus_read_byte_data(client,
791 						ADT7462_REG_PWM_MIN(i));
792 		data->pwm_tmin[i] = i2c_smbus_read_byte_data(client,
793 						ADT7462_REG_PWM_TMIN(i));
794 		data->pwm_trange[i] = i2c_smbus_read_byte_data(client,
795 						ADT7462_REG_PWM_TRANGE(i));
796 		data->pwm_cfg[i] = i2c_smbus_read_byte_data(client,
797 						ADT7462_REG_PWM_CFG(i));
798 	}
799 
800 	data->pwm_max = i2c_smbus_read_byte_data(client, ADT7462_REG_PWM_MAX);
801 
802 	data->cfg2 = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2);
803 
804 	data->limits_last_updated = local_jiffies;
805 	data->limits_valid = 1;
806 
807 out:
808 	mutex_unlock(&data->lock);
809 	return data;
810 }
811 
812 static ssize_t show_temp_min(struct device *dev,
813 			     struct device_attribute *devattr,
814 			     char *buf)
815 {
816 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
817 	struct adt7462_data *data = adt7462_update_device(dev);
818 
819 	if (!temp_enabled(data, attr->index))
820 		return sprintf(buf, "0\n");
821 
822 	return sprintf(buf, "%d\n", 1000 * (data->temp_min[attr->index] - 64));
823 }
824 
825 static ssize_t set_temp_min(struct device *dev,
826 			    struct device_attribute *devattr,
827 			    const char *buf,
828 			    size_t count)
829 {
830 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
831 	struct i2c_client *client = to_i2c_client(dev);
832 	struct adt7462_data *data = i2c_get_clientdata(client);
833 	long temp;
834 
835 	if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
836 		return -EINVAL;
837 
838 	temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
839 	temp = clamp_val(temp, 0, 255);
840 
841 	mutex_lock(&data->lock);
842 	data->temp_min[attr->index] = temp;
843 	i2c_smbus_write_byte_data(client, ADT7462_TEMP_MIN_REG(attr->index),
844 				  temp);
845 	mutex_unlock(&data->lock);
846 
847 	return count;
848 }
849 
850 static ssize_t show_temp_max(struct device *dev,
851 			     struct device_attribute *devattr,
852 			     char *buf)
853 {
854 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
855 	struct adt7462_data *data = adt7462_update_device(dev);
856 
857 	if (!temp_enabled(data, attr->index))
858 		return sprintf(buf, "0\n");
859 
860 	return sprintf(buf, "%d\n", 1000 * (data->temp_max[attr->index] - 64));
861 }
862 
863 static ssize_t set_temp_max(struct device *dev,
864 			    struct device_attribute *devattr,
865 			    const char *buf,
866 			    size_t count)
867 {
868 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
869 	struct i2c_client *client = to_i2c_client(dev);
870 	struct adt7462_data *data = i2c_get_clientdata(client);
871 	long temp;
872 
873 	if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
874 		return -EINVAL;
875 
876 	temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
877 	temp = clamp_val(temp, 0, 255);
878 
879 	mutex_lock(&data->lock);
880 	data->temp_max[attr->index] = temp;
881 	i2c_smbus_write_byte_data(client, ADT7462_TEMP_MAX_REG(attr->index),
882 				  temp);
883 	mutex_unlock(&data->lock);
884 
885 	return count;
886 }
887 
888 static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
889 			 char *buf)
890 {
891 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
892 	struct adt7462_data *data = adt7462_update_device(dev);
893 	u8 frac = data->temp_frac[attr->index] >> TEMP_FRAC_OFFSET;
894 
895 	if (!temp_enabled(data, attr->index))
896 		return sprintf(buf, "0\n");
897 
898 	return sprintf(buf, "%d\n", 1000 * (data->temp[attr->index] - 64) +
899 				     250 * frac);
900 }
901 
902 static ssize_t show_temp_label(struct device *dev,
903 			       struct device_attribute *devattr,
904 			       char *buf)
905 {
906 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
907 	struct adt7462_data *data = adt7462_update_device(dev);
908 
909 	return sprintf(buf, "%s\n", temp_label(data, attr->index));
910 }
911 
912 static ssize_t show_volt_max(struct device *dev,
913 			     struct device_attribute *devattr,
914 			     char *buf)
915 {
916 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
917 	struct adt7462_data *data = adt7462_update_device(dev);
918 	int x = voltage_multiplier(data, attr->index);
919 
920 	x *= data->volt_max[attr->index];
921 	x /= 1000; /* convert from uV to mV */
922 
923 	return sprintf(buf, "%d\n", x);
924 }
925 
926 static ssize_t set_volt_max(struct device *dev,
927 			    struct device_attribute *devattr,
928 			    const char *buf,
929 			    size_t count)
930 {
931 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
932 	struct i2c_client *client = to_i2c_client(dev);
933 	struct adt7462_data *data = i2c_get_clientdata(client);
934 	int x = voltage_multiplier(data, attr->index);
935 	long temp;
936 
937 	if (kstrtol(buf, 10, &temp) || !x)
938 		return -EINVAL;
939 
940 	temp *= 1000; /* convert mV to uV */
941 	temp = DIV_ROUND_CLOSEST(temp, x);
942 	temp = clamp_val(temp, 0, 255);
943 
944 	mutex_lock(&data->lock);
945 	data->volt_max[attr->index] = temp;
946 	i2c_smbus_write_byte_data(client,
947 				  ADT7462_REG_VOLT_MAX(data, attr->index),
948 				  temp);
949 	mutex_unlock(&data->lock);
950 
951 	return count;
952 }
953 
954 static ssize_t show_volt_min(struct device *dev,
955 			     struct device_attribute *devattr,
956 			     char *buf)
957 {
958 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
959 	struct adt7462_data *data = adt7462_update_device(dev);
960 	int x = voltage_multiplier(data, attr->index);
961 
962 	x *= data->volt_min[attr->index];
963 	x /= 1000; /* convert from uV to mV */
964 
965 	return sprintf(buf, "%d\n", x);
966 }
967 
968 static ssize_t set_volt_min(struct device *dev,
969 			    struct device_attribute *devattr,
970 			    const char *buf,
971 			    size_t count)
972 {
973 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
974 	struct i2c_client *client = to_i2c_client(dev);
975 	struct adt7462_data *data = i2c_get_clientdata(client);
976 	int x = voltage_multiplier(data, attr->index);
977 	long temp;
978 
979 	if (kstrtol(buf, 10, &temp) || !x)
980 		return -EINVAL;
981 
982 	temp *= 1000; /* convert mV to uV */
983 	temp = DIV_ROUND_CLOSEST(temp, x);
984 	temp = clamp_val(temp, 0, 255);
985 
986 	mutex_lock(&data->lock);
987 	data->volt_min[attr->index] = temp;
988 	i2c_smbus_write_byte_data(client,
989 				  ADT7462_REG_VOLT_MIN(data, attr->index),
990 				  temp);
991 	mutex_unlock(&data->lock);
992 
993 	return count;
994 }
995 
996 static ssize_t show_voltage(struct device *dev,
997 			    struct device_attribute *devattr,
998 			    char *buf)
999 {
1000 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1001 	struct adt7462_data *data = adt7462_update_device(dev);
1002 	int x = voltage_multiplier(data, attr->index);
1003 
1004 	x *= data->voltages[attr->index];
1005 	x /= 1000; /* convert from uV to mV */
1006 
1007 	return sprintf(buf, "%d\n", x);
1008 }
1009 
1010 static ssize_t show_voltage_label(struct device *dev,
1011 				  struct device_attribute *devattr,
1012 				  char *buf)
1013 {
1014 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1015 	struct adt7462_data *data = adt7462_update_device(dev);
1016 
1017 	return sprintf(buf, "%s\n", voltage_label(data, attr->index));
1018 }
1019 
1020 static ssize_t show_alarm(struct device *dev,
1021 			  struct device_attribute *devattr,
1022 			  char *buf)
1023 {
1024 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1025 	struct adt7462_data *data = adt7462_update_device(dev);
1026 	int reg = attr->index >> ADT7462_ALARM_REG_SHIFT;
1027 	int mask = attr->index & ADT7462_ALARM_FLAG_MASK;
1028 
1029 	if (data->alarms[reg] & mask)
1030 		return sprintf(buf, "1\n");
1031 	else
1032 		return sprintf(buf, "0\n");
1033 }
1034 
1035 static int fan_enabled(struct adt7462_data *data, int fan)
1036 {
1037 	return data->fan_enabled & (1 << fan);
1038 }
1039 
1040 static ssize_t show_fan_min(struct device *dev,
1041 			    struct device_attribute *devattr,
1042 			    char *buf)
1043 {
1044 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1045 	struct adt7462_data *data = adt7462_update_device(dev);
1046 	u16 temp;
1047 
1048 	/* Only the MSB of the min fan period is stored... */
1049 	temp = data->fan_min[attr->index];
1050 	temp <<= 8;
1051 
1052 	if (!fan_enabled(data, attr->index) ||
1053 	    !FAN_DATA_VALID(temp))
1054 		return sprintf(buf, "0\n");
1055 
1056 	return sprintf(buf, "%d\n", FAN_PERIOD_TO_RPM(temp));
1057 }
1058 
1059 static ssize_t set_fan_min(struct device *dev,
1060 			   struct device_attribute *devattr,
1061 			   const char *buf, size_t count)
1062 {
1063 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1064 	struct i2c_client *client = to_i2c_client(dev);
1065 	struct adt7462_data *data = i2c_get_clientdata(client);
1066 	long temp;
1067 
1068 	if (kstrtol(buf, 10, &temp) || !temp ||
1069 	    !fan_enabled(data, attr->index))
1070 		return -EINVAL;
1071 
1072 	temp = FAN_RPM_TO_PERIOD(temp);
1073 	temp >>= 8;
1074 	temp = clamp_val(temp, 1, 255);
1075 
1076 	mutex_lock(&data->lock);
1077 	data->fan_min[attr->index] = temp;
1078 	i2c_smbus_write_byte_data(client, ADT7462_REG_FAN_MIN(attr->index),
1079 				  temp);
1080 	mutex_unlock(&data->lock);
1081 
1082 	return count;
1083 }
1084 
1085 static ssize_t show_fan(struct device *dev, struct device_attribute *devattr,
1086 			char *buf)
1087 {
1088 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1089 	struct adt7462_data *data = adt7462_update_device(dev);
1090 
1091 	if (!fan_enabled(data, attr->index) ||
1092 	    !FAN_DATA_VALID(data->fan[attr->index]))
1093 		return sprintf(buf, "0\n");
1094 
1095 	return sprintf(buf, "%d\n",
1096 		       FAN_PERIOD_TO_RPM(data->fan[attr->index]));
1097 }
1098 
1099 static ssize_t show_force_pwm_max(struct device *dev,
1100 				  struct device_attribute *devattr,
1101 				  char *buf)
1102 {
1103 	struct adt7462_data *data = adt7462_update_device(dev);
1104 	return sprintf(buf, "%d\n", (data->cfg2 & ADT7462_FSPD_MASK ? 1 : 0));
1105 }
1106 
1107 static ssize_t set_force_pwm_max(struct device *dev,
1108 				 struct device_attribute *devattr,
1109 				 const char *buf,
1110 				 size_t count)
1111 {
1112 	struct i2c_client *client = to_i2c_client(dev);
1113 	struct adt7462_data *data = i2c_get_clientdata(client);
1114 	long temp;
1115 	u8 reg;
1116 
1117 	if (kstrtol(buf, 10, &temp))
1118 		return -EINVAL;
1119 
1120 	mutex_lock(&data->lock);
1121 	reg = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2);
1122 	if (temp)
1123 		reg |= ADT7462_FSPD_MASK;
1124 	else
1125 		reg &= ~ADT7462_FSPD_MASK;
1126 	data->cfg2 = reg;
1127 	i2c_smbus_write_byte_data(client, ADT7462_REG_CFG2, reg);
1128 	mutex_unlock(&data->lock);
1129 
1130 	return count;
1131 }
1132 
1133 static ssize_t show_pwm(struct device *dev, struct device_attribute *devattr,
1134 			char *buf)
1135 {
1136 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1137 	struct adt7462_data *data = adt7462_update_device(dev);
1138 	return sprintf(buf, "%d\n", data->pwm[attr->index]);
1139 }
1140 
1141 static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr,
1142 			const char *buf, size_t count)
1143 {
1144 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1145 	struct i2c_client *client = to_i2c_client(dev);
1146 	struct adt7462_data *data = i2c_get_clientdata(client);
1147 	long temp;
1148 
1149 	if (kstrtol(buf, 10, &temp))
1150 		return -EINVAL;
1151 
1152 	temp = clamp_val(temp, 0, 255);
1153 
1154 	mutex_lock(&data->lock);
1155 	data->pwm[attr->index] = temp;
1156 	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM(attr->index), temp);
1157 	mutex_unlock(&data->lock);
1158 
1159 	return count;
1160 }
1161 
1162 static ssize_t show_pwm_max(struct device *dev,
1163 			    struct device_attribute *devattr,
1164 			    char *buf)
1165 {
1166 	struct adt7462_data *data = adt7462_update_device(dev);
1167 	return sprintf(buf, "%d\n", data->pwm_max);
1168 }
1169 
1170 static ssize_t set_pwm_max(struct device *dev,
1171 			   struct device_attribute *devattr,
1172 			   const char *buf,
1173 			   size_t count)
1174 {
1175 	struct i2c_client *client = to_i2c_client(dev);
1176 	struct adt7462_data *data = i2c_get_clientdata(client);
1177 	long temp;
1178 
1179 	if (kstrtol(buf, 10, &temp))
1180 		return -EINVAL;
1181 
1182 	temp = clamp_val(temp, 0, 255);
1183 
1184 	mutex_lock(&data->lock);
1185 	data->pwm_max = temp;
1186 	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MAX, temp);
1187 	mutex_unlock(&data->lock);
1188 
1189 	return count;
1190 }
1191 
1192 static ssize_t show_pwm_min(struct device *dev,
1193 			    struct device_attribute *devattr,
1194 			    char *buf)
1195 {
1196 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1197 	struct adt7462_data *data = adt7462_update_device(dev);
1198 	return sprintf(buf, "%d\n", data->pwm_min[attr->index]);
1199 }
1200 
1201 static ssize_t set_pwm_min(struct device *dev,
1202 			   struct device_attribute *devattr,
1203 			   const char *buf,
1204 			   size_t count)
1205 {
1206 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1207 	struct i2c_client *client = to_i2c_client(dev);
1208 	struct adt7462_data *data = i2c_get_clientdata(client);
1209 	long temp;
1210 
1211 	if (kstrtol(buf, 10, &temp))
1212 		return -EINVAL;
1213 
1214 	temp = clamp_val(temp, 0, 255);
1215 
1216 	mutex_lock(&data->lock);
1217 	data->pwm_min[attr->index] = temp;
1218 	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MIN(attr->index),
1219 				  temp);
1220 	mutex_unlock(&data->lock);
1221 
1222 	return count;
1223 }
1224 
1225 static ssize_t show_pwm_hyst(struct device *dev,
1226 			     struct device_attribute *devattr,
1227 			     char *buf)
1228 {
1229 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1230 	struct adt7462_data *data = adt7462_update_device(dev);
1231 	return sprintf(buf, "%d\n", 1000 *
1232 		      (data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK));
1233 }
1234 
1235 static ssize_t set_pwm_hyst(struct device *dev,
1236 			    struct device_attribute *devattr,
1237 			    const char *buf,
1238 			    size_t count)
1239 {
1240 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1241 	struct i2c_client *client = to_i2c_client(dev);
1242 	struct adt7462_data *data = i2c_get_clientdata(client);
1243 	long temp;
1244 
1245 	if (kstrtol(buf, 10, &temp))
1246 		return -EINVAL;
1247 
1248 	temp = DIV_ROUND_CLOSEST(temp, 1000);
1249 	temp = clamp_val(temp, 0, 15);
1250 
1251 	/* package things up */
1252 	temp &= ADT7462_PWM_HYST_MASK;
1253 	temp |= data->pwm_trange[attr->index] & ADT7462_PWM_RANGE_MASK;
1254 
1255 	mutex_lock(&data->lock);
1256 	data->pwm_trange[attr->index] = temp;
1257 	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
1258 				  temp);
1259 	mutex_unlock(&data->lock);
1260 
1261 	return count;
1262 }
1263 
1264 static ssize_t show_pwm_tmax(struct device *dev,
1265 			     struct device_attribute *devattr,
1266 			     char *buf)
1267 {
1268 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1269 	struct adt7462_data *data = adt7462_update_device(dev);
1270 
1271 	/* tmax = tmin + trange */
1272 	int trange = trange_values[data->pwm_trange[attr->index] >>
1273 				   ADT7462_PWM_RANGE_SHIFT];
1274 	int tmin = (data->pwm_tmin[attr->index] - 64) * 1000;
1275 
1276 	return sprintf(buf, "%d\n", tmin + trange);
1277 }
1278 
1279 static ssize_t set_pwm_tmax(struct device *dev,
1280 			    struct device_attribute *devattr,
1281 			    const char *buf,
1282 			    size_t count)
1283 {
1284 	int temp;
1285 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1286 	struct i2c_client *client = to_i2c_client(dev);
1287 	struct adt7462_data *data = i2c_get_clientdata(client);
1288 	int tmin, trange_value;
1289 	long trange;
1290 
1291 	if (kstrtol(buf, 10, &trange))
1292 		return -EINVAL;
1293 
1294 	/* trange = tmax - tmin */
1295 	tmin = (data->pwm_tmin[attr->index] - 64) * 1000;
1296 	trange_value = find_trange_value(trange - tmin);
1297 	if (trange_value < 0)
1298 		return trange_value;
1299 
1300 	temp = trange_value << ADT7462_PWM_RANGE_SHIFT;
1301 	temp |= data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK;
1302 
1303 	mutex_lock(&data->lock);
1304 	data->pwm_trange[attr->index] = temp;
1305 	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
1306 				  temp);
1307 	mutex_unlock(&data->lock);
1308 
1309 	return count;
1310 }
1311 
1312 static ssize_t show_pwm_tmin(struct device *dev,
1313 			     struct device_attribute *devattr,
1314 			     char *buf)
1315 {
1316 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1317 	struct adt7462_data *data = adt7462_update_device(dev);
1318 	return sprintf(buf, "%d\n", 1000 * (data->pwm_tmin[attr->index] - 64));
1319 }
1320 
1321 static ssize_t set_pwm_tmin(struct device *dev,
1322 			    struct device_attribute *devattr,
1323 			    const char *buf,
1324 			    size_t count)
1325 {
1326 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1327 	struct i2c_client *client = to_i2c_client(dev);
1328 	struct adt7462_data *data = i2c_get_clientdata(client);
1329 	long temp;
1330 
1331 	if (kstrtol(buf, 10, &temp))
1332 		return -EINVAL;
1333 
1334 	temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
1335 	temp = clamp_val(temp, 0, 255);
1336 
1337 	mutex_lock(&data->lock);
1338 	data->pwm_tmin[attr->index] = temp;
1339 	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TMIN(attr->index),
1340 				  temp);
1341 	mutex_unlock(&data->lock);
1342 
1343 	return count;
1344 }
1345 
1346 static ssize_t show_pwm_auto(struct device *dev,
1347 			     struct device_attribute *devattr,
1348 			     char *buf)
1349 {
1350 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1351 	struct adt7462_data *data = adt7462_update_device(dev);
1352 	int cfg = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
1353 
1354 	switch (cfg) {
1355 	case 4: /* off */
1356 		return sprintf(buf, "0\n");
1357 	case 7: /* manual */
1358 		return sprintf(buf, "1\n");
1359 	default: /* automatic */
1360 		return sprintf(buf, "2\n");
1361 	}
1362 }
1363 
1364 static void set_pwm_channel(struct i2c_client *client,
1365 			    struct adt7462_data *data,
1366 			    int which,
1367 			    int value)
1368 {
1369 	int temp = data->pwm_cfg[which] & ~ADT7462_PWM_CHANNEL_MASK;
1370 	temp |= value << ADT7462_PWM_CHANNEL_SHIFT;
1371 
1372 	mutex_lock(&data->lock);
1373 	data->pwm_cfg[which] = temp;
1374 	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_CFG(which), temp);
1375 	mutex_unlock(&data->lock);
1376 }
1377 
1378 static ssize_t set_pwm_auto(struct device *dev,
1379 			    struct device_attribute *devattr,
1380 			    const char *buf,
1381 			    size_t count)
1382 {
1383 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1384 	struct i2c_client *client = to_i2c_client(dev);
1385 	struct adt7462_data *data = i2c_get_clientdata(client);
1386 	long temp;
1387 
1388 	if (kstrtol(buf, 10, &temp))
1389 		return -EINVAL;
1390 
1391 	switch (temp) {
1392 	case 0: /* off */
1393 		set_pwm_channel(client, data, attr->index, 4);
1394 		return count;
1395 	case 1: /* manual */
1396 		set_pwm_channel(client, data, attr->index, 7);
1397 		return count;
1398 	default:
1399 		return -EINVAL;
1400 	}
1401 }
1402 
1403 static ssize_t show_pwm_auto_temp(struct device *dev,
1404 				  struct device_attribute *devattr,
1405 				  char *buf)
1406 {
1407 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1408 	struct adt7462_data *data = adt7462_update_device(dev);
1409 	int channel = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
1410 
1411 	switch (channel) {
1412 	case 0: /* temp[1234] only */
1413 	case 1:
1414 	case 2:
1415 	case 3:
1416 		return sprintf(buf, "%d\n", (1 << channel));
1417 	case 5: /* temp1 & temp4  */
1418 		return sprintf(buf, "9\n");
1419 	case 6:
1420 		return sprintf(buf, "15\n");
1421 	default:
1422 		return sprintf(buf, "0\n");
1423 	}
1424 }
1425 
1426 static int cvt_auto_temp(int input)
1427 {
1428 	if (input == 0xF)
1429 		return 6;
1430 	if (input == 0x9)
1431 		return 5;
1432 	if (input < 1 || !is_power_of_2(input))
1433 		return -EINVAL;
1434 	return ilog2(input);
1435 }
1436 
1437 static ssize_t set_pwm_auto_temp(struct device *dev,
1438 				 struct device_attribute *devattr,
1439 				 const char *buf,
1440 				 size_t count)
1441 {
1442 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1443 	struct i2c_client *client = to_i2c_client(dev);
1444 	struct adt7462_data *data = i2c_get_clientdata(client);
1445 	long temp;
1446 
1447 	if (kstrtol(buf, 10, &temp))
1448 		return -EINVAL;
1449 
1450 	temp = cvt_auto_temp(temp);
1451 	if (temp < 0)
1452 		return temp;
1453 
1454 	set_pwm_channel(client, data, attr->index, temp);
1455 
1456 	return count;
1457 }
1458 
1459 static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max,
1460 		    set_temp_max, 0);
1461 static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp_max,
1462 		    set_temp_max, 1);
1463 static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO, show_temp_max,
1464 		    set_temp_max, 2);
1465 static SENSOR_DEVICE_ATTR(temp4_max, S_IWUSR | S_IRUGO, show_temp_max,
1466 		    set_temp_max, 3);
1467 
1468 static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp_min,
1469 		    set_temp_min, 0);
1470 static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp_min,
1471 		    set_temp_min, 1);
1472 static SENSOR_DEVICE_ATTR(temp3_min, S_IWUSR | S_IRUGO, show_temp_min,
1473 		    set_temp_min, 2);
1474 static SENSOR_DEVICE_ATTR(temp4_min, S_IWUSR | S_IRUGO, show_temp_min,
1475 		    set_temp_min, 3);
1476 
1477 static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
1478 static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1);
1479 static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2);
1480 static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3);
1481 
1482 static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_temp_label, NULL, 0);
1483 static SENSOR_DEVICE_ATTR(temp2_label, S_IRUGO, show_temp_label, NULL, 1);
1484 static SENSOR_DEVICE_ATTR(temp3_label, S_IRUGO, show_temp_label, NULL, 2);
1485 static SENSOR_DEVICE_ATTR(temp4_label, S_IRUGO, show_temp_label, NULL, 3);
1486 
1487 static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL,
1488 			  ADT7462_ALARM1 | ADT7462_LT_ALARM);
1489 static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL,
1490 			  ADT7462_ALARM1 | ADT7462_R1T_ALARM);
1491 static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL,
1492 			  ADT7462_ALARM1 | ADT7462_R2T_ALARM);
1493 static SENSOR_DEVICE_ATTR(temp4_alarm, S_IRUGO, show_alarm, NULL,
1494 			  ADT7462_ALARM1 | ADT7462_R3T_ALARM);
1495 
1496 static SENSOR_DEVICE_ATTR(in1_max, S_IWUSR | S_IRUGO, show_volt_max,
1497 		    set_volt_max, 0);
1498 static SENSOR_DEVICE_ATTR(in2_max, S_IWUSR | S_IRUGO, show_volt_max,
1499 		    set_volt_max, 1);
1500 static SENSOR_DEVICE_ATTR(in3_max, S_IWUSR | S_IRUGO, show_volt_max,
1501 		    set_volt_max, 2);
1502 static SENSOR_DEVICE_ATTR(in4_max, S_IWUSR | S_IRUGO, show_volt_max,
1503 		    set_volt_max, 3);
1504 static SENSOR_DEVICE_ATTR(in5_max, S_IWUSR | S_IRUGO, show_volt_max,
1505 		    set_volt_max, 4);
1506 static SENSOR_DEVICE_ATTR(in6_max, S_IWUSR | S_IRUGO, show_volt_max,
1507 		    set_volt_max, 5);
1508 static SENSOR_DEVICE_ATTR(in7_max, S_IWUSR | S_IRUGO, show_volt_max,
1509 		    set_volt_max, 6);
1510 static SENSOR_DEVICE_ATTR(in8_max, S_IWUSR | S_IRUGO, show_volt_max,
1511 		    set_volt_max, 7);
1512 static SENSOR_DEVICE_ATTR(in9_max, S_IWUSR | S_IRUGO, show_volt_max,
1513 		    set_volt_max, 8);
1514 static SENSOR_DEVICE_ATTR(in10_max, S_IWUSR | S_IRUGO, show_volt_max,
1515 		    set_volt_max, 9);
1516 static SENSOR_DEVICE_ATTR(in11_max, S_IWUSR | S_IRUGO, show_volt_max,
1517 		    set_volt_max, 10);
1518 static SENSOR_DEVICE_ATTR(in12_max, S_IWUSR | S_IRUGO, show_volt_max,
1519 		    set_volt_max, 11);
1520 static SENSOR_DEVICE_ATTR(in13_max, S_IWUSR | S_IRUGO, show_volt_max,
1521 		    set_volt_max, 12);
1522 
1523 static SENSOR_DEVICE_ATTR(in1_min, S_IWUSR | S_IRUGO, show_volt_min,
1524 		    set_volt_min, 0);
1525 static SENSOR_DEVICE_ATTR(in2_min, S_IWUSR | S_IRUGO, show_volt_min,
1526 		    set_volt_min, 1);
1527 static SENSOR_DEVICE_ATTR(in3_min, S_IWUSR | S_IRUGO, show_volt_min,
1528 		    set_volt_min, 2);
1529 static SENSOR_DEVICE_ATTR(in4_min, S_IWUSR | S_IRUGO, show_volt_min,
1530 		    set_volt_min, 3);
1531 static SENSOR_DEVICE_ATTR(in5_min, S_IWUSR | S_IRUGO, show_volt_min,
1532 		    set_volt_min, 4);
1533 static SENSOR_DEVICE_ATTR(in6_min, S_IWUSR | S_IRUGO, show_volt_min,
1534 		    set_volt_min, 5);
1535 static SENSOR_DEVICE_ATTR(in7_min, S_IWUSR | S_IRUGO, show_volt_min,
1536 		    set_volt_min, 6);
1537 static SENSOR_DEVICE_ATTR(in8_min, S_IWUSR | S_IRUGO, show_volt_min,
1538 		    set_volt_min, 7);
1539 static SENSOR_DEVICE_ATTR(in9_min, S_IWUSR | S_IRUGO, show_volt_min,
1540 		    set_volt_min, 8);
1541 static SENSOR_DEVICE_ATTR(in10_min, S_IWUSR | S_IRUGO, show_volt_min,
1542 		    set_volt_min, 9);
1543 static SENSOR_DEVICE_ATTR(in11_min, S_IWUSR | S_IRUGO, show_volt_min,
1544 		    set_volt_min, 10);
1545 static SENSOR_DEVICE_ATTR(in12_min, S_IWUSR | S_IRUGO, show_volt_min,
1546 		    set_volt_min, 11);
1547 static SENSOR_DEVICE_ATTR(in13_min, S_IWUSR | S_IRUGO, show_volt_min,
1548 		    set_volt_min, 12);
1549 
1550 static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_voltage, NULL, 0);
1551 static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_voltage, NULL, 1);
1552 static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_voltage, NULL, 2);
1553 static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_voltage, NULL, 3);
1554 static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, show_voltage, NULL, 4);
1555 static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, show_voltage, NULL, 5);
1556 static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, show_voltage, NULL, 6);
1557 static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, show_voltage, NULL, 7);
1558 static SENSOR_DEVICE_ATTR(in9_input, S_IRUGO, show_voltage, NULL, 8);
1559 static SENSOR_DEVICE_ATTR(in10_input, S_IRUGO, show_voltage, NULL, 9);
1560 static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, show_voltage, NULL, 10);
1561 static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, show_voltage, NULL, 11);
1562 static SENSOR_DEVICE_ATTR(in13_input, S_IRUGO, show_voltage, NULL, 12);
1563 
1564 static SENSOR_DEVICE_ATTR(in1_label, S_IRUGO, show_voltage_label, NULL, 0);
1565 static SENSOR_DEVICE_ATTR(in2_label, S_IRUGO, show_voltage_label, NULL, 1);
1566 static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, show_voltage_label, NULL, 2);
1567 static SENSOR_DEVICE_ATTR(in4_label, S_IRUGO, show_voltage_label, NULL, 3);
1568 static SENSOR_DEVICE_ATTR(in5_label, S_IRUGO, show_voltage_label, NULL, 4);
1569 static SENSOR_DEVICE_ATTR(in6_label, S_IRUGO, show_voltage_label, NULL, 5);
1570 static SENSOR_DEVICE_ATTR(in7_label, S_IRUGO, show_voltage_label, NULL, 6);
1571 static SENSOR_DEVICE_ATTR(in8_label, S_IRUGO, show_voltage_label, NULL, 7);
1572 static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, show_voltage_label, NULL, 8);
1573 static SENSOR_DEVICE_ATTR(in10_label, S_IRUGO, show_voltage_label, NULL, 9);
1574 static SENSOR_DEVICE_ATTR(in11_label, S_IRUGO, show_voltage_label, NULL, 10);
1575 static SENSOR_DEVICE_ATTR(in12_label, S_IRUGO, show_voltage_label, NULL, 11);
1576 static SENSOR_DEVICE_ATTR(in13_label, S_IRUGO, show_voltage_label, NULL, 12);
1577 
1578 static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL,
1579 			  ADT7462_ALARM2 | ADT7462_V0_ALARM);
1580 static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL,
1581 			  ADT7462_ALARM2 | ADT7462_V7_ALARM);
1582 static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL,
1583 			  ADT7462_ALARM2 | ADT7462_V2_ALARM);
1584 static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL,
1585 			  ADT7462_ALARM2 | ADT7462_V6_ALARM);
1586 static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL,
1587 			  ADT7462_ALARM2 | ADT7462_V5_ALARM);
1588 static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL,
1589 			  ADT7462_ALARM2 | ADT7462_V4_ALARM);
1590 static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL,
1591 			  ADT7462_ALARM2 | ADT7462_V3_ALARM);
1592 static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL,
1593 			  ADT7462_ALARM2 | ADT7462_V1_ALARM);
1594 static SENSOR_DEVICE_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL,
1595 			  ADT7462_ALARM3 | ADT7462_V10_ALARM);
1596 static SENSOR_DEVICE_ATTR(in10_alarm, S_IRUGO, show_alarm, NULL,
1597 			  ADT7462_ALARM3 | ADT7462_V9_ALARM);
1598 static SENSOR_DEVICE_ATTR(in11_alarm, S_IRUGO, show_alarm, NULL,
1599 			  ADT7462_ALARM3 | ADT7462_V8_ALARM);
1600 static SENSOR_DEVICE_ATTR(in12_alarm, S_IRUGO, show_alarm, NULL,
1601 			  ADT7462_ALARM3 | ADT7462_V11_ALARM);
1602 static SENSOR_DEVICE_ATTR(in13_alarm, S_IRUGO, show_alarm, NULL,
1603 			  ADT7462_ALARM3 | ADT7462_V12_ALARM);
1604 
1605 static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
1606 		    set_fan_min, 0);
1607 static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
1608 		    set_fan_min, 1);
1609 static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
1610 		    set_fan_min, 2);
1611 static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
1612 		    set_fan_min, 3);
1613 static SENSOR_DEVICE_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min,
1614 		    set_fan_min, 4);
1615 static SENSOR_DEVICE_ATTR(fan6_min, S_IWUSR | S_IRUGO, show_fan_min,
1616 		    set_fan_min, 5);
1617 static SENSOR_DEVICE_ATTR(fan7_min, S_IWUSR | S_IRUGO, show_fan_min,
1618 		    set_fan_min, 6);
1619 static SENSOR_DEVICE_ATTR(fan8_min, S_IWUSR | S_IRUGO, show_fan_min,
1620 		    set_fan_min, 7);
1621 
1622 static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0);
1623 static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1);
1624 static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2);
1625 static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3);
1626 static SENSOR_DEVICE_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4);
1627 static SENSOR_DEVICE_ATTR(fan6_input, S_IRUGO, show_fan, NULL, 5);
1628 static SENSOR_DEVICE_ATTR(fan7_input, S_IRUGO, show_fan, NULL, 6);
1629 static SENSOR_DEVICE_ATTR(fan8_input, S_IRUGO, show_fan, NULL, 7);
1630 
1631 static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL,
1632 			  ADT7462_ALARM4 | ADT7462_F0_ALARM);
1633 static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL,
1634 			  ADT7462_ALARM4 | ADT7462_F1_ALARM);
1635 static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL,
1636 			  ADT7462_ALARM4 | ADT7462_F2_ALARM);
1637 static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL,
1638 			  ADT7462_ALARM4 | ADT7462_F3_ALARM);
1639 static SENSOR_DEVICE_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL,
1640 			  ADT7462_ALARM4 | ADT7462_F4_ALARM);
1641 static SENSOR_DEVICE_ATTR(fan6_alarm, S_IRUGO, show_alarm, NULL,
1642 			  ADT7462_ALARM4 | ADT7462_F5_ALARM);
1643 static SENSOR_DEVICE_ATTR(fan7_alarm, S_IRUGO, show_alarm, NULL,
1644 			  ADT7462_ALARM4 | ADT7462_F6_ALARM);
1645 static SENSOR_DEVICE_ATTR(fan8_alarm, S_IRUGO, show_alarm, NULL,
1646 			  ADT7462_ALARM4 | ADT7462_F7_ALARM);
1647 
1648 static SENSOR_DEVICE_ATTR(force_pwm_max, S_IWUSR | S_IRUGO,
1649 		    show_force_pwm_max, set_force_pwm_max, 0);
1650 
1651 static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 0);
1652 static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 1);
1653 static SENSOR_DEVICE_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 2);
1654 static SENSOR_DEVICE_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 3);
1655 
1656 static SENSOR_DEVICE_ATTR(pwm1_auto_point1_pwm, S_IWUSR | S_IRUGO,
1657 		    show_pwm_min, set_pwm_min, 0);
1658 static SENSOR_DEVICE_ATTR(pwm2_auto_point1_pwm, S_IWUSR | S_IRUGO,
1659 		    show_pwm_min, set_pwm_min, 1);
1660 static SENSOR_DEVICE_ATTR(pwm3_auto_point1_pwm, S_IWUSR | S_IRUGO,
1661 		    show_pwm_min, set_pwm_min, 2);
1662 static SENSOR_DEVICE_ATTR(pwm4_auto_point1_pwm, S_IWUSR | S_IRUGO,
1663 		    show_pwm_min, set_pwm_min, 3);
1664 
1665 static SENSOR_DEVICE_ATTR(pwm1_auto_point2_pwm, S_IWUSR | S_IRUGO,
1666 		    show_pwm_max, set_pwm_max, 0);
1667 static SENSOR_DEVICE_ATTR(pwm2_auto_point2_pwm, S_IWUSR | S_IRUGO,
1668 		    show_pwm_max, set_pwm_max, 1);
1669 static SENSOR_DEVICE_ATTR(pwm3_auto_point2_pwm, S_IWUSR | S_IRUGO,
1670 		    show_pwm_max, set_pwm_max, 2);
1671 static SENSOR_DEVICE_ATTR(pwm4_auto_point2_pwm, S_IWUSR | S_IRUGO,
1672 		    show_pwm_max, set_pwm_max, 3);
1673 
1674 static SENSOR_DEVICE_ATTR(temp1_auto_point1_hyst, S_IWUSR | S_IRUGO,
1675 		    show_pwm_hyst, set_pwm_hyst, 0);
1676 static SENSOR_DEVICE_ATTR(temp2_auto_point1_hyst, S_IWUSR | S_IRUGO,
1677 		    show_pwm_hyst, set_pwm_hyst, 1);
1678 static SENSOR_DEVICE_ATTR(temp3_auto_point1_hyst, S_IWUSR | S_IRUGO,
1679 		    show_pwm_hyst, set_pwm_hyst, 2);
1680 static SENSOR_DEVICE_ATTR(temp4_auto_point1_hyst, S_IWUSR | S_IRUGO,
1681 		    show_pwm_hyst, set_pwm_hyst, 3);
1682 
1683 static SENSOR_DEVICE_ATTR(temp1_auto_point2_hyst, S_IWUSR | S_IRUGO,
1684 		    show_pwm_hyst, set_pwm_hyst, 0);
1685 static SENSOR_DEVICE_ATTR(temp2_auto_point2_hyst, S_IWUSR | S_IRUGO,
1686 		    show_pwm_hyst, set_pwm_hyst, 1);
1687 static SENSOR_DEVICE_ATTR(temp3_auto_point2_hyst, S_IWUSR | S_IRUGO,
1688 		    show_pwm_hyst, set_pwm_hyst, 2);
1689 static SENSOR_DEVICE_ATTR(temp4_auto_point2_hyst, S_IWUSR | S_IRUGO,
1690 		    show_pwm_hyst, set_pwm_hyst, 3);
1691 
1692 static SENSOR_DEVICE_ATTR(temp1_auto_point1_temp, S_IWUSR | S_IRUGO,
1693 		    show_pwm_tmin, set_pwm_tmin, 0);
1694 static SENSOR_DEVICE_ATTR(temp2_auto_point1_temp, S_IWUSR | S_IRUGO,
1695 		    show_pwm_tmin, set_pwm_tmin, 1);
1696 static SENSOR_DEVICE_ATTR(temp3_auto_point1_temp, S_IWUSR | S_IRUGO,
1697 		    show_pwm_tmin, set_pwm_tmin, 2);
1698 static SENSOR_DEVICE_ATTR(temp4_auto_point1_temp, S_IWUSR | S_IRUGO,
1699 		    show_pwm_tmin, set_pwm_tmin, 3);
1700 
1701 static SENSOR_DEVICE_ATTR(temp1_auto_point2_temp, S_IWUSR | S_IRUGO,
1702 		    show_pwm_tmax, set_pwm_tmax, 0);
1703 static SENSOR_DEVICE_ATTR(temp2_auto_point2_temp, S_IWUSR | S_IRUGO,
1704 		    show_pwm_tmax, set_pwm_tmax, 1);
1705 static SENSOR_DEVICE_ATTR(temp3_auto_point2_temp, S_IWUSR | S_IRUGO,
1706 		    show_pwm_tmax, set_pwm_tmax, 2);
1707 static SENSOR_DEVICE_ATTR(temp4_auto_point2_temp, S_IWUSR | S_IRUGO,
1708 		    show_pwm_tmax, set_pwm_tmax, 3);
1709 
1710 static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1711 		    set_pwm_auto, 0);
1712 static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1713 		    set_pwm_auto, 1);
1714 static SENSOR_DEVICE_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1715 		    set_pwm_auto, 2);
1716 static SENSOR_DEVICE_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1717 		    set_pwm_auto, 3);
1718 
1719 static SENSOR_DEVICE_ATTR(pwm1_auto_channels_temp, S_IWUSR | S_IRUGO,
1720 		    show_pwm_auto_temp, set_pwm_auto_temp, 0);
1721 static SENSOR_DEVICE_ATTR(pwm2_auto_channels_temp, S_IWUSR | S_IRUGO,
1722 		    show_pwm_auto_temp, set_pwm_auto_temp, 1);
1723 static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO,
1724 		    show_pwm_auto_temp, set_pwm_auto_temp, 2);
1725 static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO,
1726 		    show_pwm_auto_temp, set_pwm_auto_temp, 3);
1727 
1728 static struct attribute *adt7462_attr[] = {
1729 	&sensor_dev_attr_temp1_max.dev_attr.attr,
1730 	&sensor_dev_attr_temp2_max.dev_attr.attr,
1731 	&sensor_dev_attr_temp3_max.dev_attr.attr,
1732 	&sensor_dev_attr_temp4_max.dev_attr.attr,
1733 
1734 	&sensor_dev_attr_temp1_min.dev_attr.attr,
1735 	&sensor_dev_attr_temp2_min.dev_attr.attr,
1736 	&sensor_dev_attr_temp3_min.dev_attr.attr,
1737 	&sensor_dev_attr_temp4_min.dev_attr.attr,
1738 
1739 	&sensor_dev_attr_temp1_input.dev_attr.attr,
1740 	&sensor_dev_attr_temp2_input.dev_attr.attr,
1741 	&sensor_dev_attr_temp3_input.dev_attr.attr,
1742 	&sensor_dev_attr_temp4_input.dev_attr.attr,
1743 
1744 	&sensor_dev_attr_temp1_label.dev_attr.attr,
1745 	&sensor_dev_attr_temp2_label.dev_attr.attr,
1746 	&sensor_dev_attr_temp3_label.dev_attr.attr,
1747 	&sensor_dev_attr_temp4_label.dev_attr.attr,
1748 
1749 	&sensor_dev_attr_temp1_alarm.dev_attr.attr,
1750 	&sensor_dev_attr_temp2_alarm.dev_attr.attr,
1751 	&sensor_dev_attr_temp3_alarm.dev_attr.attr,
1752 	&sensor_dev_attr_temp4_alarm.dev_attr.attr,
1753 
1754 	&sensor_dev_attr_in1_max.dev_attr.attr,
1755 	&sensor_dev_attr_in2_max.dev_attr.attr,
1756 	&sensor_dev_attr_in3_max.dev_attr.attr,
1757 	&sensor_dev_attr_in4_max.dev_attr.attr,
1758 	&sensor_dev_attr_in5_max.dev_attr.attr,
1759 	&sensor_dev_attr_in6_max.dev_attr.attr,
1760 	&sensor_dev_attr_in7_max.dev_attr.attr,
1761 	&sensor_dev_attr_in8_max.dev_attr.attr,
1762 	&sensor_dev_attr_in9_max.dev_attr.attr,
1763 	&sensor_dev_attr_in10_max.dev_attr.attr,
1764 	&sensor_dev_attr_in11_max.dev_attr.attr,
1765 	&sensor_dev_attr_in12_max.dev_attr.attr,
1766 	&sensor_dev_attr_in13_max.dev_attr.attr,
1767 
1768 	&sensor_dev_attr_in1_min.dev_attr.attr,
1769 	&sensor_dev_attr_in2_min.dev_attr.attr,
1770 	&sensor_dev_attr_in3_min.dev_attr.attr,
1771 	&sensor_dev_attr_in4_min.dev_attr.attr,
1772 	&sensor_dev_attr_in5_min.dev_attr.attr,
1773 	&sensor_dev_attr_in6_min.dev_attr.attr,
1774 	&sensor_dev_attr_in7_min.dev_attr.attr,
1775 	&sensor_dev_attr_in8_min.dev_attr.attr,
1776 	&sensor_dev_attr_in9_min.dev_attr.attr,
1777 	&sensor_dev_attr_in10_min.dev_attr.attr,
1778 	&sensor_dev_attr_in11_min.dev_attr.attr,
1779 	&sensor_dev_attr_in12_min.dev_attr.attr,
1780 	&sensor_dev_attr_in13_min.dev_attr.attr,
1781 
1782 	&sensor_dev_attr_in1_input.dev_attr.attr,
1783 	&sensor_dev_attr_in2_input.dev_attr.attr,
1784 	&sensor_dev_attr_in3_input.dev_attr.attr,
1785 	&sensor_dev_attr_in4_input.dev_attr.attr,
1786 	&sensor_dev_attr_in5_input.dev_attr.attr,
1787 	&sensor_dev_attr_in6_input.dev_attr.attr,
1788 	&sensor_dev_attr_in7_input.dev_attr.attr,
1789 	&sensor_dev_attr_in8_input.dev_attr.attr,
1790 	&sensor_dev_attr_in9_input.dev_attr.attr,
1791 	&sensor_dev_attr_in10_input.dev_attr.attr,
1792 	&sensor_dev_attr_in11_input.dev_attr.attr,
1793 	&sensor_dev_attr_in12_input.dev_attr.attr,
1794 	&sensor_dev_attr_in13_input.dev_attr.attr,
1795 
1796 	&sensor_dev_attr_in1_label.dev_attr.attr,
1797 	&sensor_dev_attr_in2_label.dev_attr.attr,
1798 	&sensor_dev_attr_in3_label.dev_attr.attr,
1799 	&sensor_dev_attr_in4_label.dev_attr.attr,
1800 	&sensor_dev_attr_in5_label.dev_attr.attr,
1801 	&sensor_dev_attr_in6_label.dev_attr.attr,
1802 	&sensor_dev_attr_in7_label.dev_attr.attr,
1803 	&sensor_dev_attr_in8_label.dev_attr.attr,
1804 	&sensor_dev_attr_in9_label.dev_attr.attr,
1805 	&sensor_dev_attr_in10_label.dev_attr.attr,
1806 	&sensor_dev_attr_in11_label.dev_attr.attr,
1807 	&sensor_dev_attr_in12_label.dev_attr.attr,
1808 	&sensor_dev_attr_in13_label.dev_attr.attr,
1809 
1810 	&sensor_dev_attr_in1_alarm.dev_attr.attr,
1811 	&sensor_dev_attr_in2_alarm.dev_attr.attr,
1812 	&sensor_dev_attr_in3_alarm.dev_attr.attr,
1813 	&sensor_dev_attr_in4_alarm.dev_attr.attr,
1814 	&sensor_dev_attr_in5_alarm.dev_attr.attr,
1815 	&sensor_dev_attr_in6_alarm.dev_attr.attr,
1816 	&sensor_dev_attr_in7_alarm.dev_attr.attr,
1817 	&sensor_dev_attr_in8_alarm.dev_attr.attr,
1818 	&sensor_dev_attr_in9_alarm.dev_attr.attr,
1819 	&sensor_dev_attr_in10_alarm.dev_attr.attr,
1820 	&sensor_dev_attr_in11_alarm.dev_attr.attr,
1821 	&sensor_dev_attr_in12_alarm.dev_attr.attr,
1822 	&sensor_dev_attr_in13_alarm.dev_attr.attr,
1823 
1824 	&sensor_dev_attr_fan1_min.dev_attr.attr,
1825 	&sensor_dev_attr_fan2_min.dev_attr.attr,
1826 	&sensor_dev_attr_fan3_min.dev_attr.attr,
1827 	&sensor_dev_attr_fan4_min.dev_attr.attr,
1828 	&sensor_dev_attr_fan5_min.dev_attr.attr,
1829 	&sensor_dev_attr_fan6_min.dev_attr.attr,
1830 	&sensor_dev_attr_fan7_min.dev_attr.attr,
1831 	&sensor_dev_attr_fan8_min.dev_attr.attr,
1832 
1833 	&sensor_dev_attr_fan1_input.dev_attr.attr,
1834 	&sensor_dev_attr_fan2_input.dev_attr.attr,
1835 	&sensor_dev_attr_fan3_input.dev_attr.attr,
1836 	&sensor_dev_attr_fan4_input.dev_attr.attr,
1837 	&sensor_dev_attr_fan5_input.dev_attr.attr,
1838 	&sensor_dev_attr_fan6_input.dev_attr.attr,
1839 	&sensor_dev_attr_fan7_input.dev_attr.attr,
1840 	&sensor_dev_attr_fan8_input.dev_attr.attr,
1841 
1842 	&sensor_dev_attr_fan1_alarm.dev_attr.attr,
1843 	&sensor_dev_attr_fan2_alarm.dev_attr.attr,
1844 	&sensor_dev_attr_fan3_alarm.dev_attr.attr,
1845 	&sensor_dev_attr_fan4_alarm.dev_attr.attr,
1846 	&sensor_dev_attr_fan5_alarm.dev_attr.attr,
1847 	&sensor_dev_attr_fan6_alarm.dev_attr.attr,
1848 	&sensor_dev_attr_fan7_alarm.dev_attr.attr,
1849 	&sensor_dev_attr_fan8_alarm.dev_attr.attr,
1850 
1851 	&sensor_dev_attr_force_pwm_max.dev_attr.attr,
1852 	&sensor_dev_attr_pwm1.dev_attr.attr,
1853 	&sensor_dev_attr_pwm2.dev_attr.attr,
1854 	&sensor_dev_attr_pwm3.dev_attr.attr,
1855 	&sensor_dev_attr_pwm4.dev_attr.attr,
1856 
1857 	&sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1858 	&sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
1859 	&sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1860 	&sensor_dev_attr_pwm4_auto_point1_pwm.dev_attr.attr,
1861 
1862 	&sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1863 	&sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
1864 	&sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1865 	&sensor_dev_attr_pwm4_auto_point2_pwm.dev_attr.attr,
1866 
1867 	&sensor_dev_attr_temp1_auto_point1_hyst.dev_attr.attr,
1868 	&sensor_dev_attr_temp2_auto_point1_hyst.dev_attr.attr,
1869 	&sensor_dev_attr_temp3_auto_point1_hyst.dev_attr.attr,
1870 	&sensor_dev_attr_temp4_auto_point1_hyst.dev_attr.attr,
1871 
1872 	&sensor_dev_attr_temp1_auto_point2_hyst.dev_attr.attr,
1873 	&sensor_dev_attr_temp2_auto_point2_hyst.dev_attr.attr,
1874 	&sensor_dev_attr_temp3_auto_point2_hyst.dev_attr.attr,
1875 	&sensor_dev_attr_temp4_auto_point2_hyst.dev_attr.attr,
1876 
1877 	&sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr,
1878 	&sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr,
1879 	&sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr,
1880 	&sensor_dev_attr_temp4_auto_point1_temp.dev_attr.attr,
1881 
1882 	&sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr,
1883 	&sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr,
1884 	&sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr,
1885 	&sensor_dev_attr_temp4_auto_point2_temp.dev_attr.attr,
1886 
1887 	&sensor_dev_attr_pwm1_enable.dev_attr.attr,
1888 	&sensor_dev_attr_pwm2_enable.dev_attr.attr,
1889 	&sensor_dev_attr_pwm3_enable.dev_attr.attr,
1890 	&sensor_dev_attr_pwm4_enable.dev_attr.attr,
1891 
1892 	&sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1893 	&sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
1894 	&sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1895 	&sensor_dev_attr_pwm4_auto_channels_temp.dev_attr.attr,
1896 	NULL
1897 };
1898 
1899 /* Return 0 if detection is successful, -ENODEV otherwise */
1900 static int adt7462_detect(struct i2c_client *client,
1901 			  struct i2c_board_info *info)
1902 {
1903 	struct i2c_adapter *adapter = client->adapter;
1904 	int vendor, device, revision;
1905 
1906 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1907 		return -ENODEV;
1908 
1909 	vendor = i2c_smbus_read_byte_data(client, ADT7462_REG_VENDOR);
1910 	if (vendor != ADT7462_VENDOR)
1911 		return -ENODEV;
1912 
1913 	device = i2c_smbus_read_byte_data(client, ADT7462_REG_DEVICE);
1914 	if (device != ADT7462_DEVICE)
1915 		return -ENODEV;
1916 
1917 	revision = i2c_smbus_read_byte_data(client, ADT7462_REG_REVISION);
1918 	if (revision != ADT7462_REVISION)
1919 		return -ENODEV;
1920 
1921 	strlcpy(info->type, "adt7462", I2C_NAME_SIZE);
1922 
1923 	return 0;
1924 }
1925 
1926 static int adt7462_probe(struct i2c_client *client,
1927 			 const struct i2c_device_id *id)
1928 {
1929 	struct adt7462_data *data;
1930 	int err;
1931 
1932 	data = devm_kzalloc(&client->dev, sizeof(struct adt7462_data),
1933 			    GFP_KERNEL);
1934 	if (!data)
1935 		return -ENOMEM;
1936 
1937 	i2c_set_clientdata(client, data);
1938 	mutex_init(&data->lock);
1939 
1940 	dev_info(&client->dev, "%s chip found\n", client->name);
1941 
1942 	/* Register sysfs hooks */
1943 	data->attrs.attrs = adt7462_attr;
1944 	err = sysfs_create_group(&client->dev.kobj, &data->attrs);
1945 	if (err)
1946 		return err;
1947 
1948 	data->hwmon_dev = hwmon_device_register(&client->dev);
1949 	if (IS_ERR(data->hwmon_dev)) {
1950 		err = PTR_ERR(data->hwmon_dev);
1951 		goto exit_remove;
1952 	}
1953 
1954 	return 0;
1955 
1956 exit_remove:
1957 	sysfs_remove_group(&client->dev.kobj, &data->attrs);
1958 	return err;
1959 }
1960 
1961 static int adt7462_remove(struct i2c_client *client)
1962 {
1963 	struct adt7462_data *data = i2c_get_clientdata(client);
1964 
1965 	hwmon_device_unregister(data->hwmon_dev);
1966 	sysfs_remove_group(&client->dev.kobj, &data->attrs);
1967 	return 0;
1968 }
1969 
1970 module_i2c_driver(adt7462_driver);
1971 
1972 MODULE_AUTHOR("Darrick J. Wong <darrick.wong@oracle.com>");
1973 MODULE_DESCRIPTION("ADT7462 driver");
1974 MODULE_LICENSE("GPL");
1975