1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * A hwmon driver for the Analog Devices ADT7470
4 * Copyright (C) 2007 IBM
6 * Author: Darrick J. Wong <darrick.wong@oracle.com>
9 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
11 #include <linux/module.h>
12 #include <linux/jiffies.h>
13 #include <linux/i2c.h>
14 #include <linux/hwmon.h>
15 #include <linux/hwmon-sysfs.h>
16 #include <linux/err.h>
17 #include <linux/mutex.h>
18 #include <linux/delay.h>
19 #include <linux/log2.h>
20 #include <linux/kthread.h>
21 #include <linux/slab.h>
22 #include <linux/util_macros.h>
24 /* Addresses to scan */
25 static const unsigned short normal_i2c
[] = { 0x2C, 0x2E, 0x2F, I2C_CLIENT_END
};
27 /* ADT7470 registers */
28 #define ADT7470_REG_BASE_ADDR 0x20
29 #define ADT7470_REG_TEMP_BASE_ADDR 0x20
30 #define ADT7470_REG_TEMP_MAX_ADDR 0x29
31 #define ADT7470_REG_FAN_BASE_ADDR 0x2A
32 #define ADT7470_REG_FAN_MAX_ADDR 0x31
33 #define ADT7470_REG_PWM_BASE_ADDR 0x32
34 #define ADT7470_REG_PWM_MAX_ADDR 0x35
35 #define ADT7470_REG_PWM_MAX_BASE_ADDR 0x38
36 #define ADT7470_REG_PWM_MAX_MAX_ADDR 0x3B
37 #define ADT7470_REG_CFG 0x40
38 #define ADT7470_FSPD_MASK 0x04
39 #define ADT7470_REG_ALARM1 0x41
40 #define ADT7470_R1T_ALARM 0x01
41 #define ADT7470_R2T_ALARM 0x02
42 #define ADT7470_R3T_ALARM 0x04
43 #define ADT7470_R4T_ALARM 0x08
44 #define ADT7470_R5T_ALARM 0x10
45 #define ADT7470_R6T_ALARM 0x20
46 #define ADT7470_R7T_ALARM 0x40
47 #define ADT7470_OOL_ALARM 0x80
48 #define ADT7470_REG_ALARM2 0x42
49 #define ADT7470_R8T_ALARM 0x01
50 #define ADT7470_R9T_ALARM 0x02
51 #define ADT7470_R10T_ALARM 0x04
52 #define ADT7470_FAN1_ALARM 0x10
53 #define ADT7470_FAN2_ALARM 0x20
54 #define ADT7470_FAN3_ALARM 0x40
55 #define ADT7470_FAN4_ALARM 0x80
56 #define ADT7470_REG_TEMP_LIMITS_BASE_ADDR 0x44
57 #define ADT7470_REG_TEMP_LIMITS_MAX_ADDR 0x57
58 #define ADT7470_REG_FAN_MIN_BASE_ADDR 0x58
59 #define ADT7470_REG_FAN_MIN_MAX_ADDR 0x5F
60 #define ADT7470_REG_FAN_MAX_BASE_ADDR 0x60
61 #define ADT7470_REG_FAN_MAX_MAX_ADDR 0x67
62 #define ADT7470_REG_PWM_CFG_BASE_ADDR 0x68
63 #define ADT7470_REG_PWM12_CFG 0x68
64 #define ADT7470_PWM2_AUTO_MASK 0x40
65 #define ADT7470_PWM1_AUTO_MASK 0x80
66 #define ADT7470_PWM_AUTO_MASK 0xC0
67 #define ADT7470_REG_PWM34_CFG 0x69
68 #define ADT7470_PWM3_AUTO_MASK 0x40
69 #define ADT7470_PWM4_AUTO_MASK 0x80
70 #define ADT7470_REG_PWM_MIN_BASE_ADDR 0x6A
71 #define ADT7470_REG_PWM_MIN_MAX_ADDR 0x6D
72 #define ADT7470_REG_PWM_TEMP_MIN_BASE_ADDR 0x6E
73 #define ADT7470_REG_PWM_TEMP_MIN_MAX_ADDR 0x71
74 #define ADT7470_REG_CFG_2 0x74
75 #define ADT7470_REG_ACOUSTICS12 0x75
76 #define ADT7470_REG_ACOUSTICS34 0x76
77 #define ADT7470_REG_DEVICE 0x3D
78 #define ADT7470_REG_VENDOR 0x3E
79 #define ADT7470_REG_REVISION 0x3F
80 #define ADT7470_REG_ALARM1_MASK 0x72
81 #define ADT7470_REG_ALARM2_MASK 0x73
82 #define ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR 0x7C
83 #define ADT7470_REG_PWM_AUTO_TEMP_MAX_ADDR 0x7D
84 #define ADT7470_REG_MAX_ADDR 0x81
86 #define ADT7470_TEMP_COUNT 10
87 #define ADT7470_TEMP_REG(x) (ADT7470_REG_TEMP_BASE_ADDR + (x))
88 #define ADT7470_TEMP_MIN_REG(x) (ADT7470_REG_TEMP_LIMITS_BASE_ADDR + ((x) * 2))
89 #define ADT7470_TEMP_MAX_REG(x) (ADT7470_REG_TEMP_LIMITS_BASE_ADDR + \
92 #define ADT7470_FAN_COUNT 4
93 #define ADT7470_REG_FAN(x) (ADT7470_REG_FAN_BASE_ADDR + ((x) * 2))
94 #define ADT7470_REG_FAN_MIN(x) (ADT7470_REG_FAN_MIN_BASE_ADDR + ((x) * 2))
95 #define ADT7470_REG_FAN_MAX(x) (ADT7470_REG_FAN_MAX_BASE_ADDR + ((x) * 2))
97 #define ADT7470_PWM_COUNT 4
98 #define ADT7470_REG_PWM(x) (ADT7470_REG_PWM_BASE_ADDR + (x))
99 #define ADT7470_REG_PWM_MAX(x) (ADT7470_REG_PWM_MAX_BASE_ADDR + (x))
100 #define ADT7470_REG_PWM_MIN(x) (ADT7470_REG_PWM_MIN_BASE_ADDR + (x))
101 #define ADT7470_REG_PWM_TMIN(x) (ADT7470_REG_PWM_TEMP_MIN_BASE_ADDR + (x))
102 #define ADT7470_REG_PWM_CFG(x) (ADT7470_REG_PWM_CFG_BASE_ADDR + ((x) / 2))
103 #define ADT7470_REG_PWM_AUTO_TEMP(x) (ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR + \
106 #define ALARM2(x) ((x) << 8)
108 #define ADT7470_VENDOR 0x41
109 #define ADT7470_DEVICE 0x70
110 /* datasheet only mentions a revision 2 */
111 #define ADT7470_REVISION 0x02
113 /* "all temps" according to hwmon sysfs interface spec */
114 #define ADT7470_PWM_ALL_TEMPS 0x3FF
116 /* How often do we reread sensors values? (In jiffies) */
117 #define SENSOR_REFRESH_INTERVAL (5 * HZ)
119 /* How often do we reread sensor limit values? (In jiffies) */
120 #define LIMIT_REFRESH_INTERVAL (60 * HZ)
122 /* Wait at least 200ms per sensor for 10 sensors */
123 #define TEMP_COLLECTION_TIME 2000
125 /* auto update thing won't fire more than every 2s */
126 #define AUTO_UPDATE_INTERVAL 2000
128 /* datasheet says to divide this number by the fan reading to get fan rpm */
129 #define FAN_PERIOD_TO_RPM(x) ((90000 * 60) / (x))
130 #define FAN_RPM_TO_PERIOD FAN_PERIOD_TO_RPM
131 #define FAN_PERIOD_INVALID 65535
132 #define FAN_DATA_VALID(x) ((x) && (x) != FAN_PERIOD_INVALID)
134 /* Config registers 1 and 2 include fields for selecting the PWM frequency */
135 #define ADT7470_CFG_LF 0x40
136 #define ADT7470_FREQ_MASK 0x70
137 #define ADT7470_FREQ_SHIFT 4
139 struct adt7470_data
{
140 struct i2c_client
*client
;
144 unsigned long sensors_last_updated
; /* In jiffies */
145 unsigned long limits_last_updated
; /* In jiffies */
147 int num_temp_sensors
; /* -1 = probe */
148 int temperatures_probed
;
150 s8 temp
[ADT7470_TEMP_COUNT
];
151 s8 temp_min
[ADT7470_TEMP_COUNT
];
152 s8 temp_max
[ADT7470_TEMP_COUNT
];
153 u16 fan
[ADT7470_FAN_COUNT
];
154 u16 fan_min
[ADT7470_FAN_COUNT
];
155 u16 fan_max
[ADT7470_FAN_COUNT
];
159 u8 pwm
[ADT7470_PWM_COUNT
];
160 u8 pwm_max
[ADT7470_PWM_COUNT
];
161 u8 pwm_automatic
[ADT7470_PWM_COUNT
];
162 u8 pwm_min
[ADT7470_PWM_COUNT
];
163 s8 pwm_tmin
[ADT7470_PWM_COUNT
];
164 u8 pwm_auto_temp
[ADT7470_PWM_COUNT
];
166 struct task_struct
*auto_update
;
167 unsigned int auto_update_interval
;
171 * 16-bit registers on the ADT7470 are low-byte first. The data sheet says
172 * that the low byte must be read before the high byte.
174 static inline int adt7470_read_word_data(struct i2c_client
*client
, u8 reg
)
177 foo
= i2c_smbus_read_byte_data(client
, reg
);
178 foo
|= ((u16
)i2c_smbus_read_byte_data(client
, reg
+ 1) << 8);
182 static inline int adt7470_write_word_data(struct i2c_client
*client
, u8 reg
,
185 return i2c_smbus_write_byte_data(client
, reg
, value
& 0xFF)
186 || i2c_smbus_write_byte_data(client
, reg
+ 1, value
>> 8);
189 /* Probe for temperature sensors. Assumes lock is held */
190 static int adt7470_read_temperatures(struct i2c_client
*client
,
191 struct adt7470_data
*data
)
195 u8 cfg
, pwm
[4], pwm_cfg
[2];
197 /* save pwm[1-4] config register */
198 pwm_cfg
[0] = i2c_smbus_read_byte_data(client
, ADT7470_REG_PWM_CFG(0));
199 pwm_cfg
[1] = i2c_smbus_read_byte_data(client
, ADT7470_REG_PWM_CFG(2));
201 /* set manual pwm to whatever it is set to now */
202 for (i
= 0; i
< ADT7470_FAN_COUNT
; i
++)
203 pwm
[i
] = i2c_smbus_read_byte_data(client
, ADT7470_REG_PWM(i
));
205 /* put pwm in manual mode */
206 i2c_smbus_write_byte_data(client
, ADT7470_REG_PWM_CFG(0),
207 pwm_cfg
[0] & ~(ADT7470_PWM_AUTO_MASK
));
208 i2c_smbus_write_byte_data(client
, ADT7470_REG_PWM_CFG(2),
209 pwm_cfg
[1] & ~(ADT7470_PWM_AUTO_MASK
));
211 /* write pwm control to whatever it was */
212 for (i
= 0; i
< ADT7470_FAN_COUNT
; i
++)
213 i2c_smbus_write_byte_data(client
, ADT7470_REG_PWM(i
), pwm
[i
]);
215 /* start reading temperature sensors */
216 cfg
= i2c_smbus_read_byte_data(client
, ADT7470_REG_CFG
);
218 i2c_smbus_write_byte_data(client
, ADT7470_REG_CFG
, cfg
);
220 /* Delay is 200ms * number of temp sensors. */
221 res
= msleep_interruptible((data
->num_temp_sensors
>= 0 ?
222 data
->num_temp_sensors
* 200 :
223 TEMP_COLLECTION_TIME
));
225 /* done reading temperature sensors */
226 cfg
= i2c_smbus_read_byte_data(client
, ADT7470_REG_CFG
);
228 i2c_smbus_write_byte_data(client
, ADT7470_REG_CFG
, cfg
);
230 /* restore pwm[1-4] config registers */
231 i2c_smbus_write_byte_data(client
, ADT7470_REG_PWM_CFG(0), pwm_cfg
[0]);
232 i2c_smbus_write_byte_data(client
, ADT7470_REG_PWM_CFG(2), pwm_cfg
[1]);
235 pr_err("ha ha, interrupted\n");
239 /* Only count fans if we have to */
240 if (data
->num_temp_sensors
>= 0)
243 for (i
= 0; i
< ADT7470_TEMP_COUNT
; i
++) {
244 data
->temp
[i
] = i2c_smbus_read_byte_data(client
,
245 ADT7470_TEMP_REG(i
));
247 data
->num_temp_sensors
= i
+ 1;
249 data
->temperatures_probed
= 1;
253 static int adt7470_update_thread(void *p
)
255 struct i2c_client
*client
= p
;
256 struct adt7470_data
*data
= i2c_get_clientdata(client
);
258 while (!kthread_should_stop()) {
259 mutex_lock(&data
->lock
);
260 adt7470_read_temperatures(client
, data
);
261 mutex_unlock(&data
->lock
);
263 set_current_state(TASK_INTERRUPTIBLE
);
264 if (kthread_should_stop())
267 schedule_timeout(msecs_to_jiffies(data
->auto_update_interval
));
273 static struct adt7470_data
*adt7470_update_device(struct device
*dev
)
275 struct adt7470_data
*data
= dev_get_drvdata(dev
);
276 struct i2c_client
*client
= data
->client
;
277 unsigned long local_jiffies
= jiffies
;
280 int need_sensors
= 1;
284 * Figure out if we need to update the shadow registers.
285 * Lockless means that we may occasionally report out of
288 if (time_before(local_jiffies
, data
->sensors_last_updated
+
289 SENSOR_REFRESH_INTERVAL
) &&
293 if (time_before(local_jiffies
, data
->limits_last_updated
+
294 LIMIT_REFRESH_INTERVAL
) &&
298 if (!need_sensors
&& !need_limits
)
301 mutex_lock(&data
->lock
);
303 goto no_sensor_update
;
305 if (!data
->temperatures_probed
)
306 adt7470_read_temperatures(client
, data
);
308 for (i
= 0; i
< ADT7470_TEMP_COUNT
; i
++)
309 data
->temp
[i
] = i2c_smbus_read_byte_data(client
,
310 ADT7470_TEMP_REG(i
));
312 for (i
= 0; i
< ADT7470_FAN_COUNT
; i
++)
313 data
->fan
[i
] = adt7470_read_word_data(client
,
316 for (i
= 0; i
< ADT7470_PWM_COUNT
; i
++) {
320 data
->pwm
[i
] = i2c_smbus_read_byte_data(client
,
324 reg_mask
= ADT7470_PWM2_AUTO_MASK
;
326 reg_mask
= ADT7470_PWM1_AUTO_MASK
;
328 reg
= ADT7470_REG_PWM_CFG(i
);
329 if (i2c_smbus_read_byte_data(client
, reg
) & reg_mask
)
330 data
->pwm_automatic
[i
] = 1;
332 data
->pwm_automatic
[i
] = 0;
334 reg
= ADT7470_REG_PWM_AUTO_TEMP(i
);
335 cfg
= i2c_smbus_read_byte_data(client
, reg
);
337 data
->pwm_auto_temp
[i
] = cfg
>> 4;
339 data
->pwm_auto_temp
[i
] = cfg
& 0xF;
342 if (i2c_smbus_read_byte_data(client
, ADT7470_REG_CFG
) &
344 data
->force_pwm_max
= 1;
346 data
->force_pwm_max
= 0;
348 data
->alarm
= i2c_smbus_read_byte_data(client
, ADT7470_REG_ALARM1
);
349 if (data
->alarm
& ADT7470_OOL_ALARM
)
350 data
->alarm
|= ALARM2(i2c_smbus_read_byte_data(client
,
351 ADT7470_REG_ALARM2
));
352 data
->alarms_mask
= adt7470_read_word_data(client
,
353 ADT7470_REG_ALARM1_MASK
);
355 data
->sensors_last_updated
= local_jiffies
;
356 data
->sensors_valid
= 1;
362 for (i
= 0; i
< ADT7470_TEMP_COUNT
; i
++) {
363 data
->temp_min
[i
] = i2c_smbus_read_byte_data(client
,
364 ADT7470_TEMP_MIN_REG(i
));
365 data
->temp_max
[i
] = i2c_smbus_read_byte_data(client
,
366 ADT7470_TEMP_MAX_REG(i
));
369 for (i
= 0; i
< ADT7470_FAN_COUNT
; i
++) {
370 data
->fan_min
[i
] = adt7470_read_word_data(client
,
371 ADT7470_REG_FAN_MIN(i
));
372 data
->fan_max
[i
] = adt7470_read_word_data(client
,
373 ADT7470_REG_FAN_MAX(i
));
376 for (i
= 0; i
< ADT7470_PWM_COUNT
; i
++) {
377 data
->pwm_max
[i
] = i2c_smbus_read_byte_data(client
,
378 ADT7470_REG_PWM_MAX(i
));
379 data
->pwm_min
[i
] = i2c_smbus_read_byte_data(client
,
380 ADT7470_REG_PWM_MIN(i
));
381 data
->pwm_tmin
[i
] = i2c_smbus_read_byte_data(client
,
382 ADT7470_REG_PWM_TMIN(i
));
385 data
->limits_last_updated
= local_jiffies
;
386 data
->limits_valid
= 1;
389 mutex_unlock(&data
->lock
);
393 static ssize_t
auto_update_interval_show(struct device
*dev
,
394 struct device_attribute
*devattr
,
397 struct adt7470_data
*data
= adt7470_update_device(dev
);
398 return sprintf(buf
, "%d\n", data
->auto_update_interval
);
401 static ssize_t
auto_update_interval_store(struct device
*dev
,
402 struct device_attribute
*devattr
,
403 const char *buf
, size_t count
)
405 struct adt7470_data
*data
= dev_get_drvdata(dev
);
408 if (kstrtol(buf
, 10, &temp
))
411 temp
= clamp_val(temp
, 0, 60000);
413 mutex_lock(&data
->lock
);
414 data
->auto_update_interval
= temp
;
415 mutex_unlock(&data
->lock
);
420 static ssize_t
num_temp_sensors_show(struct device
*dev
,
421 struct device_attribute
*devattr
,
424 struct adt7470_data
*data
= adt7470_update_device(dev
);
425 return sprintf(buf
, "%d\n", data
->num_temp_sensors
);
428 static ssize_t
num_temp_sensors_store(struct device
*dev
,
429 struct device_attribute
*devattr
,
430 const char *buf
, size_t count
)
432 struct adt7470_data
*data
= dev_get_drvdata(dev
);
435 if (kstrtol(buf
, 10, &temp
))
438 temp
= clamp_val(temp
, -1, 10);
440 mutex_lock(&data
->lock
);
441 data
->num_temp_sensors
= temp
;
443 data
->temperatures_probed
= 0;
444 mutex_unlock(&data
->lock
);
449 static ssize_t
temp_min_show(struct device
*dev
,
450 struct device_attribute
*devattr
, char *buf
)
452 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
453 struct adt7470_data
*data
= adt7470_update_device(dev
);
454 return sprintf(buf
, "%d\n", 1000 * data
->temp_min
[attr
->index
]);
457 static ssize_t
temp_min_store(struct device
*dev
,
458 struct device_attribute
*devattr
,
459 const char *buf
, size_t count
)
461 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
462 struct adt7470_data
*data
= dev_get_drvdata(dev
);
463 struct i2c_client
*client
= data
->client
;
466 if (kstrtol(buf
, 10, &temp
))
469 temp
= clamp_val(temp
, -128000, 127000);
470 temp
= DIV_ROUND_CLOSEST(temp
, 1000);
472 mutex_lock(&data
->lock
);
473 data
->temp_min
[attr
->index
] = temp
;
474 i2c_smbus_write_byte_data(client
, ADT7470_TEMP_MIN_REG(attr
->index
),
476 mutex_unlock(&data
->lock
);
481 static ssize_t
temp_max_show(struct device
*dev
,
482 struct device_attribute
*devattr
, char *buf
)
484 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
485 struct adt7470_data
*data
= adt7470_update_device(dev
);
486 return sprintf(buf
, "%d\n", 1000 * data
->temp_max
[attr
->index
]);
489 static ssize_t
temp_max_store(struct device
*dev
,
490 struct device_attribute
*devattr
,
491 const char *buf
, size_t count
)
493 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
494 struct adt7470_data
*data
= dev_get_drvdata(dev
);
495 struct i2c_client
*client
= data
->client
;
498 if (kstrtol(buf
, 10, &temp
))
501 temp
= clamp_val(temp
, -128000, 127000);
502 temp
= DIV_ROUND_CLOSEST(temp
, 1000);
504 mutex_lock(&data
->lock
);
505 data
->temp_max
[attr
->index
] = temp
;
506 i2c_smbus_write_byte_data(client
, ADT7470_TEMP_MAX_REG(attr
->index
),
508 mutex_unlock(&data
->lock
);
513 static ssize_t
temp_show(struct device
*dev
, struct device_attribute
*devattr
,
516 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
517 struct adt7470_data
*data
= adt7470_update_device(dev
);
518 return sprintf(buf
, "%d\n", 1000 * data
->temp
[attr
->index
]);
521 static ssize_t
alarm_mask_show(struct device
*dev
,
522 struct device_attribute
*devattr
,
525 struct adt7470_data
*data
= adt7470_update_device(dev
);
527 return sprintf(buf
, "%x\n", data
->alarms_mask
);
530 static ssize_t
alarm_mask_store(struct device
*dev
,
531 struct device_attribute
*devattr
,
532 const char *buf
, size_t count
)
534 struct adt7470_data
*data
= dev_get_drvdata(dev
);
537 if (kstrtoul(buf
, 0, &mask
))
543 mutex_lock(&data
->lock
);
544 data
->alarms_mask
= mask
;
545 adt7470_write_word_data(data
->client
, ADT7470_REG_ALARM1_MASK
, mask
);
546 mutex_unlock(&data
->lock
);
551 static ssize_t
fan_max_show(struct device
*dev
,
552 struct device_attribute
*devattr
, char *buf
)
554 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
555 struct adt7470_data
*data
= adt7470_update_device(dev
);
557 if (FAN_DATA_VALID(data
->fan_max
[attr
->index
]))
558 return sprintf(buf
, "%d\n",
559 FAN_PERIOD_TO_RPM(data
->fan_max
[attr
->index
]));
561 return sprintf(buf
, "0\n");
564 static ssize_t
fan_max_store(struct device
*dev
,
565 struct device_attribute
*devattr
,
566 const char *buf
, size_t count
)
568 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
569 struct adt7470_data
*data
= dev_get_drvdata(dev
);
570 struct i2c_client
*client
= data
->client
;
573 if (kstrtol(buf
, 10, &temp
) || !temp
)
576 temp
= FAN_RPM_TO_PERIOD(temp
);
577 temp
= clamp_val(temp
, 1, 65534);
579 mutex_lock(&data
->lock
);
580 data
->fan_max
[attr
->index
] = temp
;
581 adt7470_write_word_data(client
, ADT7470_REG_FAN_MAX(attr
->index
), temp
);
582 mutex_unlock(&data
->lock
);
587 static ssize_t
fan_min_show(struct device
*dev
,
588 struct device_attribute
*devattr
, char *buf
)
590 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
591 struct adt7470_data
*data
= adt7470_update_device(dev
);
593 if (FAN_DATA_VALID(data
->fan_min
[attr
->index
]))
594 return sprintf(buf
, "%d\n",
595 FAN_PERIOD_TO_RPM(data
->fan_min
[attr
->index
]));
597 return sprintf(buf
, "0\n");
600 static ssize_t
fan_min_store(struct device
*dev
,
601 struct device_attribute
*devattr
,
602 const char *buf
, size_t count
)
604 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
605 struct adt7470_data
*data
= dev_get_drvdata(dev
);
606 struct i2c_client
*client
= data
->client
;
609 if (kstrtol(buf
, 10, &temp
) || !temp
)
612 temp
= FAN_RPM_TO_PERIOD(temp
);
613 temp
= clamp_val(temp
, 1, 65534);
615 mutex_lock(&data
->lock
);
616 data
->fan_min
[attr
->index
] = temp
;
617 adt7470_write_word_data(client
, ADT7470_REG_FAN_MIN(attr
->index
), temp
);
618 mutex_unlock(&data
->lock
);
623 static ssize_t
fan_show(struct device
*dev
, struct device_attribute
*devattr
,
626 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
627 struct adt7470_data
*data
= adt7470_update_device(dev
);
629 if (FAN_DATA_VALID(data
->fan
[attr
->index
]))
630 return sprintf(buf
, "%d\n",
631 FAN_PERIOD_TO_RPM(data
->fan
[attr
->index
]));
633 return sprintf(buf
, "0\n");
636 static ssize_t
force_pwm_max_show(struct device
*dev
,
637 struct device_attribute
*devattr
, char *buf
)
639 struct adt7470_data
*data
= adt7470_update_device(dev
);
640 return sprintf(buf
, "%d\n", data
->force_pwm_max
);
643 static ssize_t
force_pwm_max_store(struct device
*dev
,
644 struct device_attribute
*devattr
,
645 const char *buf
, size_t count
)
647 struct adt7470_data
*data
= dev_get_drvdata(dev
);
648 struct i2c_client
*client
= data
->client
;
652 if (kstrtol(buf
, 10, &temp
))
655 mutex_lock(&data
->lock
);
656 data
->force_pwm_max
= temp
;
657 reg
= i2c_smbus_read_byte_data(client
, ADT7470_REG_CFG
);
659 reg
|= ADT7470_FSPD_MASK
;
661 reg
&= ~ADT7470_FSPD_MASK
;
662 i2c_smbus_write_byte_data(client
, ADT7470_REG_CFG
, reg
);
663 mutex_unlock(&data
->lock
);
668 static ssize_t
pwm_show(struct device
*dev
, struct device_attribute
*devattr
,
671 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
672 struct adt7470_data
*data
= adt7470_update_device(dev
);
673 return sprintf(buf
, "%d\n", data
->pwm
[attr
->index
]);
676 static ssize_t
pwm_store(struct device
*dev
, struct device_attribute
*devattr
,
677 const char *buf
, size_t count
)
679 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
680 struct adt7470_data
*data
= dev_get_drvdata(dev
);
681 struct i2c_client
*client
= data
->client
;
684 if (kstrtol(buf
, 10, &temp
))
687 temp
= clamp_val(temp
, 0, 255);
689 mutex_lock(&data
->lock
);
690 data
->pwm
[attr
->index
] = temp
;
691 i2c_smbus_write_byte_data(client
, ADT7470_REG_PWM(attr
->index
), temp
);
692 mutex_unlock(&data
->lock
);
697 /* These are the valid PWM frequencies to the nearest Hz */
698 static const int adt7470_freq_map
[] = {
699 11, 15, 22, 29, 35, 44, 59, 88, 1400, 22500
702 static ssize_t
pwm1_freq_show(struct device
*dev
,
703 struct device_attribute
*devattr
, char *buf
)
705 struct adt7470_data
*data
= adt7470_update_device(dev
);
706 unsigned char cfg_reg_1
;
707 unsigned char cfg_reg_2
;
710 mutex_lock(&data
->lock
);
711 cfg_reg_1
= i2c_smbus_read_byte_data(data
->client
, ADT7470_REG_CFG
);
712 cfg_reg_2
= i2c_smbus_read_byte_data(data
->client
, ADT7470_REG_CFG_2
);
713 mutex_unlock(&data
->lock
);
715 index
= (cfg_reg_2
& ADT7470_FREQ_MASK
) >> ADT7470_FREQ_SHIFT
;
716 if (!(cfg_reg_1
& ADT7470_CFG_LF
))
718 if (index
>= ARRAY_SIZE(adt7470_freq_map
))
719 index
= ARRAY_SIZE(adt7470_freq_map
) - 1;
721 return scnprintf(buf
, PAGE_SIZE
, "%d\n", adt7470_freq_map
[index
]);
724 static ssize_t
pwm1_freq_store(struct device
*dev
,
725 struct device_attribute
*devattr
,
726 const char *buf
, size_t count
)
728 struct adt7470_data
*data
= dev_get_drvdata(dev
);
729 struct i2c_client
*client
= data
->client
;
732 int low_freq
= ADT7470_CFG_LF
;
735 if (kstrtol(buf
, 10, &freq
))
738 /* Round the user value given to the closest available frequency */
739 index
= find_closest(freq
, adt7470_freq_map
,
740 ARRAY_SIZE(adt7470_freq_map
));
747 mutex_lock(&data
->lock
);
748 /* Configuration Register 1 */
749 val
= i2c_smbus_read_byte_data(client
, ADT7470_REG_CFG
);
750 i2c_smbus_write_byte_data(client
, ADT7470_REG_CFG
,
751 (val
& ~ADT7470_CFG_LF
) | low_freq
);
752 /* Configuration Register 2 */
753 val
= i2c_smbus_read_byte_data(client
, ADT7470_REG_CFG_2
);
754 i2c_smbus_write_byte_data(client
, ADT7470_REG_CFG_2
,
755 (val
& ~ADT7470_FREQ_MASK
) | (index
<< ADT7470_FREQ_SHIFT
));
756 mutex_unlock(&data
->lock
);
761 static ssize_t
pwm_max_show(struct device
*dev
,
762 struct device_attribute
*devattr
, char *buf
)
764 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
765 struct adt7470_data
*data
= adt7470_update_device(dev
);
766 return sprintf(buf
, "%d\n", data
->pwm_max
[attr
->index
]);
769 static ssize_t
pwm_max_store(struct device
*dev
,
770 struct device_attribute
*devattr
,
771 const char *buf
, size_t count
)
773 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
774 struct adt7470_data
*data
= dev_get_drvdata(dev
);
775 struct i2c_client
*client
= data
->client
;
778 if (kstrtol(buf
, 10, &temp
))
781 temp
= clamp_val(temp
, 0, 255);
783 mutex_lock(&data
->lock
);
784 data
->pwm_max
[attr
->index
] = temp
;
785 i2c_smbus_write_byte_data(client
, ADT7470_REG_PWM_MAX(attr
->index
),
787 mutex_unlock(&data
->lock
);
792 static ssize_t
pwm_min_show(struct device
*dev
,
793 struct device_attribute
*devattr
, char *buf
)
795 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
796 struct adt7470_data
*data
= adt7470_update_device(dev
);
797 return sprintf(buf
, "%d\n", data
->pwm_min
[attr
->index
]);
800 static ssize_t
pwm_min_store(struct device
*dev
,
801 struct device_attribute
*devattr
,
802 const char *buf
, size_t count
)
804 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
805 struct adt7470_data
*data
= dev_get_drvdata(dev
);
806 struct i2c_client
*client
= data
->client
;
809 if (kstrtol(buf
, 10, &temp
))
812 temp
= clamp_val(temp
, 0, 255);
814 mutex_lock(&data
->lock
);
815 data
->pwm_min
[attr
->index
] = temp
;
816 i2c_smbus_write_byte_data(client
, ADT7470_REG_PWM_MIN(attr
->index
),
818 mutex_unlock(&data
->lock
);
823 static ssize_t
pwm_tmax_show(struct device
*dev
,
824 struct device_attribute
*devattr
, char *buf
)
826 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
827 struct adt7470_data
*data
= adt7470_update_device(dev
);
828 /* the datasheet says that tmax = tmin + 20C */
829 return sprintf(buf
, "%d\n", 1000 * (20 + data
->pwm_tmin
[attr
->index
]));
832 static ssize_t
pwm_tmin_show(struct device
*dev
,
833 struct device_attribute
*devattr
, char *buf
)
835 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
836 struct adt7470_data
*data
= adt7470_update_device(dev
);
837 return sprintf(buf
, "%d\n", 1000 * data
->pwm_tmin
[attr
->index
]);
840 static ssize_t
pwm_tmin_store(struct device
*dev
,
841 struct device_attribute
*devattr
,
842 const char *buf
, size_t count
)
844 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
845 struct adt7470_data
*data
= dev_get_drvdata(dev
);
846 struct i2c_client
*client
= data
->client
;
849 if (kstrtol(buf
, 10, &temp
))
852 temp
= clamp_val(temp
, -128000, 127000);
853 temp
= DIV_ROUND_CLOSEST(temp
, 1000);
855 mutex_lock(&data
->lock
);
856 data
->pwm_tmin
[attr
->index
] = temp
;
857 i2c_smbus_write_byte_data(client
, ADT7470_REG_PWM_TMIN(attr
->index
),
859 mutex_unlock(&data
->lock
);
864 static ssize_t
pwm_auto_show(struct device
*dev
,
865 struct device_attribute
*devattr
, char *buf
)
867 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
868 struct adt7470_data
*data
= adt7470_update_device(dev
);
869 return sprintf(buf
, "%d\n", 1 + data
->pwm_automatic
[attr
->index
]);
872 static ssize_t
pwm_auto_store(struct device
*dev
,
873 struct device_attribute
*devattr
,
874 const char *buf
, size_t count
)
876 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
877 struct adt7470_data
*data
= dev_get_drvdata(dev
);
878 struct i2c_client
*client
= data
->client
;
879 int pwm_auto_reg
= ADT7470_REG_PWM_CFG(attr
->index
);
880 int pwm_auto_reg_mask
;
884 if (kstrtol(buf
, 10, &temp
))
888 pwm_auto_reg_mask
= ADT7470_PWM2_AUTO_MASK
;
890 pwm_auto_reg_mask
= ADT7470_PWM1_AUTO_MASK
;
892 if (temp
!= 2 && temp
!= 1)
896 mutex_lock(&data
->lock
);
897 data
->pwm_automatic
[attr
->index
] = temp
;
898 reg
= i2c_smbus_read_byte_data(client
, pwm_auto_reg
);
900 reg
|= pwm_auto_reg_mask
;
902 reg
&= ~pwm_auto_reg_mask
;
903 i2c_smbus_write_byte_data(client
, pwm_auto_reg
, reg
);
904 mutex_unlock(&data
->lock
);
909 static ssize_t
pwm_auto_temp_show(struct device
*dev
,
910 struct device_attribute
*devattr
, char *buf
)
912 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
913 struct adt7470_data
*data
= adt7470_update_device(dev
);
914 u8 ctrl
= data
->pwm_auto_temp
[attr
->index
];
917 return sprintf(buf
, "%d\n", 1 << (ctrl
- 1));
919 return sprintf(buf
, "%d\n", ADT7470_PWM_ALL_TEMPS
);
922 static int cvt_auto_temp(int input
)
924 if (input
== ADT7470_PWM_ALL_TEMPS
)
926 if (input
< 1 || !is_power_of_2(input
))
928 return ilog2(input
) + 1;
931 static ssize_t
pwm_auto_temp_store(struct device
*dev
,
932 struct device_attribute
*devattr
,
933 const char *buf
, size_t count
)
935 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
936 struct adt7470_data
*data
= dev_get_drvdata(dev
);
937 struct i2c_client
*client
= data
->client
;
938 int pwm_auto_reg
= ADT7470_REG_PWM_AUTO_TEMP(attr
->index
);
942 if (kstrtol(buf
, 10, &temp
))
945 temp
= cvt_auto_temp(temp
);
949 mutex_lock(&data
->lock
);
950 data
->pwm_automatic
[attr
->index
] = temp
;
951 reg
= i2c_smbus_read_byte_data(client
, pwm_auto_reg
);
953 if (!(attr
->index
% 2)) {
955 reg
|= (temp
<< 4) & 0xF0;
961 i2c_smbus_write_byte_data(client
, pwm_auto_reg
, reg
);
962 mutex_unlock(&data
->lock
);
967 static ssize_t
alarm_show(struct device
*dev
,
968 struct device_attribute
*devattr
, char *buf
)
970 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
971 struct adt7470_data
*data
= adt7470_update_device(dev
);
973 if (data
->alarm
& attr
->index
)
974 return sprintf(buf
, "1\n");
976 return sprintf(buf
, "0\n");
979 static DEVICE_ATTR_RW(alarm_mask
);
980 static DEVICE_ATTR_RW(num_temp_sensors
);
981 static DEVICE_ATTR_RW(auto_update_interval
);
983 static SENSOR_DEVICE_ATTR_RW(temp1_max
, temp_max
, 0);
984 static SENSOR_DEVICE_ATTR_RW(temp2_max
, temp_max
, 1);
985 static SENSOR_DEVICE_ATTR_RW(temp3_max
, temp_max
, 2);
986 static SENSOR_DEVICE_ATTR_RW(temp4_max
, temp_max
, 3);
987 static SENSOR_DEVICE_ATTR_RW(temp5_max
, temp_max
, 4);
988 static SENSOR_DEVICE_ATTR_RW(temp6_max
, temp_max
, 5);
989 static SENSOR_DEVICE_ATTR_RW(temp7_max
, temp_max
, 6);
990 static SENSOR_DEVICE_ATTR_RW(temp8_max
, temp_max
, 7);
991 static SENSOR_DEVICE_ATTR_RW(temp9_max
, temp_max
, 8);
992 static SENSOR_DEVICE_ATTR_RW(temp10_max
, temp_max
, 9);
994 static SENSOR_DEVICE_ATTR_RW(temp1_min
, temp_min
, 0);
995 static SENSOR_DEVICE_ATTR_RW(temp2_min
, temp_min
, 1);
996 static SENSOR_DEVICE_ATTR_RW(temp3_min
, temp_min
, 2);
997 static SENSOR_DEVICE_ATTR_RW(temp4_min
, temp_min
, 3);
998 static SENSOR_DEVICE_ATTR_RW(temp5_min
, temp_min
, 4);
999 static SENSOR_DEVICE_ATTR_RW(temp6_min
, temp_min
, 5);
1000 static SENSOR_DEVICE_ATTR_RW(temp7_min
, temp_min
, 6);
1001 static SENSOR_DEVICE_ATTR_RW(temp8_min
, temp_min
, 7);
1002 static SENSOR_DEVICE_ATTR_RW(temp9_min
, temp_min
, 8);
1003 static SENSOR_DEVICE_ATTR_RW(temp10_min
, temp_min
, 9);
1005 static SENSOR_DEVICE_ATTR_RO(temp1_input
, temp
, 0);
1006 static SENSOR_DEVICE_ATTR_RO(temp2_input
, temp
, 1);
1007 static SENSOR_DEVICE_ATTR_RO(temp3_input
, temp
, 2);
1008 static SENSOR_DEVICE_ATTR_RO(temp4_input
, temp
, 3);
1009 static SENSOR_DEVICE_ATTR_RO(temp5_input
, temp
, 4);
1010 static SENSOR_DEVICE_ATTR_RO(temp6_input
, temp
, 5);
1011 static SENSOR_DEVICE_ATTR_RO(temp7_input
, temp
, 6);
1012 static SENSOR_DEVICE_ATTR_RO(temp8_input
, temp
, 7);
1013 static SENSOR_DEVICE_ATTR_RO(temp9_input
, temp
, 8);
1014 static SENSOR_DEVICE_ATTR_RO(temp10_input
, temp
, 9);
1016 static SENSOR_DEVICE_ATTR_RO(temp1_alarm
, alarm
, ADT7470_R1T_ALARM
);
1017 static SENSOR_DEVICE_ATTR_RO(temp2_alarm
, alarm
, ADT7470_R2T_ALARM
);
1018 static SENSOR_DEVICE_ATTR_RO(temp3_alarm
, alarm
, ADT7470_R3T_ALARM
);
1019 static SENSOR_DEVICE_ATTR_RO(temp4_alarm
, alarm
, ADT7470_R4T_ALARM
);
1020 static SENSOR_DEVICE_ATTR_RO(temp5_alarm
, alarm
, ADT7470_R5T_ALARM
);
1021 static SENSOR_DEVICE_ATTR_RO(temp6_alarm
, alarm
, ADT7470_R6T_ALARM
);
1022 static SENSOR_DEVICE_ATTR_RO(temp7_alarm
, alarm
, ADT7470_R7T_ALARM
);
1023 static SENSOR_DEVICE_ATTR_RO(temp8_alarm
, alarm
, ALARM2(ADT7470_R8T_ALARM
));
1024 static SENSOR_DEVICE_ATTR_RO(temp9_alarm
, alarm
, ALARM2(ADT7470_R9T_ALARM
));
1025 static SENSOR_DEVICE_ATTR_RO(temp10_alarm
, alarm
, ALARM2(ADT7470_R10T_ALARM
));
1027 static SENSOR_DEVICE_ATTR_RW(fan1_max
, fan_max
, 0);
1028 static SENSOR_DEVICE_ATTR_RW(fan2_max
, fan_max
, 1);
1029 static SENSOR_DEVICE_ATTR_RW(fan3_max
, fan_max
, 2);
1030 static SENSOR_DEVICE_ATTR_RW(fan4_max
, fan_max
, 3);
1032 static SENSOR_DEVICE_ATTR_RW(fan1_min
, fan_min
, 0);
1033 static SENSOR_DEVICE_ATTR_RW(fan2_min
, fan_min
, 1);
1034 static SENSOR_DEVICE_ATTR_RW(fan3_min
, fan_min
, 2);
1035 static SENSOR_DEVICE_ATTR_RW(fan4_min
, fan_min
, 3);
1037 static SENSOR_DEVICE_ATTR_RO(fan1_input
, fan
, 0);
1038 static SENSOR_DEVICE_ATTR_RO(fan2_input
, fan
, 1);
1039 static SENSOR_DEVICE_ATTR_RO(fan3_input
, fan
, 2);
1040 static SENSOR_DEVICE_ATTR_RO(fan4_input
, fan
, 3);
1042 static SENSOR_DEVICE_ATTR_RO(fan1_alarm
, alarm
, ALARM2(ADT7470_FAN1_ALARM
));
1043 static SENSOR_DEVICE_ATTR_RO(fan2_alarm
, alarm
, ALARM2(ADT7470_FAN2_ALARM
));
1044 static SENSOR_DEVICE_ATTR_RO(fan3_alarm
, alarm
, ALARM2(ADT7470_FAN3_ALARM
));
1045 static SENSOR_DEVICE_ATTR_RO(fan4_alarm
, alarm
, ALARM2(ADT7470_FAN4_ALARM
));
1047 static SENSOR_DEVICE_ATTR_RW(force_pwm_max
, force_pwm_max
, 0);
1049 static SENSOR_DEVICE_ATTR_RW(pwm1
, pwm
, 0);
1050 static SENSOR_DEVICE_ATTR_RW(pwm2
, pwm
, 1);
1051 static SENSOR_DEVICE_ATTR_RW(pwm3
, pwm
, 2);
1052 static SENSOR_DEVICE_ATTR_RW(pwm4
, pwm
, 3);
1054 static DEVICE_ATTR_RW(pwm1_freq
);
1056 static SENSOR_DEVICE_ATTR_RW(pwm1_auto_point1_pwm
, pwm_min
, 0);
1057 static SENSOR_DEVICE_ATTR_RW(pwm2_auto_point1_pwm
, pwm_min
, 1);
1058 static SENSOR_DEVICE_ATTR_RW(pwm3_auto_point1_pwm
, pwm_min
, 2);
1059 static SENSOR_DEVICE_ATTR_RW(pwm4_auto_point1_pwm
, pwm_min
, 3);
1061 static SENSOR_DEVICE_ATTR_RW(pwm1_auto_point2_pwm
, pwm_max
, 0);
1062 static SENSOR_DEVICE_ATTR_RW(pwm2_auto_point2_pwm
, pwm_max
, 1);
1063 static SENSOR_DEVICE_ATTR_RW(pwm3_auto_point2_pwm
, pwm_max
, 2);
1064 static SENSOR_DEVICE_ATTR_RW(pwm4_auto_point2_pwm
, pwm_max
, 3);
1066 static SENSOR_DEVICE_ATTR_RW(pwm1_auto_point1_temp
, pwm_tmin
, 0);
1067 static SENSOR_DEVICE_ATTR_RW(pwm2_auto_point1_temp
, pwm_tmin
, 1);
1068 static SENSOR_DEVICE_ATTR_RW(pwm3_auto_point1_temp
, pwm_tmin
, 2);
1069 static SENSOR_DEVICE_ATTR_RW(pwm4_auto_point1_temp
, pwm_tmin
, 3);
1071 static SENSOR_DEVICE_ATTR_RO(pwm1_auto_point2_temp
, pwm_tmax
, 0);
1072 static SENSOR_DEVICE_ATTR_RO(pwm2_auto_point2_temp
, pwm_tmax
, 1);
1073 static SENSOR_DEVICE_ATTR_RO(pwm3_auto_point2_temp
, pwm_tmax
, 2);
1074 static SENSOR_DEVICE_ATTR_RO(pwm4_auto_point2_temp
, pwm_tmax
, 3);
1076 static SENSOR_DEVICE_ATTR_RW(pwm1_enable
, pwm_auto
, 0);
1077 static SENSOR_DEVICE_ATTR_RW(pwm2_enable
, pwm_auto
, 1);
1078 static SENSOR_DEVICE_ATTR_RW(pwm3_enable
, pwm_auto
, 2);
1079 static SENSOR_DEVICE_ATTR_RW(pwm4_enable
, pwm_auto
, 3);
1081 static SENSOR_DEVICE_ATTR_RW(pwm1_auto_channels_temp
, pwm_auto_temp
, 0);
1082 static SENSOR_DEVICE_ATTR_RW(pwm2_auto_channels_temp
, pwm_auto_temp
, 1);
1083 static SENSOR_DEVICE_ATTR_RW(pwm3_auto_channels_temp
, pwm_auto_temp
, 2);
1084 static SENSOR_DEVICE_ATTR_RW(pwm4_auto_channels_temp
, pwm_auto_temp
, 3);
1086 static struct attribute
*adt7470_attrs
[] = {
1087 &dev_attr_alarm_mask
.attr
,
1088 &dev_attr_num_temp_sensors
.attr
,
1089 &dev_attr_auto_update_interval
.attr
,
1090 &sensor_dev_attr_temp1_max
.dev_attr
.attr
,
1091 &sensor_dev_attr_temp2_max
.dev_attr
.attr
,
1092 &sensor_dev_attr_temp3_max
.dev_attr
.attr
,
1093 &sensor_dev_attr_temp4_max
.dev_attr
.attr
,
1094 &sensor_dev_attr_temp5_max
.dev_attr
.attr
,
1095 &sensor_dev_attr_temp6_max
.dev_attr
.attr
,
1096 &sensor_dev_attr_temp7_max
.dev_attr
.attr
,
1097 &sensor_dev_attr_temp8_max
.dev_attr
.attr
,
1098 &sensor_dev_attr_temp9_max
.dev_attr
.attr
,
1099 &sensor_dev_attr_temp10_max
.dev_attr
.attr
,
1100 &sensor_dev_attr_temp1_min
.dev_attr
.attr
,
1101 &sensor_dev_attr_temp2_min
.dev_attr
.attr
,
1102 &sensor_dev_attr_temp3_min
.dev_attr
.attr
,
1103 &sensor_dev_attr_temp4_min
.dev_attr
.attr
,
1104 &sensor_dev_attr_temp5_min
.dev_attr
.attr
,
1105 &sensor_dev_attr_temp6_min
.dev_attr
.attr
,
1106 &sensor_dev_attr_temp7_min
.dev_attr
.attr
,
1107 &sensor_dev_attr_temp8_min
.dev_attr
.attr
,
1108 &sensor_dev_attr_temp9_min
.dev_attr
.attr
,
1109 &sensor_dev_attr_temp10_min
.dev_attr
.attr
,
1110 &sensor_dev_attr_temp1_input
.dev_attr
.attr
,
1111 &sensor_dev_attr_temp2_input
.dev_attr
.attr
,
1112 &sensor_dev_attr_temp3_input
.dev_attr
.attr
,
1113 &sensor_dev_attr_temp4_input
.dev_attr
.attr
,
1114 &sensor_dev_attr_temp5_input
.dev_attr
.attr
,
1115 &sensor_dev_attr_temp6_input
.dev_attr
.attr
,
1116 &sensor_dev_attr_temp7_input
.dev_attr
.attr
,
1117 &sensor_dev_attr_temp8_input
.dev_attr
.attr
,
1118 &sensor_dev_attr_temp9_input
.dev_attr
.attr
,
1119 &sensor_dev_attr_temp10_input
.dev_attr
.attr
,
1120 &sensor_dev_attr_temp1_alarm
.dev_attr
.attr
,
1121 &sensor_dev_attr_temp2_alarm
.dev_attr
.attr
,
1122 &sensor_dev_attr_temp3_alarm
.dev_attr
.attr
,
1123 &sensor_dev_attr_temp4_alarm
.dev_attr
.attr
,
1124 &sensor_dev_attr_temp5_alarm
.dev_attr
.attr
,
1125 &sensor_dev_attr_temp6_alarm
.dev_attr
.attr
,
1126 &sensor_dev_attr_temp7_alarm
.dev_attr
.attr
,
1127 &sensor_dev_attr_temp8_alarm
.dev_attr
.attr
,
1128 &sensor_dev_attr_temp9_alarm
.dev_attr
.attr
,
1129 &sensor_dev_attr_temp10_alarm
.dev_attr
.attr
,
1130 &sensor_dev_attr_fan1_max
.dev_attr
.attr
,
1131 &sensor_dev_attr_fan2_max
.dev_attr
.attr
,
1132 &sensor_dev_attr_fan3_max
.dev_attr
.attr
,
1133 &sensor_dev_attr_fan4_max
.dev_attr
.attr
,
1134 &sensor_dev_attr_fan1_min
.dev_attr
.attr
,
1135 &sensor_dev_attr_fan2_min
.dev_attr
.attr
,
1136 &sensor_dev_attr_fan3_min
.dev_attr
.attr
,
1137 &sensor_dev_attr_fan4_min
.dev_attr
.attr
,
1138 &sensor_dev_attr_fan1_input
.dev_attr
.attr
,
1139 &sensor_dev_attr_fan2_input
.dev_attr
.attr
,
1140 &sensor_dev_attr_fan3_input
.dev_attr
.attr
,
1141 &sensor_dev_attr_fan4_input
.dev_attr
.attr
,
1142 &sensor_dev_attr_fan1_alarm
.dev_attr
.attr
,
1143 &sensor_dev_attr_fan2_alarm
.dev_attr
.attr
,
1144 &sensor_dev_attr_fan3_alarm
.dev_attr
.attr
,
1145 &sensor_dev_attr_fan4_alarm
.dev_attr
.attr
,
1146 &sensor_dev_attr_force_pwm_max
.dev_attr
.attr
,
1147 &sensor_dev_attr_pwm1
.dev_attr
.attr
,
1148 &dev_attr_pwm1_freq
.attr
,
1149 &sensor_dev_attr_pwm2
.dev_attr
.attr
,
1150 &sensor_dev_attr_pwm3
.dev_attr
.attr
,
1151 &sensor_dev_attr_pwm4
.dev_attr
.attr
,
1152 &sensor_dev_attr_pwm1_auto_point1_pwm
.dev_attr
.attr
,
1153 &sensor_dev_attr_pwm2_auto_point1_pwm
.dev_attr
.attr
,
1154 &sensor_dev_attr_pwm3_auto_point1_pwm
.dev_attr
.attr
,
1155 &sensor_dev_attr_pwm4_auto_point1_pwm
.dev_attr
.attr
,
1156 &sensor_dev_attr_pwm1_auto_point2_pwm
.dev_attr
.attr
,
1157 &sensor_dev_attr_pwm2_auto_point2_pwm
.dev_attr
.attr
,
1158 &sensor_dev_attr_pwm3_auto_point2_pwm
.dev_attr
.attr
,
1159 &sensor_dev_attr_pwm4_auto_point2_pwm
.dev_attr
.attr
,
1160 &sensor_dev_attr_pwm1_auto_point1_temp
.dev_attr
.attr
,
1161 &sensor_dev_attr_pwm2_auto_point1_temp
.dev_attr
.attr
,
1162 &sensor_dev_attr_pwm3_auto_point1_temp
.dev_attr
.attr
,
1163 &sensor_dev_attr_pwm4_auto_point1_temp
.dev_attr
.attr
,
1164 &sensor_dev_attr_pwm1_auto_point2_temp
.dev_attr
.attr
,
1165 &sensor_dev_attr_pwm2_auto_point2_temp
.dev_attr
.attr
,
1166 &sensor_dev_attr_pwm3_auto_point2_temp
.dev_attr
.attr
,
1167 &sensor_dev_attr_pwm4_auto_point2_temp
.dev_attr
.attr
,
1168 &sensor_dev_attr_pwm1_enable
.dev_attr
.attr
,
1169 &sensor_dev_attr_pwm2_enable
.dev_attr
.attr
,
1170 &sensor_dev_attr_pwm3_enable
.dev_attr
.attr
,
1171 &sensor_dev_attr_pwm4_enable
.dev_attr
.attr
,
1172 &sensor_dev_attr_pwm1_auto_channels_temp
.dev_attr
.attr
,
1173 &sensor_dev_attr_pwm2_auto_channels_temp
.dev_attr
.attr
,
1174 &sensor_dev_attr_pwm3_auto_channels_temp
.dev_attr
.attr
,
1175 &sensor_dev_attr_pwm4_auto_channels_temp
.dev_attr
.attr
,
1179 ATTRIBUTE_GROUPS(adt7470
);
1181 /* Return 0 if detection is successful, -ENODEV otherwise */
1182 static int adt7470_detect(struct i2c_client
*client
,
1183 struct i2c_board_info
*info
)
1185 struct i2c_adapter
*adapter
= client
->adapter
;
1186 int vendor
, device
, revision
;
1188 if (!i2c_check_functionality(adapter
, I2C_FUNC_SMBUS_BYTE_DATA
))
1191 vendor
= i2c_smbus_read_byte_data(client
, ADT7470_REG_VENDOR
);
1192 if (vendor
!= ADT7470_VENDOR
)
1195 device
= i2c_smbus_read_byte_data(client
, ADT7470_REG_DEVICE
);
1196 if (device
!= ADT7470_DEVICE
)
1199 revision
= i2c_smbus_read_byte_data(client
, ADT7470_REG_REVISION
);
1200 if (revision
!= ADT7470_REVISION
)
1203 strlcpy(info
->type
, "adt7470", I2C_NAME_SIZE
);
1208 static void adt7470_init_client(struct i2c_client
*client
)
1210 int reg
= i2c_smbus_read_byte_data(client
, ADT7470_REG_CFG
);
1213 dev_err(&client
->dev
, "cannot read configuration register\n");
1215 /* start monitoring (and do a self-test) */
1216 i2c_smbus_write_byte_data(client
, ADT7470_REG_CFG
, reg
| 3);
1220 static int adt7470_probe(struct i2c_client
*client
,
1221 const struct i2c_device_id
*id
)
1223 struct device
*dev
= &client
->dev
;
1224 struct adt7470_data
*data
;
1225 struct device
*hwmon_dev
;
1227 data
= devm_kzalloc(dev
, sizeof(struct adt7470_data
), GFP_KERNEL
);
1231 data
->num_temp_sensors
= -1;
1232 data
->auto_update_interval
= AUTO_UPDATE_INTERVAL
;
1234 i2c_set_clientdata(client
, data
);
1235 data
->client
= client
;
1236 mutex_init(&data
->lock
);
1238 dev_info(&client
->dev
, "%s chip found\n", client
->name
);
1240 /* Initialize the ADT7470 chip */
1241 adt7470_init_client(client
);
1243 /* Register sysfs hooks */
1244 hwmon_dev
= devm_hwmon_device_register_with_groups(dev
, client
->name
,
1248 if (IS_ERR(hwmon_dev
))
1249 return PTR_ERR(hwmon_dev
);
1251 data
->auto_update
= kthread_run(adt7470_update_thread
, client
, "%s",
1252 dev_name(hwmon_dev
));
1253 if (IS_ERR(data
->auto_update
)) {
1254 return PTR_ERR(data
->auto_update
);
1260 static int adt7470_remove(struct i2c_client
*client
)
1262 struct adt7470_data
*data
= i2c_get_clientdata(client
);
1264 kthread_stop(data
->auto_update
);
1268 static const struct i2c_device_id adt7470_id
[] = {
1272 MODULE_DEVICE_TABLE(i2c
, adt7470_id
);
1274 static struct i2c_driver adt7470_driver
= {
1275 .class = I2C_CLASS_HWMON
,
1279 .probe
= adt7470_probe
,
1280 .remove
= adt7470_remove
,
1281 .id_table
= adt7470_id
,
1282 .detect
= adt7470_detect
,
1283 .address_list
= normal_i2c
,
1286 module_i2c_driver(adt7470_driver
);
1288 MODULE_AUTHOR("Darrick J. Wong <darrick.wong@oracle.com>");
1289 MODULE_DESCRIPTION("ADT7470 driver");
1290 MODULE_LICENSE("GPL");