Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/hwmon/adt7462.c
15109 views
1
/*
2
* A hwmon driver for the Analog Devices ADT7462
3
* Copyright (C) 2008 IBM
4
*
5
* Author: Darrick J. Wong <[email protected]>
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 */
34
static 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
205
struct 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
236
static int adt7462_probe(struct i2c_client *client,
237
const struct i2c_device_id *id);
238
static int adt7462_detect(struct i2c_client *client,
239
struct i2c_board_info *info);
240
static int adt7462_remove(struct i2c_client *client);
241
242
static const struct i2c_device_id adt7462_id[] = {
243
{ "adt7462", 0 },
244
{ }
245
};
246
MODULE_DEVICE_TABLE(i2c, adt7462_id);
247
248
static 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
*/
264
static 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. */
273
static 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 */
281
static 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
340
static 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
399
static 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 */
459
static 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. */
551
static 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
638
static 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
656
static 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
677
static 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
696
static 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
707
static 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
763
no_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
808
out:
809
mutex_unlock(&data->lock);
810
return data;
811
}
812
813
static 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
826
static 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
851
static 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
864
static 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
889
static 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
903
static 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
913
static 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
927
static 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
955
static 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
969
static 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
997
static 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
1011
static 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
1021
static 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
1036
static int fan_enabled(struct adt7462_data *data, int fan)
1037
{
1038
return data->fan_enabled & (1 << fan);
1039
}
1040
1041
static 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
1060
static 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
1086
static 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
1100
static 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
1108
static 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
1134
static 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
1142
static 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
1163
static 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
1171
static 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
1193
static 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
1202
static 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
1226
static 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
1236
static 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
1265
static 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
1280
static 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
1314
static 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
1323
static 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
1348
static 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
1366
static 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
1380
static 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
1405
static 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
1428
static 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
1439
static 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
1461
static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max,
1462
set_temp_max, 0);
1463
static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp_max,
1464
set_temp_max, 1);
1465
static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO, show_temp_max,
1466
set_temp_max, 2);
1467
static SENSOR_DEVICE_ATTR(temp4_max, S_IWUSR | S_IRUGO, show_temp_max,
1468
set_temp_max, 3);
1469
1470
static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp_min,
1471
set_temp_min, 0);
1472
static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp_min,
1473
set_temp_min, 1);
1474
static SENSOR_DEVICE_ATTR(temp3_min, S_IWUSR | S_IRUGO, show_temp_min,
1475
set_temp_min, 2);
1476
static SENSOR_DEVICE_ATTR(temp4_min, S_IWUSR | S_IRUGO, show_temp_min,
1477
set_temp_min, 3);
1478
1479
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
1480
static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1);
1481
static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2);
1482
static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3);
1483
1484
static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_temp_label, NULL, 0);
1485
static SENSOR_DEVICE_ATTR(temp2_label, S_IRUGO, show_temp_label, NULL, 1);
1486
static SENSOR_DEVICE_ATTR(temp3_label, S_IRUGO, show_temp_label, NULL, 2);
1487
static SENSOR_DEVICE_ATTR(temp4_label, S_IRUGO, show_temp_label, NULL, 3);
1488
1489
static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL,
1490
ADT7462_ALARM1 | ADT7462_LT_ALARM);
1491
static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL,
1492
ADT7462_ALARM1 | ADT7462_R1T_ALARM);
1493
static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL,
1494
ADT7462_ALARM1 | ADT7462_R2T_ALARM);
1495
static SENSOR_DEVICE_ATTR(temp4_alarm, S_IRUGO, show_alarm, NULL,
1496
ADT7462_ALARM1 | ADT7462_R3T_ALARM);
1497
1498
static SENSOR_DEVICE_ATTR(in1_max, S_IWUSR | S_IRUGO, show_volt_max,
1499
set_volt_max, 0);
1500
static SENSOR_DEVICE_ATTR(in2_max, S_IWUSR | S_IRUGO, show_volt_max,
1501
set_volt_max, 1);
1502
static SENSOR_DEVICE_ATTR(in3_max, S_IWUSR | S_IRUGO, show_volt_max,
1503
set_volt_max, 2);
1504
static SENSOR_DEVICE_ATTR(in4_max, S_IWUSR | S_IRUGO, show_volt_max,
1505
set_volt_max, 3);
1506
static SENSOR_DEVICE_ATTR(in5_max, S_IWUSR | S_IRUGO, show_volt_max,
1507
set_volt_max, 4);
1508
static SENSOR_DEVICE_ATTR(in6_max, S_IWUSR | S_IRUGO, show_volt_max,
1509
set_volt_max, 5);
1510
static SENSOR_DEVICE_ATTR(in7_max, S_IWUSR | S_IRUGO, show_volt_max,
1511
set_volt_max, 6);
1512
static SENSOR_DEVICE_ATTR(in8_max, S_IWUSR | S_IRUGO, show_volt_max,
1513
set_volt_max, 7);
1514
static SENSOR_DEVICE_ATTR(in9_max, S_IWUSR | S_IRUGO, show_volt_max,
1515
set_volt_max, 8);
1516
static SENSOR_DEVICE_ATTR(in10_max, S_IWUSR | S_IRUGO, show_volt_max,
1517
set_volt_max, 9);
1518
static SENSOR_DEVICE_ATTR(in11_max, S_IWUSR | S_IRUGO, show_volt_max,
1519
set_volt_max, 10);
1520
static SENSOR_DEVICE_ATTR(in12_max, S_IWUSR | S_IRUGO, show_volt_max,
1521
set_volt_max, 11);
1522
static SENSOR_DEVICE_ATTR(in13_max, S_IWUSR | S_IRUGO, show_volt_max,
1523
set_volt_max, 12);
1524
1525
static SENSOR_DEVICE_ATTR(in1_min, S_IWUSR | S_IRUGO, show_volt_min,
1526
set_volt_min, 0);
1527
static SENSOR_DEVICE_ATTR(in2_min, S_IWUSR | S_IRUGO, show_volt_min,
1528
set_volt_min, 1);
1529
static SENSOR_DEVICE_ATTR(in3_min, S_IWUSR | S_IRUGO, show_volt_min,
1530
set_volt_min, 2);
1531
static SENSOR_DEVICE_ATTR(in4_min, S_IWUSR | S_IRUGO, show_volt_min,
1532
set_volt_min, 3);
1533
static SENSOR_DEVICE_ATTR(in5_min, S_IWUSR | S_IRUGO, show_volt_min,
1534
set_volt_min, 4);
1535
static SENSOR_DEVICE_ATTR(in6_min, S_IWUSR | S_IRUGO, show_volt_min,
1536
set_volt_min, 5);
1537
static SENSOR_DEVICE_ATTR(in7_min, S_IWUSR | S_IRUGO, show_volt_min,
1538
set_volt_min, 6);
1539
static SENSOR_DEVICE_ATTR(in8_min, S_IWUSR | S_IRUGO, show_volt_min,
1540
set_volt_min, 7);
1541
static SENSOR_DEVICE_ATTR(in9_min, S_IWUSR | S_IRUGO, show_volt_min,
1542
set_volt_min, 8);
1543
static SENSOR_DEVICE_ATTR(in10_min, S_IWUSR | S_IRUGO, show_volt_min,
1544
set_volt_min, 9);
1545
static SENSOR_DEVICE_ATTR(in11_min, S_IWUSR | S_IRUGO, show_volt_min,
1546
set_volt_min, 10);
1547
static SENSOR_DEVICE_ATTR(in12_min, S_IWUSR | S_IRUGO, show_volt_min,
1548
set_volt_min, 11);
1549
static SENSOR_DEVICE_ATTR(in13_min, S_IWUSR | S_IRUGO, show_volt_min,
1550
set_volt_min, 12);
1551
1552
static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_voltage, NULL, 0);
1553
static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_voltage, NULL, 1);
1554
static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_voltage, NULL, 2);
1555
static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_voltage, NULL, 3);
1556
static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, show_voltage, NULL, 4);
1557
static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, show_voltage, NULL, 5);
1558
static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, show_voltage, NULL, 6);
1559
static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, show_voltage, NULL, 7);
1560
static SENSOR_DEVICE_ATTR(in9_input, S_IRUGO, show_voltage, NULL, 8);
1561
static SENSOR_DEVICE_ATTR(in10_input, S_IRUGO, show_voltage, NULL, 9);
1562
static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, show_voltage, NULL, 10);
1563
static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, show_voltage, NULL, 11);
1564
static SENSOR_DEVICE_ATTR(in13_input, S_IRUGO, show_voltage, NULL, 12);
1565
1566
static SENSOR_DEVICE_ATTR(in1_label, S_IRUGO, show_voltage_label, NULL, 0);
1567
static SENSOR_DEVICE_ATTR(in2_label, S_IRUGO, show_voltage_label, NULL, 1);
1568
static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, show_voltage_label, NULL, 2);
1569
static SENSOR_DEVICE_ATTR(in4_label, S_IRUGO, show_voltage_label, NULL, 3);
1570
static SENSOR_DEVICE_ATTR(in5_label, S_IRUGO, show_voltage_label, NULL, 4);
1571
static SENSOR_DEVICE_ATTR(in6_label, S_IRUGO, show_voltage_label, NULL, 5);
1572
static SENSOR_DEVICE_ATTR(in7_label, S_IRUGO, show_voltage_label, NULL, 6);
1573
static SENSOR_DEVICE_ATTR(in8_label, S_IRUGO, show_voltage_label, NULL, 7);
1574
static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, show_voltage_label, NULL, 8);
1575
static SENSOR_DEVICE_ATTR(in10_label, S_IRUGO, show_voltage_label, NULL, 9);
1576
static SENSOR_DEVICE_ATTR(in11_label, S_IRUGO, show_voltage_label, NULL, 10);
1577
static SENSOR_DEVICE_ATTR(in12_label, S_IRUGO, show_voltage_label, NULL, 11);
1578
static SENSOR_DEVICE_ATTR(in13_label, S_IRUGO, show_voltage_label, NULL, 12);
1579
1580
static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL,
1581
ADT7462_ALARM2 | ADT7462_V0_ALARM);
1582
static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL,
1583
ADT7462_ALARM2 | ADT7462_V7_ALARM);
1584
static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL,
1585
ADT7462_ALARM2 | ADT7462_V2_ALARM);
1586
static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL,
1587
ADT7462_ALARM2 | ADT7462_V6_ALARM);
1588
static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL,
1589
ADT7462_ALARM2 | ADT7462_V5_ALARM);
1590
static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL,
1591
ADT7462_ALARM2 | ADT7462_V4_ALARM);
1592
static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL,
1593
ADT7462_ALARM2 | ADT7462_V3_ALARM);
1594
static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL,
1595
ADT7462_ALARM2 | ADT7462_V1_ALARM);
1596
static SENSOR_DEVICE_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL,
1597
ADT7462_ALARM3 | ADT7462_V10_ALARM);
1598
static SENSOR_DEVICE_ATTR(in10_alarm, S_IRUGO, show_alarm, NULL,
1599
ADT7462_ALARM3 | ADT7462_V9_ALARM);
1600
static SENSOR_DEVICE_ATTR(in11_alarm, S_IRUGO, show_alarm, NULL,
1601
ADT7462_ALARM3 | ADT7462_V8_ALARM);
1602
static SENSOR_DEVICE_ATTR(in12_alarm, S_IRUGO, show_alarm, NULL,
1603
ADT7462_ALARM3 | ADT7462_V11_ALARM);
1604
static SENSOR_DEVICE_ATTR(in13_alarm, S_IRUGO, show_alarm, NULL,
1605
ADT7462_ALARM3 | ADT7462_V12_ALARM);
1606
1607
static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
1608
set_fan_min, 0);
1609
static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
1610
set_fan_min, 1);
1611
static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
1612
set_fan_min, 2);
1613
static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
1614
set_fan_min, 3);
1615
static SENSOR_DEVICE_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min,
1616
set_fan_min, 4);
1617
static SENSOR_DEVICE_ATTR(fan6_min, S_IWUSR | S_IRUGO, show_fan_min,
1618
set_fan_min, 5);
1619
static SENSOR_DEVICE_ATTR(fan7_min, S_IWUSR | S_IRUGO, show_fan_min,
1620
set_fan_min, 6);
1621
static SENSOR_DEVICE_ATTR(fan8_min, S_IWUSR | S_IRUGO, show_fan_min,
1622
set_fan_min, 7);
1623
1624
static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0);
1625
static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1);
1626
static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2);
1627
static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3);
1628
static SENSOR_DEVICE_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4);
1629
static SENSOR_DEVICE_ATTR(fan6_input, S_IRUGO, show_fan, NULL, 5);
1630
static SENSOR_DEVICE_ATTR(fan7_input, S_IRUGO, show_fan, NULL, 6);
1631
static SENSOR_DEVICE_ATTR(fan8_input, S_IRUGO, show_fan, NULL, 7);
1632
1633
static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL,
1634
ADT7462_ALARM4 | ADT7462_F0_ALARM);
1635
static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL,
1636
ADT7462_ALARM4 | ADT7462_F1_ALARM);
1637
static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL,
1638
ADT7462_ALARM4 | ADT7462_F2_ALARM);
1639
static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL,
1640
ADT7462_ALARM4 | ADT7462_F3_ALARM);
1641
static SENSOR_DEVICE_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL,
1642
ADT7462_ALARM4 | ADT7462_F4_ALARM);
1643
static SENSOR_DEVICE_ATTR(fan6_alarm, S_IRUGO, show_alarm, NULL,
1644
ADT7462_ALARM4 | ADT7462_F5_ALARM);
1645
static SENSOR_DEVICE_ATTR(fan7_alarm, S_IRUGO, show_alarm, NULL,
1646
ADT7462_ALARM4 | ADT7462_F6_ALARM);
1647
static SENSOR_DEVICE_ATTR(fan8_alarm, S_IRUGO, show_alarm, NULL,
1648
ADT7462_ALARM4 | ADT7462_F7_ALARM);
1649
1650
static SENSOR_DEVICE_ATTR(force_pwm_max, S_IWUSR | S_IRUGO,
1651
show_force_pwm_max, set_force_pwm_max, 0);
1652
1653
static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 0);
1654
static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 1);
1655
static SENSOR_DEVICE_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 2);
1656
static SENSOR_DEVICE_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 3);
1657
1658
static SENSOR_DEVICE_ATTR(pwm1_auto_point1_pwm, S_IWUSR | S_IRUGO,
1659
show_pwm_min, set_pwm_min, 0);
1660
static SENSOR_DEVICE_ATTR(pwm2_auto_point1_pwm, S_IWUSR | S_IRUGO,
1661
show_pwm_min, set_pwm_min, 1);
1662
static SENSOR_DEVICE_ATTR(pwm3_auto_point1_pwm, S_IWUSR | S_IRUGO,
1663
show_pwm_min, set_pwm_min, 2);
1664
static SENSOR_DEVICE_ATTR(pwm4_auto_point1_pwm, S_IWUSR | S_IRUGO,
1665
show_pwm_min, set_pwm_min, 3);
1666
1667
static SENSOR_DEVICE_ATTR(pwm1_auto_point2_pwm, S_IWUSR | S_IRUGO,
1668
show_pwm_max, set_pwm_max, 0);
1669
static SENSOR_DEVICE_ATTR(pwm2_auto_point2_pwm, S_IWUSR | S_IRUGO,
1670
show_pwm_max, set_pwm_max, 1);
1671
static SENSOR_DEVICE_ATTR(pwm3_auto_point2_pwm, S_IWUSR | S_IRUGO,
1672
show_pwm_max, set_pwm_max, 2);
1673
static SENSOR_DEVICE_ATTR(pwm4_auto_point2_pwm, S_IWUSR | S_IRUGO,
1674
show_pwm_max, set_pwm_max, 3);
1675
1676
static SENSOR_DEVICE_ATTR(temp1_auto_point1_hyst, S_IWUSR | S_IRUGO,
1677
show_pwm_hyst, set_pwm_hyst, 0);
1678
static SENSOR_DEVICE_ATTR(temp2_auto_point1_hyst, S_IWUSR | S_IRUGO,
1679
show_pwm_hyst, set_pwm_hyst, 1);
1680
static SENSOR_DEVICE_ATTR(temp3_auto_point1_hyst, S_IWUSR | S_IRUGO,
1681
show_pwm_hyst, set_pwm_hyst, 2);
1682
static SENSOR_DEVICE_ATTR(temp4_auto_point1_hyst, S_IWUSR | S_IRUGO,
1683
show_pwm_hyst, set_pwm_hyst, 3);
1684
1685
static SENSOR_DEVICE_ATTR(temp1_auto_point2_hyst, S_IWUSR | S_IRUGO,
1686
show_pwm_hyst, set_pwm_hyst, 0);
1687
static SENSOR_DEVICE_ATTR(temp2_auto_point2_hyst, S_IWUSR | S_IRUGO,
1688
show_pwm_hyst, set_pwm_hyst, 1);
1689
static SENSOR_DEVICE_ATTR(temp3_auto_point2_hyst, S_IWUSR | S_IRUGO,
1690
show_pwm_hyst, set_pwm_hyst, 2);
1691
static SENSOR_DEVICE_ATTR(temp4_auto_point2_hyst, S_IWUSR | S_IRUGO,
1692
show_pwm_hyst, set_pwm_hyst, 3);
1693
1694
static SENSOR_DEVICE_ATTR(temp1_auto_point1_temp, S_IWUSR | S_IRUGO,
1695
show_pwm_tmin, set_pwm_tmin, 0);
1696
static SENSOR_DEVICE_ATTR(temp2_auto_point1_temp, S_IWUSR | S_IRUGO,
1697
show_pwm_tmin, set_pwm_tmin, 1);
1698
static SENSOR_DEVICE_ATTR(temp3_auto_point1_temp, S_IWUSR | S_IRUGO,
1699
show_pwm_tmin, set_pwm_tmin, 2);
1700
static SENSOR_DEVICE_ATTR(temp4_auto_point1_temp, S_IWUSR | S_IRUGO,
1701
show_pwm_tmin, set_pwm_tmin, 3);
1702
1703
static SENSOR_DEVICE_ATTR(temp1_auto_point2_temp, S_IWUSR | S_IRUGO,
1704
show_pwm_tmax, set_pwm_tmax, 0);
1705
static SENSOR_DEVICE_ATTR(temp2_auto_point2_temp, S_IWUSR | S_IRUGO,
1706
show_pwm_tmax, set_pwm_tmax, 1);
1707
static SENSOR_DEVICE_ATTR(temp3_auto_point2_temp, S_IWUSR | S_IRUGO,
1708
show_pwm_tmax, set_pwm_tmax, 2);
1709
static SENSOR_DEVICE_ATTR(temp4_auto_point2_temp, S_IWUSR | S_IRUGO,
1710
show_pwm_tmax, set_pwm_tmax, 3);
1711
1712
static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1713
set_pwm_auto, 0);
1714
static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1715
set_pwm_auto, 1);
1716
static SENSOR_DEVICE_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1717
set_pwm_auto, 2);
1718
static SENSOR_DEVICE_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1719
set_pwm_auto, 3);
1720
1721
static SENSOR_DEVICE_ATTR(pwm1_auto_channels_temp, S_IWUSR | S_IRUGO,
1722
show_pwm_auto_temp, set_pwm_auto_temp, 0);
1723
static SENSOR_DEVICE_ATTR(pwm2_auto_channels_temp, S_IWUSR | S_IRUGO,
1724
show_pwm_auto_temp, set_pwm_auto_temp, 1);
1725
static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO,
1726
show_pwm_auto_temp, set_pwm_auto_temp, 2);
1727
static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO,
1728
show_pwm_auto_temp, set_pwm_auto_temp, 3);
1729
1730
static 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 */
1903
static 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
1929
static 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
1960
exit_remove:
1961
sysfs_remove_group(&client->dev.kobj, &data->attrs);
1962
exit_free:
1963
kfree(data);
1964
exit:
1965
return err;
1966
}
1967
1968
static 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
1978
static int __init adt7462_init(void)
1979
{
1980
return i2c_add_driver(&adt7462_driver);
1981
}
1982
1983
static void __exit adt7462_exit(void)
1984
{
1985
i2c_del_driver(&adt7462_driver);
1986
}
1987
1988
MODULE_AUTHOR("Darrick J. Wong <[email protected]>");
1989
MODULE_DESCRIPTION("ADT7462 driver");
1990
MODULE_LICENSE("GPL");
1991
1992
module_init(adt7462_init);
1993
module_exit(adt7462_exit);
1994
1995