implement samsung last_kmsg
[GitHub/moto-9609/android_kernel_motorola_exynos9610.git] / drivers / hwmon / adt7475.c
CommitLineData
1c301fc5
JC
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>
7c81c60f 6 * Copyright (C) 2009 Jean Delvare <jdelvare@suse.de>
3d849981 7 *
1c301fc5
JC
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>
4e2496e4 16#include <linux/of_device.h>
1c301fc5
JC
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>
54fe4671 22#include <linux/hwmon-vid.h>
1c301fc5 23#include <linux/err.h>
dcd8f392 24#include <linux/jiffies.h>
e4651640 25#include <linux/util_macros.h>
1c301fc5
JC
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
9ed5bc24
GR
38/*
39 * These are unique identifiers for the sysfs functions - unlike the
40 * numbers above, these are not also indexes into an array
41 */
1c301fc5
JC
42
43#define ALARM 9
44#define FAULT 10
45
46/* 7475 Common Registers */
47
d07ca4ad
JD
48#define REG_DEVREV2 0x12 /* ADT7490 only */
49
3d849981
JD
50#define REG_VTT 0x1E /* ADT7490 only */
51#define REG_EXTEND3 0x1F /* ADT7490 only */
52
cffb9dd0 53#define REG_VOLTAGE_BASE 0x20
1c301fc5
JC
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
d656b6fd 61#define REG_DEVID2 0x3F
1c301fc5 62
4abdf38d
CP
63#define REG_CONFIG1 0x40
64
1c301fc5
JC
65#define REG_STATUS1 0x41
66#define REG_STATUS2 0x42
67
d8d2ee07
JD
68#define REG_VID 0x43 /* ADT7476 only */
69
cffb9dd0
JD
70#define REG_VOLTAGE_MIN_BASE 0x44
71#define REG_VOLTAGE_MAX_BASE 0x45
1c301fc5
JC
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
1d58f5ef
CP
82#define REG_ENHANCE_ACOUSTICS1 0x62
83#define REG_ENHANCE_ACOUSTICS2 0x63
84
1c301fc5
JC
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
ebfaf1fb
JD
95#define REG_CONFIG2 0x73
96
1c301fc5
JC
97#define REG_EXTEND1 0x76
98#define REG_EXTEND2 0x77
378933c9
JD
99
100#define REG_CONFIG3 0x78
1c301fc5 101#define REG_CONFIG5 0x7C
f99318b2
JD
102#define REG_CONFIG4 0x7D
103
3d849981
JD
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
d8d2ee07
JD
109#define VID_VIDSEL 0x80 /* ADT7476 only */
110
ebfaf1fb
JD
111#define CONFIG2_ATTN 0x20
112
378933c9
JD
113#define CONFIG3_SMBALERT 0x01
114#define CONFIG3_THERM 0x02
115
116#define CONFIG4_PINFUNC 0x03
f99318b2 117#define CONFIG4_MAXDUTY 0x08
ebfaf1fb
JD
118#define CONFIG4_ATTN_IN10 0x30
119#define CONFIG4_ATTN_IN43 0xC0
1c301fc5
JC
120
121#define CONFIG5_TWOSCOMP 0x01
122#define CONFIG5_TEMPOFFSET 0x02
54fe4671 123#define CONFIG5_VIDGPIO 0x10 /* ADT7476 only */
1c301fc5
JC
124
125/* ADT7475 Settings */
126
cffb9dd0 127#define ADT7475_VOLTAGE_COUNT 5 /* Not counting Vtt */
1c301fc5
JC
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
918ee91c 158static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
1c301fc5 159
e5e9f44c 160enum chips { adt7473, adt7475, adt7476, adt7490 };
1c301fc5
JC
161
162static const struct i2c_device_id adt7475_id[] = {
b180d050 163 { "adt7473", adt7473 },
1c301fc5 164 { "adt7475", adt7475 },
d8d2ee07 165 { "adt7476", adt7476 },
3d849981 166 { "adt7490", adt7490 },
1c301fc5
JC
167 { }
168};
169MODULE_DEVICE_TABLE(i2c, adt7475_id);
170
4e2496e4
JMC
171static 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};
190MODULE_DEVICE_TABLE(of, adt7475_of_match);
191
1c301fc5
JC
192struct 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
f99318b2 200 u8 config4;
1c301fc5 201 u8 config5;
cffb9dd0 202 u8 has_voltage;
ebfaf1fb 203 u8 bypass_attn; /* Bypass voltage attenuator */
378933c9
JD
204 u8 has_pwm2:1;
205 u8 has_fan4:1;
54fe4671 206 u8 has_vid:1;
3d849981 207 u32 alarms;
cffb9dd0 208 u16 voltage[3][6];
1c301fc5
JC
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];
1d58f5ef 215 u8 enh_acoustics[2];
54fe4671
JD
216
217 u8 vid;
218 u8 vrm;
1c301fc5
JC
219};
220
221static struct i2c_driver adt7475_driver;
222static struct adt7475_data *adt7475_update_device(struct device *dev);
223static void adt7475_read_hystersis(struct i2c_client *client);
224static void adt7475_read_pwm(struct i2c_client *client, int index);
225
226/* Given a temp value, convert it to register value */
227
228static inline u16 temp2reg(struct adt7475_data *data, long val)
229{
230 u16 ret;
231
232 if (!(data->config5 & CONFIG5_TWOSCOMP)) {
2a844c14 233 val = clamp_val(val, -64000, 191000);
1c301fc5
JC
234 ret = (val + 64500) / 1000;
235 } else {
2a844c14 236 val = clamp_val(val, -128000, 127000);
1c301fc5
JC
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
248static 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
259static inline int tach2rpm(u16 tach)
260{
261 if (tach == 0 || tach == 0xFFFF)
262 return 0;
263
264 return (90000 * 60) / tach;
265}
266
267static inline u16 rpm2tach(unsigned long rpm)
268{
269 if (rpm == 0)
270 return 0;
271
2a844c14 272 return clamp_val((90000 * 60) / rpm, 1, 0xFFFF);
1c301fc5
JC
273}
274
cffb9dd0
JD
275/* Scaling factors for voltage inputs, taken from the ADT7490 datasheet */
276static 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};
1c301fc5 284
ebfaf1fb 285static inline int reg2volt(int channel, u16 reg, u8 bypass_attn)
1c301fc5 286{
cffb9dd0 287 const int *r = adt7473_in_scaling[channel];
1c301fc5 288
ebfaf1fb
JD
289 if (bypass_attn & (1 << channel))
290 return DIV_ROUND_CLOSEST(reg * 2250, 1024);
cffb9dd0 291 return DIV_ROUND_CLOSEST(reg * (r[0] + r[1]) * 2250, r[1] * 1024);
1c301fc5
JC
292}
293
ebfaf1fb 294static inline u16 volt2reg(int channel, long volt, u8 bypass_attn)
1c301fc5 295{
cffb9dd0
JD
296 const int *r = adt7473_in_scaling[channel];
297 long reg;
298
ebfaf1fb
JD
299 if (bypass_attn & (1 << channel))
300 reg = (volt * 1024) / 2250;
301 else
302 reg = (volt * r[1] * 1024) / ((r[0] + r[1]) * 2250);
2a844c14 303 return clamp_val(reg, 0, 1023) & (0xff << 2);
1c301fc5
JC
304}
305
d3ddd8e1 306static int adt7475_read_word(struct i2c_client *client, int reg)
1c301fc5 307{
d3ddd8e1 308 int val1, val2;
1c301fc5 309
d3ddd8e1
DC
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;
1c301fc5 316
d3ddd8e1 317 return val1 | (val2 << 8);
1c301fc5
JC
318}
319
320static 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
1c301fc5
JC
326static 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",
cffb9dd0 336 (data->alarms >> sattr->index) & 1);
1c301fc5
JC
337 default:
338 val = data->voltage[sattr->nr][sattr->index];
ebfaf1fb
JD
339 return sprintf(buf, "%d\n",
340 reg2volt(sattr->index, val, data->bypass_attn));
1c301fc5
JC
341 }
342}
343
344static 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
179c4fdb 354 if (kstrtol(buf, 10, &val))
1c301fc5
JC
355 return -EINVAL;
356
357 mutex_lock(&data->lock);
358
ebfaf1fb
JD
359 data->voltage[sattr->nr][sattr->index] =
360 volt2reg(sattr->index, val, data->bypass_attn);
1c301fc5 361
3d849981
JD
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 }
1c301fc5
JC
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
381static 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);
9ed5bc24
GR
396 /*
397 * Show the value as an absolute number tied to
398 * THERM
399 */
1c301fc5
JC
400 out = reg2temp(data, data->temp[THERM][sattr->index]) -
401 out * 1000;
402 mutex_unlock(&data->lock);
403 break;
404
405 case OFFSET:
9ed5bc24
GR
406 /*
407 * Offset is always 2's complement, regardless of the
408 * setting in CONFIG5
409 */
1c301fc5
JC
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 */
cf312e07 425 out = !!(data->alarms & (sattr->index ? 0x8000 : 0x4000));
1c301fc5
JC
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
436static 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
179c4fdb 447 if (kstrtol(buf, 10, &val))
1c301fc5
JC
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) {
2a844c14 458 val = clamp_val(val, -63000, 127000);
1c301fc5
JC
459 out = data->temp[OFFSET][sattr->index] = val / 1000;
460 } else {
2a844c14 461 val = clamp_val(val, -63000, 64000);
1c301fc5
JC
462 out = data->temp[OFFSET][sattr->index] = val / 500;
463 }
464 break;
465
466 case HYSTERSIS:
9ed5bc24
GR
467 /*
468 * The value will be given as an absolute value, turn it
469 * into an offset based on THERM
470 */
1c301fc5
JC
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]);
2a844c14 478 val = clamp_val(val, temp - 15000, temp);
1c301fc5
JC
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
9ed5bc24
GR
495 /*
496 * We maintain an extra 2 digits of precision for simplicity
497 * - shift those back off before writing the value
498 */
1c301fc5
JC
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
8f05bcc3
CP
533/* Assuming CONFIG6[SLOW] is 0 */
534static const int ad7475_st_map[] = {
535 37500, 18800, 12500, 7500, 4700, 3100, 1600, 800,
536};
537
538static 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
565static 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
9ed5bc24
GR
615/*
616 * Table of autorange values - the user will write the value in millidegrees,
617 * and we'll convert it
618 */
1c301fc5
JC
619static 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
625static 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
640static 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
179c4fdb 649 if (kstrtol(buf, 10, &val))
1c301fc5
JC
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
9ed5bc24
GR
661 /*
662 * The user will write an absolute value, so subtract the start point
663 * to figure the range
664 */
1c301fc5 665 temp = reg2temp(data, data->temp[AUTOMIN][sattr->index]);
2a844c14 666 val = clamp_val(val, temp + autorange_table[0],
1c301fc5
JC
667 temp + autorange_table[ARRAY_SIZE(autorange_table) - 1]);
668 val -= temp;
669
670 /* Find the nearest table entry to what the user wrote */
e4651640 671 val = find_closest(val, autorange_table, ARRAY_SIZE(autorange_table));
1c301fc5
JC
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
683static 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
698static 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
179c4fdb 707 if (kstrtoul(buf, 10, &val))
1c301fc5
JC
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
721static 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
730static 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
739static 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
748static 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
179c4fdb 758 if (kstrtol(buf, 10, &val))
1c301fc5
JC
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
9ed5bc24
GR
769 /*
770 * If we are not in manual mode, then we shouldn't allow
771 * the user to set the pwm speed
772 */
1c301fc5
JC
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
2a844c14 790 data->pwm[sattr->nr][sattr->index] = clamp_val(val, 0, 0xFF);
1c301fc5
JC
791 i2c_smbus_write_byte_data(client, reg,
792 data->pwm[sattr->nr][sattr->index]);
1d58f5ef
CP
793 mutex_unlock(&data->lock);
794
795 return count;
796}
797
798static 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
809static 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]);
1c301fc5
JC
830
831 mutex_unlock(&data->lock);
832
833 return count;
834}
835
836/* Called by set_pwmctrl and set_pwmchan */
837
838static 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
893static 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
179c4fdb 902 if (kstrtol(buf, 10, &val))
1c301fc5
JC
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
916static 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
179c4fdb 925 if (kstrtol(buf, 10, &val))
1c301fc5
JC
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 */
940static const int pwmfreq_table[] = {
3490c92a 941 11, 14, 22, 29, 35, 44, 58, 88, 22500
1c301fc5
JC
942};
943
944static 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);
3490c92a
CP
949 int i = clamp_val(data->range[sattr->index] & 0xf, 0,
950 ARRAY_SIZE(pwmfreq_table) - 1);
1c301fc5 951
3490c92a 952 return sprintf(buf, "%d\n", pwmfreq_table[i]);
1c301fc5
JC
953}
954
955static 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
179c4fdb 964 if (kstrtol(buf, 10, &val))
1c301fc5
JC
965 return -EINVAL;
966
e4651640 967 out = find_closest(val, pwmfreq_table, ARRAY_SIZE(pwmfreq_table));
1c301fc5
JC
968
969 mutex_lock(&data->lock);
970
971 data->range[sattr->index] =
972 adt7475_read(TEMP_TRANGE_REG(sattr->index));
3490c92a 973 data->range[sattr->index] &= ~0xf;
1c301fc5
JC
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
1d05303c
JL
983static ssize_t pwm_use_point2_pwm_at_crit_show(struct device *dev,
984 struct device_attribute *devattr,
985 char *buf)
f99318b2
JD
986{
987 struct adt7475_data *data = adt7475_update_device(dev);
988 return sprintf(buf, "%d\n", !!(data->config4 & CONFIG4_MAXDUTY));
989}
990
1d05303c
JL
991static ssize_t pwm_use_point2_pwm_at_crit_store(struct device *dev,
992 struct device_attribute *devattr,
993 const char *buf, size_t count)
f99318b2
JD
994{
995 struct i2c_client *client = to_i2c_client(dev);
996 struct adt7475_data *data = i2c_get_clientdata(client);
997 long val;
998
179c4fdb 999 if (kstrtol(buf, 10, &val))
f99318b2
JD
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
1d05303c 1016static ssize_t vrm_show(struct device *dev, struct device_attribute *devattr,
54fe4671
JD
1017 char *buf)
1018{
1019 struct adt7475_data *data = dev_get_drvdata(dev);
1020 return sprintf(buf, "%d\n", (int)data->vrm);
1021}
1022
1d05303c
JL
1023static ssize_t vrm_store(struct device *dev, struct device_attribute *devattr,
1024 const char *buf, size_t count)
54fe4671
JD
1025{
1026 struct adt7475_data *data = dev_get_drvdata(dev);
1027 long val;
1028
179c4fdb 1029 if (kstrtol(buf, 10, &val))
54fe4671
JD
1030 return -EINVAL;
1031 if (val < 0 || val > 255)
1032 return -EINVAL;
1033 data->vrm = val;
1034
1035 return count;
1036}
1037
1d05303c
JL
1038static ssize_t cpu0_vid_show(struct device *dev,
1039 struct device_attribute *devattr, char *buf)
54fe4671
JD
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
3d849981
JD
1045static SENSOR_DEVICE_ATTR_2(in0_input, S_IRUGO, show_voltage, NULL, INPUT, 0);
1046static SENSOR_DEVICE_ATTR_2(in0_max, S_IRUGO | S_IWUSR, show_voltage,
1047 set_voltage, MAX, 0);
1048static SENSOR_DEVICE_ATTR_2(in0_min, S_IRUGO | S_IWUSR, show_voltage,
1049 set_voltage, MIN, 0);
1050static SENSOR_DEVICE_ATTR_2(in0_alarm, S_IRUGO, show_voltage, NULL, ALARM, 0);
cffb9dd0 1051static SENSOR_DEVICE_ATTR_2(in1_input, S_IRUGO, show_voltage, NULL, INPUT, 1);
1c301fc5 1052static SENSOR_DEVICE_ATTR_2(in1_max, S_IRUGO | S_IWUSR, show_voltage,
cffb9dd0 1053 set_voltage, MAX, 1);
1c301fc5 1054static SENSOR_DEVICE_ATTR_2(in1_min, S_IRUGO | S_IWUSR, show_voltage,
cffb9dd0
JD
1055 set_voltage, MIN, 1);
1056static SENSOR_DEVICE_ATTR_2(in1_alarm, S_IRUGO, show_voltage, NULL, ALARM, 1);
1057static SENSOR_DEVICE_ATTR_2(in2_input, S_IRUGO, show_voltage, NULL, INPUT, 2);
1c301fc5 1058static SENSOR_DEVICE_ATTR_2(in2_max, S_IRUGO | S_IWUSR, show_voltage,
cffb9dd0 1059 set_voltage, MAX, 2);
1c301fc5 1060static SENSOR_DEVICE_ATTR_2(in2_min, S_IRUGO | S_IWUSR, show_voltage,
cffb9dd0
JD
1061 set_voltage, MIN, 2);
1062static SENSOR_DEVICE_ATTR_2(in2_alarm, S_IRUGO, show_voltage, NULL, ALARM, 2);
3d849981
JD
1063static SENSOR_DEVICE_ATTR_2(in3_input, S_IRUGO, show_voltage, NULL, INPUT, 3);
1064static SENSOR_DEVICE_ATTR_2(in3_max, S_IRUGO | S_IWUSR, show_voltage,
1065 set_voltage, MAX, 3);
1066static SENSOR_DEVICE_ATTR_2(in3_min, S_IRUGO | S_IWUSR, show_voltage,
1067 set_voltage, MIN, 3);
1068static SENSOR_DEVICE_ATTR_2(in3_alarm, S_IRUGO, show_voltage, NULL, ALARM, 3);
1069static SENSOR_DEVICE_ATTR_2(in4_input, S_IRUGO, show_voltage, NULL, INPUT, 4);
1070static SENSOR_DEVICE_ATTR_2(in4_max, S_IRUGO | S_IWUSR, show_voltage,
1071 set_voltage, MAX, 4);
1072static SENSOR_DEVICE_ATTR_2(in4_min, S_IRUGO | S_IWUSR, show_voltage,
1073 set_voltage, MIN, 4);
1074static SENSOR_DEVICE_ATTR_2(in4_alarm, S_IRUGO, show_voltage, NULL, ALARM, 8);
1075static SENSOR_DEVICE_ATTR_2(in5_input, S_IRUGO, show_voltage, NULL, INPUT, 5);
1076static SENSOR_DEVICE_ATTR_2(in5_max, S_IRUGO | S_IWUSR, show_voltage,
1077 set_voltage, MAX, 5);
1078static SENSOR_DEVICE_ATTR_2(in5_min, S_IRUGO | S_IWUSR, show_voltage,
1079 set_voltage, MIN, 5);
1080static SENSOR_DEVICE_ATTR_2(in5_alarm, S_IRUGO, show_voltage, NULL, ALARM, 31);
1c301fc5
JC
1081static SENSOR_DEVICE_ATTR_2(temp1_input, S_IRUGO, show_temp, NULL, INPUT, 0);
1082static SENSOR_DEVICE_ATTR_2(temp1_alarm, S_IRUGO, show_temp, NULL, ALARM, 0);
1083static SENSOR_DEVICE_ATTR_2(temp1_fault, S_IRUGO, show_temp, NULL, FAULT, 0);
1084static SENSOR_DEVICE_ATTR_2(temp1_max, S_IRUGO | S_IWUSR, show_temp, set_temp,
1085 MAX, 0);
1086static SENSOR_DEVICE_ATTR_2(temp1_min, S_IRUGO | S_IWUSR, show_temp, set_temp,
1087 MIN, 0);
1088static SENSOR_DEVICE_ATTR_2(temp1_offset, S_IRUGO | S_IWUSR, show_temp,
1089 set_temp, OFFSET, 0);
1090static SENSOR_DEVICE_ATTR_2(temp1_auto_point1_temp, S_IRUGO | S_IWUSR,
1091 show_temp, set_temp, AUTOMIN, 0);
1092static SENSOR_DEVICE_ATTR_2(temp1_auto_point2_temp, S_IRUGO | S_IWUSR,
1093 show_point2, set_point2, 0, 0);
1094static SENSOR_DEVICE_ATTR_2(temp1_crit, S_IRUGO | S_IWUSR, show_temp, set_temp,
1095 THERM, 0);
1096static SENSOR_DEVICE_ATTR_2(temp1_crit_hyst, S_IRUGO | S_IWUSR, show_temp,
1097 set_temp, HYSTERSIS, 0);
8f05bcc3
CP
1098static SENSOR_DEVICE_ATTR_2(temp1_smoothing, S_IRUGO | S_IWUSR, show_temp_st,
1099 set_temp_st, 0, 0);
1c301fc5
JC
1100static SENSOR_DEVICE_ATTR_2(temp2_input, S_IRUGO, show_temp, NULL, INPUT, 1);
1101static SENSOR_DEVICE_ATTR_2(temp2_alarm, S_IRUGO, show_temp, NULL, ALARM, 1);
1102static SENSOR_DEVICE_ATTR_2(temp2_max, S_IRUGO | S_IWUSR, show_temp, set_temp,
1103 MAX, 1);
1104static SENSOR_DEVICE_ATTR_2(temp2_min, S_IRUGO | S_IWUSR, show_temp, set_temp,
1105 MIN, 1);
1106static SENSOR_DEVICE_ATTR_2(temp2_offset, S_IRUGO | S_IWUSR, show_temp,
1107 set_temp, OFFSET, 1);
1108static SENSOR_DEVICE_ATTR_2(temp2_auto_point1_temp, S_IRUGO | S_IWUSR,
1109 show_temp, set_temp, AUTOMIN, 1);
1110static SENSOR_DEVICE_ATTR_2(temp2_auto_point2_temp, S_IRUGO | S_IWUSR,
1111 show_point2, set_point2, 0, 1);
1112static SENSOR_DEVICE_ATTR_2(temp2_crit, S_IRUGO | S_IWUSR, show_temp, set_temp,
1113 THERM, 1);
1114static SENSOR_DEVICE_ATTR_2(temp2_crit_hyst, S_IRUGO | S_IWUSR, show_temp,
1115 set_temp, HYSTERSIS, 1);
8f05bcc3
CP
1116static SENSOR_DEVICE_ATTR_2(temp2_smoothing, S_IRUGO | S_IWUSR, show_temp_st,
1117 set_temp_st, 0, 1);
1c301fc5
JC
1118static SENSOR_DEVICE_ATTR_2(temp3_input, S_IRUGO, show_temp, NULL, INPUT, 2);
1119static SENSOR_DEVICE_ATTR_2(temp3_alarm, S_IRUGO, show_temp, NULL, ALARM, 2);
1120static SENSOR_DEVICE_ATTR_2(temp3_fault, S_IRUGO, show_temp, NULL, FAULT, 2);
1121static SENSOR_DEVICE_ATTR_2(temp3_max, S_IRUGO | S_IWUSR, show_temp, set_temp,
1122 MAX, 2);
1123static SENSOR_DEVICE_ATTR_2(temp3_min, S_IRUGO | S_IWUSR, show_temp, set_temp,
1124 MIN, 2);
1125static SENSOR_DEVICE_ATTR_2(temp3_offset, S_IRUGO | S_IWUSR, show_temp,
1126 set_temp, OFFSET, 2);
1127static SENSOR_DEVICE_ATTR_2(temp3_auto_point1_temp, S_IRUGO | S_IWUSR,
1128 show_temp, set_temp, AUTOMIN, 2);
1129static SENSOR_DEVICE_ATTR_2(temp3_auto_point2_temp, S_IRUGO | S_IWUSR,
1130 show_point2, set_point2, 0, 2);
1131static SENSOR_DEVICE_ATTR_2(temp3_crit, S_IRUGO | S_IWUSR, show_temp, set_temp,
1132 THERM, 2);
1133static SENSOR_DEVICE_ATTR_2(temp3_crit_hyst, S_IRUGO | S_IWUSR, show_temp,
1134 set_temp, HYSTERSIS, 2);
8f05bcc3
CP
1135static SENSOR_DEVICE_ATTR_2(temp3_smoothing, S_IRUGO | S_IWUSR, show_temp_st,
1136 set_temp_st, 0, 2);
1c301fc5
JC
1137static SENSOR_DEVICE_ATTR_2(fan1_input, S_IRUGO, show_tach, NULL, INPUT, 0);
1138static SENSOR_DEVICE_ATTR_2(fan1_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
1139 MIN, 0);
1140static SENSOR_DEVICE_ATTR_2(fan1_alarm, S_IRUGO, show_tach, NULL, ALARM, 0);
1141static SENSOR_DEVICE_ATTR_2(fan2_input, S_IRUGO, show_tach, NULL, INPUT, 1);
1142static SENSOR_DEVICE_ATTR_2(fan2_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
1143 MIN, 1);
1144static SENSOR_DEVICE_ATTR_2(fan2_alarm, S_IRUGO, show_tach, NULL, ALARM, 1);
1145static SENSOR_DEVICE_ATTR_2(fan3_input, S_IRUGO, show_tach, NULL, INPUT, 2);
1146static SENSOR_DEVICE_ATTR_2(fan3_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
1147 MIN, 2);
1148static SENSOR_DEVICE_ATTR_2(fan3_alarm, S_IRUGO, show_tach, NULL, ALARM, 2);
1149static SENSOR_DEVICE_ATTR_2(fan4_input, S_IRUGO, show_tach, NULL, INPUT, 3);
1150static SENSOR_DEVICE_ATTR_2(fan4_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
1151 MIN, 3);
1152static SENSOR_DEVICE_ATTR_2(fan4_alarm, S_IRUGO, show_tach, NULL, ALARM, 3);
1153static SENSOR_DEVICE_ATTR_2(pwm1, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT,
1154 0);
1155static SENSOR_DEVICE_ATTR_2(pwm1_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
1156 set_pwmfreq, INPUT, 0);
1157static SENSOR_DEVICE_ATTR_2(pwm1_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
1158 set_pwmctrl, INPUT, 0);
84d2a314 1159static SENSOR_DEVICE_ATTR_2(pwm1_auto_channels_temp, S_IRUGO | S_IWUSR,
1c301fc5
JC
1160 show_pwmchan, set_pwmchan, INPUT, 0);
1161static SENSOR_DEVICE_ATTR_2(pwm1_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
1162 set_pwm, MIN, 0);
1163static SENSOR_DEVICE_ATTR_2(pwm1_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm,
1164 set_pwm, MAX, 0);
1d58f5ef
CP
1165static SENSOR_DEVICE_ATTR_2(pwm1_stall_disable, S_IRUGO | S_IWUSR,
1166 show_stall_disable, set_stall_disable, 0, 0);
1c301fc5
JC
1167static SENSOR_DEVICE_ATTR_2(pwm2, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT,
1168 1);
1169static SENSOR_DEVICE_ATTR_2(pwm2_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
1170 set_pwmfreq, INPUT, 1);
1171static SENSOR_DEVICE_ATTR_2(pwm2_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
1172 set_pwmctrl, INPUT, 1);
84d2a314 1173static SENSOR_DEVICE_ATTR_2(pwm2_auto_channels_temp, S_IRUGO | S_IWUSR,
1c301fc5
JC
1174 show_pwmchan, set_pwmchan, INPUT, 1);
1175static SENSOR_DEVICE_ATTR_2(pwm2_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
1176 set_pwm, MIN, 1);
1177static SENSOR_DEVICE_ATTR_2(pwm2_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm,
1178 set_pwm, MAX, 1);
1d58f5ef
CP
1179static SENSOR_DEVICE_ATTR_2(pwm2_stall_disable, S_IRUGO | S_IWUSR,
1180 show_stall_disable, set_stall_disable, 0, 1);
1c301fc5
JC
1181static SENSOR_DEVICE_ATTR_2(pwm3, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT,
1182 2);
1183static SENSOR_DEVICE_ATTR_2(pwm3_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
1184 set_pwmfreq, INPUT, 2);
1185static SENSOR_DEVICE_ATTR_2(pwm3_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
1186 set_pwmctrl, INPUT, 2);
84d2a314 1187static SENSOR_DEVICE_ATTR_2(pwm3_auto_channels_temp, S_IRUGO | S_IWUSR,
1c301fc5
JC
1188 show_pwmchan, set_pwmchan, INPUT, 2);
1189static SENSOR_DEVICE_ATTR_2(pwm3_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
1190 set_pwm, MIN, 2);
1191static SENSOR_DEVICE_ATTR_2(pwm3_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm,
1192 set_pwm, MAX, 2);
1d58f5ef
CP
1193static SENSOR_DEVICE_ATTR_2(pwm3_stall_disable, S_IRUGO | S_IWUSR,
1194 show_stall_disable, set_stall_disable, 0, 2);
1c301fc5 1195
f99318b2 1196/* Non-standard name, might need revisiting */
1d05303c 1197static DEVICE_ATTR_RW(pwm_use_point2_pwm_at_crit);
f99318b2 1198
1d05303c
JL
1199static DEVICE_ATTR_RW(vrm);
1200static DEVICE_ATTR_RO(cpu0_vid);
54fe4671 1201
1c301fc5
JC
1202static 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,
8f05bcc3 1221 &sensor_dev_attr_temp1_smoothing.dev_attr.attr,
1c301fc5
JC
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,
8f05bcc3 1231 &sensor_dev_attr_temp2_smoothing.dev_attr.attr,
1c301fc5
JC
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,
8f05bcc3 1242 &sensor_dev_attr_temp3_smoothing.dev_attr.attr,
1c301fc5
JC
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,
1c301fc5
JC
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,
84d2a314 1255 &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1c301fc5
JC
1256 &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1257 &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1d58f5ef 1258 &sensor_dev_attr_pwm1_stall_disable.dev_attr.attr,
1c301fc5
JC
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,
84d2a314 1262 &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1c301fc5
JC
1263 &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1264 &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1d58f5ef 1265 &sensor_dev_attr_pwm3_stall_disable.dev_attr.attr,
f99318b2 1266 &dev_attr_pwm_use_point2_pwm_at_crit.attr,
1c301fc5
JC
1267 NULL,
1268};
1269
378933c9
JD
1270static 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
1277static 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,
1d58f5ef 1284 &sensor_dev_attr_pwm2_stall_disable.dev_attr.attr,
378933c9
JD
1285 NULL
1286};
1287
378933c9 1288static struct attribute *in0_attrs[] = {
3d849981
JD
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,
378933c9
JD
1293 NULL
1294};
1295
d8d2ee07 1296static struct attribute *in3_attrs[] = {
3d849981
JD
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,
d8d2ee07
JD
1301 NULL
1302};
1303
1304static struct attribute *in4_attrs[] = {
3d849981
JD
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,
d8d2ee07
JD
1309 NULL
1310};
1311
1312static struct attribute *in5_attrs[] = {
3d849981
JD
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
54fe4671
JD
1320static struct attribute *vid_attrs[] = {
1321 &dev_attr_cpu0_vid.attr,
1322 &dev_attr_vrm.attr,
1323 NULL
1324};
1325
f5397be8
AY
1326static const struct attribute_group adt7475_attr_group = { .attrs = adt7475_attrs };
1327static const struct attribute_group fan4_attr_group = { .attrs = fan4_attrs };
1328static const struct attribute_group pwm2_attr_group = { .attrs = pwm2_attrs };
1329static const struct attribute_group in0_attr_group = { .attrs = in0_attrs };
1330static const struct attribute_group in3_attr_group = { .attrs = in3_attrs };
1331static const struct attribute_group in4_attr_group = { .attrs = in4_attrs };
1332static const struct attribute_group in5_attr_group = { .attrs = in5_attrs };
1333static const struct attribute_group vid_attr_group = { .attrs = vid_attrs };
1c301fc5 1334
310ec792 1335static int adt7475_detect(struct i2c_client *client,
1c301fc5
JC
1336 struct i2c_board_info *info)
1337{
1338 struct i2c_adapter *adapter = client->adapter;
d656b6fd 1339 int vendid, devid, devid2;
b180d050 1340 const char *name;
1c301fc5
JC
1341
1342 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1343 return -ENODEV;
1344
b180d050 1345 vendid = adt7475_read(REG_VENDID);
d656b6fd
JD
1346 devid2 = adt7475_read(REG_DEVID2);
1347 if (vendid != 0x41 || /* Analog Devices */
1348 (devid2 & 0xf8) != 0x68)
1349 return -ENODEV;
b180d050 1350
d656b6fd
JD
1351 devid = adt7475_read(REG_DEVID);
1352 if (devid == 0x73)
b180d050 1353 name = "adt7473";
d656b6fd 1354 else if (devid == 0x75 && client->addr == 0x2e)
b180d050 1355 name = "adt7475";
d8d2ee07
JD
1356 else if (devid == 0x76)
1357 name = "adt7476";
3d849981
JD
1358 else if ((devid2 & 0xfc) == 0x6c)
1359 name = "adt7490";
b180d050
JD
1360 else {
1361 dev_dbg(&adapter->dev,
d8d2ee07 1362 "Couldn't detect an ADT7473/75/76/90 part at "
b180d050 1363 "0x%02x\n", (unsigned int)client->addr);
52df6440 1364 return -ENODEV;
1c301fc5
JC
1365 }
1366
b180d050 1367 strlcpy(info->type, name, I2C_NAME_SIZE);
1c301fc5
JC
1368
1369 return 0;
1370}
1371
0f14480b
JD
1372static void adt7475_remove_files(struct i2c_client *client,
1373 struct adt7475_data *data)
1374{
1375 sysfs_remove_group(&client->dev.kobj, &adt7475_attr_group);
378933c9
JD
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);
d8d2ee07
JD
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);
54fe4671
JD
1388 if (data->has_vid)
1389 sysfs_remove_group(&client->dev.kobj, &vid_attr_group);
0f14480b
JD
1390}
1391
1c301fc5
JC
1392static int adt7475_probe(struct i2c_client *client,
1393 const struct i2c_device_id *id)
1394{
4e2496e4 1395 enum chips chip;
99b8c83a 1396 static const char * const names[] = {
d07ca4ad
JD
1397 [adt7473] = "ADT7473",
1398 [adt7475] = "ADT7475",
d8d2ee07 1399 [adt7476] = "ADT7476",
d07ca4ad
JD
1400 [adt7490] = "ADT7490",
1401 };
1402
1c301fc5 1403 struct adt7475_data *data;
378933c9 1404 int i, ret = 0, revision;
ebfaf1fb 1405 u8 config2, config3;
1c301fc5 1406
e3ecb2ee 1407 data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL);
1c301fc5
JC
1408 if (data == NULL)
1409 return -ENOMEM;
1410
1411 mutex_init(&data->lock);
1412 i2c_set_clientdata(client, data);
1413
4e2496e4
JMC
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
cffb9dd0 1419 /* Initialize device-specific values */
4e2496e4 1420 switch (chip) {
d8d2ee07
JD
1421 case adt7476:
1422 data->has_voltage = 0x0e; /* in1 to in3 */
1423 revision = adt7475_read(REG_DEVID2) & 0x07;
1424 break;
3d849981 1425 case adt7490:
378933c9
JD
1426 data->has_voltage = 0x3e; /* in1 to in5 */
1427 revision = adt7475_read(REG_DEVID2) & 0x03;
d07ca4ad
JD
1428 if (revision == 0x03)
1429 revision += adt7475_read(REG_DEVREV2);
3d849981 1430 break;
cffb9dd0
JD
1431 default:
1432 data->has_voltage = 0x06; /* in1, in2 */
378933c9
JD
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
9ed5bc24
GR
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 */
378933c9
JD
1454 if (id->driver_data == adt7490) {
1455 if ((data->config4 & CONFIG4_PINFUNC) == 0x1 &&
1456 !(config3 & CONFIG3_THERM))
1457 data->has_fan4 = 1;
d8d2ee07
JD
1458 }
1459 if (id->driver_data == adt7476 || id->driver_data == adt7490) {
378933c9
JD
1460 if (!(config3 & CONFIG3_THERM) ||
1461 (data->config4 & CONFIG4_PINFUNC) == 0x1)
1462 data->has_voltage |= (1 << 0); /* in0 */
cffb9dd0
JD
1463 }
1464
9ed5bc24
GR
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 */
d8d2ee07
JD
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 */
54fe4671
JD
1473
1474 data->has_vid = !(adt7475_read(REG_CONFIG5) & CONFIG5_VIDGPIO);
d8d2ee07
JD
1475 }
1476
ebfaf1fb
JD
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
9ed5bc24
GR
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 */
1c301fc5
JC
1491 for (i = 0; i < ADT7475_PWM_COUNT; i++)
1492 adt7475_read_pwm(client, i);
1493
4abdf38d
CP
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
1c301fc5
JC
1505 ret = sysfs_create_group(&client->dev.kobj, &adt7475_attr_group);
1506 if (ret)
e3ecb2ee 1507 return ret;
1c301fc5 1508
378933c9
JD
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 }
d8d2ee07
JD
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 }
54fe4671
JD
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 }
378933c9 1546
1c301fc5
JC
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
d07ca4ad
JD
1553 dev_info(&client->dev, "%s device, revision %d\n",
1554 names[id->driver_data], revision);
d8d2ee07 1555 if ((data->has_voltage & 0x11) || data->has_fan4 || data->has_pwm2)
54fe4671 1556 dev_info(&client->dev, "Optional features:%s%s%s%s%s\n",
d07ca4ad 1557 (data->has_voltage & (1 << 0)) ? " in0" : "",
d8d2ee07 1558 (data->has_voltage & (1 << 4)) ? " in4" : "",
d07ca4ad 1559 data->has_fan4 ? " fan4" : "",
54fe4671
JD
1560 data->has_pwm2 ? " pwm2" : "",
1561 data->has_vid ? " vid" : "");
ebfaf1fb
JD
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" : "");
d07ca4ad 1568
1c301fc5
JC
1569 return 0;
1570
1571eremove:
0f14480b 1572 adt7475_remove_files(client, data);
1c301fc5
JC
1573 return ret;
1574}
1575
1576static 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);
0f14480b 1581 adt7475_remove_files(client, data);
1c301fc5
JC
1582
1583 return 0;
1584}
1585
1586static struct i2c_driver adt7475_driver = {
1587 .class = I2C_CLASS_HWMON,
1588 .driver = {
1589 .name = "adt7475",
4e2496e4 1590 .of_match_table = of_match_ptr(adt7475_of_match),
1c301fc5
JC
1591 },
1592 .probe = adt7475_probe,
1593 .remove = adt7475_remove,
1594 .id_table = adt7475_id,
1595 .detect = adt7475_detect,
c3813d6a 1596 .address_list = normal_i2c,
1c301fc5
JC
1597};
1598
1599static 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
1608static 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
9ed5bc24
GR
1615 /*
1616 * Figure out the internal value for pwmctrl and pwmchan
1617 * based on the current settings
1618 */
1c301fc5
JC
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) {
9ed5bc24
GR
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 */
1c301fc5
JC
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
1665static 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);
3d849981 1669 u16 ext;
1c301fc5
JC
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
3d849981
JD
1680 ext = (adt7475_read(REG_EXTEND2) << 8) |
1681 adt7475_read(REG_EXTEND1);
cffb9dd0
JD
1682 for (i = 0; i < ADT7475_VOLTAGE_COUNT; i++) {
1683 if (!(data->has_voltage & (1 << i)))
1684 continue;
1c301fc5
JC
1685 data->voltage[INPUT][i] =
1686 (adt7475_read(VOLTAGE_REG(i)) << 2) |
cffb9dd0
JD
1687 ((ext >> (i * 2)) & 3);
1688 }
1c301fc5 1689
1c301fc5
JC
1690 for (i = 0; i < ADT7475_TEMP_COUNT; i++)
1691 data->temp[INPUT][i] =
1692 (adt7475_read(TEMP_REG(i)) << 2) |
3d849981
JD
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 }
1c301fc5 1701
378933c9
JD
1702 for (i = 0; i < ADT7475_TACH_COUNT; i++) {
1703 if (i == 3 && !data->has_fan4)
1704 continue;
1c301fc5
JC
1705 data->tach[INPUT][i] =
1706 adt7475_read_word(client, TACH_REG(i));
378933c9 1707 }
1c301fc5
JC
1708
1709 /* Updated by hw when in auto mode */
378933c9
JD
1710 for (i = 0; i < ADT7475_PWM_COUNT; i++) {
1711 if (i == 1 && !data->has_pwm2)
1712 continue;
1c301fc5 1713 data->pwm[INPUT][i] = adt7475_read(PWM_REG(i));
378933c9 1714 }
1c301fc5 1715
54fe4671
JD
1716 if (data->has_vid)
1717 data->vid = adt7475_read(REG_VID) & 0x3f;
1718
1c301fc5
JC
1719 data->measure_updated = jiffies;
1720 }
1721
1722 /* Limits and settings, should never change update every 60 seconds */
56e35eee 1723 if (time_after(jiffies, data->limits_updated + HZ * 60) ||
1c301fc5 1724 !data->valid) {
f99318b2 1725 data->config4 = adt7475_read(REG_CONFIG4);
1c301fc5
JC
1726 data->config5 = adt7475_read(REG_CONFIG5);
1727
1728 for (i = 0; i < ADT7475_VOLTAGE_COUNT; i++) {
cffb9dd0
JD
1729 if (!(data->has_voltage & (1 << i)))
1730 continue;
1c301fc5
JC
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
3d849981
JD
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
1c301fc5
JC
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
378933c9
JD
1758 for (i = 0; i < ADT7475_TACH_COUNT; i++) {
1759 if (i == 3 && !data->has_fan4)
1760 continue;
1c301fc5
JC
1761 data->tach[MIN][i] =
1762 adt7475_read_word(client, TACH_MIN_REG(i));
378933c9 1763 }
1c301fc5
JC
1764
1765 for (i = 0; i < ADT7475_PWM_COUNT; i++) {
378933c9
JD
1766 if (i == 1 && !data->has_pwm2)
1767 continue;
1c301fc5
JC
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
f0967eea 1787module_i2c_driver(adt7475_driver);
1c301fc5
JC
1788
1789MODULE_AUTHOR("Advanced Micro Devices, Inc");
1790MODULE_DESCRIPTION("adt7475 driver");
1791MODULE_LICENSE("GPL");