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