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