xref: /openbmc/linux/drivers/hwmon/adt7462.c (revision e23feb16)
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 -ENODEV;
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 
1298 	if (trange_value < 0)
1299 		return -EINVAL;
1300 
1301 	temp = trange_value << ADT7462_PWM_RANGE_SHIFT;
1302 	temp |= data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK;
1303 
1304 	mutex_lock(&data->lock);
1305 	data->pwm_trange[attr->index] = temp;
1306 	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
1307 				  temp);
1308 	mutex_unlock(&data->lock);
1309 
1310 	return count;
1311 }
1312 
1313 static ssize_t show_pwm_tmin(struct device *dev,
1314 			     struct device_attribute *devattr,
1315 			     char *buf)
1316 {
1317 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1318 	struct adt7462_data *data = adt7462_update_device(dev);
1319 	return sprintf(buf, "%d\n", 1000 * (data->pwm_tmin[attr->index] - 64));
1320 }
1321 
1322 static ssize_t set_pwm_tmin(struct device *dev,
1323 			    struct device_attribute *devattr,
1324 			    const char *buf,
1325 			    size_t count)
1326 {
1327 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1328 	struct i2c_client *client = to_i2c_client(dev);
1329 	struct adt7462_data *data = i2c_get_clientdata(client);
1330 	long temp;
1331 
1332 	if (kstrtol(buf, 10, &temp))
1333 		return -EINVAL;
1334 
1335 	temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
1336 	temp = clamp_val(temp, 0, 255);
1337 
1338 	mutex_lock(&data->lock);
1339 	data->pwm_tmin[attr->index] = temp;
1340 	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TMIN(attr->index),
1341 				  temp);
1342 	mutex_unlock(&data->lock);
1343 
1344 	return count;
1345 }
1346 
1347 static ssize_t show_pwm_auto(struct device *dev,
1348 			     struct device_attribute *devattr,
1349 			     char *buf)
1350 {
1351 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1352 	struct adt7462_data *data = adt7462_update_device(dev);
1353 	int cfg = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
1354 
1355 	switch (cfg) {
1356 	case 4: /* off */
1357 		return sprintf(buf, "0\n");
1358 	case 7: /* manual */
1359 		return sprintf(buf, "1\n");
1360 	default: /* automatic */
1361 		return sprintf(buf, "2\n");
1362 	}
1363 }
1364 
1365 static void set_pwm_channel(struct i2c_client *client,
1366 			    struct adt7462_data *data,
1367 			    int which,
1368 			    int value)
1369 {
1370 	int temp = data->pwm_cfg[which] & ~ADT7462_PWM_CHANNEL_MASK;
1371 	temp |= value << ADT7462_PWM_CHANNEL_SHIFT;
1372 
1373 	mutex_lock(&data->lock);
1374 	data->pwm_cfg[which] = temp;
1375 	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_CFG(which), temp);
1376 	mutex_unlock(&data->lock);
1377 }
1378 
1379 static ssize_t set_pwm_auto(struct device *dev,
1380 			    struct device_attribute *devattr,
1381 			    const char *buf,
1382 			    size_t count)
1383 {
1384 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1385 	struct i2c_client *client = to_i2c_client(dev);
1386 	struct adt7462_data *data = i2c_get_clientdata(client);
1387 	long temp;
1388 
1389 	if (kstrtol(buf, 10, &temp))
1390 		return -EINVAL;
1391 
1392 	switch (temp) {
1393 	case 0: /* off */
1394 		set_pwm_channel(client, data, attr->index, 4);
1395 		return count;
1396 	case 1: /* manual */
1397 		set_pwm_channel(client, data, attr->index, 7);
1398 		return count;
1399 	default:
1400 		return -EINVAL;
1401 	}
1402 }
1403 
1404 static ssize_t show_pwm_auto_temp(struct device *dev,
1405 				  struct device_attribute *devattr,
1406 				  char *buf)
1407 {
1408 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1409 	struct adt7462_data *data = adt7462_update_device(dev);
1410 	int channel = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
1411 
1412 	switch (channel) {
1413 	case 0: /* temp[1234] only */
1414 	case 1:
1415 	case 2:
1416 	case 3:
1417 		return sprintf(buf, "%d\n", (1 << channel));
1418 	case 5: /* temp1 & temp4  */
1419 		return sprintf(buf, "9\n");
1420 	case 6:
1421 		return sprintf(buf, "15\n");
1422 	default:
1423 		return sprintf(buf, "0\n");
1424 	}
1425 }
1426 
1427 static int cvt_auto_temp(int input)
1428 {
1429 	if (input == 0xF)
1430 		return 6;
1431 	if (input == 0x9)
1432 		return 5;
1433 	if (input < 1 || !is_power_of_2(input))
1434 		return -EINVAL;
1435 	return ilog2(input);
1436 }
1437 
1438 static ssize_t set_pwm_auto_temp(struct device *dev,
1439 				 struct device_attribute *devattr,
1440 				 const char *buf,
1441 				 size_t count)
1442 {
1443 	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1444 	struct i2c_client *client = to_i2c_client(dev);
1445 	struct adt7462_data *data = i2c_get_clientdata(client);
1446 	long temp;
1447 
1448 	if (kstrtol(buf, 10, &temp))
1449 		return -EINVAL;
1450 
1451 	temp = cvt_auto_temp(temp);
1452 	if (temp < 0)
1453 		return temp;
1454 
1455 	set_pwm_channel(client, data, attr->index, temp);
1456 
1457 	return count;
1458 }
1459 
1460 static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max,
1461 		    set_temp_max, 0);
1462 static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp_max,
1463 		    set_temp_max, 1);
1464 static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO, show_temp_max,
1465 		    set_temp_max, 2);
1466 static SENSOR_DEVICE_ATTR(temp4_max, S_IWUSR | S_IRUGO, show_temp_max,
1467 		    set_temp_max, 3);
1468 
1469 static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp_min,
1470 		    set_temp_min, 0);
1471 static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp_min,
1472 		    set_temp_min, 1);
1473 static SENSOR_DEVICE_ATTR(temp3_min, S_IWUSR | S_IRUGO, show_temp_min,
1474 		    set_temp_min, 2);
1475 static SENSOR_DEVICE_ATTR(temp4_min, S_IWUSR | S_IRUGO, show_temp_min,
1476 		    set_temp_min, 3);
1477 
1478 static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
1479 static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1);
1480 static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2);
1481 static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3);
1482 
1483 static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_temp_label, NULL, 0);
1484 static SENSOR_DEVICE_ATTR(temp2_label, S_IRUGO, show_temp_label, NULL, 1);
1485 static SENSOR_DEVICE_ATTR(temp3_label, S_IRUGO, show_temp_label, NULL, 2);
1486 static SENSOR_DEVICE_ATTR(temp4_label, S_IRUGO, show_temp_label, NULL, 3);
1487 
1488 static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL,
1489 			  ADT7462_ALARM1 | ADT7462_LT_ALARM);
1490 static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL,
1491 			  ADT7462_ALARM1 | ADT7462_R1T_ALARM);
1492 static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL,
1493 			  ADT7462_ALARM1 | ADT7462_R2T_ALARM);
1494 static SENSOR_DEVICE_ATTR(temp4_alarm, S_IRUGO, show_alarm, NULL,
1495 			  ADT7462_ALARM1 | ADT7462_R3T_ALARM);
1496 
1497 static SENSOR_DEVICE_ATTR(in1_max, S_IWUSR | S_IRUGO, show_volt_max,
1498 		    set_volt_max, 0);
1499 static SENSOR_DEVICE_ATTR(in2_max, S_IWUSR | S_IRUGO, show_volt_max,
1500 		    set_volt_max, 1);
1501 static SENSOR_DEVICE_ATTR(in3_max, S_IWUSR | S_IRUGO, show_volt_max,
1502 		    set_volt_max, 2);
1503 static SENSOR_DEVICE_ATTR(in4_max, S_IWUSR | S_IRUGO, show_volt_max,
1504 		    set_volt_max, 3);
1505 static SENSOR_DEVICE_ATTR(in5_max, S_IWUSR | S_IRUGO, show_volt_max,
1506 		    set_volt_max, 4);
1507 static SENSOR_DEVICE_ATTR(in6_max, S_IWUSR | S_IRUGO, show_volt_max,
1508 		    set_volt_max, 5);
1509 static SENSOR_DEVICE_ATTR(in7_max, S_IWUSR | S_IRUGO, show_volt_max,
1510 		    set_volt_max, 6);
1511 static SENSOR_DEVICE_ATTR(in8_max, S_IWUSR | S_IRUGO, show_volt_max,
1512 		    set_volt_max, 7);
1513 static SENSOR_DEVICE_ATTR(in9_max, S_IWUSR | S_IRUGO, show_volt_max,
1514 		    set_volt_max, 8);
1515 static SENSOR_DEVICE_ATTR(in10_max, S_IWUSR | S_IRUGO, show_volt_max,
1516 		    set_volt_max, 9);
1517 static SENSOR_DEVICE_ATTR(in11_max, S_IWUSR | S_IRUGO, show_volt_max,
1518 		    set_volt_max, 10);
1519 static SENSOR_DEVICE_ATTR(in12_max, S_IWUSR | S_IRUGO, show_volt_max,
1520 		    set_volt_max, 11);
1521 static SENSOR_DEVICE_ATTR(in13_max, S_IWUSR | S_IRUGO, show_volt_max,
1522 		    set_volt_max, 12);
1523 
1524 static SENSOR_DEVICE_ATTR(in1_min, S_IWUSR | S_IRUGO, show_volt_min,
1525 		    set_volt_min, 0);
1526 static SENSOR_DEVICE_ATTR(in2_min, S_IWUSR | S_IRUGO, show_volt_min,
1527 		    set_volt_min, 1);
1528 static SENSOR_DEVICE_ATTR(in3_min, S_IWUSR | S_IRUGO, show_volt_min,
1529 		    set_volt_min, 2);
1530 static SENSOR_DEVICE_ATTR(in4_min, S_IWUSR | S_IRUGO, show_volt_min,
1531 		    set_volt_min, 3);
1532 static SENSOR_DEVICE_ATTR(in5_min, S_IWUSR | S_IRUGO, show_volt_min,
1533 		    set_volt_min, 4);
1534 static SENSOR_DEVICE_ATTR(in6_min, S_IWUSR | S_IRUGO, show_volt_min,
1535 		    set_volt_min, 5);
1536 static SENSOR_DEVICE_ATTR(in7_min, S_IWUSR | S_IRUGO, show_volt_min,
1537 		    set_volt_min, 6);
1538 static SENSOR_DEVICE_ATTR(in8_min, S_IWUSR | S_IRUGO, show_volt_min,
1539 		    set_volt_min, 7);
1540 static SENSOR_DEVICE_ATTR(in9_min, S_IWUSR | S_IRUGO, show_volt_min,
1541 		    set_volt_min, 8);
1542 static SENSOR_DEVICE_ATTR(in10_min, S_IWUSR | S_IRUGO, show_volt_min,
1543 		    set_volt_min, 9);
1544 static SENSOR_DEVICE_ATTR(in11_min, S_IWUSR | S_IRUGO, show_volt_min,
1545 		    set_volt_min, 10);
1546 static SENSOR_DEVICE_ATTR(in12_min, S_IWUSR | S_IRUGO, show_volt_min,
1547 		    set_volt_min, 11);
1548 static SENSOR_DEVICE_ATTR(in13_min, S_IWUSR | S_IRUGO, show_volt_min,
1549 		    set_volt_min, 12);
1550 
1551 static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_voltage, NULL, 0);
1552 static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_voltage, NULL, 1);
1553 static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_voltage, NULL, 2);
1554 static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_voltage, NULL, 3);
1555 static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, show_voltage, NULL, 4);
1556 static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, show_voltage, NULL, 5);
1557 static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, show_voltage, NULL, 6);
1558 static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, show_voltage, NULL, 7);
1559 static SENSOR_DEVICE_ATTR(in9_input, S_IRUGO, show_voltage, NULL, 8);
1560 static SENSOR_DEVICE_ATTR(in10_input, S_IRUGO, show_voltage, NULL, 9);
1561 static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, show_voltage, NULL, 10);
1562 static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, show_voltage, NULL, 11);
1563 static SENSOR_DEVICE_ATTR(in13_input, S_IRUGO, show_voltage, NULL, 12);
1564 
1565 static SENSOR_DEVICE_ATTR(in1_label, S_IRUGO, show_voltage_label, NULL, 0);
1566 static SENSOR_DEVICE_ATTR(in2_label, S_IRUGO, show_voltage_label, NULL, 1);
1567 static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, show_voltage_label, NULL, 2);
1568 static SENSOR_DEVICE_ATTR(in4_label, S_IRUGO, show_voltage_label, NULL, 3);
1569 static SENSOR_DEVICE_ATTR(in5_label, S_IRUGO, show_voltage_label, NULL, 4);
1570 static SENSOR_DEVICE_ATTR(in6_label, S_IRUGO, show_voltage_label, NULL, 5);
1571 static SENSOR_DEVICE_ATTR(in7_label, S_IRUGO, show_voltage_label, NULL, 6);
1572 static SENSOR_DEVICE_ATTR(in8_label, S_IRUGO, show_voltage_label, NULL, 7);
1573 static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, show_voltage_label, NULL, 8);
1574 static SENSOR_DEVICE_ATTR(in10_label, S_IRUGO, show_voltage_label, NULL, 9);
1575 static SENSOR_DEVICE_ATTR(in11_label, S_IRUGO, show_voltage_label, NULL, 10);
1576 static SENSOR_DEVICE_ATTR(in12_label, S_IRUGO, show_voltage_label, NULL, 11);
1577 static SENSOR_DEVICE_ATTR(in13_label, S_IRUGO, show_voltage_label, NULL, 12);
1578 
1579 static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL,
1580 			  ADT7462_ALARM2 | ADT7462_V0_ALARM);
1581 static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL,
1582 			  ADT7462_ALARM2 | ADT7462_V7_ALARM);
1583 static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL,
1584 			  ADT7462_ALARM2 | ADT7462_V2_ALARM);
1585 static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL,
1586 			  ADT7462_ALARM2 | ADT7462_V6_ALARM);
1587 static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL,
1588 			  ADT7462_ALARM2 | ADT7462_V5_ALARM);
1589 static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL,
1590 			  ADT7462_ALARM2 | ADT7462_V4_ALARM);
1591 static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL,
1592 			  ADT7462_ALARM2 | ADT7462_V3_ALARM);
1593 static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL,
1594 			  ADT7462_ALARM2 | ADT7462_V1_ALARM);
1595 static SENSOR_DEVICE_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL,
1596 			  ADT7462_ALARM3 | ADT7462_V10_ALARM);
1597 static SENSOR_DEVICE_ATTR(in10_alarm, S_IRUGO, show_alarm, NULL,
1598 			  ADT7462_ALARM3 | ADT7462_V9_ALARM);
1599 static SENSOR_DEVICE_ATTR(in11_alarm, S_IRUGO, show_alarm, NULL,
1600 			  ADT7462_ALARM3 | ADT7462_V8_ALARM);
1601 static SENSOR_DEVICE_ATTR(in12_alarm, S_IRUGO, show_alarm, NULL,
1602 			  ADT7462_ALARM3 | ADT7462_V11_ALARM);
1603 static SENSOR_DEVICE_ATTR(in13_alarm, S_IRUGO, show_alarm, NULL,
1604 			  ADT7462_ALARM3 | ADT7462_V12_ALARM);
1605 
1606 static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
1607 		    set_fan_min, 0);
1608 static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
1609 		    set_fan_min, 1);
1610 static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
1611 		    set_fan_min, 2);
1612 static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
1613 		    set_fan_min, 3);
1614 static SENSOR_DEVICE_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min,
1615 		    set_fan_min, 4);
1616 static SENSOR_DEVICE_ATTR(fan6_min, S_IWUSR | S_IRUGO, show_fan_min,
1617 		    set_fan_min, 5);
1618 static SENSOR_DEVICE_ATTR(fan7_min, S_IWUSR | S_IRUGO, show_fan_min,
1619 		    set_fan_min, 6);
1620 static SENSOR_DEVICE_ATTR(fan8_min, S_IWUSR | S_IRUGO, show_fan_min,
1621 		    set_fan_min, 7);
1622 
1623 static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0);
1624 static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1);
1625 static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2);
1626 static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3);
1627 static SENSOR_DEVICE_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4);
1628 static SENSOR_DEVICE_ATTR(fan6_input, S_IRUGO, show_fan, NULL, 5);
1629 static SENSOR_DEVICE_ATTR(fan7_input, S_IRUGO, show_fan, NULL, 6);
1630 static SENSOR_DEVICE_ATTR(fan8_input, S_IRUGO, show_fan, NULL, 7);
1631 
1632 static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL,
1633 			  ADT7462_ALARM4 | ADT7462_F0_ALARM);
1634 static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL,
1635 			  ADT7462_ALARM4 | ADT7462_F1_ALARM);
1636 static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL,
1637 			  ADT7462_ALARM4 | ADT7462_F2_ALARM);
1638 static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL,
1639 			  ADT7462_ALARM4 | ADT7462_F3_ALARM);
1640 static SENSOR_DEVICE_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL,
1641 			  ADT7462_ALARM4 | ADT7462_F4_ALARM);
1642 static SENSOR_DEVICE_ATTR(fan6_alarm, S_IRUGO, show_alarm, NULL,
1643 			  ADT7462_ALARM4 | ADT7462_F5_ALARM);
1644 static SENSOR_DEVICE_ATTR(fan7_alarm, S_IRUGO, show_alarm, NULL,
1645 			  ADT7462_ALARM4 | ADT7462_F6_ALARM);
1646 static SENSOR_DEVICE_ATTR(fan8_alarm, S_IRUGO, show_alarm, NULL,
1647 			  ADT7462_ALARM4 | ADT7462_F7_ALARM);
1648 
1649 static SENSOR_DEVICE_ATTR(force_pwm_max, S_IWUSR | S_IRUGO,
1650 		    show_force_pwm_max, set_force_pwm_max, 0);
1651 
1652 static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 0);
1653 static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 1);
1654 static SENSOR_DEVICE_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 2);
1655 static SENSOR_DEVICE_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 3);
1656 
1657 static SENSOR_DEVICE_ATTR(pwm1_auto_point1_pwm, S_IWUSR | S_IRUGO,
1658 		    show_pwm_min, set_pwm_min, 0);
1659 static SENSOR_DEVICE_ATTR(pwm2_auto_point1_pwm, S_IWUSR | S_IRUGO,
1660 		    show_pwm_min, set_pwm_min, 1);
1661 static SENSOR_DEVICE_ATTR(pwm3_auto_point1_pwm, S_IWUSR | S_IRUGO,
1662 		    show_pwm_min, set_pwm_min, 2);
1663 static SENSOR_DEVICE_ATTR(pwm4_auto_point1_pwm, S_IWUSR | S_IRUGO,
1664 		    show_pwm_min, set_pwm_min, 3);
1665 
1666 static SENSOR_DEVICE_ATTR(pwm1_auto_point2_pwm, S_IWUSR | S_IRUGO,
1667 		    show_pwm_max, set_pwm_max, 0);
1668 static SENSOR_DEVICE_ATTR(pwm2_auto_point2_pwm, S_IWUSR | S_IRUGO,
1669 		    show_pwm_max, set_pwm_max, 1);
1670 static SENSOR_DEVICE_ATTR(pwm3_auto_point2_pwm, S_IWUSR | S_IRUGO,
1671 		    show_pwm_max, set_pwm_max, 2);
1672 static SENSOR_DEVICE_ATTR(pwm4_auto_point2_pwm, S_IWUSR | S_IRUGO,
1673 		    show_pwm_max, set_pwm_max, 3);
1674 
1675 static SENSOR_DEVICE_ATTR(temp1_auto_point1_hyst, S_IWUSR | S_IRUGO,
1676 		    show_pwm_hyst, set_pwm_hyst, 0);
1677 static SENSOR_DEVICE_ATTR(temp2_auto_point1_hyst, S_IWUSR | S_IRUGO,
1678 		    show_pwm_hyst, set_pwm_hyst, 1);
1679 static SENSOR_DEVICE_ATTR(temp3_auto_point1_hyst, S_IWUSR | S_IRUGO,
1680 		    show_pwm_hyst, set_pwm_hyst, 2);
1681 static SENSOR_DEVICE_ATTR(temp4_auto_point1_hyst, S_IWUSR | S_IRUGO,
1682 		    show_pwm_hyst, set_pwm_hyst, 3);
1683 
1684 static SENSOR_DEVICE_ATTR(temp1_auto_point2_hyst, S_IWUSR | S_IRUGO,
1685 		    show_pwm_hyst, set_pwm_hyst, 0);
1686 static SENSOR_DEVICE_ATTR(temp2_auto_point2_hyst, S_IWUSR | S_IRUGO,
1687 		    show_pwm_hyst, set_pwm_hyst, 1);
1688 static SENSOR_DEVICE_ATTR(temp3_auto_point2_hyst, S_IWUSR | S_IRUGO,
1689 		    show_pwm_hyst, set_pwm_hyst, 2);
1690 static SENSOR_DEVICE_ATTR(temp4_auto_point2_hyst, S_IWUSR | S_IRUGO,
1691 		    show_pwm_hyst, set_pwm_hyst, 3);
1692 
1693 static SENSOR_DEVICE_ATTR(temp1_auto_point1_temp, S_IWUSR | S_IRUGO,
1694 		    show_pwm_tmin, set_pwm_tmin, 0);
1695 static SENSOR_DEVICE_ATTR(temp2_auto_point1_temp, S_IWUSR | S_IRUGO,
1696 		    show_pwm_tmin, set_pwm_tmin, 1);
1697 static SENSOR_DEVICE_ATTR(temp3_auto_point1_temp, S_IWUSR | S_IRUGO,
1698 		    show_pwm_tmin, set_pwm_tmin, 2);
1699 static SENSOR_DEVICE_ATTR(temp4_auto_point1_temp, S_IWUSR | S_IRUGO,
1700 		    show_pwm_tmin, set_pwm_tmin, 3);
1701 
1702 static SENSOR_DEVICE_ATTR(temp1_auto_point2_temp, S_IWUSR | S_IRUGO,
1703 		    show_pwm_tmax, set_pwm_tmax, 0);
1704 static SENSOR_DEVICE_ATTR(temp2_auto_point2_temp, S_IWUSR | S_IRUGO,
1705 		    show_pwm_tmax, set_pwm_tmax, 1);
1706 static SENSOR_DEVICE_ATTR(temp3_auto_point2_temp, S_IWUSR | S_IRUGO,
1707 		    show_pwm_tmax, set_pwm_tmax, 2);
1708 static SENSOR_DEVICE_ATTR(temp4_auto_point2_temp, S_IWUSR | S_IRUGO,
1709 		    show_pwm_tmax, set_pwm_tmax, 3);
1710 
1711 static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1712 		    set_pwm_auto, 0);
1713 static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1714 		    set_pwm_auto, 1);
1715 static SENSOR_DEVICE_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1716 		    set_pwm_auto, 2);
1717 static SENSOR_DEVICE_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1718 		    set_pwm_auto, 3);
1719 
1720 static SENSOR_DEVICE_ATTR(pwm1_auto_channels_temp, S_IWUSR | S_IRUGO,
1721 		    show_pwm_auto_temp, set_pwm_auto_temp, 0);
1722 static SENSOR_DEVICE_ATTR(pwm2_auto_channels_temp, S_IWUSR | S_IRUGO,
1723 		    show_pwm_auto_temp, set_pwm_auto_temp, 1);
1724 static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO,
1725 		    show_pwm_auto_temp, set_pwm_auto_temp, 2);
1726 static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO,
1727 		    show_pwm_auto_temp, set_pwm_auto_temp, 3);
1728 
1729 static struct attribute *adt7462_attr[] = {
1730 	&sensor_dev_attr_temp1_max.dev_attr.attr,
1731 	&sensor_dev_attr_temp2_max.dev_attr.attr,
1732 	&sensor_dev_attr_temp3_max.dev_attr.attr,
1733 	&sensor_dev_attr_temp4_max.dev_attr.attr,
1734 
1735 	&sensor_dev_attr_temp1_min.dev_attr.attr,
1736 	&sensor_dev_attr_temp2_min.dev_attr.attr,
1737 	&sensor_dev_attr_temp3_min.dev_attr.attr,
1738 	&sensor_dev_attr_temp4_min.dev_attr.attr,
1739 
1740 	&sensor_dev_attr_temp1_input.dev_attr.attr,
1741 	&sensor_dev_attr_temp2_input.dev_attr.attr,
1742 	&sensor_dev_attr_temp3_input.dev_attr.attr,
1743 	&sensor_dev_attr_temp4_input.dev_attr.attr,
1744 
1745 	&sensor_dev_attr_temp1_label.dev_attr.attr,
1746 	&sensor_dev_attr_temp2_label.dev_attr.attr,
1747 	&sensor_dev_attr_temp3_label.dev_attr.attr,
1748 	&sensor_dev_attr_temp4_label.dev_attr.attr,
1749 
1750 	&sensor_dev_attr_temp1_alarm.dev_attr.attr,
1751 	&sensor_dev_attr_temp2_alarm.dev_attr.attr,
1752 	&sensor_dev_attr_temp3_alarm.dev_attr.attr,
1753 	&sensor_dev_attr_temp4_alarm.dev_attr.attr,
1754 
1755 	&sensor_dev_attr_in1_max.dev_attr.attr,
1756 	&sensor_dev_attr_in2_max.dev_attr.attr,
1757 	&sensor_dev_attr_in3_max.dev_attr.attr,
1758 	&sensor_dev_attr_in4_max.dev_attr.attr,
1759 	&sensor_dev_attr_in5_max.dev_attr.attr,
1760 	&sensor_dev_attr_in6_max.dev_attr.attr,
1761 	&sensor_dev_attr_in7_max.dev_attr.attr,
1762 	&sensor_dev_attr_in8_max.dev_attr.attr,
1763 	&sensor_dev_attr_in9_max.dev_attr.attr,
1764 	&sensor_dev_attr_in10_max.dev_attr.attr,
1765 	&sensor_dev_attr_in11_max.dev_attr.attr,
1766 	&sensor_dev_attr_in12_max.dev_attr.attr,
1767 	&sensor_dev_attr_in13_max.dev_attr.attr,
1768 
1769 	&sensor_dev_attr_in1_min.dev_attr.attr,
1770 	&sensor_dev_attr_in2_min.dev_attr.attr,
1771 	&sensor_dev_attr_in3_min.dev_attr.attr,
1772 	&sensor_dev_attr_in4_min.dev_attr.attr,
1773 	&sensor_dev_attr_in5_min.dev_attr.attr,
1774 	&sensor_dev_attr_in6_min.dev_attr.attr,
1775 	&sensor_dev_attr_in7_min.dev_attr.attr,
1776 	&sensor_dev_attr_in8_min.dev_attr.attr,
1777 	&sensor_dev_attr_in9_min.dev_attr.attr,
1778 	&sensor_dev_attr_in10_min.dev_attr.attr,
1779 	&sensor_dev_attr_in11_min.dev_attr.attr,
1780 	&sensor_dev_attr_in12_min.dev_attr.attr,
1781 	&sensor_dev_attr_in13_min.dev_attr.attr,
1782 
1783 	&sensor_dev_attr_in1_input.dev_attr.attr,
1784 	&sensor_dev_attr_in2_input.dev_attr.attr,
1785 	&sensor_dev_attr_in3_input.dev_attr.attr,
1786 	&sensor_dev_attr_in4_input.dev_attr.attr,
1787 	&sensor_dev_attr_in5_input.dev_attr.attr,
1788 	&sensor_dev_attr_in6_input.dev_attr.attr,
1789 	&sensor_dev_attr_in7_input.dev_attr.attr,
1790 	&sensor_dev_attr_in8_input.dev_attr.attr,
1791 	&sensor_dev_attr_in9_input.dev_attr.attr,
1792 	&sensor_dev_attr_in10_input.dev_attr.attr,
1793 	&sensor_dev_attr_in11_input.dev_attr.attr,
1794 	&sensor_dev_attr_in12_input.dev_attr.attr,
1795 	&sensor_dev_attr_in13_input.dev_attr.attr,
1796 
1797 	&sensor_dev_attr_in1_label.dev_attr.attr,
1798 	&sensor_dev_attr_in2_label.dev_attr.attr,
1799 	&sensor_dev_attr_in3_label.dev_attr.attr,
1800 	&sensor_dev_attr_in4_label.dev_attr.attr,
1801 	&sensor_dev_attr_in5_label.dev_attr.attr,
1802 	&sensor_dev_attr_in6_label.dev_attr.attr,
1803 	&sensor_dev_attr_in7_label.dev_attr.attr,
1804 	&sensor_dev_attr_in8_label.dev_attr.attr,
1805 	&sensor_dev_attr_in9_label.dev_attr.attr,
1806 	&sensor_dev_attr_in10_label.dev_attr.attr,
1807 	&sensor_dev_attr_in11_label.dev_attr.attr,
1808 	&sensor_dev_attr_in12_label.dev_attr.attr,
1809 	&sensor_dev_attr_in13_label.dev_attr.attr,
1810 
1811 	&sensor_dev_attr_in1_alarm.dev_attr.attr,
1812 	&sensor_dev_attr_in2_alarm.dev_attr.attr,
1813 	&sensor_dev_attr_in3_alarm.dev_attr.attr,
1814 	&sensor_dev_attr_in4_alarm.dev_attr.attr,
1815 	&sensor_dev_attr_in5_alarm.dev_attr.attr,
1816 	&sensor_dev_attr_in6_alarm.dev_attr.attr,
1817 	&sensor_dev_attr_in7_alarm.dev_attr.attr,
1818 	&sensor_dev_attr_in8_alarm.dev_attr.attr,
1819 	&sensor_dev_attr_in9_alarm.dev_attr.attr,
1820 	&sensor_dev_attr_in10_alarm.dev_attr.attr,
1821 	&sensor_dev_attr_in11_alarm.dev_attr.attr,
1822 	&sensor_dev_attr_in12_alarm.dev_attr.attr,
1823 	&sensor_dev_attr_in13_alarm.dev_attr.attr,
1824 
1825 	&sensor_dev_attr_fan1_min.dev_attr.attr,
1826 	&sensor_dev_attr_fan2_min.dev_attr.attr,
1827 	&sensor_dev_attr_fan3_min.dev_attr.attr,
1828 	&sensor_dev_attr_fan4_min.dev_attr.attr,
1829 	&sensor_dev_attr_fan5_min.dev_attr.attr,
1830 	&sensor_dev_attr_fan6_min.dev_attr.attr,
1831 	&sensor_dev_attr_fan7_min.dev_attr.attr,
1832 	&sensor_dev_attr_fan8_min.dev_attr.attr,
1833 
1834 	&sensor_dev_attr_fan1_input.dev_attr.attr,
1835 	&sensor_dev_attr_fan2_input.dev_attr.attr,
1836 	&sensor_dev_attr_fan3_input.dev_attr.attr,
1837 	&sensor_dev_attr_fan4_input.dev_attr.attr,
1838 	&sensor_dev_attr_fan5_input.dev_attr.attr,
1839 	&sensor_dev_attr_fan6_input.dev_attr.attr,
1840 	&sensor_dev_attr_fan7_input.dev_attr.attr,
1841 	&sensor_dev_attr_fan8_input.dev_attr.attr,
1842 
1843 	&sensor_dev_attr_fan1_alarm.dev_attr.attr,
1844 	&sensor_dev_attr_fan2_alarm.dev_attr.attr,
1845 	&sensor_dev_attr_fan3_alarm.dev_attr.attr,
1846 	&sensor_dev_attr_fan4_alarm.dev_attr.attr,
1847 	&sensor_dev_attr_fan5_alarm.dev_attr.attr,
1848 	&sensor_dev_attr_fan6_alarm.dev_attr.attr,
1849 	&sensor_dev_attr_fan7_alarm.dev_attr.attr,
1850 	&sensor_dev_attr_fan8_alarm.dev_attr.attr,
1851 
1852 	&sensor_dev_attr_force_pwm_max.dev_attr.attr,
1853 	&sensor_dev_attr_pwm1.dev_attr.attr,
1854 	&sensor_dev_attr_pwm2.dev_attr.attr,
1855 	&sensor_dev_attr_pwm3.dev_attr.attr,
1856 	&sensor_dev_attr_pwm4.dev_attr.attr,
1857 
1858 	&sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1859 	&sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
1860 	&sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1861 	&sensor_dev_attr_pwm4_auto_point1_pwm.dev_attr.attr,
1862 
1863 	&sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1864 	&sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
1865 	&sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1866 	&sensor_dev_attr_pwm4_auto_point2_pwm.dev_attr.attr,
1867 
1868 	&sensor_dev_attr_temp1_auto_point1_hyst.dev_attr.attr,
1869 	&sensor_dev_attr_temp2_auto_point1_hyst.dev_attr.attr,
1870 	&sensor_dev_attr_temp3_auto_point1_hyst.dev_attr.attr,
1871 	&sensor_dev_attr_temp4_auto_point1_hyst.dev_attr.attr,
1872 
1873 	&sensor_dev_attr_temp1_auto_point2_hyst.dev_attr.attr,
1874 	&sensor_dev_attr_temp2_auto_point2_hyst.dev_attr.attr,
1875 	&sensor_dev_attr_temp3_auto_point2_hyst.dev_attr.attr,
1876 	&sensor_dev_attr_temp4_auto_point2_hyst.dev_attr.attr,
1877 
1878 	&sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr,
1879 	&sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr,
1880 	&sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr,
1881 	&sensor_dev_attr_temp4_auto_point1_temp.dev_attr.attr,
1882 
1883 	&sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr,
1884 	&sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr,
1885 	&sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr,
1886 	&sensor_dev_attr_temp4_auto_point2_temp.dev_attr.attr,
1887 
1888 	&sensor_dev_attr_pwm1_enable.dev_attr.attr,
1889 	&sensor_dev_attr_pwm2_enable.dev_attr.attr,
1890 	&sensor_dev_attr_pwm3_enable.dev_attr.attr,
1891 	&sensor_dev_attr_pwm4_enable.dev_attr.attr,
1892 
1893 	&sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1894 	&sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
1895 	&sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1896 	&sensor_dev_attr_pwm4_auto_channels_temp.dev_attr.attr,
1897 	NULL
1898 };
1899 
1900 /* Return 0 if detection is successful, -ENODEV otherwise */
1901 static int adt7462_detect(struct i2c_client *client,
1902 			  struct i2c_board_info *info)
1903 {
1904 	struct i2c_adapter *adapter = client->adapter;
1905 	int vendor, device, revision;
1906 
1907 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1908 		return -ENODEV;
1909 
1910 	vendor = i2c_smbus_read_byte_data(client, ADT7462_REG_VENDOR);
1911 	if (vendor != ADT7462_VENDOR)
1912 		return -ENODEV;
1913 
1914 	device = i2c_smbus_read_byte_data(client, ADT7462_REG_DEVICE);
1915 	if (device != ADT7462_DEVICE)
1916 		return -ENODEV;
1917 
1918 	revision = i2c_smbus_read_byte_data(client, ADT7462_REG_REVISION);
1919 	if (revision != ADT7462_REVISION)
1920 		return -ENODEV;
1921 
1922 	strlcpy(info->type, "adt7462", I2C_NAME_SIZE);
1923 
1924 	return 0;
1925 }
1926 
1927 static int adt7462_probe(struct i2c_client *client,
1928 			 const struct i2c_device_id *id)
1929 {
1930 	struct adt7462_data *data;
1931 	int err;
1932 
1933 	data = devm_kzalloc(&client->dev, sizeof(struct adt7462_data),
1934 			    GFP_KERNEL);
1935 	if (!data)
1936 		return -ENOMEM;
1937 
1938 	i2c_set_clientdata(client, data);
1939 	mutex_init(&data->lock);
1940 
1941 	dev_info(&client->dev, "%s chip found\n", client->name);
1942 
1943 	/* Register sysfs hooks */
1944 	data->attrs.attrs = adt7462_attr;
1945 	err = sysfs_create_group(&client->dev.kobj, &data->attrs);
1946 	if (err)
1947 		return err;
1948 
1949 	data->hwmon_dev = hwmon_device_register(&client->dev);
1950 	if (IS_ERR(data->hwmon_dev)) {
1951 		err = PTR_ERR(data->hwmon_dev);
1952 		goto exit_remove;
1953 	}
1954 
1955 	return 0;
1956 
1957 exit_remove:
1958 	sysfs_remove_group(&client->dev.kobj, &data->attrs);
1959 	return err;
1960 }
1961 
1962 static int adt7462_remove(struct i2c_client *client)
1963 {
1964 	struct adt7462_data *data = i2c_get_clientdata(client);
1965 
1966 	hwmon_device_unregister(data->hwmon_dev);
1967 	sysfs_remove_group(&client->dev.kobj, &data->attrs);
1968 	return 0;
1969 }
1970 
1971 module_i2c_driver(adt7462_driver);
1972 
1973 MODULE_AUTHOR("Darrick J. Wong <darrick.wong@oracle.com>");
1974 MODULE_DESCRIPTION("ADT7462 driver");
1975 MODULE_LICENSE("GPL");
1976