2 w83793.c - Linux kernel driver for hardware monitoring
3 Copyright (C) 2006 Winbond Electronics Corp.
5 Rudolf Marek <r.marek@assembler.cz>
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation - version 2.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 Supports following chips:
25 Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA
26 w83793 10 12 8 6 0x7b 0x5ca3 yes no
29 #include <linux/module.h>
30 #include <linux/init.h>
31 #include <linux/slab.h>
32 #include <linux/i2c.h>
33 #include <linux/hwmon.h>
34 #include <linux/hwmon-vid.h>
35 #include <linux/hwmon-sysfs.h>
36 #include <linux/err.h>
37 #include <linux/mutex.h>
39 /* Addresses to scan */
40 static const unsigned short normal_i2c
[] = { 0x2c, 0x2d, 0x2e, 0x2f,
43 /* Insmod parameters */
45 static unsigned short force_subclients
[4];
46 module_param_array(force_subclients
, short, NULL
, 0);
47 MODULE_PARM_DESC(force_subclients
, "List of subclient addresses: "
48 "{bus, clientaddr, subclientaddr1, subclientaddr2}");
51 module_param(reset
, bool, 0);
52 MODULE_PARM_DESC(reset
, "Set to 1 to reset chip, not recommended");
55 Address 0x00, 0x0d, 0x0e, 0x0f in all three banks are reserved
56 as ID, Bank Select registers
58 #define W83793_REG_BANKSEL 0x00
59 #define W83793_REG_VENDORID 0x0d
60 #define W83793_REG_CHIPID 0x0e
61 #define W83793_REG_DEVICEID 0x0f
63 #define W83793_REG_CONFIG 0x40
64 #define W83793_REG_MFC 0x58
65 #define W83793_REG_FANIN_CTRL 0x5c
66 #define W83793_REG_FANIN_SEL 0x5d
67 #define W83793_REG_I2C_ADDR 0x0b
68 #define W83793_REG_I2C_SUBADDR 0x0c
69 #define W83793_REG_VID_INA 0x05
70 #define W83793_REG_VID_INB 0x06
71 #define W83793_REG_VID_LATCHA 0x07
72 #define W83793_REG_VID_LATCHB 0x08
73 #define W83793_REG_VID_CTRL 0x59
75 static u16 W83793_REG_TEMP_MODE
[2] = { 0x5e, 0x5f };
79 #define TEMP_CRIT_HYST 2
81 #define TEMP_WARN_HYST 4
82 /* only crit and crit_hyst affect real-time alarm status
83 current crit crit_hyst warn warn_hyst */
84 static u16 W83793_REG_TEMP
[][5] = {
85 {0x1c, 0x78, 0x79, 0x7a, 0x7b},
86 {0x1d, 0x7c, 0x7d, 0x7e, 0x7f},
87 {0x1e, 0x80, 0x81, 0x82, 0x83},
88 {0x1f, 0x84, 0x85, 0x86, 0x87},
89 {0x20, 0x88, 0x89, 0x8a, 0x8b},
90 {0x21, 0x8c, 0x8d, 0x8e, 0x8f},
93 #define W83793_REG_TEMP_LOW_BITS 0x22
95 #define W83793_REG_BEEP(index) (0x53 + (index))
96 #define W83793_REG_ALARM(index) (0x4b + (index))
98 #define W83793_REG_CLR_CHASSIS 0x4a /* SMI MASK4 */
99 #define W83793_REG_IRQ_CTRL 0x50
100 #define W83793_REG_OVT_CTRL 0x51
101 #define W83793_REG_OVT_BEEP 0x52
106 static const u16 W83793_REG_IN
[][3] = {
107 /* Current, High, Low */
108 {0x10, 0x60, 0x61}, /* Vcore A */
109 {0x11, 0x62, 0x63}, /* Vcore B */
110 {0x12, 0x64, 0x65}, /* Vtt */
111 {0x14, 0x6a, 0x6b}, /* VSEN1 */
112 {0x15, 0x6c, 0x6d}, /* VSEN2 */
113 {0x16, 0x6e, 0x6f}, /* +3VSEN */
114 {0x17, 0x70, 0x71}, /* +12VSEN */
115 {0x18, 0x72, 0x73}, /* 5VDD */
116 {0x19, 0x74, 0x75}, /* 5VSB */
117 {0x1a, 0x76, 0x77}, /* VBAT */
120 /* Low Bits of Vcore A/B Vtt Read/High/Low */
121 static const u16 W83793_REG_IN_LOW_BITS
[] = { 0x1b, 0x68, 0x69 };
122 static u8 scale_in
[] = { 2, 2, 2, 16, 16, 16, 8, 24, 24, 16 };
123 static u8 scale_in_add
[] = { 0, 0, 0, 0, 0, 0, 0, 150, 150, 0 };
125 #define W83793_REG_FAN(index) (0x23 + 2 * (index)) /* High byte */
126 #define W83793_REG_FAN_MIN(index) (0x90 + 2 * (index)) /* High byte */
128 #define W83793_REG_PWM_DEFAULT 0xb2
129 #define W83793_REG_PWM_ENABLE 0x207
130 #define W83793_REG_PWM_UPTIME 0xc3 /* Unit in 0.1 second */
131 #define W83793_REG_PWM_DOWNTIME 0xc4 /* Unit in 0.1 second */
132 #define W83793_REG_TEMP_CRITICAL 0xc5
136 #define PWM_NONSTOP 2
137 #define PWM_STOP_TIME 3
138 #define W83793_REG_PWM(index, nr) (((nr) == 0 ? 0xb3 : \
139 (nr) == 1 ? 0x220 : 0x218) + (index))
141 /* bit field, fan1 is bit0, fan2 is bit1 ... */
142 #define W83793_REG_TEMP_FAN_MAP(index) (0x201 + (index))
143 #define W83793_REG_TEMP_TOL(index) (0x208 + (index))
144 #define W83793_REG_TEMP_CRUISE(index) (0x210 + (index))
145 #define W83793_REG_PWM_STOP_TIME(index) (0x228 + (index))
146 #define W83793_REG_SF2_TEMP(index, nr) (0x230 + ((index) << 4) + (nr))
147 #define W83793_REG_SF2_PWM(index, nr) (0x238 + ((index) << 4) + (nr))
149 static inline unsigned long FAN_FROM_REG(u16 val
)
151 if ((val
>= 0xfff) || (val
== 0))
153 return (1350000UL / val
);
156 static inline u16
FAN_TO_REG(long rpm
)
160 return SENSORS_LIMIT((1350000 + (rpm
>> 1)) / rpm
, 1, 0xffe);
163 static inline unsigned long TIME_FROM_REG(u8 reg
)
168 static inline u8
TIME_TO_REG(unsigned long val
)
170 return SENSORS_LIMIT((val
+ 50) / 100, 0, 0xff);
173 static inline long TEMP_FROM_REG(s8 reg
)
178 static inline s8
TEMP_TO_REG(long val
, s8 min
, s8 max
)
180 return SENSORS_LIMIT((val
+ (val
< 0 ? -500 : 500)) / 1000, min
, max
);
184 struct i2c_client
*lm75
[2];
185 struct device
*hwmon_dev
;
186 struct mutex update_lock
;
187 char valid
; /* !=0 if following fields are valid */
188 unsigned long last_updated
; /* In jiffies */
189 unsigned long last_nonvolatile
; /* In jiffies, last time we update the
190 nonvolatile registers */
195 u8 in
[10][3]; /* Register value, read/high/low */
196 u8 in_low_bits
[3]; /* Additional resolution for VCore A/B Vtt */
198 u16 has_fan
; /* Only fan1- fan5 has own pins */
199 u16 fan
[12]; /* Register value combine */
200 u16 fan_min
[12]; /* Register value combine */
202 s8 temp
[6][5]; /* current, crit, crit_hyst,warn, warn_hyst */
203 u8 temp_low_bits
; /* Additional resolution TD1-TD4 */
204 u8 temp_mode
[2]; /* byte 0: Temp D1-D4 mode each has 2 bits
205 byte 1: Temp R1,R2 mode, each has 1 bit */
206 u8 temp_critical
; /* If reached all fan will be at full speed */
207 u8 temp_fan_map
[6]; /* Temp controls which pwm fan, bit field */
212 u8 pwm_enable
; /* Register value, each Temp has 1 bit */
213 u8 pwm_uptime
; /* Register value */
214 u8 pwm_downtime
; /* Register value */
215 u8 pwm_default
; /* All fan default pwm, next poweron valid */
216 u8 pwm
[8][3]; /* Register value */
220 u8 alarms
[5]; /* realtime status registers */
223 u8 tolerance
[3]; /* Temp tolerance(Smart Fan I/II) */
224 u8 sf2_pwm
[6][7]; /* Smart FanII: Fan duty cycle */
225 u8 sf2_temp
[6][7]; /* Smart FanII: Temp level point */
228 static u8
w83793_read_value(struct i2c_client
*client
, u16 reg
);
229 static int w83793_write_value(struct i2c_client
*client
, u16 reg
, u8 value
);
230 static int w83793_probe(struct i2c_client
*client
,
231 const struct i2c_device_id
*id
);
232 static int w83793_detect(struct i2c_client
*client
,
233 struct i2c_board_info
*info
);
234 static int w83793_remove(struct i2c_client
*client
);
235 static void w83793_init_client(struct i2c_client
*client
);
236 static void w83793_update_nonvolatile(struct device
*dev
);
237 static struct w83793_data
*w83793_update_device(struct device
*dev
);
239 static const struct i2c_device_id w83793_id
[] = {
243 MODULE_DEVICE_TABLE(i2c
, w83793_id
);
245 static struct i2c_driver w83793_driver
= {
246 .class = I2C_CLASS_HWMON
,
250 .probe
= w83793_probe
,
251 .remove
= w83793_remove
,
252 .id_table
= w83793_id
,
253 .detect
= w83793_detect
,
254 .address_list
= normal_i2c
,
258 show_vrm(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
260 struct w83793_data
*data
= dev_get_drvdata(dev
);
261 return sprintf(buf
, "%d\n", data
->vrm
);
265 show_vid(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
267 struct w83793_data
*data
= w83793_update_device(dev
);
268 struct sensor_device_attribute_2
*sensor_attr
=
269 to_sensor_dev_attr_2(attr
);
270 int index
= sensor_attr
->index
;
272 return sprintf(buf
, "%d\n", vid_from_reg(data
->vid
[index
], data
->vrm
));
276 store_vrm(struct device
*dev
, struct device_attribute
*attr
,
277 const char *buf
, size_t count
)
279 struct w83793_data
*data
= dev_get_drvdata(dev
);
280 data
->vrm
= simple_strtoul(buf
, NULL
, 10);
284 #define ALARM_STATUS 0
285 #define BEEP_ENABLE 1
287 show_alarm_beep(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
289 struct w83793_data
*data
= w83793_update_device(dev
);
290 struct sensor_device_attribute_2
*sensor_attr
=
291 to_sensor_dev_attr_2(attr
);
292 int nr
= sensor_attr
->nr
;
293 int index
= sensor_attr
->index
>> 3;
294 int bit
= sensor_attr
->index
& 0x07;
297 if (ALARM_STATUS
== nr
) {
298 val
= (data
->alarms
[index
] >> (bit
)) & 1;
299 } else { /* BEEP_ENABLE */
300 val
= (data
->beeps
[index
] >> (bit
)) & 1;
303 return sprintf(buf
, "%u\n", val
);
307 store_beep(struct device
*dev
, struct device_attribute
*attr
,
308 const char *buf
, size_t count
)
310 struct i2c_client
*client
= to_i2c_client(dev
);
311 struct w83793_data
*data
= i2c_get_clientdata(client
);
312 struct sensor_device_attribute_2
*sensor_attr
=
313 to_sensor_dev_attr_2(attr
);
314 int index
= sensor_attr
->index
>> 3;
315 int shift
= sensor_attr
->index
& 0x07;
316 u8 beep_bit
= 1 << shift
;
319 val
= simple_strtoul(buf
, NULL
, 10);
320 if (val
!= 0 && val
!= 1)
323 mutex_lock(&data
->update_lock
);
324 data
->beeps
[index
] = w83793_read_value(client
, W83793_REG_BEEP(index
));
325 data
->beeps
[index
] &= ~beep_bit
;
326 data
->beeps
[index
] |= val
<< shift
;
327 w83793_write_value(client
, W83793_REG_BEEP(index
), data
->beeps
[index
]);
328 mutex_unlock(&data
->update_lock
);
334 show_beep_enable(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
336 struct w83793_data
*data
= w83793_update_device(dev
);
337 return sprintf(buf
, "%u\n", (data
->beep_enable
>> 1) & 0x01);
341 store_beep_enable(struct device
*dev
, struct device_attribute
*attr
,
342 const char *buf
, size_t count
)
344 struct i2c_client
*client
= to_i2c_client(dev
);
345 struct w83793_data
*data
= i2c_get_clientdata(client
);
346 u8 val
= simple_strtoul(buf
, NULL
, 10);
348 if (val
!= 0 && val
!= 1)
351 mutex_lock(&data
->update_lock
);
352 data
->beep_enable
= w83793_read_value(client
, W83793_REG_OVT_BEEP
)
354 data
->beep_enable
|= val
<< 1;
355 w83793_write_value(client
, W83793_REG_OVT_BEEP
, data
->beep_enable
);
356 mutex_unlock(&data
->update_lock
);
361 /* Write any value to clear chassis alarm */
363 store_chassis_clear(struct device
*dev
,
364 struct device_attribute
*attr
, const char *buf
,
367 struct i2c_client
*client
= to_i2c_client(dev
);
368 struct w83793_data
*data
= i2c_get_clientdata(client
);
371 mutex_lock(&data
->update_lock
);
372 val
= w83793_read_value(client
, W83793_REG_CLR_CHASSIS
);
374 w83793_write_value(client
, W83793_REG_CLR_CHASSIS
, val
);
375 mutex_unlock(&data
->update_lock
);
382 show_fan(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
384 struct sensor_device_attribute_2
*sensor_attr
=
385 to_sensor_dev_attr_2(attr
);
386 int nr
= sensor_attr
->nr
;
387 int index
= sensor_attr
->index
;
388 struct w83793_data
*data
= w83793_update_device(dev
);
391 if (FAN_INPUT
== nr
) {
392 val
= data
->fan
[index
] & 0x0fff;
394 val
= data
->fan_min
[index
] & 0x0fff;
397 return sprintf(buf
, "%lu\n", FAN_FROM_REG(val
));
401 store_fan_min(struct device
*dev
, struct device_attribute
*attr
,
402 const char *buf
, size_t count
)
404 struct sensor_device_attribute_2
*sensor_attr
=
405 to_sensor_dev_attr_2(attr
);
406 int index
= sensor_attr
->index
;
407 struct i2c_client
*client
= to_i2c_client(dev
);
408 struct w83793_data
*data
= i2c_get_clientdata(client
);
409 u16 val
= FAN_TO_REG(simple_strtoul(buf
, NULL
, 10));
411 mutex_lock(&data
->update_lock
);
412 data
->fan_min
[index
] = val
;
413 w83793_write_value(client
, W83793_REG_FAN_MIN(index
),
415 w83793_write_value(client
, W83793_REG_FAN_MIN(index
) + 1, val
& 0xff);
416 mutex_unlock(&data
->update_lock
);
422 show_pwm(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
424 struct sensor_device_attribute_2
*sensor_attr
=
425 to_sensor_dev_attr_2(attr
);
426 struct w83793_data
*data
= w83793_update_device(dev
);
428 int nr
= sensor_attr
->nr
;
429 int index
= sensor_attr
->index
;
431 if (PWM_STOP_TIME
== nr
)
432 val
= TIME_FROM_REG(data
->pwm_stop_time
[index
]);
434 val
= (data
->pwm
[index
][nr
] & 0x3f) << 2;
436 return sprintf(buf
, "%d\n", val
);
440 store_pwm(struct device
*dev
, struct device_attribute
*attr
,
441 const char *buf
, size_t count
)
443 struct i2c_client
*client
= to_i2c_client(dev
);
444 struct w83793_data
*data
= i2c_get_clientdata(client
);
445 struct sensor_device_attribute_2
*sensor_attr
=
446 to_sensor_dev_attr_2(attr
);
447 int nr
= sensor_attr
->nr
;
448 int index
= sensor_attr
->index
;
451 mutex_lock(&data
->update_lock
);
452 if (PWM_STOP_TIME
== nr
) {
453 val
= TIME_TO_REG(simple_strtoul(buf
, NULL
, 10));
454 data
->pwm_stop_time
[index
] = val
;
455 w83793_write_value(client
, W83793_REG_PWM_STOP_TIME(index
),
458 val
= SENSORS_LIMIT(simple_strtoul(buf
, NULL
, 10), 0, 0xff)
460 data
->pwm
[index
][nr
] =
461 w83793_read_value(client
, W83793_REG_PWM(index
, nr
)) & 0xc0;
462 data
->pwm
[index
][nr
] |= val
;
463 w83793_write_value(client
, W83793_REG_PWM(index
, nr
),
464 data
->pwm
[index
][nr
]);
467 mutex_unlock(&data
->update_lock
);
472 show_temp(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
474 struct sensor_device_attribute_2
*sensor_attr
=
475 to_sensor_dev_attr_2(attr
);
476 int nr
= sensor_attr
->nr
;
477 int index
= sensor_attr
->index
;
478 struct w83793_data
*data
= w83793_update_device(dev
);
479 long temp
= TEMP_FROM_REG(data
->temp
[index
][nr
]);
481 if (TEMP_READ
== nr
&& index
< 4) { /* Only TD1-TD4 have low bits */
482 int low
= ((data
->temp_low_bits
>> (index
* 2)) & 0x03) * 250;
483 temp
+= temp
> 0 ? low
: -low
;
485 return sprintf(buf
, "%ld\n", temp
);
489 store_temp(struct device
*dev
, struct device_attribute
*attr
,
490 const char *buf
, size_t count
)
492 struct sensor_device_attribute_2
*sensor_attr
=
493 to_sensor_dev_attr_2(attr
);
494 int nr
= sensor_attr
->nr
;
495 int index
= sensor_attr
->index
;
496 struct i2c_client
*client
= to_i2c_client(dev
);
497 struct w83793_data
*data
= i2c_get_clientdata(client
);
498 long tmp
= simple_strtol(buf
, NULL
, 10);
500 mutex_lock(&data
->update_lock
);
501 data
->temp
[index
][nr
] = TEMP_TO_REG(tmp
, -128, 127);
502 w83793_write_value(client
, W83793_REG_TEMP
[index
][nr
],
503 data
->temp
[index
][nr
]);
504 mutex_unlock(&data
->update_lock
);
510 each has 4 mode:(2 bits)
512 1: Use internal temp sensor(default)
514 3: Use sensor in Intel CPU and get result by PECI
517 each has 2 mode:(1 bit)
518 0: Disable temp sensor monitor
519 1: To enable temp sensors monitor
522 /* 0 disable, 6 PECI */
523 static u8 TO_TEMP_MODE
[] = { 0, 0, 0, 6 };
526 show_temp_mode(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
528 struct w83793_data
*data
= w83793_update_device(dev
);
529 struct sensor_device_attribute_2
*sensor_attr
=
530 to_sensor_dev_attr_2(attr
);
531 int index
= sensor_attr
->index
;
532 u8 mask
= (index
< 4) ? 0x03 : 0x01;
533 u8 shift
= (index
< 4) ? (2 * index
) : (index
- 4);
535 index
= (index
< 4) ? 0 : 1;
537 tmp
= (data
->temp_mode
[index
] >> shift
) & mask
;
539 /* for the internal sensor, found out if diode or thermistor */
541 tmp
= index
== 0 ? 3 : 4;
543 tmp
= TO_TEMP_MODE
[tmp
];
546 return sprintf(buf
, "%d\n", tmp
);
550 store_temp_mode(struct device
*dev
, struct device_attribute
*attr
,
551 const char *buf
, size_t count
)
553 struct i2c_client
*client
= to_i2c_client(dev
);
554 struct w83793_data
*data
= i2c_get_clientdata(client
);
555 struct sensor_device_attribute_2
*sensor_attr
=
556 to_sensor_dev_attr_2(attr
);
557 int index
= sensor_attr
->index
;
558 u8 mask
= (index
< 4) ? 0x03 : 0x01;
559 u8 shift
= (index
< 4) ? (2 * index
) : (index
- 4);
560 u8 val
= simple_strtoul(buf
, NULL
, 10);
562 /* transform the sysfs interface values into table above */
563 if ((val
== 6) && (index
< 4)) {
565 } else if ((val
== 3 && index
< 4)
566 || (val
== 4 && index
>= 4)) {
567 /* transform diode or thermistor into internal enable */
573 index
= (index
< 4) ? 0 : 1;
574 mutex_lock(&data
->update_lock
);
575 data
->temp_mode
[index
] =
576 w83793_read_value(client
, W83793_REG_TEMP_MODE
[index
]);
577 data
->temp_mode
[index
] &= ~(mask
<< shift
);
578 data
->temp_mode
[index
] |= val
<< shift
;
579 w83793_write_value(client
, W83793_REG_TEMP_MODE
[index
],
580 data
->temp_mode
[index
]);
581 mutex_unlock(&data
->update_lock
);
586 #define SETUP_PWM_DEFAULT 0
587 #define SETUP_PWM_UPTIME 1 /* Unit in 0.1s */
588 #define SETUP_PWM_DOWNTIME 2 /* Unit in 0.1s */
589 #define SETUP_TEMP_CRITICAL 3
591 show_sf_setup(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
593 struct sensor_device_attribute_2
*sensor_attr
=
594 to_sensor_dev_attr_2(attr
);
595 int nr
= sensor_attr
->nr
;
596 struct w83793_data
*data
= w83793_update_device(dev
);
599 if (SETUP_PWM_DEFAULT
== nr
) {
600 val
= (data
->pwm_default
& 0x3f) << 2;
601 } else if (SETUP_PWM_UPTIME
== nr
) {
602 val
= TIME_FROM_REG(data
->pwm_uptime
);
603 } else if (SETUP_PWM_DOWNTIME
== nr
) {
604 val
= TIME_FROM_REG(data
->pwm_downtime
);
605 } else if (SETUP_TEMP_CRITICAL
== nr
) {
606 val
= TEMP_FROM_REG(data
->temp_critical
& 0x7f);
609 return sprintf(buf
, "%d\n", val
);
613 store_sf_setup(struct device
*dev
, struct device_attribute
*attr
,
614 const char *buf
, size_t count
)
616 struct sensor_device_attribute_2
*sensor_attr
=
617 to_sensor_dev_attr_2(attr
);
618 int nr
= sensor_attr
->nr
;
619 struct i2c_client
*client
= to_i2c_client(dev
);
620 struct w83793_data
*data
= i2c_get_clientdata(client
);
622 mutex_lock(&data
->update_lock
);
623 if (SETUP_PWM_DEFAULT
== nr
) {
625 w83793_read_value(client
, W83793_REG_PWM_DEFAULT
) & 0xc0;
626 data
->pwm_default
|= SENSORS_LIMIT(simple_strtoul(buf
, NULL
,
629 w83793_write_value(client
, W83793_REG_PWM_DEFAULT
,
631 } else if (SETUP_PWM_UPTIME
== nr
) {
632 data
->pwm_uptime
= TIME_TO_REG(simple_strtoul(buf
, NULL
, 10));
633 data
->pwm_uptime
+= data
->pwm_uptime
== 0 ? 1 : 0;
634 w83793_write_value(client
, W83793_REG_PWM_UPTIME
,
636 } else if (SETUP_PWM_DOWNTIME
== nr
) {
637 data
->pwm_downtime
= TIME_TO_REG(simple_strtoul(buf
, NULL
, 10));
638 data
->pwm_downtime
+= data
->pwm_downtime
== 0 ? 1 : 0;
639 w83793_write_value(client
, W83793_REG_PWM_DOWNTIME
,
641 } else { /* SETUP_TEMP_CRITICAL */
642 data
->temp_critical
=
643 w83793_read_value(client
, W83793_REG_TEMP_CRITICAL
) & 0x80;
644 data
->temp_critical
|= TEMP_TO_REG(simple_strtol(buf
, NULL
, 10),
646 w83793_write_value(client
, W83793_REG_TEMP_CRITICAL
,
647 data
->temp_critical
);
650 mutex_unlock(&data
->update_lock
);
655 Temp SmartFan control
657 Temp channel control which pwm fan, bitfield, bit 0 indicate pwm1...
658 It's possible two or more temp channels control the same fan, w83793
659 always prefers to pick the most critical request and applies it to
661 It's possible one fan is not in any mapping of 6 temp channels, this
662 means the fan is manual mode
665 Each temp channel has its own SmartFan mode, and temp channel
666 control fans that are set by TEMP_FAN_MAP
668 1: Thermal Cruise Mode
671 Target temperature in thermal cruise mode, w83793 will try to turn
672 fan speed to keep the temperature of target device around this
676 If Temp higher or lower than target with this tolerance, w83793
677 will take actions to speed up or slow down the fan to keep the
678 temperature within the tolerance range.
681 #define TEMP_FAN_MAP 0
682 #define TEMP_PWM_ENABLE 1
683 #define TEMP_CRUISE 2
684 #define TEMP_TOLERANCE 3
686 show_sf_ctrl(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
688 struct sensor_device_attribute_2
*sensor_attr
=
689 to_sensor_dev_attr_2(attr
);
690 int nr
= sensor_attr
->nr
;
691 int index
= sensor_attr
->index
;
692 struct w83793_data
*data
= w83793_update_device(dev
);
695 if (TEMP_FAN_MAP
== nr
) {
696 val
= data
->temp_fan_map
[index
];
697 } else if (TEMP_PWM_ENABLE
== nr
) {
698 /* +2 to transfrom into 2 and 3 to conform with sysfs intf */
699 val
= ((data
->pwm_enable
>> index
) & 0x01) + 2;
700 } else if (TEMP_CRUISE
== nr
) {
701 val
= TEMP_FROM_REG(data
->temp_cruise
[index
] & 0x7f);
702 } else { /* TEMP_TOLERANCE */
703 val
= data
->tolerance
[index
>> 1] >> ((index
& 0x01) ? 4 : 0);
704 val
= TEMP_FROM_REG(val
& 0x0f);
706 return sprintf(buf
, "%d\n", val
);
710 store_sf_ctrl(struct device
*dev
, struct device_attribute
*attr
,
711 const char *buf
, size_t count
)
713 struct sensor_device_attribute_2
*sensor_attr
=
714 to_sensor_dev_attr_2(attr
);
715 int nr
= sensor_attr
->nr
;
716 int index
= sensor_attr
->index
;
717 struct i2c_client
*client
= to_i2c_client(dev
);
718 struct w83793_data
*data
= i2c_get_clientdata(client
);
721 mutex_lock(&data
->update_lock
);
722 if (TEMP_FAN_MAP
== nr
) {
723 val
= simple_strtoul(buf
, NULL
, 10) & 0xff;
724 w83793_write_value(client
, W83793_REG_TEMP_FAN_MAP(index
), val
);
725 data
->temp_fan_map
[index
] = val
;
726 } else if (TEMP_PWM_ENABLE
== nr
) {
727 val
= simple_strtoul(buf
, NULL
, 10);
728 if (2 == val
|| 3 == val
) {
730 w83793_read_value(client
, W83793_REG_PWM_ENABLE
);
732 data
->pwm_enable
|= 1 << index
;
734 data
->pwm_enable
&= ~(1 << index
);
735 w83793_write_value(client
, W83793_REG_PWM_ENABLE
,
738 mutex_unlock(&data
->update_lock
);
741 } else if (TEMP_CRUISE
== nr
) {
742 data
->temp_cruise
[index
] =
743 w83793_read_value(client
, W83793_REG_TEMP_CRUISE(index
));
744 val
= TEMP_TO_REG(simple_strtol(buf
, NULL
, 10), 0, 0x7f);
745 data
->temp_cruise
[index
] &= 0x80;
746 data
->temp_cruise
[index
] |= val
;
748 w83793_write_value(client
, W83793_REG_TEMP_CRUISE(index
),
749 data
->temp_cruise
[index
]);
750 } else { /* TEMP_TOLERANCE */
752 u8 shift
= (index
& 0x01) ? 4 : 0;
754 w83793_read_value(client
, W83793_REG_TEMP_TOL(i
));
756 val
= TEMP_TO_REG(simple_strtol(buf
, NULL
, 10), 0, 0x0f);
757 data
->tolerance
[i
] &= ~(0x0f << shift
);
758 data
->tolerance
[i
] |= val
<< shift
;
759 w83793_write_value(client
, W83793_REG_TEMP_TOL(i
),
763 mutex_unlock(&data
->update_lock
);
768 show_sf2_pwm(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
770 struct sensor_device_attribute_2
*sensor_attr
=
771 to_sensor_dev_attr_2(attr
);
772 int nr
= sensor_attr
->nr
;
773 int index
= sensor_attr
->index
;
774 struct w83793_data
*data
= w83793_update_device(dev
);
776 return sprintf(buf
, "%d\n", (data
->sf2_pwm
[index
][nr
] & 0x3f) << 2);
780 store_sf2_pwm(struct device
*dev
, struct device_attribute
*attr
,
781 const char *buf
, size_t count
)
783 struct i2c_client
*client
= to_i2c_client(dev
);
784 struct w83793_data
*data
= i2c_get_clientdata(client
);
785 struct sensor_device_attribute_2
*sensor_attr
=
786 to_sensor_dev_attr_2(attr
);
787 int nr
= sensor_attr
->nr
;
788 int index
= sensor_attr
->index
;
789 u8 val
= SENSORS_LIMIT(simple_strtoul(buf
, NULL
, 10), 0, 0xff) >> 2;
791 mutex_lock(&data
->update_lock
);
792 data
->sf2_pwm
[index
][nr
] =
793 w83793_read_value(client
, W83793_REG_SF2_PWM(index
, nr
)) & 0xc0;
794 data
->sf2_pwm
[index
][nr
] |= val
;
795 w83793_write_value(client
, W83793_REG_SF2_PWM(index
, nr
),
796 data
->sf2_pwm
[index
][nr
]);
797 mutex_unlock(&data
->update_lock
);
802 show_sf2_temp(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
804 struct sensor_device_attribute_2
*sensor_attr
=
805 to_sensor_dev_attr_2(attr
);
806 int nr
= sensor_attr
->nr
;
807 int index
= sensor_attr
->index
;
808 struct w83793_data
*data
= w83793_update_device(dev
);
810 return sprintf(buf
, "%ld\n",
811 TEMP_FROM_REG(data
->sf2_temp
[index
][nr
] & 0x7f));
815 store_sf2_temp(struct device
*dev
, struct device_attribute
*attr
,
816 const char *buf
, size_t count
)
818 struct i2c_client
*client
= to_i2c_client(dev
);
819 struct w83793_data
*data
= i2c_get_clientdata(client
);
820 struct sensor_device_attribute_2
*sensor_attr
=
821 to_sensor_dev_attr_2(attr
);
822 int nr
= sensor_attr
->nr
;
823 int index
= sensor_attr
->index
;
824 u8 val
= TEMP_TO_REG(simple_strtol(buf
, NULL
, 10), 0, 0x7f);
826 mutex_lock(&data
->update_lock
);
827 data
->sf2_temp
[index
][nr
] =
828 w83793_read_value(client
, W83793_REG_SF2_TEMP(index
, nr
)) & 0x80;
829 data
->sf2_temp
[index
][nr
] |= val
;
830 w83793_write_value(client
, W83793_REG_SF2_TEMP(index
, nr
),
831 data
->sf2_temp
[index
][nr
]);
832 mutex_unlock(&data
->update_lock
);
836 /* only Vcore A/B and Vtt have additional 2 bits precision */
838 show_in(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
840 struct sensor_device_attribute_2
*sensor_attr
=
841 to_sensor_dev_attr_2(attr
);
842 int nr
= sensor_attr
->nr
;
843 int index
= sensor_attr
->index
;
844 struct w83793_data
*data
= w83793_update_device(dev
);
845 u16 val
= data
->in
[index
][nr
];
849 val
+= (data
->in_low_bits
[nr
] >> (index
* 2)) & 0x3;
851 /* voltage inputs 5VDD and 5VSB needs 150mV offset */
852 val
= val
* scale_in
[index
] + scale_in_add
[index
];
853 return sprintf(buf
, "%d\n", val
);
857 store_in(struct device
*dev
, struct device_attribute
*attr
,
858 const char *buf
, size_t count
)
860 struct sensor_device_attribute_2
*sensor_attr
=
861 to_sensor_dev_attr_2(attr
);
862 int nr
= sensor_attr
->nr
;
863 int index
= sensor_attr
->index
;
864 struct i2c_client
*client
= to_i2c_client(dev
);
865 struct w83793_data
*data
= i2c_get_clientdata(client
);
869 (simple_strtoul(buf
, NULL
, 10) +
870 scale_in
[index
] / 2) / scale_in
[index
];
871 mutex_lock(&data
->update_lock
);
873 /* fix the limit values of 5VDD and 5VSB to ALARM mechanism */
874 if (1 == nr
|| 2 == nr
) {
875 val
-= scale_in_add
[index
] / scale_in
[index
];
877 val
= SENSORS_LIMIT(val
, 0, 255);
879 val
= SENSORS_LIMIT(val
, 0, 0x3FF);
880 data
->in_low_bits
[nr
] =
881 w83793_read_value(client
, W83793_REG_IN_LOW_BITS
[nr
]);
882 data
->in_low_bits
[nr
] &= ~(0x03 << (2 * index
));
883 data
->in_low_bits
[nr
] |= (val
& 0x03) << (2 * index
);
884 w83793_write_value(client
, W83793_REG_IN_LOW_BITS
[nr
],
885 data
->in_low_bits
[nr
]);
888 data
->in
[index
][nr
] = val
;
889 w83793_write_value(client
, W83793_REG_IN
[index
][nr
],
890 data
->in
[index
][nr
]);
891 mutex_unlock(&data
->update_lock
);
897 #define SENSOR_ATTR_IN(index) \
898 SENSOR_ATTR_2(in##index##_input, S_IRUGO, show_in, NULL, \
900 SENSOR_ATTR_2(in##index##_max, S_IRUGO | S_IWUSR, show_in, \
901 store_in, IN_MAX, index), \
902 SENSOR_ATTR_2(in##index##_min, S_IRUGO | S_IWUSR, show_in, \
903 store_in, IN_LOW, index), \
904 SENSOR_ATTR_2(in##index##_alarm, S_IRUGO, show_alarm_beep, \
905 NULL, ALARM_STATUS, index + ((index > 2) ? 1 : 0)), \
906 SENSOR_ATTR_2(in##index##_beep, S_IWUSR | S_IRUGO, \
907 show_alarm_beep, store_beep, BEEP_ENABLE, \
908 index + ((index > 2) ? 1 : 0))
910 #define SENSOR_ATTR_FAN(index) \
911 SENSOR_ATTR_2(fan##index##_alarm, S_IRUGO, show_alarm_beep, \
912 NULL, ALARM_STATUS, index + 17), \
913 SENSOR_ATTR_2(fan##index##_beep, S_IWUSR | S_IRUGO, \
914 show_alarm_beep, store_beep, BEEP_ENABLE, index + 17), \
915 SENSOR_ATTR_2(fan##index##_input, S_IRUGO, show_fan, \
916 NULL, FAN_INPUT, index - 1), \
917 SENSOR_ATTR_2(fan##index##_min, S_IWUSR | S_IRUGO, \
918 show_fan, store_fan_min, FAN_MIN, index - 1)
920 #define SENSOR_ATTR_PWM(index) \
921 SENSOR_ATTR_2(pwm##index, S_IWUSR | S_IRUGO, show_pwm, \
922 store_pwm, PWM_DUTY, index - 1), \
923 SENSOR_ATTR_2(pwm##index##_nonstop, S_IWUSR | S_IRUGO, \
924 show_pwm, store_pwm, PWM_NONSTOP, index - 1), \
925 SENSOR_ATTR_2(pwm##index##_start, S_IWUSR | S_IRUGO, \
926 show_pwm, store_pwm, PWM_START, index - 1), \
927 SENSOR_ATTR_2(pwm##index##_stop_time, S_IWUSR | S_IRUGO, \
928 show_pwm, store_pwm, PWM_STOP_TIME, index - 1)
930 #define SENSOR_ATTR_TEMP(index) \
931 SENSOR_ATTR_2(temp##index##_type, S_IRUGO | S_IWUSR, \
932 show_temp_mode, store_temp_mode, NOT_USED, index - 1), \
933 SENSOR_ATTR_2(temp##index##_input, S_IRUGO, show_temp, \
934 NULL, TEMP_READ, index - 1), \
935 SENSOR_ATTR_2(temp##index##_max, S_IRUGO | S_IWUSR, show_temp, \
936 store_temp, TEMP_CRIT, index - 1), \
937 SENSOR_ATTR_2(temp##index##_max_hyst, S_IRUGO | S_IWUSR, \
938 show_temp, store_temp, TEMP_CRIT_HYST, index - 1), \
939 SENSOR_ATTR_2(temp##index##_warn, S_IRUGO | S_IWUSR, show_temp, \
940 store_temp, TEMP_WARN, index - 1), \
941 SENSOR_ATTR_2(temp##index##_warn_hyst, S_IRUGO | S_IWUSR, \
942 show_temp, store_temp, TEMP_WARN_HYST, index - 1), \
943 SENSOR_ATTR_2(temp##index##_alarm, S_IRUGO, \
944 show_alarm_beep, NULL, ALARM_STATUS, index + 11), \
945 SENSOR_ATTR_2(temp##index##_beep, S_IWUSR | S_IRUGO, \
946 show_alarm_beep, store_beep, BEEP_ENABLE, index + 11), \
947 SENSOR_ATTR_2(temp##index##_auto_channels_pwm, \
948 S_IRUGO | S_IWUSR, show_sf_ctrl, store_sf_ctrl, \
949 TEMP_FAN_MAP, index - 1), \
950 SENSOR_ATTR_2(temp##index##_pwm_enable, S_IWUSR | S_IRUGO, \
951 show_sf_ctrl, store_sf_ctrl, TEMP_PWM_ENABLE, \
953 SENSOR_ATTR_2(thermal_cruise##index, S_IRUGO | S_IWUSR, \
954 show_sf_ctrl, store_sf_ctrl, TEMP_CRUISE, index - 1), \
955 SENSOR_ATTR_2(tolerance##index, S_IRUGO | S_IWUSR, show_sf_ctrl,\
956 store_sf_ctrl, TEMP_TOLERANCE, index - 1), \
957 SENSOR_ATTR_2(temp##index##_auto_point1_pwm, S_IRUGO | S_IWUSR, \
958 show_sf2_pwm, store_sf2_pwm, 0, index - 1), \
959 SENSOR_ATTR_2(temp##index##_auto_point2_pwm, S_IRUGO | S_IWUSR, \
960 show_sf2_pwm, store_sf2_pwm, 1, index - 1), \
961 SENSOR_ATTR_2(temp##index##_auto_point3_pwm, S_IRUGO | S_IWUSR, \
962 show_sf2_pwm, store_sf2_pwm, 2, index - 1), \
963 SENSOR_ATTR_2(temp##index##_auto_point4_pwm, S_IRUGO | S_IWUSR, \
964 show_sf2_pwm, store_sf2_pwm, 3, index - 1), \
965 SENSOR_ATTR_2(temp##index##_auto_point5_pwm, S_IRUGO | S_IWUSR, \
966 show_sf2_pwm, store_sf2_pwm, 4, index - 1), \
967 SENSOR_ATTR_2(temp##index##_auto_point6_pwm, S_IRUGO | S_IWUSR, \
968 show_sf2_pwm, store_sf2_pwm, 5, index - 1), \
969 SENSOR_ATTR_2(temp##index##_auto_point7_pwm, S_IRUGO | S_IWUSR, \
970 show_sf2_pwm, store_sf2_pwm, 6, index - 1), \
971 SENSOR_ATTR_2(temp##index##_auto_point1_temp, S_IRUGO | S_IWUSR,\
972 show_sf2_temp, store_sf2_temp, 0, index - 1), \
973 SENSOR_ATTR_2(temp##index##_auto_point2_temp, S_IRUGO | S_IWUSR,\
974 show_sf2_temp, store_sf2_temp, 1, index - 1), \
975 SENSOR_ATTR_2(temp##index##_auto_point3_temp, S_IRUGO | S_IWUSR,\
976 show_sf2_temp, store_sf2_temp, 2, index - 1), \
977 SENSOR_ATTR_2(temp##index##_auto_point4_temp, S_IRUGO | S_IWUSR,\
978 show_sf2_temp, store_sf2_temp, 3, index - 1), \
979 SENSOR_ATTR_2(temp##index##_auto_point5_temp, S_IRUGO | S_IWUSR,\
980 show_sf2_temp, store_sf2_temp, 4, index - 1), \
981 SENSOR_ATTR_2(temp##index##_auto_point6_temp, S_IRUGO | S_IWUSR,\
982 show_sf2_temp, store_sf2_temp, 5, index - 1), \
983 SENSOR_ATTR_2(temp##index##_auto_point7_temp, S_IRUGO | S_IWUSR,\
984 show_sf2_temp, store_sf2_temp, 6, index - 1)
986 static struct sensor_device_attribute_2 w83793_sensor_attr_2
[] = {
1007 static struct sensor_device_attribute_2 w83793_temp
[] = {
1008 SENSOR_ATTR_TEMP(1),
1009 SENSOR_ATTR_TEMP(2),
1010 SENSOR_ATTR_TEMP(3),
1011 SENSOR_ATTR_TEMP(4),
1012 SENSOR_ATTR_TEMP(5),
1013 SENSOR_ATTR_TEMP(6),
1017 static struct sensor_device_attribute_2 w83793_left_fan
[] = {
1022 SENSOR_ATTR_FAN(10),
1023 SENSOR_ATTR_FAN(11),
1024 SENSOR_ATTR_FAN(12),
1028 static struct sensor_device_attribute_2 w83793_left_pwm
[] = {
1036 static struct sensor_device_attribute_2 w83793_vid
[] = {
1037 SENSOR_ATTR_2(cpu0_vid
, S_IRUGO
, show_vid
, NULL
, NOT_USED
, 0),
1038 SENSOR_ATTR_2(cpu1_vid
, S_IRUGO
, show_vid
, NULL
, NOT_USED
, 1),
1040 static DEVICE_ATTR(vrm
, S_IWUSR
| S_IRUGO
, show_vrm
, store_vrm
);
1042 static struct sensor_device_attribute_2 sda_single_files
[] = {
1043 SENSOR_ATTR_2(chassis
, S_IWUSR
| S_IRUGO
, show_alarm_beep
,
1044 store_chassis_clear
, ALARM_STATUS
, 30),
1045 SENSOR_ATTR_2(beep_enable
, S_IWUSR
| S_IRUGO
, show_beep_enable
,
1046 store_beep_enable
, NOT_USED
, NOT_USED
),
1047 SENSOR_ATTR_2(pwm_default
, S_IWUSR
| S_IRUGO
, show_sf_setup
,
1048 store_sf_setup
, SETUP_PWM_DEFAULT
, NOT_USED
),
1049 SENSOR_ATTR_2(pwm_uptime
, S_IWUSR
| S_IRUGO
, show_sf_setup
,
1050 store_sf_setup
, SETUP_PWM_UPTIME
, NOT_USED
),
1051 SENSOR_ATTR_2(pwm_downtime
, S_IWUSR
| S_IRUGO
, show_sf_setup
,
1052 store_sf_setup
, SETUP_PWM_DOWNTIME
, NOT_USED
),
1053 SENSOR_ATTR_2(temp_critical
, S_IWUSR
| S_IRUGO
, show_sf_setup
,
1054 store_sf_setup
, SETUP_TEMP_CRITICAL
, NOT_USED
),
1057 static void w83793_init_client(struct i2c_client
*client
)
1060 w83793_write_value(client
, W83793_REG_CONFIG
, 0x80);
1063 /* Start monitoring */
1064 w83793_write_value(client
, W83793_REG_CONFIG
,
1065 w83793_read_value(client
, W83793_REG_CONFIG
) | 0x01);
1069 static int w83793_remove(struct i2c_client
*client
)
1071 struct w83793_data
*data
= i2c_get_clientdata(client
);
1072 struct device
*dev
= &client
->dev
;
1075 hwmon_device_unregister(data
->hwmon_dev
);
1077 for (i
= 0; i
< ARRAY_SIZE(w83793_sensor_attr_2
); i
++)
1078 device_remove_file(dev
,
1079 &w83793_sensor_attr_2
[i
].dev_attr
);
1081 for (i
= 0; i
< ARRAY_SIZE(sda_single_files
); i
++)
1082 device_remove_file(dev
, &sda_single_files
[i
].dev_attr
);
1084 for (i
= 0; i
< ARRAY_SIZE(w83793_vid
); i
++)
1085 device_remove_file(dev
, &w83793_vid
[i
].dev_attr
);
1086 device_remove_file(dev
, &dev_attr_vrm
);
1088 for (i
= 0; i
< ARRAY_SIZE(w83793_left_fan
); i
++)
1089 device_remove_file(dev
, &w83793_left_fan
[i
].dev_attr
);
1091 for (i
= 0; i
< ARRAY_SIZE(w83793_left_pwm
); i
++)
1092 device_remove_file(dev
, &w83793_left_pwm
[i
].dev_attr
);
1094 for (i
= 0; i
< ARRAY_SIZE(w83793_temp
); i
++)
1095 device_remove_file(dev
, &w83793_temp
[i
].dev_attr
);
1097 if (data
->lm75
[0] != NULL
)
1098 i2c_unregister_device(data
->lm75
[0]);
1099 if (data
->lm75
[1] != NULL
)
1100 i2c_unregister_device(data
->lm75
[1]);
1108 w83793_detect_subclients(struct i2c_client
*client
)
1111 int address
= client
->addr
;
1113 struct i2c_adapter
*adapter
= client
->adapter
;
1114 struct w83793_data
*data
= i2c_get_clientdata(client
);
1116 id
= i2c_adapter_id(adapter
);
1117 if (force_subclients
[0] == id
&& force_subclients
[1] == address
) {
1118 for (i
= 2; i
<= 3; i
++) {
1119 if (force_subclients
[i
] < 0x48
1120 || force_subclients
[i
] > 0x4f) {
1121 dev_err(&client
->dev
,
1122 "invalid subclient "
1123 "address %d; must be 0x48-0x4f\n",
1124 force_subclients
[i
]);
1129 w83793_write_value(client
, W83793_REG_I2C_SUBADDR
,
1130 (force_subclients
[2] & 0x07) |
1131 ((force_subclients
[3] & 0x07) << 4));
1134 tmp
= w83793_read_value(client
, W83793_REG_I2C_SUBADDR
);
1135 if (!(tmp
& 0x08)) {
1136 data
->lm75
[0] = i2c_new_dummy(adapter
, 0x48 + (tmp
& 0x7));
1138 if (!(tmp
& 0x80)) {
1139 if ((data
->lm75
[0] != NULL
)
1140 && ((tmp
& 0x7) == ((tmp
>> 4) & 0x7))) {
1141 dev_err(&client
->dev
,
1142 "duplicate addresses 0x%x, "
1143 "use force_subclients\n", data
->lm75
[0]->addr
);
1147 data
->lm75
[1] = i2c_new_dummy(adapter
,
1148 0x48 + ((tmp
>> 4) & 0x7));
1153 /* Undo inits in case of errors */
1156 if (data
->lm75
[0] != NULL
)
1157 i2c_unregister_device(data
->lm75
[0]);
1162 /* Return 0 if detection is successful, -ENODEV otherwise */
1163 static int w83793_detect(struct i2c_client
*client
,
1164 struct i2c_board_info
*info
)
1166 u8 tmp
, bank
, chip_id
;
1167 struct i2c_adapter
*adapter
= client
->adapter
;
1168 unsigned short address
= client
->addr
;
1170 if (!i2c_check_functionality(adapter
, I2C_FUNC_SMBUS_BYTE_DATA
)) {
1174 bank
= i2c_smbus_read_byte_data(client
, W83793_REG_BANKSEL
);
1176 tmp
= bank
& 0x80 ? 0x5c : 0xa3;
1177 /* Check Winbond vendor ID */
1178 if (tmp
!= i2c_smbus_read_byte_data(client
, W83793_REG_VENDORID
)) {
1179 pr_debug("w83793: Detection failed at check vendor id\n");
1183 /* If Winbond chip, address of chip and W83793_REG_I2C_ADDR
1185 if ((bank
& 0x07) == 0
1186 && i2c_smbus_read_byte_data(client
, W83793_REG_I2C_ADDR
) !=
1188 pr_debug("w83793: Detection failed at check i2c addr\n");
1192 /* Determine the chip type now */
1193 chip_id
= i2c_smbus_read_byte_data(client
, W83793_REG_CHIPID
);
1194 if (chip_id
!= 0x7b)
1197 strlcpy(info
->type
, "w83793", I2C_NAME_SIZE
);
1202 static int w83793_probe(struct i2c_client
*client
,
1203 const struct i2c_device_id
*id
)
1205 struct device
*dev
= &client
->dev
;
1206 struct w83793_data
*data
;
1207 int i
, tmp
, val
, err
;
1208 int files_fan
= ARRAY_SIZE(w83793_left_fan
) / 7;
1209 int files_pwm
= ARRAY_SIZE(w83793_left_pwm
) / 5;
1210 int files_temp
= ARRAY_SIZE(w83793_temp
) / 6;
1212 data
= kzalloc(sizeof(struct w83793_data
), GFP_KERNEL
);
1218 i2c_set_clientdata(client
, data
);
1219 data
->bank
= i2c_smbus_read_byte_data(client
, W83793_REG_BANKSEL
);
1220 mutex_init(&data
->update_lock
);
1222 err
= w83793_detect_subclients(client
);
1226 /* Initialize the chip */
1227 w83793_init_client(client
);
1230 Only fan 1-5 has their own input pins,
1231 Pwm 1-3 has their own pins
1233 data
->has_fan
= 0x1f;
1234 data
->has_pwm
= 0x07;
1235 tmp
= w83793_read_value(client
, W83793_REG_MFC
);
1236 val
= w83793_read_value(client
, W83793_REG_FANIN_CTRL
);
1238 /* check the function of pins 49-56 */
1240 data
->has_vid
|= 0x2; /* has VIDB */
1242 data
->has_pwm
|= 0x18; /* pwm 4,5 */
1243 if (val
& 0x01) { /* fan 6 */
1244 data
->has_fan
|= 0x20;
1245 data
->has_pwm
|= 0x20;
1247 if (val
& 0x02) { /* fan 7 */
1248 data
->has_fan
|= 0x40;
1249 data
->has_pwm
|= 0x40;
1251 if (!(tmp
& 0x40) && (val
& 0x04)) { /* fan 8 */
1252 data
->has_fan
|= 0x80;
1253 data
->has_pwm
|= 0x80;
1257 /* check the function of pins 37-40 */
1259 data
->has_vid
|= 0x1; /* has VIDA */
1260 if (0x08 == (tmp
& 0x0c)) {
1261 if (val
& 0x08) /* fan 9 */
1262 data
->has_fan
|= 0x100;
1263 if (val
& 0x10) /* fan 10 */
1264 data
->has_fan
|= 0x200;
1266 if (0x20 == (tmp
& 0x30)) {
1267 if (val
& 0x20) /* fan 11 */
1268 data
->has_fan
|= 0x400;
1269 if (val
& 0x40) /* fan 12 */
1270 data
->has_fan
|= 0x800;
1273 if ((tmp
& 0x01) && (val
& 0x04)) { /* fan 8, second location */
1274 data
->has_fan
|= 0x80;
1275 data
->has_pwm
|= 0x80;
1278 tmp
= w83793_read_value(client
, W83793_REG_FANIN_SEL
);
1279 if ((tmp
& 0x01) && (val
& 0x08)) { /* fan 9, second location */
1280 data
->has_fan
|= 0x100;
1282 if ((tmp
& 0x02) && (val
& 0x10)) { /* fan 10, second location */
1283 data
->has_fan
|= 0x200;
1285 if ((tmp
& 0x04) && (val
& 0x20)) { /* fan 11, second location */
1286 data
->has_fan
|= 0x400;
1288 if ((tmp
& 0x08) && (val
& 0x40)) { /* fan 12, second location */
1289 data
->has_fan
|= 0x800;
1292 /* check the temp1-6 mode, ignore former AMDSI selected inputs */
1293 tmp
= w83793_read_value(client
,W83793_REG_TEMP_MODE
[0]);
1295 data
->has_temp
|= 0x01;
1297 data
->has_temp
|= 0x02;
1299 data
->has_temp
|= 0x04;
1301 data
->has_temp
|= 0x08;
1303 tmp
= w83793_read_value(client
,W83793_REG_TEMP_MODE
[1]);
1305 data
->has_temp
|= 0x10;
1307 data
->has_temp
|= 0x20;
1309 /* Register sysfs hooks */
1310 for (i
= 0; i
< ARRAY_SIZE(w83793_sensor_attr_2
); i
++) {
1311 err
= device_create_file(dev
,
1312 &w83793_sensor_attr_2
[i
].dev_attr
);
1317 for (i
= 0; i
< ARRAY_SIZE(w83793_vid
); i
++) {
1318 if (!(data
->has_vid
& (1 << i
)))
1320 err
= device_create_file(dev
, &w83793_vid
[i
].dev_attr
);
1324 if (data
->has_vid
) {
1325 data
->vrm
= vid_which_vrm();
1326 err
= device_create_file(dev
, &dev_attr_vrm
);
1331 for (i
= 0; i
< ARRAY_SIZE(sda_single_files
); i
++) {
1332 err
= device_create_file(dev
, &sda_single_files
[i
].dev_attr
);
1338 for (i
= 0; i
< 6; i
++) {
1340 if (!(data
->has_temp
& (1 << i
)))
1342 for (j
= 0; j
< files_temp
; j
++) {
1343 err
= device_create_file(dev
,
1344 &w83793_temp
[(i
) * files_temp
1351 for (i
= 5; i
< 12; i
++) {
1353 if (!(data
->has_fan
& (1 << i
)))
1355 for (j
= 0; j
< files_fan
; j
++) {
1356 err
= device_create_file(dev
,
1357 &w83793_left_fan
[(i
- 5) * files_fan
1364 for (i
= 3; i
< 8; i
++) {
1366 if (!(data
->has_pwm
& (1 << i
)))
1368 for (j
= 0; j
< files_pwm
; j
++) {
1369 err
= device_create_file(dev
,
1370 &w83793_left_pwm
[(i
- 3) * files_pwm
1377 data
->hwmon_dev
= hwmon_device_register(dev
);
1378 if (IS_ERR(data
->hwmon_dev
)) {
1379 err
= PTR_ERR(data
->hwmon_dev
);
1385 /* Unregister sysfs hooks */
1388 for (i
= 0; i
< ARRAY_SIZE(w83793_sensor_attr_2
); i
++)
1389 device_remove_file(dev
, &w83793_sensor_attr_2
[i
].dev_attr
);
1391 for (i
= 0; i
< ARRAY_SIZE(sda_single_files
); i
++)
1392 device_remove_file(dev
, &sda_single_files
[i
].dev_attr
);
1394 for (i
= 0; i
< ARRAY_SIZE(w83793_vid
); i
++)
1395 device_remove_file(dev
, &w83793_vid
[i
].dev_attr
);
1397 for (i
= 0; i
< ARRAY_SIZE(w83793_left_fan
); i
++)
1398 device_remove_file(dev
, &w83793_left_fan
[i
].dev_attr
);
1400 for (i
= 0; i
< ARRAY_SIZE(w83793_left_pwm
); i
++)
1401 device_remove_file(dev
, &w83793_left_pwm
[i
].dev_attr
);
1403 for (i
= 0; i
< ARRAY_SIZE(w83793_temp
); i
++)
1404 device_remove_file(dev
, &w83793_temp
[i
].dev_attr
);
1406 if (data
->lm75
[0] != NULL
)
1407 i2c_unregister_device(data
->lm75
[0]);
1408 if (data
->lm75
[1] != NULL
)
1409 i2c_unregister_device(data
->lm75
[1]);
1416 static void w83793_update_nonvolatile(struct device
*dev
)
1418 struct i2c_client
*client
= to_i2c_client(dev
);
1419 struct w83793_data
*data
= i2c_get_clientdata(client
);
1422 They are somewhat "stable" registers, and to update them everytime
1423 takes so much time, it's just not worthy. Update them in a long
1424 interval to avoid exception.
1426 if (!(time_after(jiffies
, data
->last_nonvolatile
+ HZ
* 300)
1429 /* update voltage limits */
1430 for (i
= 1; i
< 3; i
++) {
1431 for (j
= 0; j
< ARRAY_SIZE(data
->in
); j
++) {
1433 w83793_read_value(client
, W83793_REG_IN
[j
][i
]);
1435 data
->in_low_bits
[i
] =
1436 w83793_read_value(client
, W83793_REG_IN_LOW_BITS
[i
]);
1439 for (i
= 0; i
< ARRAY_SIZE(data
->fan_min
); i
++) {
1440 /* Update the Fan measured value and limits */
1441 if (!(data
->has_fan
& (1 << i
))) {
1445 w83793_read_value(client
, W83793_REG_FAN_MIN(i
)) << 8;
1447 w83793_read_value(client
, W83793_REG_FAN_MIN(i
) + 1);
1450 for (i
= 0; i
< ARRAY_SIZE(data
->temp_fan_map
); i
++) {
1451 if (!(data
->has_temp
& (1 << i
)))
1453 data
->temp_fan_map
[i
] =
1454 w83793_read_value(client
, W83793_REG_TEMP_FAN_MAP(i
));
1455 for (j
= 1; j
< 5; j
++) {
1457 w83793_read_value(client
, W83793_REG_TEMP
[i
][j
]);
1459 data
->temp_cruise
[i
] =
1460 w83793_read_value(client
, W83793_REG_TEMP_CRUISE(i
));
1461 for (j
= 0; j
< 7; j
++) {
1462 data
->sf2_pwm
[i
][j
] =
1463 w83793_read_value(client
, W83793_REG_SF2_PWM(i
, j
));
1464 data
->sf2_temp
[i
][j
] =
1465 w83793_read_value(client
,
1466 W83793_REG_SF2_TEMP(i
, j
));
1470 for (i
= 0; i
< ARRAY_SIZE(data
->temp_mode
); i
++)
1471 data
->temp_mode
[i
] =
1472 w83793_read_value(client
, W83793_REG_TEMP_MODE
[i
]);
1474 for (i
= 0; i
< ARRAY_SIZE(data
->tolerance
); i
++) {
1475 data
->tolerance
[i
] =
1476 w83793_read_value(client
, W83793_REG_TEMP_TOL(i
));
1479 for (i
= 0; i
< ARRAY_SIZE(data
->pwm
); i
++) {
1480 if (!(data
->has_pwm
& (1 << i
)))
1482 data
->pwm
[i
][PWM_NONSTOP
] =
1483 w83793_read_value(client
, W83793_REG_PWM(i
, PWM_NONSTOP
));
1484 data
->pwm
[i
][PWM_START
] =
1485 w83793_read_value(client
, W83793_REG_PWM(i
, PWM_START
));
1486 data
->pwm_stop_time
[i
] =
1487 w83793_read_value(client
, W83793_REG_PWM_STOP_TIME(i
));
1490 data
->pwm_default
= w83793_read_value(client
, W83793_REG_PWM_DEFAULT
);
1491 data
->pwm_enable
= w83793_read_value(client
, W83793_REG_PWM_ENABLE
);
1492 data
->pwm_uptime
= w83793_read_value(client
, W83793_REG_PWM_UPTIME
);
1493 data
->pwm_downtime
= w83793_read_value(client
, W83793_REG_PWM_DOWNTIME
);
1494 data
->temp_critical
=
1495 w83793_read_value(client
, W83793_REG_TEMP_CRITICAL
);
1496 data
->beep_enable
= w83793_read_value(client
, W83793_REG_OVT_BEEP
);
1498 for (i
= 0; i
< ARRAY_SIZE(data
->beeps
); i
++) {
1499 data
->beeps
[i
] = w83793_read_value(client
, W83793_REG_BEEP(i
));
1502 data
->last_nonvolatile
= jiffies
;
1505 static struct w83793_data
*w83793_update_device(struct device
*dev
)
1507 struct i2c_client
*client
= to_i2c_client(dev
);
1508 struct w83793_data
*data
= i2c_get_clientdata(client
);
1511 mutex_lock(&data
->update_lock
);
1513 if (!(time_after(jiffies
, data
->last_updated
+ HZ
* 2)
1517 /* Update the voltages measured value and limits */
1518 for (i
= 0; i
< ARRAY_SIZE(data
->in
); i
++)
1519 data
->in
[i
][IN_READ
] =
1520 w83793_read_value(client
, W83793_REG_IN
[i
][IN_READ
]);
1522 data
->in_low_bits
[IN_READ
] =
1523 w83793_read_value(client
, W83793_REG_IN_LOW_BITS
[IN_READ
]);
1525 for (i
= 0; i
< ARRAY_SIZE(data
->fan
); i
++) {
1526 if (!(data
->has_fan
& (1 << i
))) {
1530 w83793_read_value(client
, W83793_REG_FAN(i
)) << 8;
1532 w83793_read_value(client
, W83793_REG_FAN(i
) + 1);
1535 for (i
= 0; i
< ARRAY_SIZE(data
->temp
); i
++) {
1536 if (!(data
->has_temp
& (1 << i
)))
1538 data
->temp
[i
][TEMP_READ
] =
1539 w83793_read_value(client
, W83793_REG_TEMP
[i
][TEMP_READ
]);
1542 data
->temp_low_bits
=
1543 w83793_read_value(client
, W83793_REG_TEMP_LOW_BITS
);
1545 for (i
= 0; i
< ARRAY_SIZE(data
->pwm
); i
++) {
1546 if (data
->has_pwm
& (1 << i
))
1547 data
->pwm
[i
][PWM_DUTY
] =
1548 w83793_read_value(client
,
1549 W83793_REG_PWM(i
, PWM_DUTY
));
1552 for (i
= 0; i
< ARRAY_SIZE(data
->alarms
); i
++)
1554 w83793_read_value(client
, W83793_REG_ALARM(i
));
1555 if (data
->has_vid
& 0x01)
1556 data
->vid
[0] = w83793_read_value(client
, W83793_REG_VID_INA
);
1557 if (data
->has_vid
& 0x02)
1558 data
->vid
[1] = w83793_read_value(client
, W83793_REG_VID_INB
);
1559 w83793_update_nonvolatile(dev
);
1560 data
->last_updated
= jiffies
;
1564 mutex_unlock(&data
->update_lock
);
1568 /* Ignore the possibility that somebody change bank outside the driver
1569 Must be called with data->update_lock held, except during initialization */
1570 static u8
w83793_read_value(struct i2c_client
*client
, u16 reg
)
1572 struct w83793_data
*data
= i2c_get_clientdata(client
);
1574 u8 new_bank
= reg
>> 8;
1576 new_bank
|= data
->bank
& 0xfc;
1577 if (data
->bank
!= new_bank
) {
1578 if (i2c_smbus_write_byte_data
1579 (client
, W83793_REG_BANKSEL
, new_bank
) >= 0)
1580 data
->bank
= new_bank
;
1582 dev_err(&client
->dev
,
1583 "set bank to %d failed, fall back "
1584 "to bank %d, read reg 0x%x error\n",
1585 new_bank
, data
->bank
, reg
);
1586 res
= 0x0; /* read 0x0 from the chip */
1590 res
= i2c_smbus_read_byte_data(client
, reg
& 0xff);
1595 /* Must be called with data->update_lock held, except during initialization */
1596 static int w83793_write_value(struct i2c_client
*client
, u16 reg
, u8 value
)
1598 struct w83793_data
*data
= i2c_get_clientdata(client
);
1600 u8 new_bank
= reg
>> 8;
1602 new_bank
|= data
->bank
& 0xfc;
1603 if (data
->bank
!= new_bank
) {
1604 if ((res
= i2c_smbus_write_byte_data
1605 (client
, W83793_REG_BANKSEL
, new_bank
)) >= 0)
1606 data
->bank
= new_bank
;
1608 dev_err(&client
->dev
,
1609 "set bank to %d failed, fall back "
1610 "to bank %d, write reg 0x%x error\n",
1611 new_bank
, data
->bank
, reg
);
1616 res
= i2c_smbus_write_byte_data(client
, reg
& 0xff, value
);
1621 static int __init
sensors_w83793_init(void)
1623 return i2c_add_driver(&w83793_driver
);
1626 static void __exit
sensors_w83793_exit(void)
1628 i2c_del_driver(&w83793_driver
);
1631 MODULE_AUTHOR("Yuan Mu");
1632 MODULE_DESCRIPTION("w83793 driver");
1633 MODULE_LICENSE("GPL");
1635 module_init(sensors_w83793_init
);
1636 module_exit(sensors_w83793_exit
);