[go: nahoru, domu]

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