[RAMEN9610-21208]coredump: fix race condition between mmget_not_zero()/get_task_mm...
[GitHub/MotorolaMobilityLLC/kernel-slsi.git] / drivers / hwmon / adt7475.c
1 /*
2 * adt7475 - Thermal sensor driver for the ADT7475 chip and derivatives
3 * Copyright (C) 2007-2008, Advanced Micro Devices, Inc.
4 * Copyright (C) 2008 Jordan Crouse <jordan@cosmicpenguin.net>
5 * Copyright (C) 2008 Hans de Goede <hdegoede@redhat.com>
6 * Copyright (C) 2009 Jean Delvare <jdelvare@suse.de>
7 *
8 * Derived from the lm83 driver by Jean Delvare
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14
15 #include <linux/module.h>
16 #include <linux/of_device.h>
17 #include <linux/init.h>
18 #include <linux/slab.h>
19 #include <linux/i2c.h>
20 #include <linux/hwmon.h>
21 #include <linux/hwmon-sysfs.h>
22 #include <linux/hwmon-vid.h>
23 #include <linux/err.h>
24 #include <linux/jiffies.h>
25 #include <linux/util_macros.h>
26
27 /* Indexes for the sysfs hooks */
28
29 #define INPUT 0
30 #define MIN 1
31 #define MAX 2
32 #define CONTROL 3
33 #define OFFSET 3
34 #define AUTOMIN 4
35 #define THERM 5
36 #define HYSTERSIS 6
37
38 /*
39 * These are unique identifiers for the sysfs functions - unlike the
40 * numbers above, these are not also indexes into an array
41 */
42
43 #define ALARM 9
44 #define FAULT 10
45
46 /* 7475 Common Registers */
47
48 #define REG_DEVREV2 0x12 /* ADT7490 only */
49
50 #define REG_VTT 0x1E /* ADT7490 only */
51 #define REG_EXTEND3 0x1F /* ADT7490 only */
52
53 #define REG_VOLTAGE_BASE 0x20
54 #define REG_TEMP_BASE 0x25
55 #define REG_TACH_BASE 0x28
56 #define REG_PWM_BASE 0x30
57 #define REG_PWM_MAX_BASE 0x38
58
59 #define REG_DEVID 0x3D
60 #define REG_VENDID 0x3E
61 #define REG_DEVID2 0x3F
62
63 #define REG_CONFIG1 0x40
64
65 #define REG_STATUS1 0x41
66 #define REG_STATUS2 0x42
67
68 #define REG_VID 0x43 /* ADT7476 only */
69
70 #define REG_VOLTAGE_MIN_BASE 0x44
71 #define REG_VOLTAGE_MAX_BASE 0x45
72
73 #define REG_TEMP_MIN_BASE 0x4E
74 #define REG_TEMP_MAX_BASE 0x4F
75
76 #define REG_TACH_MIN_BASE 0x54
77
78 #define REG_PWM_CONFIG_BASE 0x5C
79
80 #define REG_TEMP_TRANGE_BASE 0x5F
81
82 #define REG_ENHANCE_ACOUSTICS1 0x62
83 #define REG_ENHANCE_ACOUSTICS2 0x63
84
85 #define REG_PWM_MIN_BASE 0x64
86
87 #define REG_TEMP_TMIN_BASE 0x67
88 #define REG_TEMP_THERM_BASE 0x6A
89
90 #define REG_REMOTE1_HYSTERSIS 0x6D
91 #define REG_REMOTE2_HYSTERSIS 0x6E
92
93 #define REG_TEMP_OFFSET_BASE 0x70
94
95 #define REG_CONFIG2 0x73
96
97 #define REG_EXTEND1 0x76
98 #define REG_EXTEND2 0x77
99
100 #define REG_CONFIG3 0x78
101 #define REG_CONFIG5 0x7C
102 #define REG_CONFIG4 0x7D
103
104 #define REG_STATUS4 0x81 /* ADT7490 only */
105
106 #define REG_VTT_MIN 0x84 /* ADT7490 only */
107 #define REG_VTT_MAX 0x86 /* ADT7490 only */
108
109 #define VID_VIDSEL 0x80 /* ADT7476 only */
110
111 #define CONFIG2_ATTN 0x20
112
113 #define CONFIG3_SMBALERT 0x01
114 #define CONFIG3_THERM 0x02
115
116 #define CONFIG4_PINFUNC 0x03
117 #define CONFIG4_MAXDUTY 0x08
118 #define CONFIG4_ATTN_IN10 0x30
119 #define CONFIG4_ATTN_IN43 0xC0
120
121 #define CONFIG5_TWOSCOMP 0x01
122 #define CONFIG5_TEMPOFFSET 0x02
123 #define CONFIG5_VIDGPIO 0x10 /* ADT7476 only */
124
125 /* ADT7475 Settings */
126
127 #define ADT7475_VOLTAGE_COUNT 5 /* Not counting Vtt */
128 #define ADT7475_TEMP_COUNT 3
129 #define ADT7475_TACH_COUNT 4
130 #define ADT7475_PWM_COUNT 3
131
132 /* Macro to read the registers */
133
134 #define adt7475_read(reg) i2c_smbus_read_byte_data(client, (reg))
135
136 /* Macros to easily index the registers */
137
138 #define TACH_REG(idx) (REG_TACH_BASE + ((idx) * 2))
139 #define TACH_MIN_REG(idx) (REG_TACH_MIN_BASE + ((idx) * 2))
140
141 #define PWM_REG(idx) (REG_PWM_BASE + (idx))
142 #define PWM_MAX_REG(idx) (REG_PWM_MAX_BASE + (idx))
143 #define PWM_MIN_REG(idx) (REG_PWM_MIN_BASE + (idx))
144 #define PWM_CONFIG_REG(idx) (REG_PWM_CONFIG_BASE + (idx))
145
146 #define VOLTAGE_REG(idx) (REG_VOLTAGE_BASE + (idx))
147 #define VOLTAGE_MIN_REG(idx) (REG_VOLTAGE_MIN_BASE + ((idx) * 2))
148 #define VOLTAGE_MAX_REG(idx) (REG_VOLTAGE_MAX_BASE + ((idx) * 2))
149
150 #define TEMP_REG(idx) (REG_TEMP_BASE + (idx))
151 #define TEMP_MIN_REG(idx) (REG_TEMP_MIN_BASE + ((idx) * 2))
152 #define TEMP_MAX_REG(idx) (REG_TEMP_MAX_BASE + ((idx) * 2))
153 #define TEMP_TMIN_REG(idx) (REG_TEMP_TMIN_BASE + (idx))
154 #define TEMP_THERM_REG(idx) (REG_TEMP_THERM_BASE + (idx))
155 #define TEMP_OFFSET_REG(idx) (REG_TEMP_OFFSET_BASE + (idx))
156 #define TEMP_TRANGE_REG(idx) (REG_TEMP_TRANGE_BASE + (idx))
157
158 static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
159
160 enum chips { adt7473, adt7475, adt7476, adt7490 };
161
162 static const struct i2c_device_id adt7475_id[] = {
163 { "adt7473", adt7473 },
164 { "adt7475", adt7475 },
165 { "adt7476", adt7476 },
166 { "adt7490", adt7490 },
167 { }
168 };
169 MODULE_DEVICE_TABLE(i2c, adt7475_id);
170
171 static const struct of_device_id adt7475_of_match[] = {
172 {
173 .compatible = "adi,adt7473",
174 .data = (void *)adt7473
175 },
176 {
177 .compatible = "adi,adt7475",
178 .data = (void *)adt7475
179 },
180 {
181 .compatible = "adi,adt7476",
182 .data = (void *)adt7476
183 },
184 {
185 .compatible = "adi,adt7490",
186 .data = (void *)adt7490
187 },
188 { },
189 };
190 MODULE_DEVICE_TABLE(of, adt7475_of_match);
191
192 struct adt7475_data {
193 struct device *hwmon_dev;
194 struct mutex lock;
195
196 unsigned long measure_updated;
197 unsigned long limits_updated;
198 char valid;
199
200 u8 config4;
201 u8 config5;
202 u8 has_voltage;
203 u8 bypass_attn; /* Bypass voltage attenuator */
204 u8 has_pwm2:1;
205 u8 has_fan4:1;
206 u8 has_vid:1;
207 u32 alarms;
208 u16 voltage[3][6];
209 u16 temp[7][3];
210 u16 tach[2][4];
211 u8 pwm[4][3];
212 u8 range[3];
213 u8 pwmctl[3];
214 u8 pwmchan[3];
215 u8 enh_acoustics[2];
216
217 u8 vid;
218 u8 vrm;
219 };
220
221 static struct i2c_driver adt7475_driver;
222 static struct adt7475_data *adt7475_update_device(struct device *dev);
223 static void adt7475_read_hystersis(struct i2c_client *client);
224 static void adt7475_read_pwm(struct i2c_client *client, int index);
225
226 /* Given a temp value, convert it to register value */
227
228 static inline u16 temp2reg(struct adt7475_data *data, long val)
229 {
230 u16 ret;
231
232 if (!(data->config5 & CONFIG5_TWOSCOMP)) {
233 val = clamp_val(val, -64000, 191000);
234 ret = (val + 64500) / 1000;
235 } else {
236 val = clamp_val(val, -128000, 127000);
237 if (val < -500)
238 ret = (256500 + val) / 1000;
239 else
240 ret = (val + 500) / 1000;
241 }
242
243 return ret << 2;
244 }
245
246 /* Given a register value, convert it to a real temp value */
247
248 static inline int reg2temp(struct adt7475_data *data, u16 reg)
249 {
250 if (data->config5 & CONFIG5_TWOSCOMP) {
251 if (reg >= 512)
252 return (reg - 1024) * 250;
253 else
254 return reg * 250;
255 } else
256 return (reg - 256) * 250;
257 }
258
259 static inline int tach2rpm(u16 tach)
260 {
261 if (tach == 0 || tach == 0xFFFF)
262 return 0;
263
264 return (90000 * 60) / tach;
265 }
266
267 static inline u16 rpm2tach(unsigned long rpm)
268 {
269 if (rpm == 0)
270 return 0;
271
272 return clamp_val((90000 * 60) / rpm, 1, 0xFFFF);
273 }
274
275 /* Scaling factors for voltage inputs, taken from the ADT7490 datasheet */
276 static const int adt7473_in_scaling[ADT7475_VOLTAGE_COUNT + 1][2] = {
277 { 45, 94 }, /* +2.5V */
278 { 175, 525 }, /* Vccp */
279 { 68, 71 }, /* Vcc */
280 { 93, 47 }, /* +5V */
281 { 120, 20 }, /* +12V */
282 { 45, 45 }, /* Vtt */
283 };
284
285 static inline int reg2volt(int channel, u16 reg, u8 bypass_attn)
286 {
287 const int *r = adt7473_in_scaling[channel];
288
289 if (bypass_attn & (1 << channel))
290 return DIV_ROUND_CLOSEST(reg * 2250, 1024);
291 return DIV_ROUND_CLOSEST(reg * (r[0] + r[1]) * 2250, r[1] * 1024);
292 }
293
294 static inline u16 volt2reg(int channel, long volt, u8 bypass_attn)
295 {
296 const int *r = adt7473_in_scaling[channel];
297 long reg;
298
299 if (bypass_attn & (1 << channel))
300 reg = (volt * 1024) / 2250;
301 else
302 reg = (volt * r[1] * 1024) / ((r[0] + r[1]) * 2250);
303 return clamp_val(reg, 0, 1023) & (0xff << 2);
304 }
305
306 static int adt7475_read_word(struct i2c_client *client, int reg)
307 {
308 int val1, val2;
309
310 val1 = i2c_smbus_read_byte_data(client, reg);
311 if (val1 < 0)
312 return val1;
313 val2 = i2c_smbus_read_byte_data(client, reg + 1);
314 if (val2 < 0)
315 return val2;
316
317 return val1 | (val2 << 8);
318 }
319
320 static void adt7475_write_word(struct i2c_client *client, int reg, u16 val)
321 {
322 i2c_smbus_write_byte_data(client, reg + 1, val >> 8);
323 i2c_smbus_write_byte_data(client, reg, val & 0xFF);
324 }
325
326 static ssize_t show_voltage(struct device *dev, struct device_attribute *attr,
327 char *buf)
328 {
329 struct adt7475_data *data = adt7475_update_device(dev);
330 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
331 unsigned short val;
332
333 switch (sattr->nr) {
334 case ALARM:
335 return sprintf(buf, "%d\n",
336 (data->alarms >> sattr->index) & 1);
337 default:
338 val = data->voltage[sattr->nr][sattr->index];
339 return sprintf(buf, "%d\n",
340 reg2volt(sattr->index, val, data->bypass_attn));
341 }
342 }
343
344 static ssize_t set_voltage(struct device *dev, struct device_attribute *attr,
345 const char *buf, size_t count)
346 {
347
348 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
349 struct i2c_client *client = to_i2c_client(dev);
350 struct adt7475_data *data = i2c_get_clientdata(client);
351 unsigned char reg;
352 long val;
353
354 if (kstrtol(buf, 10, &val))
355 return -EINVAL;
356
357 mutex_lock(&data->lock);
358
359 data->voltage[sattr->nr][sattr->index] =
360 volt2reg(sattr->index, val, data->bypass_attn);
361
362 if (sattr->index < ADT7475_VOLTAGE_COUNT) {
363 if (sattr->nr == MIN)
364 reg = VOLTAGE_MIN_REG(sattr->index);
365 else
366 reg = VOLTAGE_MAX_REG(sattr->index);
367 } else {
368 if (sattr->nr == MIN)
369 reg = REG_VTT_MIN;
370 else
371 reg = REG_VTT_MAX;
372 }
373
374 i2c_smbus_write_byte_data(client, reg,
375 data->voltage[sattr->nr][sattr->index] >> 2);
376 mutex_unlock(&data->lock);
377
378 return count;
379 }
380
381 static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
382 char *buf)
383 {
384 struct adt7475_data *data = adt7475_update_device(dev);
385 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
386 int out;
387
388 switch (sattr->nr) {
389 case HYSTERSIS:
390 mutex_lock(&data->lock);
391 out = data->temp[sattr->nr][sattr->index];
392 if (sattr->index != 1)
393 out = (out >> 4) & 0xF;
394 else
395 out = (out & 0xF);
396 /*
397 * Show the value as an absolute number tied to
398 * THERM
399 */
400 out = reg2temp(data, data->temp[THERM][sattr->index]) -
401 out * 1000;
402 mutex_unlock(&data->lock);
403 break;
404
405 case OFFSET:
406 /*
407 * Offset is always 2's complement, regardless of the
408 * setting in CONFIG5
409 */
410 mutex_lock(&data->lock);
411 out = (s8)data->temp[sattr->nr][sattr->index];
412 if (data->config5 & CONFIG5_TEMPOFFSET)
413 out *= 1000;
414 else
415 out *= 500;
416 mutex_unlock(&data->lock);
417 break;
418
419 case ALARM:
420 out = (data->alarms >> (sattr->index + 4)) & 1;
421 break;
422
423 case FAULT:
424 /* Note - only for remote1 and remote2 */
425 out = !!(data->alarms & (sattr->index ? 0x8000 : 0x4000));
426 break;
427
428 default:
429 /* All other temp values are in the configured format */
430 out = reg2temp(data, data->temp[sattr->nr][sattr->index]);
431 }
432
433 return sprintf(buf, "%d\n", out);
434 }
435
436 static ssize_t set_temp(struct device *dev, struct device_attribute *attr,
437 const char *buf, size_t count)
438 {
439 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
440 struct i2c_client *client = to_i2c_client(dev);
441 struct adt7475_data *data = i2c_get_clientdata(client);
442 unsigned char reg = 0;
443 u8 out;
444 int temp;
445 long val;
446
447 if (kstrtol(buf, 10, &val))
448 return -EINVAL;
449
450 mutex_lock(&data->lock);
451
452 /* We need the config register in all cases for temp <-> reg conv. */
453 data->config5 = adt7475_read(REG_CONFIG5);
454
455 switch (sattr->nr) {
456 case OFFSET:
457 if (data->config5 & CONFIG5_TEMPOFFSET) {
458 val = clamp_val(val, -63000, 127000);
459 out = data->temp[OFFSET][sattr->index] = val / 1000;
460 } else {
461 val = clamp_val(val, -63000, 64000);
462 out = data->temp[OFFSET][sattr->index] = val / 500;
463 }
464 break;
465
466 case HYSTERSIS:
467 /*
468 * The value will be given as an absolute value, turn it
469 * into an offset based on THERM
470 */
471
472 /* Read fresh THERM and HYSTERSIS values from the chip */
473 data->temp[THERM][sattr->index] =
474 adt7475_read(TEMP_THERM_REG(sattr->index)) << 2;
475 adt7475_read_hystersis(client);
476
477 temp = reg2temp(data, data->temp[THERM][sattr->index]);
478 val = clamp_val(val, temp - 15000, temp);
479 val = (temp - val) / 1000;
480
481 if (sattr->index != 1) {
482 data->temp[HYSTERSIS][sattr->index] &= 0xF0;
483 data->temp[HYSTERSIS][sattr->index] |= (val & 0xF) << 4;
484 } else {
485 data->temp[HYSTERSIS][sattr->index] &= 0x0F;
486 data->temp[HYSTERSIS][sattr->index] |= (val & 0xF);
487 }
488
489 out = data->temp[HYSTERSIS][sattr->index];
490 break;
491
492 default:
493 data->temp[sattr->nr][sattr->index] = temp2reg(data, val);
494
495 /*
496 * We maintain an extra 2 digits of precision for simplicity
497 * - shift those back off before writing the value
498 */
499 out = (u8) (data->temp[sattr->nr][sattr->index] >> 2);
500 }
501
502 switch (sattr->nr) {
503 case MIN:
504 reg = TEMP_MIN_REG(sattr->index);
505 break;
506 case MAX:
507 reg = TEMP_MAX_REG(sattr->index);
508 break;
509 case OFFSET:
510 reg = TEMP_OFFSET_REG(sattr->index);
511 break;
512 case AUTOMIN:
513 reg = TEMP_TMIN_REG(sattr->index);
514 break;
515 case THERM:
516 reg = TEMP_THERM_REG(sattr->index);
517 break;
518 case HYSTERSIS:
519 if (sattr->index != 2)
520 reg = REG_REMOTE1_HYSTERSIS;
521 else
522 reg = REG_REMOTE2_HYSTERSIS;
523
524 break;
525 }
526
527 i2c_smbus_write_byte_data(client, reg, out);
528
529 mutex_unlock(&data->lock);
530 return count;
531 }
532
533 /* Assuming CONFIG6[SLOW] is 0 */
534 static const int ad7475_st_map[] = {
535 37500, 18800, 12500, 7500, 4700, 3100, 1600, 800,
536 };
537
538 static ssize_t show_temp_st(struct device *dev, struct device_attribute *attr,
539 char *buf)
540 {
541 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
542 struct i2c_client *client = to_i2c_client(dev);
543 struct adt7475_data *data = i2c_get_clientdata(client);
544 long val;
545
546 switch (sattr->index) {
547 case 0:
548 val = data->enh_acoustics[0] & 0xf;
549 break;
550 case 1:
551 val = (data->enh_acoustics[1] >> 4) & 0xf;
552 break;
553 case 2:
554 default:
555 val = data->enh_acoustics[1] & 0xf;
556 break;
557 }
558
559 if (val & 0x8)
560 return sprintf(buf, "%d\n", ad7475_st_map[val & 0x7]);
561 else
562 return sprintf(buf, "0\n");
563 }
564
565 static ssize_t set_temp_st(struct device *dev, struct device_attribute *attr,
566 const char *buf, size_t count)
567 {
568 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
569 struct i2c_client *client = to_i2c_client(dev);
570 struct adt7475_data *data = i2c_get_clientdata(client);
571 unsigned char reg;
572 int shift, idx;
573 ulong val;
574
575 if (kstrtoul(buf, 10, &val))
576 return -EINVAL;
577
578 switch (sattr->index) {
579 case 0:
580 reg = REG_ENHANCE_ACOUSTICS1;
581 shift = 0;
582 idx = 0;
583 break;
584 case 1:
585 reg = REG_ENHANCE_ACOUSTICS2;
586 shift = 0;
587 idx = 1;
588 break;
589 case 2:
590 default:
591 reg = REG_ENHANCE_ACOUSTICS2;
592 shift = 4;
593 idx = 1;
594 break;
595 }
596
597 if (val > 0) {
598 val = find_closest_descending(val, ad7475_st_map,
599 ARRAY_SIZE(ad7475_st_map));
600 val |= 0x8;
601 }
602
603 mutex_lock(&data->lock);
604
605 data->enh_acoustics[idx] &= ~(0xf << shift);
606 data->enh_acoustics[idx] |= (val << shift);
607
608 i2c_smbus_write_byte_data(client, reg, data->enh_acoustics[idx]);
609
610 mutex_unlock(&data->lock);
611
612 return count;
613 }
614
615 /*
616 * Table of autorange values - the user will write the value in millidegrees,
617 * and we'll convert it
618 */
619 static const int autorange_table[] = {
620 2000, 2500, 3330, 4000, 5000, 6670, 8000,
621 10000, 13330, 16000, 20000, 26670, 32000, 40000,
622 53330, 80000
623 };
624
625 static ssize_t show_point2(struct device *dev, struct device_attribute *attr,
626 char *buf)
627 {
628 struct adt7475_data *data = adt7475_update_device(dev);
629 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
630 int out, val;
631
632 mutex_lock(&data->lock);
633 out = (data->range[sattr->index] >> 4) & 0x0F;
634 val = reg2temp(data, data->temp[AUTOMIN][sattr->index]);
635 mutex_unlock(&data->lock);
636
637 return sprintf(buf, "%d\n", val + autorange_table[out]);
638 }
639
640 static ssize_t set_point2(struct device *dev, struct device_attribute *attr,
641 const char *buf, size_t count)
642 {
643 struct i2c_client *client = to_i2c_client(dev);
644 struct adt7475_data *data = i2c_get_clientdata(client);
645 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
646 int temp;
647 long val;
648
649 if (kstrtol(buf, 10, &val))
650 return -EINVAL;
651
652 mutex_lock(&data->lock);
653
654 /* Get a fresh copy of the needed registers */
655 data->config5 = adt7475_read(REG_CONFIG5);
656 data->temp[AUTOMIN][sattr->index] =
657 adt7475_read(TEMP_TMIN_REG(sattr->index)) << 2;
658 data->range[sattr->index] =
659 adt7475_read(TEMP_TRANGE_REG(sattr->index));
660
661 /*
662 * The user will write an absolute value, so subtract the start point
663 * to figure the range
664 */
665 temp = reg2temp(data, data->temp[AUTOMIN][sattr->index]);
666 val = clamp_val(val, temp + autorange_table[0],
667 temp + autorange_table[ARRAY_SIZE(autorange_table) - 1]);
668 val -= temp;
669
670 /* Find the nearest table entry to what the user wrote */
671 val = find_closest(val, autorange_table, ARRAY_SIZE(autorange_table));
672
673 data->range[sattr->index] &= ~0xF0;
674 data->range[sattr->index] |= val << 4;
675
676 i2c_smbus_write_byte_data(client, TEMP_TRANGE_REG(sattr->index),
677 data->range[sattr->index]);
678
679 mutex_unlock(&data->lock);
680 return count;
681 }
682
683 static ssize_t show_tach(struct device *dev, struct device_attribute *attr,
684 char *buf)
685 {
686 struct adt7475_data *data = adt7475_update_device(dev);
687 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
688 int out;
689
690 if (sattr->nr == ALARM)
691 out = (data->alarms >> (sattr->index + 10)) & 1;
692 else
693 out = tach2rpm(data->tach[sattr->nr][sattr->index]);
694
695 return sprintf(buf, "%d\n", out);
696 }
697
698 static ssize_t set_tach(struct device *dev, struct device_attribute *attr,
699 const char *buf, size_t count)
700 {
701
702 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
703 struct i2c_client *client = to_i2c_client(dev);
704 struct adt7475_data *data = i2c_get_clientdata(client);
705 unsigned long val;
706
707 if (kstrtoul(buf, 10, &val))
708 return -EINVAL;
709
710 mutex_lock(&data->lock);
711
712 data->tach[MIN][sattr->index] = rpm2tach(val);
713
714 adt7475_write_word(client, TACH_MIN_REG(sattr->index),
715 data->tach[MIN][sattr->index]);
716
717 mutex_unlock(&data->lock);
718 return count;
719 }
720
721 static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
722 char *buf)
723 {
724 struct adt7475_data *data = adt7475_update_device(dev);
725 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
726
727 return sprintf(buf, "%d\n", data->pwm[sattr->nr][sattr->index]);
728 }
729
730 static ssize_t show_pwmchan(struct device *dev, struct device_attribute *attr,
731 char *buf)
732 {
733 struct adt7475_data *data = adt7475_update_device(dev);
734 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
735
736 return sprintf(buf, "%d\n", data->pwmchan[sattr->index]);
737 }
738
739 static ssize_t show_pwmctrl(struct device *dev, struct device_attribute *attr,
740 char *buf)
741 {
742 struct adt7475_data *data = adt7475_update_device(dev);
743 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
744
745 return sprintf(buf, "%d\n", data->pwmctl[sattr->index]);
746 }
747
748 static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
749 const char *buf, size_t count)
750 {
751
752 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
753 struct i2c_client *client = to_i2c_client(dev);
754 struct adt7475_data *data = i2c_get_clientdata(client);
755 unsigned char reg = 0;
756 long val;
757
758 if (kstrtol(buf, 10, &val))
759 return -EINVAL;
760
761 mutex_lock(&data->lock);
762
763 switch (sattr->nr) {
764 case INPUT:
765 /* Get a fresh value for CONTROL */
766 data->pwm[CONTROL][sattr->index] =
767 adt7475_read(PWM_CONFIG_REG(sattr->index));
768
769 /*
770 * If we are not in manual mode, then we shouldn't allow
771 * the user to set the pwm speed
772 */
773 if (((data->pwm[CONTROL][sattr->index] >> 5) & 7) != 7) {
774 mutex_unlock(&data->lock);
775 return count;
776 }
777
778 reg = PWM_REG(sattr->index);
779 break;
780
781 case MIN:
782 reg = PWM_MIN_REG(sattr->index);
783 break;
784
785 case MAX:
786 reg = PWM_MAX_REG(sattr->index);
787 break;
788 }
789
790 data->pwm[sattr->nr][sattr->index] = clamp_val(val, 0, 0xFF);
791 i2c_smbus_write_byte_data(client, reg,
792 data->pwm[sattr->nr][sattr->index]);
793 mutex_unlock(&data->lock);
794
795 return count;
796 }
797
798 static ssize_t show_stall_disable(struct device *dev,
799 struct device_attribute *attr, char *buf)
800 {
801 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
802 struct i2c_client *client = to_i2c_client(dev);
803 struct adt7475_data *data = i2c_get_clientdata(client);
804 u8 mask = BIT(5 + sattr->index);
805
806 return sprintf(buf, "%d\n", !!(data->enh_acoustics[0] & mask));
807 }
808
809 static ssize_t set_stall_disable(struct device *dev,
810 struct device_attribute *attr, const char *buf,
811 size_t count)
812 {
813 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
814 struct i2c_client *client = to_i2c_client(dev);
815 struct adt7475_data *data = i2c_get_clientdata(client);
816 long val;
817 u8 mask = BIT(5 + sattr->index);
818
819 if (kstrtol(buf, 10, &val))
820 return -EINVAL;
821
822 mutex_lock(&data->lock);
823
824 data->enh_acoustics[0] &= ~mask;
825 if (val)
826 data->enh_acoustics[0] |= mask;
827
828 i2c_smbus_write_byte_data(client, REG_ENHANCE_ACOUSTICS1,
829 data->enh_acoustics[0]);
830
831 mutex_unlock(&data->lock);
832
833 return count;
834 }
835
836 /* Called by set_pwmctrl and set_pwmchan */
837
838 static int hw_set_pwm(struct i2c_client *client, int index,
839 unsigned int pwmctl, unsigned int pwmchan)
840 {
841 struct adt7475_data *data = i2c_get_clientdata(client);
842 long val = 0;
843
844 switch (pwmctl) {
845 case 0:
846 val = 0x03; /* Run at full speed */
847 break;
848 case 1:
849 val = 0x07; /* Manual mode */
850 break;
851 case 2:
852 switch (pwmchan) {
853 case 1:
854 /* Remote1 controls PWM */
855 val = 0x00;
856 break;
857 case 2:
858 /* local controls PWM */
859 val = 0x01;
860 break;
861 case 4:
862 /* remote2 controls PWM */
863 val = 0x02;
864 break;
865 case 6:
866 /* local/remote2 control PWM */
867 val = 0x05;
868 break;
869 case 7:
870 /* All three control PWM */
871 val = 0x06;
872 break;
873 default:
874 return -EINVAL;
875 }
876 break;
877 default:
878 return -EINVAL;
879 }
880
881 data->pwmctl[index] = pwmctl;
882 data->pwmchan[index] = pwmchan;
883
884 data->pwm[CONTROL][index] &= ~0xE0;
885 data->pwm[CONTROL][index] |= (val & 7) << 5;
886
887 i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(index),
888 data->pwm[CONTROL][index]);
889
890 return 0;
891 }
892
893 static ssize_t set_pwmchan(struct device *dev, struct device_attribute *attr,
894 const char *buf, size_t count)
895 {
896 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
897 struct i2c_client *client = to_i2c_client(dev);
898 struct adt7475_data *data = i2c_get_clientdata(client);
899 int r;
900 long val;
901
902 if (kstrtol(buf, 10, &val))
903 return -EINVAL;
904
905 mutex_lock(&data->lock);
906 /* Read Modify Write PWM values */
907 adt7475_read_pwm(client, sattr->index);
908 r = hw_set_pwm(client, sattr->index, data->pwmctl[sattr->index], val);
909 if (r)
910 count = r;
911 mutex_unlock(&data->lock);
912
913 return count;
914 }
915
916 static ssize_t set_pwmctrl(struct device *dev, struct device_attribute *attr,
917 const char *buf, size_t count)
918 {
919 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
920 struct i2c_client *client = to_i2c_client(dev);
921 struct adt7475_data *data = i2c_get_clientdata(client);
922 int r;
923 long val;
924
925 if (kstrtol(buf, 10, &val))
926 return -EINVAL;
927
928 mutex_lock(&data->lock);
929 /* Read Modify Write PWM values */
930 adt7475_read_pwm(client, sattr->index);
931 r = hw_set_pwm(client, sattr->index, val, data->pwmchan[sattr->index]);
932 if (r)
933 count = r;
934 mutex_unlock(&data->lock);
935
936 return count;
937 }
938
939 /* List of frequencies for the PWM */
940 static const int pwmfreq_table[] = {
941 11, 14, 22, 29, 35, 44, 58, 88, 22500
942 };
943
944 static ssize_t show_pwmfreq(struct device *dev, struct device_attribute *attr,
945 char *buf)
946 {
947 struct adt7475_data *data = adt7475_update_device(dev);
948 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
949 int i = clamp_val(data->range[sattr->index] & 0xf, 0,
950 ARRAY_SIZE(pwmfreq_table) - 1);
951
952 return sprintf(buf, "%d\n", pwmfreq_table[i]);
953 }
954
955 static ssize_t set_pwmfreq(struct device *dev, struct device_attribute *attr,
956 const char *buf, size_t count)
957 {
958 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
959 struct i2c_client *client = to_i2c_client(dev);
960 struct adt7475_data *data = i2c_get_clientdata(client);
961 int out;
962 long val;
963
964 if (kstrtol(buf, 10, &val))
965 return -EINVAL;
966
967 out = find_closest(val, pwmfreq_table, ARRAY_SIZE(pwmfreq_table));
968
969 mutex_lock(&data->lock);
970
971 data->range[sattr->index] =
972 adt7475_read(TEMP_TRANGE_REG(sattr->index));
973 data->range[sattr->index] &= ~0xf;
974 data->range[sattr->index] |= out;
975
976 i2c_smbus_write_byte_data(client, TEMP_TRANGE_REG(sattr->index),
977 data->range[sattr->index]);
978
979 mutex_unlock(&data->lock);
980 return count;
981 }
982
983 static ssize_t pwm_use_point2_pwm_at_crit_show(struct device *dev,
984 struct device_attribute *devattr,
985 char *buf)
986 {
987 struct adt7475_data *data = adt7475_update_device(dev);
988 return sprintf(buf, "%d\n", !!(data->config4 & CONFIG4_MAXDUTY));
989 }
990
991 static ssize_t pwm_use_point2_pwm_at_crit_store(struct device *dev,
992 struct device_attribute *devattr,
993 const char *buf, size_t count)
994 {
995 struct i2c_client *client = to_i2c_client(dev);
996 struct adt7475_data *data = i2c_get_clientdata(client);
997 long val;
998
999 if (kstrtol(buf, 10, &val))
1000 return -EINVAL;
1001 if (val != 0 && val != 1)
1002 return -EINVAL;
1003
1004 mutex_lock(&data->lock);
1005 data->config4 = i2c_smbus_read_byte_data(client, REG_CONFIG4);
1006 if (val)
1007 data->config4 |= CONFIG4_MAXDUTY;
1008 else
1009 data->config4 &= ~CONFIG4_MAXDUTY;
1010 i2c_smbus_write_byte_data(client, REG_CONFIG4, data->config4);
1011 mutex_unlock(&data->lock);
1012
1013 return count;
1014 }
1015
1016 static ssize_t vrm_show(struct device *dev, struct device_attribute *devattr,
1017 char *buf)
1018 {
1019 struct adt7475_data *data = dev_get_drvdata(dev);
1020 return sprintf(buf, "%d\n", (int)data->vrm);
1021 }
1022
1023 static ssize_t vrm_store(struct device *dev, struct device_attribute *devattr,
1024 const char *buf, size_t count)
1025 {
1026 struct adt7475_data *data = dev_get_drvdata(dev);
1027 long val;
1028
1029 if (kstrtol(buf, 10, &val))
1030 return -EINVAL;
1031 if (val < 0 || val > 255)
1032 return -EINVAL;
1033 data->vrm = val;
1034
1035 return count;
1036 }
1037
1038 static ssize_t cpu0_vid_show(struct device *dev,
1039 struct device_attribute *devattr, char *buf)
1040 {
1041 struct adt7475_data *data = adt7475_update_device(dev);
1042 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
1043 }
1044
1045 static SENSOR_DEVICE_ATTR_2(in0_input, S_IRUGO, show_voltage, NULL, INPUT, 0);
1046 static SENSOR_DEVICE_ATTR_2(in0_max, S_IRUGO | S_IWUSR, show_voltage,
1047 set_voltage, MAX, 0);
1048 static SENSOR_DEVICE_ATTR_2(in0_min, S_IRUGO | S_IWUSR, show_voltage,
1049 set_voltage, MIN, 0);
1050 static SENSOR_DEVICE_ATTR_2(in0_alarm, S_IRUGO, show_voltage, NULL, ALARM, 0);
1051 static SENSOR_DEVICE_ATTR_2(in1_input, S_IRUGO, show_voltage, NULL, INPUT, 1);
1052 static SENSOR_DEVICE_ATTR_2(in1_max, S_IRUGO | S_IWUSR, show_voltage,
1053 set_voltage, MAX, 1);
1054 static SENSOR_DEVICE_ATTR_2(in1_min, S_IRUGO | S_IWUSR, show_voltage,
1055 set_voltage, MIN, 1);
1056 static SENSOR_DEVICE_ATTR_2(in1_alarm, S_IRUGO, show_voltage, NULL, ALARM, 1);
1057 static SENSOR_DEVICE_ATTR_2(in2_input, S_IRUGO, show_voltage, NULL, INPUT, 2);
1058 static SENSOR_DEVICE_ATTR_2(in2_max, S_IRUGO | S_IWUSR, show_voltage,
1059 set_voltage, MAX, 2);
1060 static SENSOR_DEVICE_ATTR_2(in2_min, S_IRUGO | S_IWUSR, show_voltage,
1061 set_voltage, MIN, 2);
1062 static SENSOR_DEVICE_ATTR_2(in2_alarm, S_IRUGO, show_voltage, NULL, ALARM, 2);
1063 static SENSOR_DEVICE_ATTR_2(in3_input, S_IRUGO, show_voltage, NULL, INPUT, 3);
1064 static SENSOR_DEVICE_ATTR_2(in3_max, S_IRUGO | S_IWUSR, show_voltage,
1065 set_voltage, MAX, 3);
1066 static SENSOR_DEVICE_ATTR_2(in3_min, S_IRUGO | S_IWUSR, show_voltage,
1067 set_voltage, MIN, 3);
1068 static SENSOR_DEVICE_ATTR_2(in3_alarm, S_IRUGO, show_voltage, NULL, ALARM, 3);
1069 static SENSOR_DEVICE_ATTR_2(in4_input, S_IRUGO, show_voltage, NULL, INPUT, 4);
1070 static SENSOR_DEVICE_ATTR_2(in4_max, S_IRUGO | S_IWUSR, show_voltage,
1071 set_voltage, MAX, 4);
1072 static SENSOR_DEVICE_ATTR_2(in4_min, S_IRUGO | S_IWUSR, show_voltage,
1073 set_voltage, MIN, 4);
1074 static SENSOR_DEVICE_ATTR_2(in4_alarm, S_IRUGO, show_voltage, NULL, ALARM, 8);
1075 static SENSOR_DEVICE_ATTR_2(in5_input, S_IRUGO, show_voltage, NULL, INPUT, 5);
1076 static SENSOR_DEVICE_ATTR_2(in5_max, S_IRUGO | S_IWUSR, show_voltage,
1077 set_voltage, MAX, 5);
1078 static SENSOR_DEVICE_ATTR_2(in5_min, S_IRUGO | S_IWUSR, show_voltage,
1079 set_voltage, MIN, 5);
1080 static SENSOR_DEVICE_ATTR_2(in5_alarm, S_IRUGO, show_voltage, NULL, ALARM, 31);
1081 static SENSOR_DEVICE_ATTR_2(temp1_input, S_IRUGO, show_temp, NULL, INPUT, 0);
1082 static SENSOR_DEVICE_ATTR_2(temp1_alarm, S_IRUGO, show_temp, NULL, ALARM, 0);
1083 static SENSOR_DEVICE_ATTR_2(temp1_fault, S_IRUGO, show_temp, NULL, FAULT, 0);
1084 static SENSOR_DEVICE_ATTR_2(temp1_max, S_IRUGO | S_IWUSR, show_temp, set_temp,
1085 MAX, 0);
1086 static SENSOR_DEVICE_ATTR_2(temp1_min, S_IRUGO | S_IWUSR, show_temp, set_temp,
1087 MIN, 0);
1088 static SENSOR_DEVICE_ATTR_2(temp1_offset, S_IRUGO | S_IWUSR, show_temp,
1089 set_temp, OFFSET, 0);
1090 static SENSOR_DEVICE_ATTR_2(temp1_auto_point1_temp, S_IRUGO | S_IWUSR,
1091 show_temp, set_temp, AUTOMIN, 0);
1092 static SENSOR_DEVICE_ATTR_2(temp1_auto_point2_temp, S_IRUGO | S_IWUSR,
1093 show_point2, set_point2, 0, 0);
1094 static SENSOR_DEVICE_ATTR_2(temp1_crit, S_IRUGO | S_IWUSR, show_temp, set_temp,
1095 THERM, 0);
1096 static SENSOR_DEVICE_ATTR_2(temp1_crit_hyst, S_IRUGO | S_IWUSR, show_temp,
1097 set_temp, HYSTERSIS, 0);
1098 static SENSOR_DEVICE_ATTR_2(temp1_smoothing, S_IRUGO | S_IWUSR, show_temp_st,
1099 set_temp_st, 0, 0);
1100 static SENSOR_DEVICE_ATTR_2(temp2_input, S_IRUGO, show_temp, NULL, INPUT, 1);
1101 static SENSOR_DEVICE_ATTR_2(temp2_alarm, S_IRUGO, show_temp, NULL, ALARM, 1);
1102 static SENSOR_DEVICE_ATTR_2(temp2_max, S_IRUGO | S_IWUSR, show_temp, set_temp,
1103 MAX, 1);
1104 static SENSOR_DEVICE_ATTR_2(temp2_min, S_IRUGO | S_IWUSR, show_temp, set_temp,
1105 MIN, 1);
1106 static SENSOR_DEVICE_ATTR_2(temp2_offset, S_IRUGO | S_IWUSR, show_temp,
1107 set_temp, OFFSET, 1);
1108 static SENSOR_DEVICE_ATTR_2(temp2_auto_point1_temp, S_IRUGO | S_IWUSR,
1109 show_temp, set_temp, AUTOMIN, 1);
1110 static SENSOR_DEVICE_ATTR_2(temp2_auto_point2_temp, S_IRUGO | S_IWUSR,
1111 show_point2, set_point2, 0, 1);
1112 static SENSOR_DEVICE_ATTR_2(temp2_crit, S_IRUGO | S_IWUSR, show_temp, set_temp,
1113 THERM, 1);
1114 static SENSOR_DEVICE_ATTR_2(temp2_crit_hyst, S_IRUGO | S_IWUSR, show_temp,
1115 set_temp, HYSTERSIS, 1);
1116 static SENSOR_DEVICE_ATTR_2(temp2_smoothing, S_IRUGO | S_IWUSR, show_temp_st,
1117 set_temp_st, 0, 1);
1118 static SENSOR_DEVICE_ATTR_2(temp3_input, S_IRUGO, show_temp, NULL, INPUT, 2);
1119 static SENSOR_DEVICE_ATTR_2(temp3_alarm, S_IRUGO, show_temp, NULL, ALARM, 2);
1120 static SENSOR_DEVICE_ATTR_2(temp3_fault, S_IRUGO, show_temp, NULL, FAULT, 2);
1121 static SENSOR_DEVICE_ATTR_2(temp3_max, S_IRUGO | S_IWUSR, show_temp, set_temp,
1122 MAX, 2);
1123 static SENSOR_DEVICE_ATTR_2(temp3_min, S_IRUGO | S_IWUSR, show_temp, set_temp,
1124 MIN, 2);
1125 static SENSOR_DEVICE_ATTR_2(temp3_offset, S_IRUGO | S_IWUSR, show_temp,
1126 set_temp, OFFSET, 2);
1127 static SENSOR_DEVICE_ATTR_2(temp3_auto_point1_temp, S_IRUGO | S_IWUSR,
1128 show_temp, set_temp, AUTOMIN, 2);
1129 static SENSOR_DEVICE_ATTR_2(temp3_auto_point2_temp, S_IRUGO | S_IWUSR,
1130 show_point2, set_point2, 0, 2);
1131 static SENSOR_DEVICE_ATTR_2(temp3_crit, S_IRUGO | S_IWUSR, show_temp, set_temp,
1132 THERM, 2);
1133 static SENSOR_DEVICE_ATTR_2(temp3_crit_hyst, S_IRUGO | S_IWUSR, show_temp,
1134 set_temp, HYSTERSIS, 2);
1135 static SENSOR_DEVICE_ATTR_2(temp3_smoothing, S_IRUGO | S_IWUSR, show_temp_st,
1136 set_temp_st, 0, 2);
1137 static SENSOR_DEVICE_ATTR_2(fan1_input, S_IRUGO, show_tach, NULL, INPUT, 0);
1138 static SENSOR_DEVICE_ATTR_2(fan1_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
1139 MIN, 0);
1140 static SENSOR_DEVICE_ATTR_2(fan1_alarm, S_IRUGO, show_tach, NULL, ALARM, 0);
1141 static SENSOR_DEVICE_ATTR_2(fan2_input, S_IRUGO, show_tach, NULL, INPUT, 1);
1142 static SENSOR_DEVICE_ATTR_2(fan2_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
1143 MIN, 1);
1144 static SENSOR_DEVICE_ATTR_2(fan2_alarm, S_IRUGO, show_tach, NULL, ALARM, 1);
1145 static SENSOR_DEVICE_ATTR_2(fan3_input, S_IRUGO, show_tach, NULL, INPUT, 2);
1146 static SENSOR_DEVICE_ATTR_2(fan3_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
1147 MIN, 2);
1148 static SENSOR_DEVICE_ATTR_2(fan3_alarm, S_IRUGO, show_tach, NULL, ALARM, 2);
1149 static SENSOR_DEVICE_ATTR_2(fan4_input, S_IRUGO, show_tach, NULL, INPUT, 3);
1150 static SENSOR_DEVICE_ATTR_2(fan4_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
1151 MIN, 3);
1152 static SENSOR_DEVICE_ATTR_2(fan4_alarm, S_IRUGO, show_tach, NULL, ALARM, 3);
1153 static SENSOR_DEVICE_ATTR_2(pwm1, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT,
1154 0);
1155 static SENSOR_DEVICE_ATTR_2(pwm1_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
1156 set_pwmfreq, INPUT, 0);
1157 static SENSOR_DEVICE_ATTR_2(pwm1_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
1158 set_pwmctrl, INPUT, 0);
1159 static SENSOR_DEVICE_ATTR_2(pwm1_auto_channels_temp, S_IRUGO | S_IWUSR,
1160 show_pwmchan, set_pwmchan, INPUT, 0);
1161 static SENSOR_DEVICE_ATTR_2(pwm1_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
1162 set_pwm, MIN, 0);
1163 static SENSOR_DEVICE_ATTR_2(pwm1_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm,
1164 set_pwm, MAX, 0);
1165 static SENSOR_DEVICE_ATTR_2(pwm1_stall_disable, S_IRUGO | S_IWUSR,
1166 show_stall_disable, set_stall_disable, 0, 0);
1167 static SENSOR_DEVICE_ATTR_2(pwm2, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT,
1168 1);
1169 static SENSOR_DEVICE_ATTR_2(pwm2_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
1170 set_pwmfreq, INPUT, 1);
1171 static SENSOR_DEVICE_ATTR_2(pwm2_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
1172 set_pwmctrl, INPUT, 1);
1173 static SENSOR_DEVICE_ATTR_2(pwm2_auto_channels_temp, S_IRUGO | S_IWUSR,
1174 show_pwmchan, set_pwmchan, INPUT, 1);
1175 static SENSOR_DEVICE_ATTR_2(pwm2_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
1176 set_pwm, MIN, 1);
1177 static SENSOR_DEVICE_ATTR_2(pwm2_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm,
1178 set_pwm, MAX, 1);
1179 static SENSOR_DEVICE_ATTR_2(pwm2_stall_disable, S_IRUGO | S_IWUSR,
1180 show_stall_disable, set_stall_disable, 0, 1);
1181 static SENSOR_DEVICE_ATTR_2(pwm3, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT,
1182 2);
1183 static SENSOR_DEVICE_ATTR_2(pwm3_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
1184 set_pwmfreq, INPUT, 2);
1185 static SENSOR_DEVICE_ATTR_2(pwm3_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
1186 set_pwmctrl, INPUT, 2);
1187 static SENSOR_DEVICE_ATTR_2(pwm3_auto_channels_temp, S_IRUGO | S_IWUSR,
1188 show_pwmchan, set_pwmchan, INPUT, 2);
1189 static SENSOR_DEVICE_ATTR_2(pwm3_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
1190 set_pwm, MIN, 2);
1191 static SENSOR_DEVICE_ATTR_2(pwm3_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm,
1192 set_pwm, MAX, 2);
1193 static SENSOR_DEVICE_ATTR_2(pwm3_stall_disable, S_IRUGO | S_IWUSR,
1194 show_stall_disable, set_stall_disable, 0, 2);
1195
1196 /* Non-standard name, might need revisiting */
1197 static DEVICE_ATTR_RW(pwm_use_point2_pwm_at_crit);
1198
1199 static DEVICE_ATTR_RW(vrm);
1200 static DEVICE_ATTR_RO(cpu0_vid);
1201
1202 static struct attribute *adt7475_attrs[] = {
1203 &sensor_dev_attr_in1_input.dev_attr.attr,
1204 &sensor_dev_attr_in1_max.dev_attr.attr,
1205 &sensor_dev_attr_in1_min.dev_attr.attr,
1206 &sensor_dev_attr_in1_alarm.dev_attr.attr,
1207 &sensor_dev_attr_in2_input.dev_attr.attr,
1208 &sensor_dev_attr_in2_max.dev_attr.attr,
1209 &sensor_dev_attr_in2_min.dev_attr.attr,
1210 &sensor_dev_attr_in2_alarm.dev_attr.attr,
1211 &sensor_dev_attr_temp1_input.dev_attr.attr,
1212 &sensor_dev_attr_temp1_alarm.dev_attr.attr,
1213 &sensor_dev_attr_temp1_fault.dev_attr.attr,
1214 &sensor_dev_attr_temp1_max.dev_attr.attr,
1215 &sensor_dev_attr_temp1_min.dev_attr.attr,
1216 &sensor_dev_attr_temp1_offset.dev_attr.attr,
1217 &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr,
1218 &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr,
1219 &sensor_dev_attr_temp1_crit.dev_attr.attr,
1220 &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr,
1221 &sensor_dev_attr_temp1_smoothing.dev_attr.attr,
1222 &sensor_dev_attr_temp2_input.dev_attr.attr,
1223 &sensor_dev_attr_temp2_alarm.dev_attr.attr,
1224 &sensor_dev_attr_temp2_max.dev_attr.attr,
1225 &sensor_dev_attr_temp2_min.dev_attr.attr,
1226 &sensor_dev_attr_temp2_offset.dev_attr.attr,
1227 &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr,
1228 &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr,
1229 &sensor_dev_attr_temp2_crit.dev_attr.attr,
1230 &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr,
1231 &sensor_dev_attr_temp2_smoothing.dev_attr.attr,
1232 &sensor_dev_attr_temp3_input.dev_attr.attr,
1233 &sensor_dev_attr_temp3_fault.dev_attr.attr,
1234 &sensor_dev_attr_temp3_alarm.dev_attr.attr,
1235 &sensor_dev_attr_temp3_max.dev_attr.attr,
1236 &sensor_dev_attr_temp3_min.dev_attr.attr,
1237 &sensor_dev_attr_temp3_offset.dev_attr.attr,
1238 &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr,
1239 &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr,
1240 &sensor_dev_attr_temp3_crit.dev_attr.attr,
1241 &sensor_dev_attr_temp3_crit_hyst.dev_attr.attr,
1242 &sensor_dev_attr_temp3_smoothing.dev_attr.attr,
1243 &sensor_dev_attr_fan1_input.dev_attr.attr,
1244 &sensor_dev_attr_fan1_min.dev_attr.attr,
1245 &sensor_dev_attr_fan1_alarm.dev_attr.attr,
1246 &sensor_dev_attr_fan2_input.dev_attr.attr,
1247 &sensor_dev_attr_fan2_min.dev_attr.attr,
1248 &sensor_dev_attr_fan2_alarm.dev_attr.attr,
1249 &sensor_dev_attr_fan3_input.dev_attr.attr,
1250 &sensor_dev_attr_fan3_min.dev_attr.attr,
1251 &sensor_dev_attr_fan3_alarm.dev_attr.attr,
1252 &sensor_dev_attr_pwm1.dev_attr.attr,
1253 &sensor_dev_attr_pwm1_freq.dev_attr.attr,
1254 &sensor_dev_attr_pwm1_enable.dev_attr.attr,
1255 &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1256 &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1257 &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1258 &sensor_dev_attr_pwm1_stall_disable.dev_attr.attr,
1259 &sensor_dev_attr_pwm3.dev_attr.attr,
1260 &sensor_dev_attr_pwm3_freq.dev_attr.attr,
1261 &sensor_dev_attr_pwm3_enable.dev_attr.attr,
1262 &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1263 &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1264 &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1265 &sensor_dev_attr_pwm3_stall_disable.dev_attr.attr,
1266 &dev_attr_pwm_use_point2_pwm_at_crit.attr,
1267 NULL,
1268 };
1269
1270 static struct attribute *fan4_attrs[] = {
1271 &sensor_dev_attr_fan4_input.dev_attr.attr,
1272 &sensor_dev_attr_fan4_min.dev_attr.attr,
1273 &sensor_dev_attr_fan4_alarm.dev_attr.attr,
1274 NULL
1275 };
1276
1277 static struct attribute *pwm2_attrs[] = {
1278 &sensor_dev_attr_pwm2.dev_attr.attr,
1279 &sensor_dev_attr_pwm2_freq.dev_attr.attr,
1280 &sensor_dev_attr_pwm2_enable.dev_attr.attr,
1281 &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
1282 &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
1283 &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
1284 &sensor_dev_attr_pwm2_stall_disable.dev_attr.attr,
1285 NULL
1286 };
1287
1288 static struct attribute *in0_attrs[] = {
1289 &sensor_dev_attr_in0_input.dev_attr.attr,
1290 &sensor_dev_attr_in0_max.dev_attr.attr,
1291 &sensor_dev_attr_in0_min.dev_attr.attr,
1292 &sensor_dev_attr_in0_alarm.dev_attr.attr,
1293 NULL
1294 };
1295
1296 static struct attribute *in3_attrs[] = {
1297 &sensor_dev_attr_in3_input.dev_attr.attr,
1298 &sensor_dev_attr_in3_max.dev_attr.attr,
1299 &sensor_dev_attr_in3_min.dev_attr.attr,
1300 &sensor_dev_attr_in3_alarm.dev_attr.attr,
1301 NULL
1302 };
1303
1304 static struct attribute *in4_attrs[] = {
1305 &sensor_dev_attr_in4_input.dev_attr.attr,
1306 &sensor_dev_attr_in4_max.dev_attr.attr,
1307 &sensor_dev_attr_in4_min.dev_attr.attr,
1308 &sensor_dev_attr_in4_alarm.dev_attr.attr,
1309 NULL
1310 };
1311
1312 static struct attribute *in5_attrs[] = {
1313 &sensor_dev_attr_in5_input.dev_attr.attr,
1314 &sensor_dev_attr_in5_max.dev_attr.attr,
1315 &sensor_dev_attr_in5_min.dev_attr.attr,
1316 &sensor_dev_attr_in5_alarm.dev_attr.attr,
1317 NULL
1318 };
1319
1320 static struct attribute *vid_attrs[] = {
1321 &dev_attr_cpu0_vid.attr,
1322 &dev_attr_vrm.attr,
1323 NULL
1324 };
1325
1326 static const struct attribute_group adt7475_attr_group = { .attrs = adt7475_attrs };
1327 static const struct attribute_group fan4_attr_group = { .attrs = fan4_attrs };
1328 static const struct attribute_group pwm2_attr_group = { .attrs = pwm2_attrs };
1329 static const struct attribute_group in0_attr_group = { .attrs = in0_attrs };
1330 static const struct attribute_group in3_attr_group = { .attrs = in3_attrs };
1331 static const struct attribute_group in4_attr_group = { .attrs = in4_attrs };
1332 static const struct attribute_group in5_attr_group = { .attrs = in5_attrs };
1333 static const struct attribute_group vid_attr_group = { .attrs = vid_attrs };
1334
1335 static int adt7475_detect(struct i2c_client *client,
1336 struct i2c_board_info *info)
1337 {
1338 struct i2c_adapter *adapter = client->adapter;
1339 int vendid, devid, devid2;
1340 const char *name;
1341
1342 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1343 return -ENODEV;
1344
1345 vendid = adt7475_read(REG_VENDID);
1346 devid2 = adt7475_read(REG_DEVID2);
1347 if (vendid != 0x41 || /* Analog Devices */
1348 (devid2 & 0xf8) != 0x68)
1349 return -ENODEV;
1350
1351 devid = adt7475_read(REG_DEVID);
1352 if (devid == 0x73)
1353 name = "adt7473";
1354 else if (devid == 0x75 && client->addr == 0x2e)
1355 name = "adt7475";
1356 else if (devid == 0x76)
1357 name = "adt7476";
1358 else if ((devid2 & 0xfc) == 0x6c)
1359 name = "adt7490";
1360 else {
1361 dev_dbg(&adapter->dev,
1362 "Couldn't detect an ADT7473/75/76/90 part at "
1363 "0x%02x\n", (unsigned int)client->addr);
1364 return -ENODEV;
1365 }
1366
1367 strlcpy(info->type, name, I2C_NAME_SIZE);
1368
1369 return 0;
1370 }
1371
1372 static void adt7475_remove_files(struct i2c_client *client,
1373 struct adt7475_data *data)
1374 {
1375 sysfs_remove_group(&client->dev.kobj, &adt7475_attr_group);
1376 if (data->has_fan4)
1377 sysfs_remove_group(&client->dev.kobj, &fan4_attr_group);
1378 if (data->has_pwm2)
1379 sysfs_remove_group(&client->dev.kobj, &pwm2_attr_group);
1380 if (data->has_voltage & (1 << 0))
1381 sysfs_remove_group(&client->dev.kobj, &in0_attr_group);
1382 if (data->has_voltage & (1 << 3))
1383 sysfs_remove_group(&client->dev.kobj, &in3_attr_group);
1384 if (data->has_voltage & (1 << 4))
1385 sysfs_remove_group(&client->dev.kobj, &in4_attr_group);
1386 if (data->has_voltage & (1 << 5))
1387 sysfs_remove_group(&client->dev.kobj, &in5_attr_group);
1388 if (data->has_vid)
1389 sysfs_remove_group(&client->dev.kobj, &vid_attr_group);
1390 }
1391
1392 static int adt7475_probe(struct i2c_client *client,
1393 const struct i2c_device_id *id)
1394 {
1395 enum chips chip;
1396 static const char * const names[] = {
1397 [adt7473] = "ADT7473",
1398 [adt7475] = "ADT7475",
1399 [adt7476] = "ADT7476",
1400 [adt7490] = "ADT7490",
1401 };
1402
1403 struct adt7475_data *data;
1404 int i, ret = 0, revision;
1405 u8 config2, config3;
1406
1407 data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL);
1408 if (data == NULL)
1409 return -ENOMEM;
1410
1411 mutex_init(&data->lock);
1412 i2c_set_clientdata(client, data);
1413
1414 if (client->dev.of_node)
1415 chip = (enum chips)of_device_get_match_data(&client->dev);
1416 else
1417 chip = id->driver_data;
1418
1419 /* Initialize device-specific values */
1420 switch (chip) {
1421 case adt7476:
1422 data->has_voltage = 0x0e; /* in1 to in3 */
1423 revision = adt7475_read(REG_DEVID2) & 0x07;
1424 break;
1425 case adt7490:
1426 data->has_voltage = 0x3e; /* in1 to in5 */
1427 revision = adt7475_read(REG_DEVID2) & 0x03;
1428 if (revision == 0x03)
1429 revision += adt7475_read(REG_DEVREV2);
1430 break;
1431 default:
1432 data->has_voltage = 0x06; /* in1, in2 */
1433 revision = adt7475_read(REG_DEVID2) & 0x07;
1434 }
1435
1436 config3 = adt7475_read(REG_CONFIG3);
1437 /* Pin PWM2 may alternatively be used for ALERT output */
1438 if (!(config3 & CONFIG3_SMBALERT))
1439 data->has_pwm2 = 1;
1440 /* Meaning of this bit is inverted for the ADT7473-1 */
1441 if (id->driver_data == adt7473 && revision >= 1)
1442 data->has_pwm2 = !data->has_pwm2;
1443
1444 data->config4 = adt7475_read(REG_CONFIG4);
1445 /* Pin TACH4 may alternatively be used for THERM */
1446 if ((data->config4 & CONFIG4_PINFUNC) == 0x0)
1447 data->has_fan4 = 1;
1448
1449 /*
1450 * THERM configuration is more complex on the ADT7476 and ADT7490,
1451 * because 2 different pins (TACH4 and +2.5 Vin) can be used for
1452 * this function
1453 */
1454 if (id->driver_data == adt7490) {
1455 if ((data->config4 & CONFIG4_PINFUNC) == 0x1 &&
1456 !(config3 & CONFIG3_THERM))
1457 data->has_fan4 = 1;
1458 }
1459 if (id->driver_data == adt7476 || id->driver_data == adt7490) {
1460 if (!(config3 & CONFIG3_THERM) ||
1461 (data->config4 & CONFIG4_PINFUNC) == 0x1)
1462 data->has_voltage |= (1 << 0); /* in0 */
1463 }
1464
1465 /*
1466 * On the ADT7476, the +12V input pin may instead be used as VID5,
1467 * and VID pins may alternatively be used as GPIO
1468 */
1469 if (id->driver_data == adt7476) {
1470 u8 vid = adt7475_read(REG_VID);
1471 if (!(vid & VID_VIDSEL))
1472 data->has_voltage |= (1 << 4); /* in4 */
1473
1474 data->has_vid = !(adt7475_read(REG_CONFIG5) & CONFIG5_VIDGPIO);
1475 }
1476
1477 /* Voltage attenuators can be bypassed, globally or individually */
1478 config2 = adt7475_read(REG_CONFIG2);
1479 if (config2 & CONFIG2_ATTN) {
1480 data->bypass_attn = (0x3 << 3) | 0x3;
1481 } else {
1482 data->bypass_attn = ((data->config4 & CONFIG4_ATTN_IN10) >> 4) |
1483 ((data->config4 & CONFIG4_ATTN_IN43) >> 3);
1484 }
1485 data->bypass_attn &= data->has_voltage;
1486
1487 /*
1488 * Call adt7475_read_pwm for all pwm's as this will reprogram any
1489 * pwm's which are disabled to manual mode with 0% duty cycle
1490 */
1491 for (i = 0; i < ADT7475_PWM_COUNT; i++)
1492 adt7475_read_pwm(client, i);
1493
1494 /* Start monitoring */
1495 switch (chip) {
1496 case adt7475:
1497 case adt7476:
1498 i2c_smbus_write_byte_data(client, REG_CONFIG1,
1499 adt7475_read(REG_CONFIG1) | 0x01);
1500 break;
1501 default:
1502 break;
1503 }
1504
1505 ret = sysfs_create_group(&client->dev.kobj, &adt7475_attr_group);
1506 if (ret)
1507 return ret;
1508
1509 /* Features that can be disabled individually */
1510 if (data->has_fan4) {
1511 ret = sysfs_create_group(&client->dev.kobj, &fan4_attr_group);
1512 if (ret)
1513 goto eremove;
1514 }
1515 if (data->has_pwm2) {
1516 ret = sysfs_create_group(&client->dev.kobj, &pwm2_attr_group);
1517 if (ret)
1518 goto eremove;
1519 }
1520 if (data->has_voltage & (1 << 0)) {
1521 ret = sysfs_create_group(&client->dev.kobj, &in0_attr_group);
1522 if (ret)
1523 goto eremove;
1524 }
1525 if (data->has_voltage & (1 << 3)) {
1526 ret = sysfs_create_group(&client->dev.kobj, &in3_attr_group);
1527 if (ret)
1528 goto eremove;
1529 }
1530 if (data->has_voltage & (1 << 4)) {
1531 ret = sysfs_create_group(&client->dev.kobj, &in4_attr_group);
1532 if (ret)
1533 goto eremove;
1534 }
1535 if (data->has_voltage & (1 << 5)) {
1536 ret = sysfs_create_group(&client->dev.kobj, &in5_attr_group);
1537 if (ret)
1538 goto eremove;
1539 }
1540 if (data->has_vid) {
1541 data->vrm = vid_which_vrm();
1542 ret = sysfs_create_group(&client->dev.kobj, &vid_attr_group);
1543 if (ret)
1544 goto eremove;
1545 }
1546
1547 data->hwmon_dev = hwmon_device_register(&client->dev);
1548 if (IS_ERR(data->hwmon_dev)) {
1549 ret = PTR_ERR(data->hwmon_dev);
1550 goto eremove;
1551 }
1552
1553 dev_info(&client->dev, "%s device, revision %d\n",
1554 names[id->driver_data], revision);
1555 if ((data->has_voltage & 0x11) || data->has_fan4 || data->has_pwm2)
1556 dev_info(&client->dev, "Optional features:%s%s%s%s%s\n",
1557 (data->has_voltage & (1 << 0)) ? " in0" : "",
1558 (data->has_voltage & (1 << 4)) ? " in4" : "",
1559 data->has_fan4 ? " fan4" : "",
1560 data->has_pwm2 ? " pwm2" : "",
1561 data->has_vid ? " vid" : "");
1562 if (data->bypass_attn)
1563 dev_info(&client->dev, "Bypassing attenuators on:%s%s%s%s\n",
1564 (data->bypass_attn & (1 << 0)) ? " in0" : "",
1565 (data->bypass_attn & (1 << 1)) ? " in1" : "",
1566 (data->bypass_attn & (1 << 3)) ? " in3" : "",
1567 (data->bypass_attn & (1 << 4)) ? " in4" : "");
1568
1569 return 0;
1570
1571 eremove:
1572 adt7475_remove_files(client, data);
1573 return ret;
1574 }
1575
1576 static int adt7475_remove(struct i2c_client *client)
1577 {
1578 struct adt7475_data *data = i2c_get_clientdata(client);
1579
1580 hwmon_device_unregister(data->hwmon_dev);
1581 adt7475_remove_files(client, data);
1582
1583 return 0;
1584 }
1585
1586 static struct i2c_driver adt7475_driver = {
1587 .class = I2C_CLASS_HWMON,
1588 .driver = {
1589 .name = "adt7475",
1590 .of_match_table = of_match_ptr(adt7475_of_match),
1591 },
1592 .probe = adt7475_probe,
1593 .remove = adt7475_remove,
1594 .id_table = adt7475_id,
1595 .detect = adt7475_detect,
1596 .address_list = normal_i2c,
1597 };
1598
1599 static void adt7475_read_hystersis(struct i2c_client *client)
1600 {
1601 struct adt7475_data *data = i2c_get_clientdata(client);
1602
1603 data->temp[HYSTERSIS][0] = (u16) adt7475_read(REG_REMOTE1_HYSTERSIS);
1604 data->temp[HYSTERSIS][1] = data->temp[HYSTERSIS][0];
1605 data->temp[HYSTERSIS][2] = (u16) adt7475_read(REG_REMOTE2_HYSTERSIS);
1606 }
1607
1608 static void adt7475_read_pwm(struct i2c_client *client, int index)
1609 {
1610 struct adt7475_data *data = i2c_get_clientdata(client);
1611 unsigned int v;
1612
1613 data->pwm[CONTROL][index] = adt7475_read(PWM_CONFIG_REG(index));
1614
1615 /*
1616 * Figure out the internal value for pwmctrl and pwmchan
1617 * based on the current settings
1618 */
1619 v = (data->pwm[CONTROL][index] >> 5) & 7;
1620
1621 if (v == 3)
1622 data->pwmctl[index] = 0;
1623 else if (v == 7)
1624 data->pwmctl[index] = 1;
1625 else if (v == 4) {
1626 /*
1627 * The fan is disabled - we don't want to
1628 * support that, so change to manual mode and
1629 * set the duty cycle to 0 instead
1630 */
1631 data->pwm[INPUT][index] = 0;
1632 data->pwm[CONTROL][index] &= ~0xE0;
1633 data->pwm[CONTROL][index] |= (7 << 5);
1634
1635 i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(index),
1636 data->pwm[INPUT][index]);
1637
1638 i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(index),
1639 data->pwm[CONTROL][index]);
1640
1641 data->pwmctl[index] = 1;
1642 } else {
1643 data->pwmctl[index] = 2;
1644
1645 switch (v) {
1646 case 0:
1647 data->pwmchan[index] = 1;
1648 break;
1649 case 1:
1650 data->pwmchan[index] = 2;
1651 break;
1652 case 2:
1653 data->pwmchan[index] = 4;
1654 break;
1655 case 5:
1656 data->pwmchan[index] = 6;
1657 break;
1658 case 6:
1659 data->pwmchan[index] = 7;
1660 break;
1661 }
1662 }
1663 }
1664
1665 static struct adt7475_data *adt7475_update_device(struct device *dev)
1666 {
1667 struct i2c_client *client = to_i2c_client(dev);
1668 struct adt7475_data *data = i2c_get_clientdata(client);
1669 u16 ext;
1670 int i;
1671
1672 mutex_lock(&data->lock);
1673
1674 /* Measurement values update every 2 seconds */
1675 if (time_after(jiffies, data->measure_updated + HZ * 2) ||
1676 !data->valid) {
1677 data->alarms = adt7475_read(REG_STATUS2) << 8;
1678 data->alarms |= adt7475_read(REG_STATUS1);
1679
1680 ext = (adt7475_read(REG_EXTEND2) << 8) |
1681 adt7475_read(REG_EXTEND1);
1682 for (i = 0; i < ADT7475_VOLTAGE_COUNT; i++) {
1683 if (!(data->has_voltage & (1 << i)))
1684 continue;
1685 data->voltage[INPUT][i] =
1686 (adt7475_read(VOLTAGE_REG(i)) << 2) |
1687 ((ext >> (i * 2)) & 3);
1688 }
1689
1690 for (i = 0; i < ADT7475_TEMP_COUNT; i++)
1691 data->temp[INPUT][i] =
1692 (adt7475_read(TEMP_REG(i)) << 2) |
1693 ((ext >> ((i + 5) * 2)) & 3);
1694
1695 if (data->has_voltage & (1 << 5)) {
1696 data->alarms |= adt7475_read(REG_STATUS4) << 24;
1697 ext = adt7475_read(REG_EXTEND3);
1698 data->voltage[INPUT][5] = adt7475_read(REG_VTT) << 2 |
1699 ((ext >> 4) & 3);
1700 }
1701
1702 for (i = 0; i < ADT7475_TACH_COUNT; i++) {
1703 if (i == 3 && !data->has_fan4)
1704 continue;
1705 data->tach[INPUT][i] =
1706 adt7475_read_word(client, TACH_REG(i));
1707 }
1708
1709 /* Updated by hw when in auto mode */
1710 for (i = 0; i < ADT7475_PWM_COUNT; i++) {
1711 if (i == 1 && !data->has_pwm2)
1712 continue;
1713 data->pwm[INPUT][i] = adt7475_read(PWM_REG(i));
1714 }
1715
1716 if (data->has_vid)
1717 data->vid = adt7475_read(REG_VID) & 0x3f;
1718
1719 data->measure_updated = jiffies;
1720 }
1721
1722 /* Limits and settings, should never change update every 60 seconds */
1723 if (time_after(jiffies, data->limits_updated + HZ * 60) ||
1724 !data->valid) {
1725 data->config4 = adt7475_read(REG_CONFIG4);
1726 data->config5 = adt7475_read(REG_CONFIG5);
1727
1728 for (i = 0; i < ADT7475_VOLTAGE_COUNT; i++) {
1729 if (!(data->has_voltage & (1 << i)))
1730 continue;
1731 /* Adjust values so they match the input precision */
1732 data->voltage[MIN][i] =
1733 adt7475_read(VOLTAGE_MIN_REG(i)) << 2;
1734 data->voltage[MAX][i] =
1735 adt7475_read(VOLTAGE_MAX_REG(i)) << 2;
1736 }
1737
1738 if (data->has_voltage & (1 << 5)) {
1739 data->voltage[MIN][5] = adt7475_read(REG_VTT_MIN) << 2;
1740 data->voltage[MAX][5] = adt7475_read(REG_VTT_MAX) << 2;
1741 }
1742
1743 for (i = 0; i < ADT7475_TEMP_COUNT; i++) {
1744 /* Adjust values so they match the input precision */
1745 data->temp[MIN][i] =
1746 adt7475_read(TEMP_MIN_REG(i)) << 2;
1747 data->temp[MAX][i] =
1748 adt7475_read(TEMP_MAX_REG(i)) << 2;
1749 data->temp[AUTOMIN][i] =
1750 adt7475_read(TEMP_TMIN_REG(i)) << 2;
1751 data->temp[THERM][i] =
1752 adt7475_read(TEMP_THERM_REG(i)) << 2;
1753 data->temp[OFFSET][i] =
1754 adt7475_read(TEMP_OFFSET_REG(i));
1755 }
1756 adt7475_read_hystersis(client);
1757
1758 for (i = 0; i < ADT7475_TACH_COUNT; i++) {
1759 if (i == 3 && !data->has_fan4)
1760 continue;
1761 data->tach[MIN][i] =
1762 adt7475_read_word(client, TACH_MIN_REG(i));
1763 }
1764
1765 for (i = 0; i < ADT7475_PWM_COUNT; i++) {
1766 if (i == 1 && !data->has_pwm2)
1767 continue;
1768 data->pwm[MAX][i] = adt7475_read(PWM_MAX_REG(i));
1769 data->pwm[MIN][i] = adt7475_read(PWM_MIN_REG(i));
1770 /* Set the channel and control information */
1771 adt7475_read_pwm(client, i);
1772 }
1773
1774 data->range[0] = adt7475_read(TEMP_TRANGE_REG(0));
1775 data->range[1] = adt7475_read(TEMP_TRANGE_REG(1));
1776 data->range[2] = adt7475_read(TEMP_TRANGE_REG(2));
1777
1778 data->limits_updated = jiffies;
1779 data->valid = 1;
1780 }
1781
1782 mutex_unlock(&data->lock);
1783
1784 return data;
1785 }
1786
1787 module_i2c_driver(adt7475_driver);
1788
1789 MODULE_AUTHOR("Advanced Micro Devices, Inc");
1790 MODULE_DESCRIPTION("adt7475 driver");
1791 MODULE_LICENSE("GPL");