1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * A hwmon driver for the Analog Devices ADT7470
4 * Copyright (C) 2007 IBM
5 *
6 * Author: Darrick J. Wong <darrick.wong@oracle.com>
7 */
8
9 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
10
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/regmap.h>
22 #include <linux/sched.h>
23 #include <linux/slab.h>
24 #include <linux/util_macros.h>
25 #include <linux/pwm.h>
26 #include <linux/cleanup.h>
27 #include <linux/math64.h>
28
29 /* Addresses to scan */
30 static const unsigned short normal_i2c[] = { 0x2C, 0x2E, 0x2F, I2C_CLIENT_END };
31
32 /* ADT7470 registers */
33 #define ADT7470_REG_BASE_ADDR 0x20
34 #define ADT7470_REG_TEMP_BASE_ADDR 0x20
35 #define ADT7470_REG_TEMP_MAX_ADDR 0x29
36 #define ADT7470_REG_FAN_BASE_ADDR 0x2A
37 #define ADT7470_REG_FAN_MAX_ADDR 0x31
38 #define ADT7470_REG_PWM_BASE_ADDR 0x32
39 #define ADT7470_REG_PWM_MAX_ADDR 0x35
40 #define ADT7470_REG_PWM_MAX_BASE_ADDR 0x38
41 #define ADT7470_REG_PWM_MAX_MAX_ADDR 0x3B
42 #define ADT7470_REG_CFG 0x40
43 #define ADT7470_STRT_MASK 0x01
44 #define ADT7470_TEST_MASK 0x02
45 #define ADT7470_FSPD_MASK 0x04
46 #define ADT7470_T05_STB_MASK 0x80
47 #define ADT7470_REG_ALARM1 0x41
48 #define ADT7470_R1T_ALARM 0x01
49 #define ADT7470_R2T_ALARM 0x02
50 #define ADT7470_R3T_ALARM 0x04
51 #define ADT7470_R4T_ALARM 0x08
52 #define ADT7470_R5T_ALARM 0x10
53 #define ADT7470_R6T_ALARM 0x20
54 #define ADT7470_R7T_ALARM 0x40
55 #define ADT7470_OOL_ALARM 0x80
56 #define ADT7470_REG_ALARM2 0x42
57 #define ADT7470_R8T_ALARM 0x01
58 #define ADT7470_R9T_ALARM 0x02
59 #define ADT7470_R10T_ALARM 0x04
60 #define ADT7470_FAN1_ALARM 0x10
61 #define ADT7470_FAN2_ALARM 0x20
62 #define ADT7470_FAN3_ALARM 0x40
63 #define ADT7470_FAN4_ALARM 0x80
64 #define ADT7470_REG_TEMP_LIMITS_BASE_ADDR 0x44
65 #define ADT7470_REG_TEMP_LIMITS_MAX_ADDR 0x57
66 #define ADT7470_REG_FAN_MIN_BASE_ADDR 0x58
67 #define ADT7470_REG_FAN_MIN_MAX_ADDR 0x5F
68 #define ADT7470_REG_FAN_MAX_BASE_ADDR 0x60
69 #define ADT7470_REG_FAN_MAX_MAX_ADDR 0x67
70 #define ADT7470_REG_PWM_CFG_BASE_ADDR 0x68
71 #define ADT7470_REG_PWM12_CFG 0x68
72 #define ADT7470_PWM2_AUTO_MASK 0x40
73 #define ADT7470_PWM1_AUTO_MASK 0x80
74 #define ADT7470_PWM_AUTO_MASK 0xC0
75 #define ADT7470_REG_PWM34_CFG 0x69
76 #define ADT7470_PWM4_AUTO_MASK 0x40
77 #define ADT7470_PWM3_AUTO_MASK 0x80
78 #define ADT7470_REG_PWM_MIN_BASE_ADDR 0x6A
79 #define ADT7470_REG_PWM_MIN_MAX_ADDR 0x6D
80 #define ADT7470_REG_PWM_TEMP_MIN_BASE_ADDR 0x6E
81 #define ADT7470_REG_PWM_TEMP_MIN_MAX_ADDR 0x71
82 #define ADT7470_REG_CFG_2 0x74
83 #define ADT7470_REG_ACOUSTICS12 0x75
84 #define ADT7470_REG_ACOUSTICS34 0x76
85 #define ADT7470_REG_DEVICE 0x3D
86 #define ADT7470_REG_VENDOR 0x3E
87 #define ADT7470_REG_REVISION 0x3F
88 #define ADT7470_REG_ALARM1_MASK 0x72
89 #define ADT7470_REG_ALARM2_MASK 0x73
90 #define ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR 0x7C
91 #define ADT7470_REG_PWM_AUTO_TEMP_MAX_ADDR 0x7D
92 #define ADT7470_REG_MAX_ADDR 0x81
93
94 #define ADT7470_TEMP_COUNT 10
95 #define ADT7470_TEMP_REG(x) (ADT7470_REG_TEMP_BASE_ADDR + (x))
96 #define ADT7470_TEMP_MIN_REG(x) (ADT7470_REG_TEMP_LIMITS_BASE_ADDR + ((x) * 2))
97 #define ADT7470_TEMP_MAX_REG(x) (ADT7470_REG_TEMP_LIMITS_BASE_ADDR + \
98 ((x) * 2) + 1)
99
100 #define ADT7470_FAN_COUNT 4
101 #define ADT7470_REG_FAN(x) (ADT7470_REG_FAN_BASE_ADDR + ((x) * 2))
102 #define ADT7470_REG_FAN_MIN(x) (ADT7470_REG_FAN_MIN_BASE_ADDR + ((x) * 2))
103 #define ADT7470_REG_FAN_MAX(x) (ADT7470_REG_FAN_MAX_BASE_ADDR + ((x) * 2))
104
105 #define ADT7470_PWM_COUNT 4
106 #define ADT7470_PWM_MAX 255
107 #define ADT7470_REG_PWM(x) (ADT7470_REG_PWM_BASE_ADDR + (x))
108 #define ADT7470_REG_PWM_MAX(x) (ADT7470_REG_PWM_MAX_BASE_ADDR + (x))
109 #define ADT7470_REG_PWM_MIN(x) (ADT7470_REG_PWM_MIN_BASE_ADDR + (x))
110 #define ADT7470_REG_PWM_TMIN(x) (ADT7470_REG_PWM_TEMP_MIN_BASE_ADDR + (x))
111 #define ADT7470_REG_PWM_CFG(x) (ADT7470_REG_PWM_CFG_BASE_ADDR + ((x) / 2))
112 #define ADT7470_REG_PWM_AUTO_TEMP(x) (ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR + \
113 ((x) / 2))
114
115 #define ALARM2(x) ((x) << 8)
116
117 /* TEMP1..TEMP7 (ch 0..6) are, respectively BIT(0)..BIT(6) of reg 0x41 and
118 * 0x72, or BIT(0)..BIT(6) of data->alarm.
119 * TEMP8..TEMP9 (ch 7..9) are, respectively BIT(0)..BIT(2) of reg 0x42 and
120 * 0x73, or BIT(8)..BIT(10) of data->alarm.
121 */
122 #define TEMP_ALARM_BIT(ch) ({ \
123 typeof(ch) _ch = (ch); \
124 (1 << (_ch < 7 ? _ch : _ch + 1)); \
125 })
126
127 /* FAN1..FAN4 (ch 0..3) are respectively BIT(4)..BIT(7) in
128 * reg 0x42 and 0x73 or BIT(12)..BIT(15) in data->alarm.
129 */
130 #define FAN_ALARM_BIT(ch) (1 << (12 + (ch)))
131
132 #define ADT7470_VENDOR 0x41
133 #define ADT7470_DEVICE 0x70
134 /* datasheet only mentions a revision 2 */
135 #define ADT7470_REVISION 0x02
136
137 /* "all temps" according to hwmon sysfs interface spec */
138 #define ADT7470_PWM_ALL_TEMPS 0x3FF
139
140 /* How often do we reread sensors values? (In jiffies) */
141 #define SENSOR_REFRESH_INTERVAL (5 * HZ)
142
143 /* How often do we reread sensor limit values? (In jiffies) */
144 #define LIMIT_REFRESH_INTERVAL (60 * HZ)
145
146 /* Wait at least 200ms per sensor for 10 sensors */
147 #define TEMP_COLLECTION_TIME 2000
148
149 /* auto update thing won't fire more than every 2s */
150 #define AUTO_UPDATE_INTERVAL 2000
151
152 /* datasheet says to divide this number by the fan reading to get fan rpm */
153 #define FAN_PERIOD_TO_RPM(x) ((90000 * 60) / (x))
154 #define FAN_RPM_TO_PERIOD FAN_PERIOD_TO_RPM
155 #define FAN_PERIOD_INVALID 65535
156 #define FAN_DATA_VALID(x) ((x) && (x) != FAN_PERIOD_INVALID)
157
158 /* Config registers 1 and 2 include fields for selecting the PWM frequency */
159 #define ADT7470_CFG_LF 0x40
160 #define ADT7470_FREQ_MASK 0x70
161 #define ADT7470_FREQ_SHIFT 4
162
163 struct adt7470_data {
164 struct regmap *regmap;
165 struct mutex lock;
166 char sensors_valid;
167 char limits_valid;
168 unsigned long sensors_last_updated; /* In jiffies */
169 unsigned long limits_last_updated; /* In jiffies */
170 bool use_pwm_framework;
171
172 int num_temp_sensors; /* -1 = probe */
173 int temperatures_probed;
174
175 s8 temp[ADT7470_TEMP_COUNT];
176 s8 temp_min[ADT7470_TEMP_COUNT];
177 s8 temp_max[ADT7470_TEMP_COUNT];
178 u16 fan[ADT7470_FAN_COUNT];
179 u16 fan_min[ADT7470_FAN_COUNT];
180 u16 fan_max[ADT7470_FAN_COUNT];
181 u16 alarm;
182 u16 alarms_mask;
183 u8 force_pwm_max;
184 u8 pwm[ADT7470_PWM_COUNT];
185 u8 pwm_max[ADT7470_PWM_COUNT];
186 u8 pwm_automatic[ADT7470_PWM_COUNT];
187 u8 pwm_min[ADT7470_PWM_COUNT];
188 s8 pwm_tmin[ADT7470_PWM_COUNT];
189 u8 pwm_auto_temp[ADT7470_PWM_COUNT];
190 u32 pwm_freq;
191
192 struct task_struct *auto_update;
193 unsigned int auto_update_interval;
194 };
195
196 /*
197 * 16-bit registers on the ADT7470 are low-byte first. The data sheet says
198 * that the low byte must be read before the high byte.
199 */
adt7470_read_word_data(struct adt7470_data * data,unsigned int reg,unsigned int * val)200 static inline int adt7470_read_word_data(struct adt7470_data *data, unsigned int reg,
201 unsigned int *val)
202 {
203 u8 regval[2];
204 int err;
205
206 err = regmap_bulk_read(data->regmap, reg, ®val, 2);
207 if (err < 0)
208 return err;
209
210 *val = regval[0] | (regval[1] << 8);
211
212 return 0;
213 }
214
adt7470_write_word_data(struct adt7470_data * data,unsigned int reg,unsigned int val)215 static inline int adt7470_write_word_data(struct adt7470_data *data, unsigned int reg,
216 unsigned int val)
217 {
218 u8 regval[2];
219
220 regval[0] = val & 0xFF;
221 regval[1] = val >> 8;
222
223 return regmap_bulk_write(data->regmap, reg, ®val, 2);
224 }
225
226 /* Probe for temperature sensors. Assumes lock is held */
adt7470_read_temperatures(struct adt7470_data * data)227 static int adt7470_read_temperatures(struct adt7470_data *data)
228 {
229 struct device *dev = regmap_get_device(data->regmap);
230 u8 pwm[ADT7470_FAN_COUNT];
231 unsigned int pwm_cfg[2];
232 unsigned long res;
233 int err, err2;
234 int i;
235
236 /* save pwm[1-4] config register */
237 err = regmap_read(data->regmap, ADT7470_REG_PWM_CFG(0), &pwm_cfg[0]);
238 if (err < 0)
239 return err;
240 err = regmap_read(data->regmap, ADT7470_REG_PWM_CFG(2), &pwm_cfg[1]);
241 if (err < 0)
242 return err;
243
244 /* set manual pwm to whatever it is set to now */
245 err = regmap_bulk_read(data->regmap, ADT7470_REG_PWM(0), &pwm[0],
246 ADT7470_PWM_COUNT);
247 if (err < 0)
248 return err;
249
250 /* put pwm in manual mode */
251 err = regmap_update_bits(data->regmap, ADT7470_REG_PWM_CFG(0),
252 ADT7470_PWM_AUTO_MASK, 0);
253 if (err < 0)
254 return err;
255 err = regmap_update_bits(data->regmap, ADT7470_REG_PWM_CFG(2),
256 ADT7470_PWM_AUTO_MASK, 0);
257 if (err < 0)
258 goto out_restore;
259
260 /* write pwm control to whatever it was */
261 err = regmap_bulk_write(data->regmap, ADT7470_REG_PWM(0), &pwm[0],
262 ADT7470_PWM_COUNT);
263 if (err < 0)
264 goto out_restore;
265
266 /* start reading temperature sensors */
267 err = regmap_update_bits(data->regmap, ADT7470_REG_CFG,
268 ADT7470_T05_STB_MASK, ADT7470_T05_STB_MASK);
269 if (err < 0)
270 goto out_restore;
271
272 /* Delay is 200ms * number of temp sensors. */
273 res = msleep_interruptible((data->num_temp_sensors >= 0 ?
274 data->num_temp_sensors * 200 :
275 TEMP_COLLECTION_TIME));
276
277 /* done reading temperature sensors */
278 err = regmap_update_bits(data->regmap, ADT7470_REG_CFG,
279 ADT7470_T05_STB_MASK, 0);
280 if (err < 0)
281 goto out_restore;
282
283 out_restore:
284 /* restore pwm[1-4] config registers */
285 err2 = regmap_write(data->regmap, ADT7470_REG_PWM_CFG(0), pwm_cfg[0]);
286 if (err2 < 0) {
287 dev_warn_ratelimited(dev,
288 "failed to restore PWM{1,2} config (%d)\n",
289 err2);
290
291 if (!err)
292 err = err2;
293 }
294
295 err2 = regmap_write(data->regmap, ADT7470_REG_PWM_CFG(2), pwm_cfg[1]);
296 if (err2 < 0) {
297 dev_warn_ratelimited(dev,
298 "failed to restore PWM{3,4} config (%d)\n",
299 err2);
300
301 if (!err)
302 err = err2;
303 }
304
305 if (err < 0)
306 return err;
307
308 if (res)
309 return -EAGAIN;
310
311 /* Only count fans if we have to */
312 if (data->num_temp_sensors >= 0)
313 return 0;
314
315 err = regmap_bulk_read(data->regmap, ADT7470_TEMP_REG(0), &data->temp[0],
316 ADT7470_TEMP_COUNT);
317 if (err < 0)
318 return err;
319 for (i = 0; i < ADT7470_TEMP_COUNT; i++) {
320 if (data->temp[i])
321 data->num_temp_sensors = i + 1;
322 }
323 data->temperatures_probed = 1;
324 return 0;
325 }
326
adt7470_update_thread(void * p)327 static int adt7470_update_thread(void *p)
328 {
329 struct i2c_client *client = p;
330 struct adt7470_data *data = i2c_get_clientdata(client);
331
332 while (!kthread_should_stop()) {
333 mutex_lock(&data->lock);
334 adt7470_read_temperatures(data);
335 mutex_unlock(&data->lock);
336
337 if (kthread_should_stop())
338 break;
339
340 schedule_timeout_interruptible(msecs_to_jiffies(data->auto_update_interval));
341 }
342
343 return 0;
344 }
345
adt7470_update_sensors(struct adt7470_data * data)346 static int adt7470_update_sensors(struct adt7470_data *data)
347 {
348 unsigned int val;
349 int err;
350 int i;
351
352 if (!data->temperatures_probed)
353 err = adt7470_read_temperatures(data);
354 else
355 err = regmap_bulk_read(data->regmap, ADT7470_TEMP_REG(0), &data->temp[0],
356 ADT7470_TEMP_COUNT);
357 if (err < 0)
358 return err;
359
360 for (i = 0; i < ADT7470_FAN_COUNT; i++) {
361 err = adt7470_read_word_data(data, ADT7470_REG_FAN(i), &val);
362 if (err < 0)
363 return err;
364 data->fan[i] = val;
365 }
366
367 err = regmap_bulk_read(data->regmap, ADT7470_REG_PWM(0), &data->pwm[0], ADT7470_PWM_COUNT);
368 if (err < 0)
369 return err;
370
371 for (i = 0; i < ADT7470_PWM_COUNT; i++) {
372 unsigned int mask;
373
374 if (i % 2)
375 mask = ADT7470_PWM2_AUTO_MASK;
376 else
377 mask = ADT7470_PWM1_AUTO_MASK;
378
379 err = regmap_read(data->regmap, ADT7470_REG_PWM_CFG(i), &val);
380 if (err < 0)
381 return err;
382 data->pwm_automatic[i] = !!(val & mask);
383
384 err = regmap_read(data->regmap, ADT7470_REG_PWM_AUTO_TEMP(i), &val);
385 if (err < 0)
386 return err;
387 if (!(i % 2))
388 data->pwm_auto_temp[i] = val >> 4;
389 else
390 data->pwm_auto_temp[i] = val & 0xF;
391 }
392
393 err = regmap_read(data->regmap, ADT7470_REG_CFG, &val);
394 if (err < 0)
395 return err;
396 data->force_pwm_max = !!(val & ADT7470_FSPD_MASK);
397
398 err = regmap_read(data->regmap, ADT7470_REG_ALARM1, &val);
399 if (err < 0)
400 return err;
401 data->alarm = val;
402 if (data->alarm & ADT7470_OOL_ALARM) {
403 err = regmap_read(data->regmap, ADT7470_REG_ALARM2, &val);
404 if (err < 0)
405 return err;
406 data->alarm |= ALARM2(val);
407 }
408
409 err = adt7470_read_word_data(data, ADT7470_REG_ALARM1_MASK, &val);
410 if (err < 0)
411 return err;
412 data->alarms_mask = val;
413
414 return 0;
415 }
416
adt7470_update_limits(struct adt7470_data * data)417 static int adt7470_update_limits(struct adt7470_data *data)
418 {
419 unsigned int val;
420 int err;
421 int i;
422
423 for (i = 0; i < ADT7470_TEMP_COUNT; i++) {
424 err = regmap_read(data->regmap, ADT7470_TEMP_MIN_REG(i), &val);
425 if (err < 0)
426 return err;
427 data->temp_min[i] = (s8)val;
428 err = regmap_read(data->regmap, ADT7470_TEMP_MAX_REG(i), &val);
429 if (err < 0)
430 return err;
431 data->temp_max[i] = (s8)val;
432 }
433
434 for (i = 0; i < ADT7470_FAN_COUNT; i++) {
435 err = adt7470_read_word_data(data, ADT7470_REG_FAN_MIN(i), &val);
436 if (err < 0)
437 return err;
438 data->fan_min[i] = val;
439 err = adt7470_read_word_data(data, ADT7470_REG_FAN_MAX(i), &val);
440 if (err < 0)
441 return err;
442 data->fan_max[i] = val;
443 }
444
445 for (i = 0; i < ADT7470_PWM_COUNT; i++) {
446 err = regmap_read(data->regmap, ADT7470_REG_PWM_MAX(i), &val);
447 if (err < 0)
448 return err;
449 data->pwm_max[i] = val;
450 err = regmap_read(data->regmap, ADT7470_REG_PWM_MIN(i), &val);
451 if (err < 0)
452 return err;
453 data->pwm_min[i] = val;
454 err = regmap_read(data->regmap, ADT7470_REG_PWM_TMIN(i), &val);
455 if (err < 0)
456 return err;
457 data->pwm_tmin[i] = (s8)val;
458 }
459
460 return 0;
461 }
462
adt7470_update_device(struct device * dev)463 static struct adt7470_data *adt7470_update_device(struct device *dev)
464 {
465 struct adt7470_data *data = dev_get_drvdata(dev);
466 unsigned long local_jiffies = jiffies;
467 int need_sensors = 1;
468 int need_limits = 1;
469 int err;
470
471 /*
472 * Figure out if we need to update the shadow registers.
473 * Lockless means that we may occasionally report out of
474 * date data.
475 */
476 if (time_before(local_jiffies, data->sensors_last_updated +
477 SENSOR_REFRESH_INTERVAL) &&
478 data->sensors_valid)
479 need_sensors = 0;
480
481 if (time_before(local_jiffies, data->limits_last_updated +
482 LIMIT_REFRESH_INTERVAL) &&
483 data->limits_valid)
484 need_limits = 0;
485
486 if (!need_sensors && !need_limits)
487 return data;
488
489 mutex_lock(&data->lock);
490 if (need_sensors) {
491 err = adt7470_update_sensors(data);
492 if (err < 0)
493 goto out;
494 data->sensors_last_updated = local_jiffies;
495 data->sensors_valid = 1;
496 }
497
498 if (need_limits) {
499 err = adt7470_update_limits(data);
500 if (err < 0)
501 goto out;
502 data->limits_last_updated = local_jiffies;
503 data->limits_valid = 1;
504 }
505 out:
506 mutex_unlock(&data->lock);
507
508 return err < 0 ? ERR_PTR(err) : data;
509 }
510
auto_update_interval_show(struct device * dev,struct device_attribute * devattr,char * buf)511 static ssize_t auto_update_interval_show(struct device *dev,
512 struct device_attribute *devattr,
513 char *buf)
514 {
515 struct adt7470_data *data = adt7470_update_device(dev);
516
517 if (IS_ERR(data))
518 return PTR_ERR(data);
519
520 return sprintf(buf, "%d\n", data->auto_update_interval);
521 }
522
auto_update_interval_store(struct device * dev,struct device_attribute * devattr,const char * buf,size_t count)523 static ssize_t auto_update_interval_store(struct device *dev,
524 struct device_attribute *devattr,
525 const char *buf, size_t count)
526 {
527 struct adt7470_data *data = dev_get_drvdata(dev);
528 long temp;
529
530 if (kstrtol(buf, 10, &temp))
531 return -EINVAL;
532
533 temp = clamp_val(temp, 500, 60000);
534
535 mutex_lock(&data->lock);
536 data->auto_update_interval = temp;
537 mutex_unlock(&data->lock);
538
539 return count;
540 }
541
num_temp_sensors_show(struct device * dev,struct device_attribute * devattr,char * buf)542 static ssize_t num_temp_sensors_show(struct device *dev,
543 struct device_attribute *devattr,
544 char *buf)
545 {
546 struct adt7470_data *data = adt7470_update_device(dev);
547
548 if (IS_ERR(data))
549 return PTR_ERR(data);
550
551 return sprintf(buf, "%d\n", data->num_temp_sensors);
552 }
553
num_temp_sensors_store(struct device * dev,struct device_attribute * devattr,const char * buf,size_t count)554 static ssize_t num_temp_sensors_store(struct device *dev,
555 struct device_attribute *devattr,
556 const char *buf, size_t count)
557 {
558 struct adt7470_data *data = dev_get_drvdata(dev);
559 long temp;
560
561 if (kstrtol(buf, 10, &temp))
562 return -EINVAL;
563
564 temp = clamp_val(temp, -1, 10);
565
566 mutex_lock(&data->lock);
567 data->num_temp_sensors = temp;
568 if (temp < 0)
569 data->temperatures_probed = 0;
570 mutex_unlock(&data->lock);
571
572 return count;
573 }
574
adt7470_temp_read(struct device * dev,u32 attr,int channel,long * val)575 static int adt7470_temp_read(struct device *dev, u32 attr, int channel, long *val)
576 {
577 struct adt7470_data *data = adt7470_update_device(dev);
578
579 if (IS_ERR(data))
580 return PTR_ERR(data);
581
582 switch (attr) {
583 case hwmon_temp_input:
584 *val = 1000 * data->temp[channel];
585 break;
586 case hwmon_temp_min:
587 *val = 1000 * data->temp_min[channel];
588 break;
589 case hwmon_temp_max:
590 *val = 1000 * data->temp_max[channel];
591 break;
592 case hwmon_temp_alarm:
593 *val = !!(data->alarm & TEMP_ALARM_BIT(channel));
594 break;
595 default:
596 return -EOPNOTSUPP;
597 }
598
599 return 0;
600 }
601
adt7470_temp_write(struct device * dev,u32 attr,int channel,long val)602 static int adt7470_temp_write(struct device *dev, u32 attr, int channel, long val)
603 {
604 struct adt7470_data *data = dev_get_drvdata(dev);
605 int err;
606
607 val = clamp_val(val, -128000, 127000);
608 val = DIV_ROUND_CLOSEST(val, 1000);
609
610 switch (attr) {
611 case hwmon_temp_min:
612 mutex_lock(&data->lock);
613 err = regmap_write(data->regmap, ADT7470_TEMP_MIN_REG(channel), val);
614 if (!err)
615 data->temp_min[channel] = val;
616 mutex_unlock(&data->lock);
617 break;
618 case hwmon_temp_max:
619 mutex_lock(&data->lock);
620 err = regmap_write(data->regmap, ADT7470_TEMP_MAX_REG(channel), val);
621 if (!err)
622 data->temp_max[channel] = val;
623 mutex_unlock(&data->lock);
624 break;
625 default:
626 return -EOPNOTSUPP;
627 }
628
629 return err;
630 }
631
alarm_mask_show(struct device * dev,struct device_attribute * devattr,char * buf)632 static ssize_t alarm_mask_show(struct device *dev,
633 struct device_attribute *devattr, char *buf)
634 {
635 struct adt7470_data *data = adt7470_update_device(dev);
636
637 if (IS_ERR(data))
638 return PTR_ERR(data);
639
640 return sprintf(buf, "%x\n", data->alarms_mask);
641 }
642
alarm_mask_store(struct device * dev,struct device_attribute * devattr,const char * buf,size_t count)643 static ssize_t alarm_mask_store(struct device *dev,
644 struct device_attribute *devattr,
645 const char *buf, size_t count)
646 {
647 struct adt7470_data *data = dev_get_drvdata(dev);
648 long mask;
649 int err;
650
651 if (kstrtoul(buf, 0, &mask))
652 return -EINVAL;
653
654 if (mask & ~0xffff)
655 return -EINVAL;
656
657 mutex_lock(&data->lock);
658 data->alarms_mask = mask;
659 err = adt7470_write_word_data(data, ADT7470_REG_ALARM1_MASK, mask);
660 mutex_unlock(&data->lock);
661
662 return err < 0 ? err : count;
663 }
664
adt7470_fan_read(struct device * dev,u32 attr,int channel,long * val)665 static int adt7470_fan_read(struct device *dev, u32 attr, int channel, long *val)
666 {
667 struct adt7470_data *data = adt7470_update_device(dev);
668 u16 fan_data;
669
670 if (IS_ERR(data))
671 return PTR_ERR(data);
672
673 switch (attr) {
674 case hwmon_fan_input:
675 fan_data = READ_ONCE(data->fan[channel]);
676 break;
677 case hwmon_fan_min:
678 fan_data = READ_ONCE(data->fan_min[channel]);
679 break;
680 case hwmon_fan_max:
681 fan_data = READ_ONCE(data->fan_max[channel]);
682 break;
683 case hwmon_fan_alarm:
684 *val = !!(data->alarm & FAN_ALARM_BIT(channel));
685 return 0;
686 default:
687 return -EOPNOTSUPP;
688 }
689
690 if (FAN_DATA_VALID(fan_data))
691 *val = FAN_PERIOD_TO_RPM(fan_data);
692 else
693 *val = 0;
694
695 return 0;
696 }
697
adt7470_fan_write(struct device * dev,u32 attr,int channel,long val)698 static int adt7470_fan_write(struct device *dev, u32 attr, int channel, long val)
699 {
700 struct adt7470_data *data = dev_get_drvdata(dev);
701 int err;
702
703 if (val <= 0)
704 return -EINVAL;
705
706 val = FAN_RPM_TO_PERIOD(val);
707 val = clamp_val(val, 1, 65534);
708
709 switch (attr) {
710 case hwmon_fan_min:
711 mutex_lock(&data->lock);
712 data->fan_min[channel] = val;
713 err = adt7470_write_word_data(data, ADT7470_REG_FAN_MIN(channel), val);
714 mutex_unlock(&data->lock);
715 break;
716 case hwmon_fan_max:
717 mutex_lock(&data->lock);
718 data->fan_max[channel] = val;
719 err = adt7470_write_word_data(data, ADT7470_REG_FAN_MAX(channel), val);
720 mutex_unlock(&data->lock);
721 break;
722 default:
723 return -EOPNOTSUPP;
724 }
725
726 return err;
727 }
728
force_pwm_max_show(struct device * dev,struct device_attribute * devattr,char * buf)729 static ssize_t force_pwm_max_show(struct device *dev,
730 struct device_attribute *devattr, char *buf)
731 {
732 struct adt7470_data *data = adt7470_update_device(dev);
733
734 if (IS_ERR(data))
735 return PTR_ERR(data);
736
737 return sprintf(buf, "%d\n", data->force_pwm_max);
738 }
739
force_pwm_max_store(struct device * dev,struct device_attribute * devattr,const char * buf,size_t count)740 static ssize_t force_pwm_max_store(struct device *dev,
741 struct device_attribute *devattr,
742 const char *buf, size_t count)
743 {
744 struct adt7470_data *data = dev_get_drvdata(dev);
745 long temp;
746 int err;
747
748 if (kstrtol(buf, 10, &temp))
749 return -EINVAL;
750
751 mutex_lock(&data->lock);
752 data->force_pwm_max = temp;
753 err = regmap_update_bits(data->regmap, ADT7470_REG_CFG,
754 ADT7470_FSPD_MASK,
755 temp ? ADT7470_FSPD_MASK : 0);
756 mutex_unlock(&data->lock);
757
758 return err < 0 ? err : count;
759 }
760
761 /* These are the valid PWM frequencies to the nearest Hz */
762 static const u32 adt7470_freq_map[] = {
763 11, 15, 22, 29, 35, 44, 59, 88, 1400, 22500
764 };
765
pwm1_freq_get(struct device * dev)766 static int pwm1_freq_get(struct device *dev)
767 {
768 struct adt7470_data *data = dev_get_drvdata(dev);
769 unsigned int regs[2] = {ADT7470_REG_CFG, ADT7470_REG_CFG_2};
770 u8 cfg_reg[2];
771 int index;
772 int err;
773
774 err = regmap_multi_reg_read(data->regmap, regs, cfg_reg, 2);
775 if (err)
776 return err;
777
778 index = (cfg_reg[1] & ADT7470_FREQ_MASK) >> ADT7470_FREQ_SHIFT;
779 if (!(cfg_reg[0] & ADT7470_CFG_LF))
780 index += 8;
781 if (index >= ARRAY_SIZE(adt7470_freq_map))
782 index = ARRAY_SIZE(adt7470_freq_map) - 1;
783
784 return adt7470_freq_map[index];
785 }
786
adt7470_pwm_read(struct device * dev,u32 attr,int channel,long * val)787 static int adt7470_pwm_read(struct device *dev, u32 attr, int channel, long *val)
788 {
789 struct adt7470_data *data = adt7470_update_device(dev);
790
791 if (IS_ERR(data))
792 return PTR_ERR(data);
793
794 switch (attr) {
795 case hwmon_pwm_input:
796 *val = data->pwm[channel];
797 break;
798 case hwmon_pwm_enable:
799 *val = 1 + data->pwm_automatic[channel];
800 break;
801 case hwmon_pwm_freq:
802 *val = data->pwm_freq;
803 break;
804 default:
805 return -EOPNOTSUPP;
806 }
807
808 return 0;
809 }
810
pwm1_freq_set(struct device * dev,long freq)811 static int pwm1_freq_set(struct device *dev, long freq)
812 {
813 struct adt7470_data *data = dev_get_drvdata(dev);
814 unsigned int low_freq = ADT7470_CFG_LF;
815 u32 closest_freq;
816 int index;
817 int err;
818
819 /* Round the user value given to the closest available frequency */
820 index = find_closest(freq, adt7470_freq_map,
821 ARRAY_SIZE(adt7470_freq_map));
822 closest_freq = adt7470_freq_map[index];
823
824 if (index >= 8) {
825 index -= 8;
826 low_freq = 0;
827 }
828
829 mutex_lock(&data->lock);
830 /* Configuration Register 1 */
831 err = regmap_update_bits(data->regmap, ADT7470_REG_CFG,
832 ADT7470_CFG_LF, low_freq);
833 if (err < 0)
834 goto out;
835
836 /* Configuration Register 2 */
837 err = regmap_update_bits(data->regmap, ADT7470_REG_CFG_2,
838 ADT7470_FREQ_MASK,
839 index << ADT7470_FREQ_SHIFT);
840 if (err < 0)
841 goto out;
842
843 data->pwm_freq = closest_freq;
844 out:
845 mutex_unlock(&data->lock);
846
847 return err;
848 }
849
adt7470_pwm_write(struct device * dev,u32 attr,int channel,long val)850 static int adt7470_pwm_write(struct device *dev, u32 attr, int channel, long val)
851 {
852 struct adt7470_data *data = dev_get_drvdata(dev);
853 unsigned int pwm_auto_reg_mask;
854 int err;
855
856 switch (attr) {
857 case hwmon_pwm_input:
858 val = clamp_val(val, 0, ADT7470_PWM_MAX);
859 mutex_lock(&data->lock);
860 err = regmap_write(data->regmap, ADT7470_REG_PWM(channel),
861 val);
862 if (!err)
863 data->pwm[channel] = val;
864 mutex_unlock(&data->lock);
865 break;
866 case hwmon_pwm_enable:
867 if (channel % 2)
868 pwm_auto_reg_mask = ADT7470_PWM2_AUTO_MASK;
869 else
870 pwm_auto_reg_mask = ADT7470_PWM1_AUTO_MASK;
871
872 if (val != 2 && val != 1)
873 return -EINVAL;
874 val--;
875
876 mutex_lock(&data->lock);
877 err = regmap_update_bits(data->regmap, ADT7470_REG_PWM_CFG(channel),
878 pwm_auto_reg_mask,
879 val ? pwm_auto_reg_mask : 0);
880 if (!err)
881 data->pwm_automatic[channel] = val;
882 mutex_unlock(&data->lock);
883 break;
884 case hwmon_pwm_freq:
885 err = pwm1_freq_set(dev, val);
886 break;
887 default:
888 return -EOPNOTSUPP;
889 }
890
891 return err;
892 }
893
894 struct adt7470_pwm_wfhw {
895 u8 val;
896 };
897
adt7470_pwm_round_waveform_tohw(struct pwm_chip * chip,struct pwm_device * pwm,const struct pwm_waveform * wf,void * _wfhw)898 static int adt7470_pwm_round_waveform_tohw(struct pwm_chip *chip,
899 struct pwm_device *pwm,
900 const struct pwm_waveform *wf,
901 void *_wfhw)
902 {
903 struct adt7470_data *data = pwmchip_get_drvdata(chip);
904 struct adt7470_pwm_wfhw *wfhw = _wfhw;
905 u64 actual_period;
906
907 if (wf->duty_length_ns == 0) {
908 wfhw->val = 0;
909 return 0;
910 }
911
912 /*
913 * The PWM frequency (period) is a single chip-wide setting shared by
914 * all 4 channels, so it cannot be changed on a per-pwm_device basis
915 * through this API. The duty cycle is rounded against the currently
916 * configured hardware period rather than the period requested in
917 * @wf; round_waveform_fromhw() reports the actual resulting
918 * waveform back so the core/consumer can detect a mismatch.
919 */
920 actual_period = DIV_ROUND_UP_ULL(NSEC_PER_SEC, data->pwm_freq);
921
922 if (actual_period > wf->period_length_ns)
923 /* period too short */
924 return 1;
925
926 if (wf->duty_length_ns >= actual_period) {
927 wfhw->val = ADT7470_PWM_MAX;
928 } else {
929 wfhw->val = mul_u64_u64_div_u64(wf->duty_length_ns,
930 ADT7470_PWM_MAX,
931 actual_period);
932 }
933
934 return 0;
935 }
936
adt7470_pwm_round_waveform_fromhw(struct pwm_chip * chip,struct pwm_device * pwm,const void * _wfhw,struct pwm_waveform * wf)937 static int adt7470_pwm_round_waveform_fromhw(struct pwm_chip *chip,
938 struct pwm_device *pwm,
939 const void *_wfhw,
940 struct pwm_waveform *wf)
941 {
942 struct adt7470_data *data = pwmchip_get_drvdata(chip);
943 const struct adt7470_pwm_wfhw *wfhw = _wfhw;
944
945 wf->period_length_ns = DIV_ROUND_UP_ULL(NSEC_PER_SEC, data->pwm_freq);
946 wf->duty_offset_ns = 0;
947 wf->duty_length_ns = DIV_ROUND_UP_ULL((u64)wfhw->val * wf->period_length_ns,
948 ADT7470_PWM_MAX);
949 return 0;
950 }
951
adt7470_pwm_read_waveform(struct pwm_chip * chip,struct pwm_device * pwm,void * _wfhw)952 static int adt7470_pwm_read_waveform(struct pwm_chip *chip,
953 struct pwm_device *pwm,
954 void *_wfhw)
955 {
956 struct adt7470_data *data = pwmchip_get_drvdata(chip);
957 struct device *dev = regmap_get_device(data->regmap);
958 struct adt7470_pwm_wfhw *wfhw = _wfhw;
959
960 data = adt7470_update_device(dev);
961 if (IS_ERR(data))
962 return PTR_ERR(data);
963
964 /*
965 * No lock needed: like the other hwmon_ops read callbacks in this
966 * driver (e.g. adt7470_pwm_read()), this only does a single byte
967 * read from the cache populated by adt7470_update_device().
968 */
969 wfhw->val = data->pwm[pwm->hwpwm];
970
971 return 0;
972 }
973
adt7470_pwm_write_waveform(struct pwm_chip * chip,struct pwm_device * pwm,const void * _wfhw)974 static int adt7470_pwm_write_waveform(struct pwm_chip *chip,
975 struct pwm_device *pwm,
976 const void *_wfhw)
977 {
978 struct adt7470_data *data = pwmchip_get_drvdata(chip);
979 const struct adt7470_pwm_wfhw *wfhw = _wfhw;
980 unsigned int pwm_auto_reg_mask;
981 int err;
982
983 if (pwm->hwpwm % 2)
984 pwm_auto_reg_mask = ADT7470_PWM2_AUTO_MASK;
985 else
986 pwm_auto_reg_mask = ADT7470_PWM1_AUTO_MASK;
987
988 guard(mutex)(&data->lock);
989
990 if (data->pwm[pwm->hwpwm] == wfhw->val &&
991 data->pwm_automatic[pwm->hwpwm] == 0)
992 return 0;
993
994 /* Put the PWM channel in manual mode before updating it. */
995 err = regmap_update_bits(data->regmap,
996 ADT7470_REG_PWM_CFG(pwm->hwpwm),
997 pwm_auto_reg_mask, 0);
998 if (err < 0)
999 return err;
1000
1001 data->pwm_automatic[pwm->hwpwm] = 0;
1002
1003 err = regmap_write(data->regmap,
1004 ADT7470_REG_PWM(pwm->hwpwm), wfhw->val);
1005 if (err < 0)
1006 return err;
1007
1008 data->pwm[pwm->hwpwm] = wfhw->val;
1009
1010 return 0;
1011 }
1012
1013 static const struct pwm_ops adt7470_pwm_ops = {
1014 .sizeof_wfhw = sizeof(struct adt7470_pwm_wfhw),
1015 .round_waveform_tohw = adt7470_pwm_round_waveform_tohw,
1016 .round_waveform_fromhw = adt7470_pwm_round_waveform_fromhw,
1017 .read_waveform = adt7470_pwm_read_waveform,
1018 .write_waveform = adt7470_pwm_write_waveform,
1019 };
1020
pwm_max_show(struct device * dev,struct device_attribute * devattr,char * buf)1021 static ssize_t pwm_max_show(struct device *dev,
1022 struct device_attribute *devattr, char *buf)
1023 {
1024 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1025 struct adt7470_data *data = adt7470_update_device(dev);
1026
1027 if (IS_ERR(data))
1028 return PTR_ERR(data);
1029
1030 return sprintf(buf, "%d\n", data->pwm_max[attr->index]);
1031 }
1032
pwm_max_store(struct device * dev,struct device_attribute * devattr,const char * buf,size_t count)1033 static ssize_t pwm_max_store(struct device *dev,
1034 struct device_attribute *devattr,
1035 const char *buf, size_t count)
1036 {
1037 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1038 struct adt7470_data *data = dev_get_drvdata(dev);
1039 long temp;
1040 int err;
1041
1042 if (kstrtol(buf, 10, &temp))
1043 return -EINVAL;
1044
1045 temp = clamp_val(temp, 0, ADT7470_PWM_MAX);
1046
1047 mutex_lock(&data->lock);
1048 data->pwm_max[attr->index] = temp;
1049 err = regmap_write(data->regmap, ADT7470_REG_PWM_MAX(attr->index),
1050 temp);
1051 mutex_unlock(&data->lock);
1052
1053 return err < 0 ? err : count;
1054 }
1055
pwm_min_show(struct device * dev,struct device_attribute * devattr,char * buf)1056 static ssize_t pwm_min_show(struct device *dev,
1057 struct device_attribute *devattr, char *buf)
1058 {
1059 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1060 struct adt7470_data *data = adt7470_update_device(dev);
1061
1062 if (IS_ERR(data))
1063 return PTR_ERR(data);
1064
1065 return sprintf(buf, "%d\n", data->pwm_min[attr->index]);
1066 }
1067
pwm_min_store(struct device * dev,struct device_attribute * devattr,const char * buf,size_t count)1068 static ssize_t pwm_min_store(struct device *dev,
1069 struct device_attribute *devattr,
1070 const char *buf, size_t count)
1071 {
1072 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1073 struct adt7470_data *data = dev_get_drvdata(dev);
1074 long temp;
1075 int err;
1076
1077 if (kstrtol(buf, 10, &temp))
1078 return -EINVAL;
1079
1080 temp = clamp_val(temp, 0, ADT7470_PWM_MAX);
1081
1082 mutex_lock(&data->lock);
1083 data->pwm_min[attr->index] = temp;
1084 err = regmap_write(data->regmap, ADT7470_REG_PWM_MIN(attr->index),
1085 temp);
1086 mutex_unlock(&data->lock);
1087
1088 return err < 0 ? err : count;
1089 }
1090
pwm_tmax_show(struct device * dev,struct device_attribute * devattr,char * buf)1091 static ssize_t pwm_tmax_show(struct device *dev,
1092 struct device_attribute *devattr, char *buf)
1093 {
1094 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1095 struct adt7470_data *data = adt7470_update_device(dev);
1096
1097 if (IS_ERR(data))
1098 return PTR_ERR(data);
1099
1100 /* the datasheet says that tmax = tmin + 20C */
1101 return sprintf(buf, "%d\n", 1000 * (20 + data->pwm_tmin[attr->index]));
1102 }
1103
pwm_tmin_show(struct device * dev,struct device_attribute * devattr,char * buf)1104 static ssize_t pwm_tmin_show(struct device *dev,
1105 struct device_attribute *devattr, char *buf)
1106 {
1107 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1108 struct adt7470_data *data = adt7470_update_device(dev);
1109
1110 if (IS_ERR(data))
1111 return PTR_ERR(data);
1112
1113 return sprintf(buf, "%d\n", 1000 * data->pwm_tmin[attr->index]);
1114 }
1115
pwm_tmin_store(struct device * dev,struct device_attribute * devattr,const char * buf,size_t count)1116 static ssize_t pwm_tmin_store(struct device *dev,
1117 struct device_attribute *devattr,
1118 const char *buf, size_t count)
1119 {
1120 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1121 struct adt7470_data *data = dev_get_drvdata(dev);
1122 long temp;
1123 int err;
1124
1125 if (kstrtol(buf, 10, &temp))
1126 return -EINVAL;
1127
1128 temp = clamp_val(temp, -128000, 127000);
1129 temp = DIV_ROUND_CLOSEST(temp, 1000);
1130
1131 mutex_lock(&data->lock);
1132 data->pwm_tmin[attr->index] = temp;
1133 err = regmap_write(data->regmap, ADT7470_REG_PWM_TMIN(attr->index),
1134 temp);
1135 mutex_unlock(&data->lock);
1136
1137 return err < 0 ? err : count;
1138 }
1139
pwm_auto_temp_show(struct device * dev,struct device_attribute * devattr,char * buf)1140 static ssize_t pwm_auto_temp_show(struct device *dev,
1141 struct device_attribute *devattr, char *buf)
1142 {
1143 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1144 struct adt7470_data *data = adt7470_update_device(dev);
1145 u8 ctrl;
1146
1147 if (IS_ERR(data))
1148 return PTR_ERR(data);
1149
1150 ctrl = data->pwm_auto_temp[attr->index];
1151 if (ctrl)
1152 return sprintf(buf, "%d\n", 1 << (ctrl - 1));
1153 else
1154 return sprintf(buf, "%d\n", ADT7470_PWM_ALL_TEMPS);
1155 }
1156
cvt_auto_temp(int input)1157 static int cvt_auto_temp(int input)
1158 {
1159 if (input == ADT7470_PWM_ALL_TEMPS)
1160 return 0;
1161 if (input < 1 || !is_power_of_2(input))
1162 return -EINVAL;
1163 return ilog2(input) + 1;
1164 }
1165
pwm_auto_temp_store(struct device * dev,struct device_attribute * devattr,const char * buf,size_t count)1166 static ssize_t pwm_auto_temp_store(struct device *dev,
1167 struct device_attribute *devattr,
1168 const char *buf, size_t count)
1169 {
1170 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1171 struct adt7470_data *data = dev_get_drvdata(dev);
1172 int pwm_auto_reg = ADT7470_REG_PWM_AUTO_TEMP(attr->index);
1173 unsigned int mask, val;
1174 long temp;
1175 int err;
1176
1177 if (kstrtol(buf, 10, &temp))
1178 return -EINVAL;
1179
1180 temp = cvt_auto_temp(temp);
1181 if (temp < 0)
1182 return temp;
1183
1184 if (temp > 0xF)
1185 return -EINVAL;
1186
1187 mutex_lock(&data->lock);
1188
1189 if (!(attr->index % 2)) {
1190 mask = 0xF0;
1191 val = (temp << 4) & 0xF0;
1192 } else {
1193 mask = 0x0F;
1194 val = temp & 0x0F;
1195 }
1196
1197 err = regmap_update_bits(data->regmap, pwm_auto_reg, mask, val);
1198 if (!err)
1199 data->pwm_auto_temp[attr->index] = temp;
1200
1201 mutex_unlock(&data->lock);
1202
1203 return err < 0 ? err : count;
1204 }
1205
1206 static DEVICE_ATTR_RW(alarm_mask);
1207 static DEVICE_ATTR_RW(num_temp_sensors);
1208 static DEVICE_ATTR_RW(auto_update_interval);
1209
1210 static SENSOR_DEVICE_ATTR_RW(force_pwm_max, force_pwm_max, 0);
1211
1212 static SENSOR_DEVICE_ATTR_RW(pwm1_auto_point1_pwm, pwm_min, 0);
1213 static SENSOR_DEVICE_ATTR_RW(pwm2_auto_point1_pwm, pwm_min, 1);
1214 static SENSOR_DEVICE_ATTR_RW(pwm3_auto_point1_pwm, pwm_min, 2);
1215 static SENSOR_DEVICE_ATTR_RW(pwm4_auto_point1_pwm, pwm_min, 3);
1216
1217 static SENSOR_DEVICE_ATTR_RW(pwm1_auto_point2_pwm, pwm_max, 0);
1218 static SENSOR_DEVICE_ATTR_RW(pwm2_auto_point2_pwm, pwm_max, 1);
1219 static SENSOR_DEVICE_ATTR_RW(pwm3_auto_point2_pwm, pwm_max, 2);
1220 static SENSOR_DEVICE_ATTR_RW(pwm4_auto_point2_pwm, pwm_max, 3);
1221
1222 static SENSOR_DEVICE_ATTR_RW(pwm1_auto_point1_temp, pwm_tmin, 0);
1223 static SENSOR_DEVICE_ATTR_RW(pwm2_auto_point1_temp, pwm_tmin, 1);
1224 static SENSOR_DEVICE_ATTR_RW(pwm3_auto_point1_temp, pwm_tmin, 2);
1225 static SENSOR_DEVICE_ATTR_RW(pwm4_auto_point1_temp, pwm_tmin, 3);
1226
1227 static SENSOR_DEVICE_ATTR_RO(pwm1_auto_point2_temp, pwm_tmax, 0);
1228 static SENSOR_DEVICE_ATTR_RO(pwm2_auto_point2_temp, pwm_tmax, 1);
1229 static SENSOR_DEVICE_ATTR_RO(pwm3_auto_point2_temp, pwm_tmax, 2);
1230 static SENSOR_DEVICE_ATTR_RO(pwm4_auto_point2_temp, pwm_tmax, 3);
1231
1232 static SENSOR_DEVICE_ATTR_RW(pwm1_auto_channels_temp, pwm_auto_temp, 0);
1233 static SENSOR_DEVICE_ATTR_RW(pwm2_auto_channels_temp, pwm_auto_temp, 1);
1234 static SENSOR_DEVICE_ATTR_RW(pwm3_auto_channels_temp, pwm_auto_temp, 2);
1235 static SENSOR_DEVICE_ATTR_RW(pwm4_auto_channels_temp, pwm_auto_temp, 3);
1236
1237 static struct attribute *adt7470_attrs[] = {
1238 &dev_attr_alarm_mask.attr,
1239 &dev_attr_num_temp_sensors.attr,
1240 &dev_attr_auto_update_interval.attr,
1241 NULL
1242 };
1243
1244 static struct attribute *adt7470_pwm_attrs[] = {
1245 &sensor_dev_attr_force_pwm_max.dev_attr.attr,
1246 &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1247 &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
1248 &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1249 &sensor_dev_attr_pwm4_auto_point1_pwm.dev_attr.attr,
1250 &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1251 &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
1252 &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1253 &sensor_dev_attr_pwm4_auto_point2_pwm.dev_attr.attr,
1254 &sensor_dev_attr_pwm1_auto_point1_temp.dev_attr.attr,
1255 &sensor_dev_attr_pwm2_auto_point1_temp.dev_attr.attr,
1256 &sensor_dev_attr_pwm3_auto_point1_temp.dev_attr.attr,
1257 &sensor_dev_attr_pwm4_auto_point1_temp.dev_attr.attr,
1258 &sensor_dev_attr_pwm1_auto_point2_temp.dev_attr.attr,
1259 &sensor_dev_attr_pwm2_auto_point2_temp.dev_attr.attr,
1260 &sensor_dev_attr_pwm3_auto_point2_temp.dev_attr.attr,
1261 &sensor_dev_attr_pwm4_auto_point2_temp.dev_attr.attr,
1262 &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1263 &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
1264 &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1265 &sensor_dev_attr_pwm4_auto_channels_temp.dev_attr.attr,
1266 NULL
1267 };
1268
1269 static const struct attribute_group adt7470_group = {
1270 .attrs = adt7470_attrs,
1271 };
1272
adt7470_pwm_is_visible(struct kobject * kobj,struct attribute * attr,int index)1273 static umode_t adt7470_pwm_is_visible(struct kobject *kobj,
1274 struct attribute *attr, int index)
1275 {
1276 struct device *dev = kobj_to_dev(kobj);
1277 struct adt7470_data *data = dev_get_drvdata(dev);
1278
1279 if (data->use_pwm_framework)
1280 return 0;
1281
1282 return attr->mode;
1283 }
1284
1285 static const struct attribute_group adt7470_pwm_group = {
1286 .attrs = adt7470_pwm_attrs,
1287 .is_visible = adt7470_pwm_is_visible,
1288 };
1289
1290 static const struct attribute_group *adt7470_groups[] = {
1291 &adt7470_group,
1292 &adt7470_pwm_group,
1293 NULL,
1294 };
1295
adt7470_read(struct device * dev,enum hwmon_sensor_types type,u32 attr,int channel,long * val)1296 static int adt7470_read(struct device *dev, enum hwmon_sensor_types type, u32 attr,
1297 int channel, long *val)
1298 {
1299 switch (type) {
1300 case hwmon_temp:
1301 return adt7470_temp_read(dev, attr, channel, val);
1302 case hwmon_fan:
1303 return adt7470_fan_read(dev, attr, channel, val);
1304 case hwmon_pwm:
1305 return adt7470_pwm_read(dev, attr, channel, val);
1306 default:
1307 return -EOPNOTSUPP;
1308 }
1309 }
1310
adt7470_write(struct device * dev,enum hwmon_sensor_types type,u32 attr,int channel,long val)1311 static int adt7470_write(struct device *dev, enum hwmon_sensor_types type, u32 attr,
1312 int channel, long val)
1313 {
1314 switch (type) {
1315 case hwmon_temp:
1316 return adt7470_temp_write(dev, attr, channel, val);
1317 case hwmon_fan:
1318 return adt7470_fan_write(dev, attr, channel, val);
1319 case hwmon_pwm:
1320 return adt7470_pwm_write(dev, attr, channel, val);
1321 default:
1322 return -EOPNOTSUPP;
1323 }
1324 }
1325
adt7470_is_visible(const void * _data,enum hwmon_sensor_types type,u32 attr,int channel)1326 static umode_t adt7470_is_visible(const void *_data, enum hwmon_sensor_types type,
1327 u32 attr, int channel)
1328 {
1329 const struct adt7470_data *data = _data;
1330 umode_t mode = 0;
1331
1332 switch (type) {
1333 case hwmon_temp:
1334 switch (attr) {
1335 case hwmon_temp:
1336 case hwmon_temp_alarm:
1337 mode = 0444;
1338 break;
1339 case hwmon_temp_min:
1340 case hwmon_temp_max:
1341 mode = 0644;
1342 break;
1343 default:
1344 break;
1345 }
1346 break;
1347 case hwmon_fan:
1348 switch (attr) {
1349 case hwmon_fan_input:
1350 case hwmon_fan_alarm:
1351 mode = 0444;
1352 break;
1353 case hwmon_fan_min:
1354 case hwmon_fan_max:
1355 mode = 0644;
1356 break;
1357 default:
1358 break;
1359 }
1360 break;
1361 case hwmon_pwm:
1362 /* Hide all pwm attributes if this device is exposed to the PWM
1363 * framework
1364 */
1365 if (data->use_pwm_framework) {
1366 mode = 0;
1367 break;
1368 }
1369
1370 switch (attr) {
1371 case hwmon_pwm_input:
1372 case hwmon_pwm_enable:
1373 mode = 0644;
1374 break;
1375 case hwmon_pwm_freq:
1376 if (channel == 0)
1377 mode = 0644;
1378 else
1379 mode = 0;
1380 break;
1381 default:
1382 break;
1383 }
1384 break;
1385 default:
1386 break;
1387 }
1388
1389 return mode;
1390 }
1391
1392 static const struct hwmon_ops adt7470_hwmon_ops = {
1393 .is_visible = adt7470_is_visible,
1394 .read = adt7470_read,
1395 .write = adt7470_write,
1396 };
1397
1398 static const struct hwmon_channel_info * const adt7470_info[] = {
1399 HWMON_CHANNEL_INFO(chip,
1400 HWMON_C_REGISTER_TZ),
1401 HWMON_CHANNEL_INFO(temp,
1402 HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX | HWMON_T_ALARM,
1403 HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX | HWMON_T_ALARM,
1404 HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX | HWMON_T_ALARM,
1405 HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX | HWMON_T_ALARM,
1406 HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX | HWMON_T_ALARM,
1407 HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX | HWMON_T_ALARM,
1408 HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX | HWMON_T_ALARM,
1409 HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX | HWMON_T_ALARM,
1410 HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX | HWMON_T_ALARM,
1411 HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX | HWMON_T_ALARM),
1412 HWMON_CHANNEL_INFO(fan,
1413 HWMON_F_INPUT | HWMON_F_MIN | HWMON_F_MAX | HWMON_F_DIV | HWMON_F_ALARM,
1414 HWMON_F_INPUT | HWMON_F_MIN | HWMON_F_MAX | HWMON_F_DIV | HWMON_F_ALARM,
1415 HWMON_F_INPUT | HWMON_F_MIN | HWMON_F_MAX | HWMON_F_DIV | HWMON_F_ALARM,
1416 HWMON_F_INPUT | HWMON_F_MIN | HWMON_F_MAX | HWMON_F_DIV | HWMON_F_ALARM),
1417 HWMON_CHANNEL_INFO(pwm,
1418 HWMON_PWM_INPUT | HWMON_PWM_ENABLE | HWMON_PWM_FREQ,
1419 HWMON_PWM_INPUT | HWMON_PWM_ENABLE,
1420 HWMON_PWM_INPUT | HWMON_PWM_ENABLE,
1421 HWMON_PWM_INPUT | HWMON_PWM_ENABLE),
1422 NULL
1423 };
1424
1425 static const struct hwmon_chip_info adt7470_chip_info = {
1426 .ops = &adt7470_hwmon_ops,
1427 .info = adt7470_info,
1428 };
1429
1430 /* Return 0 if detection is successful, -ENODEV otherwise */
adt7470_detect(struct i2c_client * client,struct i2c_board_info * info)1431 static int adt7470_detect(struct i2c_client *client,
1432 struct i2c_board_info *info)
1433 {
1434 struct i2c_adapter *adapter = client->adapter;
1435 int vendor, device, revision;
1436
1437 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1438 return -ENODEV;
1439
1440 vendor = i2c_smbus_read_byte_data(client, ADT7470_REG_VENDOR);
1441 if (vendor != ADT7470_VENDOR)
1442 return -ENODEV;
1443
1444 device = i2c_smbus_read_byte_data(client, ADT7470_REG_DEVICE);
1445 if (device != ADT7470_DEVICE)
1446 return -ENODEV;
1447
1448 revision = i2c_smbus_read_byte_data(client, ADT7470_REG_REVISION);
1449 if (revision != ADT7470_REVISION)
1450 return -ENODEV;
1451
1452 strscpy(info->type, "adt7470", I2C_NAME_SIZE);
1453
1454 return 0;
1455 }
1456
1457 static const struct regmap_config adt7470_regmap_config = {
1458 .reg_bits = 8,
1459 .val_bits = 8,
1460 .use_single_read = true,
1461 .use_single_write = true,
1462 };
1463
adt7470_probe(struct i2c_client * client)1464 static int adt7470_probe(struct i2c_client *client)
1465 {
1466 struct device *dev = &client->dev;
1467 struct adt7470_data *data;
1468 struct device *hwmon_dev;
1469 int freq_val;
1470 int err;
1471
1472 data = devm_kzalloc(dev, sizeof(struct adt7470_data), GFP_KERNEL);
1473 if (!data)
1474 return -ENOMEM;
1475
1476 data->num_temp_sensors = -1;
1477 data->auto_update_interval = AUTO_UPDATE_INTERVAL;
1478 data->regmap = devm_regmap_init_i2c(client, &adt7470_regmap_config);
1479 if (IS_ERR(data->regmap))
1480 return PTR_ERR(data->regmap);
1481
1482 i2c_set_clientdata(client, data);
1483 mutex_init(&data->lock);
1484
1485 dev_info(&client->dev, "%s chip found\n", client->name);
1486
1487 /* Initialize the ADT7470 chip */
1488 err = regmap_update_bits(data->regmap, ADT7470_REG_CFG,
1489 ADT7470_STRT_MASK | ADT7470_TEST_MASK,
1490 ADT7470_STRT_MASK | ADT7470_TEST_MASK);
1491 if (err < 0)
1492 return err;
1493
1494 freq_val = pwm1_freq_get(dev);
1495 if (freq_val <= 0) {
1496 err = freq_val < 0 ? freq_val : -EINVAL;
1497 return err;
1498 }
1499
1500 data->pwm_freq = (u32)freq_val;
1501
1502 data->use_pwm_framework = false;
1503
1504 if (device_property_present(dev, "#pwm-cells")) {
1505 if (IS_REACHABLE(CONFIG_PWM)) {
1506 struct pwm_chip *chip;
1507
1508 chip = devm_pwmchip_alloc(dev, ADT7470_PWM_COUNT, 0);
1509 if (IS_ERR(chip))
1510 return PTR_ERR(chip);
1511
1512 chip->ops = &adt7470_pwm_ops;
1513 pwmchip_set_drvdata(chip, data);
1514
1515 err = devm_pwmchip_add(dev, chip);
1516 if (err)
1517 return dev_err_probe(dev, err, "failed to register PWM chip\n");
1518
1519 data->use_pwm_framework = true;
1520 } else {
1521 dev_warn(dev, "#pwm-cells present but CONFIG_PWM disabled. HWMON PWM attributes not hidden.\n");
1522 }
1523 }
1524
1525 /* Register sysfs hooks */
1526 hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, data,
1527 &adt7470_chip_info,
1528 adt7470_groups);
1529
1530 if (IS_ERR(hwmon_dev))
1531 return PTR_ERR(hwmon_dev);
1532
1533 data->auto_update = kthread_run(adt7470_update_thread, client, "%s",
1534 dev_name(hwmon_dev));
1535 if (IS_ERR(data->auto_update))
1536 return PTR_ERR(data->auto_update);
1537
1538 return 0;
1539 }
1540
adt7470_remove(struct i2c_client * client)1541 static void adt7470_remove(struct i2c_client *client)
1542 {
1543 struct adt7470_data *data = i2c_get_clientdata(client);
1544
1545 kthread_stop(data->auto_update);
1546 }
1547
1548 static const struct i2c_device_id adt7470_id[] = {
1549 { .name = "adt7470" },
1550 { }
1551 };
1552 MODULE_DEVICE_TABLE(i2c, adt7470_id);
1553
1554 static struct i2c_driver adt7470_driver = {
1555 .class = I2C_CLASS_HWMON,
1556 .driver = {
1557 .name = "adt7470",
1558 },
1559 .probe = adt7470_probe,
1560 .remove = adt7470_remove,
1561 .id_table = adt7470_id,
1562 .detect = adt7470_detect,
1563 .address_list = normal_i2c,
1564 };
1565
1566 module_i2c_driver(adt7470_driver);
1567
1568 MODULE_AUTHOR("Darrick J. Wong <darrick.wong@oracle.com>");
1569 MODULE_DESCRIPTION("ADT7470 driver");
1570 MODULE_LICENSE("GPL");
1571