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