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 */
44 I2C_CLIENT_INSMOD_1(w83793
);
45 I2C_CLIENT_MODULE_PARM(force_subclients
, "List of subclient addresses: "
46 "{bus, clientaddr, subclientaddr1, subclientaddr2}");
49 module_param(reset
, bool, 0);
50 MODULE_PARM_DESC(reset
, "Set to 1 to reset chip, not recommended");
53 Address 0x00, 0x0d, 0x0e, 0x0f in all three banks are reserved
54 as ID, Bank Select registers
56 #define W83793_REG_BANKSEL 0x00
57 #define W83793_REG_VENDORID 0x0d
58 #define W83793_REG_CHIPID 0x0e
59 #define W83793_REG_DEVICEID 0x0f
61 #define W83793_REG_CONFIG 0x40
62 #define W83793_REG_MFC 0x58
63 #define W83793_REG_FANIN_CTRL 0x5c
64 #define W83793_REG_FANIN_SEL 0x5d
65 #define W83793_REG_I2C_ADDR 0x0b
66 #define W83793_REG_I2C_SUBADDR 0x0c
67 #define W83793_REG_VID_INA 0x05
68 #define W83793_REG_VID_INB 0x06
69 #define W83793_REG_VID_LATCHA 0x07
70 #define W83793_REG_VID_LATCHB 0x08
71 #define W83793_REG_VID_CTRL 0x59
73 static u16 W83793_REG_TEMP_MODE
[2] = { 0x5e, 0x5f };
77 #define TEMP_CRIT_HYST 2
79 #define TEMP_WARN_HYST 4
80 /* only crit and crit_hyst affect real-time alarm status
81 current crit crit_hyst warn warn_hyst */
82 static u16 W83793_REG_TEMP
[][5] = {
83 {0x1c, 0x78, 0x79, 0x7a, 0x7b},
84 {0x1d, 0x7c, 0x7d, 0x7e, 0x7f},
85 {0x1e, 0x80, 0x81, 0x82, 0x83},
86 {0x1f, 0x84, 0x85, 0x86, 0x87},
87 {0x20, 0x88, 0x89, 0x8a, 0x8b},
88 {0x21, 0x8c, 0x8d, 0x8e, 0x8f},
91 #define W83793_REG_TEMP_LOW_BITS 0x22
93 #define W83793_REG_BEEP(index) (0x53 + (index))
94 #define W83793_REG_ALARM(index) (0x4b + (index))
96 #define W83793_REG_CLR_CHASSIS 0x4a /* SMI MASK4 */
97 #define W83793_REG_IRQ_CTRL 0x50
98 #define W83793_REG_OVT_CTRL 0x51
99 #define W83793_REG_OVT_BEEP 0x52
104 static const u16 W83793_REG_IN
[][3] = {
105 /* Current, High, Low */
106 {0x10, 0x60, 0x61}, /* Vcore A */
107 {0x11, 0x62, 0x63}, /* Vcore B */
108 {0x12, 0x64, 0x65}, /* Vtt */
109 {0x14, 0x6a, 0x6b}, /* VSEN1 */
110 {0x15, 0x6c, 0x6d}, /* VSEN2 */
111 {0x16, 0x6e, 0x6f}, /* +3VSEN */
112 {0x17, 0x70, 0x71}, /* +12VSEN */
113 {0x18, 0x72, 0x73}, /* 5VDD */
114 {0x19, 0x74, 0x75}, /* 5VSB */
115 {0x1a, 0x76, 0x77}, /* VBAT */
118 /* Low Bits of Vcore A/B Vtt Read/High/Low */
119 static const u16 W83793_REG_IN_LOW_BITS
[] = { 0x1b, 0x68, 0x69 };
120 static u8 scale_in
[] = { 2, 2, 2, 16, 16, 16, 8, 24, 24, 16 };
121 static u8 scale_in_add
[] = { 0, 0, 0, 0, 0, 0, 0, 150, 150, 0 };
123 #define W83793_REG_FAN(index) (0x23 + 2 * (index)) /* High byte */
124 #define W83793_REG_FAN_MIN(index) (0x90 + 2 * (index)) /* High byte */
126 #define W83793_REG_PWM_DEFAULT 0xb2
127 #define W83793_REG_PWM_ENABLE 0x207
128 #define W83793_REG_PWM_UPTIME 0xc3 /* Unit in 0.1 second */
129 #define W83793_REG_PWM_DOWNTIME 0xc4 /* Unit in 0.1 second */
130 #define W83793_REG_TEMP_CRITICAL 0xc5
134 #define PWM_NONSTOP 2
135 #define PWM_STOP_TIME 3
136 #define W83793_REG_PWM(index, nr) (((nr) == 0 ? 0xb3 : \
137 (nr) == 1 ? 0x220 : 0x218) + (index))
139 /* bit field, fan1 is bit0, fan2 is bit1 ... */
140 #define W83793_REG_TEMP_FAN_MAP(index) (0x201 + (index))
141 #define W83793_REG_TEMP_TOL(index) (0x208 + (index))
142 #define W83793_REG_TEMP_CRUISE(index) (0x210 + (index))
143 #define W83793_REG_PWM_STOP_TIME(index) (0x228 + (index))
144 #define W83793_REG_SF2_TEMP(index, nr) (0x230 + ((index) << 4) + (nr))
145 #define W83793_REG_SF2_PWM(index, nr) (0x238 + ((index) << 4) + (nr))
147 static inline unsigned long FAN_FROM_REG(u16 val
)
149 if ((val
>= 0xfff) || (val
== 0))
151 return (1350000UL / val
);
154 static inline u16
FAN_TO_REG(long rpm
)
158 return SENSORS_LIMIT((1350000 + (rpm
>> 1)) / rpm
, 1, 0xffe);
161 static inline unsigned long TIME_FROM_REG(u8 reg
)
166 static inline u8
TIME_TO_REG(unsigned long val
)
168 return SENSORS_LIMIT((val
+ 50) / 100, 0, 0xff);
171 static inline long TEMP_FROM_REG(s8 reg
)
176 static inline s8
TEMP_TO_REG(long val
, s8 min
, s8 max
)
178 return SENSORS_LIMIT((val
+ (val
< 0 ? -500 : 500)) / 1000, min
, max
);
182 struct i2c_client
*lm75
[2];
183 struct device
*hwmon_dev
;
184 struct mutex update_lock
;
185 char valid
; /* !=0 if following fields are valid */
186 unsigned long last_updated
; /* In jiffies */
187 unsigned long last_nonvolatile
; /* In jiffies, last time we update the
188 nonvolatile registers */
193 u8 in
[10][3]; /* Register value, read/high/low */
194 u8 in_low_bits
[3]; /* Additional resolution for VCore A/B Vtt */
196 u16 has_fan
; /* Only fan1- fan5 has own pins */
197 u16 fan
[12]; /* Register value combine */
198 u16 fan_min
[12]; /* Register value combine */
200 s8 temp
[6][5]; /* current, crit, crit_hyst,warn, warn_hyst */
201 u8 temp_low_bits
; /* Additional resolution TD1-TD4 */
202 u8 temp_mode
[2]; /* byte 0: Temp D1-D4 mode each has 2 bits
203 byte 1: Temp R1,R2 mode, each has 1 bit */
204 u8 temp_critical
; /* If reached all fan will be at full speed */
205 u8 temp_fan_map
[6]; /* Temp controls which pwm fan, bit field */
210 u8 pwm_enable
; /* Register value, each Temp has 1 bit */
211 u8 pwm_uptime
; /* Register value */
212 u8 pwm_downtime
; /* Register value */
213 u8 pwm_default
; /* All fan default pwm, next poweron valid */
214 u8 pwm
[8][3]; /* Register value */
218 u8 alarms
[5]; /* realtime status registers */
221 u8 tolerance
[3]; /* Temp tolerance(Smart Fan I/II) */
222 u8 sf2_pwm
[6][7]; /* Smart FanII: Fan duty cycle */
223 u8 sf2_temp
[6][7]; /* Smart FanII: Temp level point */
226 static u8
w83793_read_value(struct i2c_client
*client
, u16 reg
);
227 static int w83793_write_value(struct i2c_client
*client
, u16 reg
, u8 value
);
228 static int w83793_probe(struct i2c_client
*client
,
229 const struct i2c_device_id
*id
);
230 static int w83793_detect(struct i2c_client
*client
, int kind
,
231 struct i2c_board_info
*info
);
232 static int w83793_remove(struct i2c_client
*client
);
233 static void w83793_init_client(struct i2c_client
*client
);
234 static void w83793_update_nonvolatile(struct device
*dev
);
235 static struct w83793_data
*w83793_update_device(struct device
*dev
);
237 static const struct i2c_device_id w83793_id
[] = {
238 { "w83793", w83793
},
241 MODULE_DEVICE_TABLE(i2c
, w83793_id
);
243 static struct i2c_driver w83793_driver
= {
244 .class = I2C_CLASS_HWMON
,
248 .probe
= w83793_probe
,
249 .remove
= w83793_remove
,
250 .id_table
= w83793_id
,
251 .detect
= w83793_detect
,
252 .address_data
= &addr_data
,
256 show_vrm(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
258 struct w83793_data
*data
= dev_get_drvdata(dev
);
259 return sprintf(buf
, "%d\n", data
->vrm
);
263 show_vid(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
265 struct w83793_data
*data
= w83793_update_device(dev
);
266 struct sensor_device_attribute_2
*sensor_attr
=
267 to_sensor_dev_attr_2(attr
);
268 int index
= sensor_attr
->index
;
270 return sprintf(buf
, "%d\n", vid_from_reg(data
->vid
[index
], data
->vrm
));
274 store_vrm(struct device
*dev
, struct device_attribute
*attr
,
275 const char *buf
, size_t count
)
277 struct w83793_data
*data
= dev_get_drvdata(dev
);
278 data
->vrm
= simple_strtoul(buf
, NULL
, 10);
282 #define ALARM_STATUS 0
283 #define BEEP_ENABLE 1
285 show_alarm_beep(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
287 struct w83793_data
*data
= w83793_update_device(dev
);
288 struct sensor_device_attribute_2
*sensor_attr
=
289 to_sensor_dev_attr_2(attr
);
290 int nr
= sensor_attr
->nr
;
291 int index
= sensor_attr
->index
>> 3;
292 int bit
= sensor_attr
->index
& 0x07;
295 if (ALARM_STATUS
== nr
) {
296 val
= (data
->alarms
[index
] >> (bit
)) & 1;
297 } else { /* BEEP_ENABLE */
298 val
= (data
->beeps
[index
] >> (bit
)) & 1;
301 return sprintf(buf
, "%u\n", val
);
305 store_beep(struct device
*dev
, struct device_attribute
*attr
,
306 const char *buf
, size_t count
)
308 struct i2c_client
*client
= to_i2c_client(dev
);
309 struct w83793_data
*data
= i2c_get_clientdata(client
);
310 struct sensor_device_attribute_2
*sensor_attr
=
311 to_sensor_dev_attr_2(attr
);
312 int index
= sensor_attr
->index
>> 3;
313 int shift
= sensor_attr
->index
& 0x07;
314 u8 beep_bit
= 1 << shift
;
317 val
= simple_strtoul(buf
, NULL
, 10);
318 if (val
!= 0 && val
!= 1)
321 mutex_lock(&data
->update_lock
);
322 data
->beeps
[index
] = w83793_read_value(client
, W83793_REG_BEEP(index
));
323 data
->beeps
[index
] &= ~beep_bit
;
324 data
->beeps
[index
] |= val
<< shift
;
325 w83793_write_value(client
, W83793_REG_BEEP(index
), data
->beeps
[index
]);
326 mutex_unlock(&data
->update_lock
);
332 show_beep_enable(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
334 struct w83793_data
*data
= w83793_update_device(dev
);
335 return sprintf(buf
, "%u\n", (data
->beep_enable
>> 1) & 0x01);
339 store_beep_enable(struct device
*dev
, struct device_attribute
*attr
,
340 const char *buf
, size_t count
)
342 struct i2c_client
*client
= to_i2c_client(dev
);
343 struct w83793_data
*data
= i2c_get_clientdata(client
);
344 u8 val
= simple_strtoul(buf
, NULL
, 10);
346 if (val
!= 0 && val
!= 1)
349 mutex_lock(&data
->update_lock
);
350 data
->beep_enable
= w83793_read_value(client
, W83793_REG_OVT_BEEP
)
352 data
->beep_enable
|= val
<< 1;
353 w83793_write_value(client
, W83793_REG_OVT_BEEP
, data
->beep_enable
);
354 mutex_unlock(&data
->update_lock
);
359 /* Write any value to clear chassis alarm */
361 store_chassis_clear(struct device
*dev
,
362 struct device_attribute
*attr
, const char *buf
,
365 struct i2c_client
*client
= to_i2c_client(dev
);
366 struct w83793_data
*data
= i2c_get_clientdata(client
);
369 mutex_lock(&data
->update_lock
);
370 val
= w83793_read_value(client
, W83793_REG_CLR_CHASSIS
);
372 w83793_write_value(client
, W83793_REG_CLR_CHASSIS
, val
);
373 mutex_unlock(&data
->update_lock
);
380 show_fan(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
382 struct sensor_device_attribute_2
*sensor_attr
=
383 to_sensor_dev_attr_2(attr
);
384 int nr
= sensor_attr
->nr
;
385 int index
= sensor_attr
->index
;
386 struct w83793_data
*data
= w83793_update_device(dev
);
389 if (FAN_INPUT
== nr
) {
390 val
= data
->fan
[index
] & 0x0fff;
392 val
= data
->fan_min
[index
] & 0x0fff;
395 return sprintf(buf
, "%lu\n", FAN_FROM_REG(val
));
399 store_fan_min(struct device
*dev
, struct device_attribute
*attr
,
400 const char *buf
, size_t count
)
402 struct sensor_device_attribute_2
*sensor_attr
=
403 to_sensor_dev_attr_2(attr
);
404 int index
= sensor_attr
->index
;
405 struct i2c_client
*client
= to_i2c_client(dev
);
406 struct w83793_data
*data
= i2c_get_clientdata(client
);
407 u16 val
= FAN_TO_REG(simple_strtoul(buf
, NULL
, 10));
409 mutex_lock(&data
->update_lock
);
410 data
->fan_min
[index
] = val
;
411 w83793_write_value(client
, W83793_REG_FAN_MIN(index
),
413 w83793_write_value(client
, W83793_REG_FAN_MIN(index
) + 1, val
& 0xff);
414 mutex_unlock(&data
->update_lock
);
420 show_pwm(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
422 struct sensor_device_attribute_2
*sensor_attr
=
423 to_sensor_dev_attr_2(attr
);
424 struct w83793_data
*data
= w83793_update_device(dev
);
426 int nr
= sensor_attr
->nr
;
427 int index
= sensor_attr
->index
;
429 if (PWM_STOP_TIME
== nr
)
430 val
= TIME_FROM_REG(data
->pwm_stop_time
[index
]);
432 val
= (data
->pwm
[index
][nr
] & 0x3f) << 2;
434 return sprintf(buf
, "%d\n", val
);
438 store_pwm(struct device
*dev
, struct device_attribute
*attr
,
439 const char *buf
, size_t count
)
441 struct i2c_client
*client
= to_i2c_client(dev
);
442 struct w83793_data
*data
= i2c_get_clientdata(client
);
443 struct sensor_device_attribute_2
*sensor_attr
=
444 to_sensor_dev_attr_2(attr
);
445 int nr
= sensor_attr
->nr
;
446 int index
= sensor_attr
->index
;
449 mutex_lock(&data
->update_lock
);
450 if (PWM_STOP_TIME
== nr
) {
451 val
= TIME_TO_REG(simple_strtoul(buf
, NULL
, 10));
452 data
->pwm_stop_time
[index
] = val
;
453 w83793_write_value(client
, W83793_REG_PWM_STOP_TIME(index
),
456 val
= SENSORS_LIMIT(simple_strtoul(buf
, NULL
, 10), 0, 0xff)
458 data
->pwm
[index
][nr
] =
459 w83793_read_value(client
, W83793_REG_PWM(index
, nr
)) & 0xc0;
460 data
->pwm
[index
][nr
] |= val
;
461 w83793_write_value(client
, W83793_REG_PWM(index
, nr
),
462 data
->pwm
[index
][nr
]);
465 mutex_unlock(&data
->update_lock
);
470 show_temp(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
472 struct sensor_device_attribute_2
*sensor_attr
=
473 to_sensor_dev_attr_2(attr
);
474 int nr
= sensor_attr
->nr
;
475 int index
= sensor_attr
->index
;
476 struct w83793_data
*data
= w83793_update_device(dev
);
477 long temp
= TEMP_FROM_REG(data
->temp
[index
][nr
]);
479 if (TEMP_READ
== nr
&& index
< 4) { /* Only TD1-TD4 have low bits */
480 int low
= ((data
->temp_low_bits
>> (index
* 2)) & 0x03) * 250;
481 temp
+= temp
> 0 ? low
: -low
;
483 return sprintf(buf
, "%ld\n", temp
);
487 store_temp(struct device
*dev
, struct device_attribute
*attr
,
488 const char *buf
, size_t count
)
490 struct sensor_device_attribute_2
*sensor_attr
=
491 to_sensor_dev_attr_2(attr
);
492 int nr
= sensor_attr
->nr
;
493 int index
= sensor_attr
->index
;
494 struct i2c_client
*client
= to_i2c_client(dev
);
495 struct w83793_data
*data
= i2c_get_clientdata(client
);
496 long tmp
= simple_strtol(buf
, NULL
, 10);
498 mutex_lock(&data
->update_lock
);
499 data
->temp
[index
][nr
] = TEMP_TO_REG(tmp
, -128, 127);
500 w83793_write_value(client
, W83793_REG_TEMP
[index
][nr
],
501 data
->temp
[index
][nr
]);
502 mutex_unlock(&data
->update_lock
);
508 each has 4 mode:(2 bits)
510 1: Use internal temp sensor(default)
512 3: Use sensor in Intel CPU and get result by PECI
515 each has 2 mode:(1 bit)
516 0: Disable temp sensor monitor
517 1: To enable temp sensors monitor
520 /* 0 disable, 6 PECI */
521 static u8 TO_TEMP_MODE
[] = { 0, 0, 0, 6 };
524 show_temp_mode(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
526 struct w83793_data
*data
= w83793_update_device(dev
);
527 struct sensor_device_attribute_2
*sensor_attr
=
528 to_sensor_dev_attr_2(attr
);
529 int index
= sensor_attr
->index
;
530 u8 mask
= (index
< 4) ? 0x03 : 0x01;
531 u8 shift
= (index
< 4) ? (2 * index
) : (index
- 4);
533 index
= (index
< 4) ? 0 : 1;
535 tmp
= (data
->temp_mode
[index
] >> shift
) & mask
;
537 /* for the internal sensor, found out if diode or thermistor */
539 tmp
= index
== 0 ? 3 : 4;
541 tmp
= TO_TEMP_MODE
[tmp
];
544 return sprintf(buf
, "%d\n", tmp
);
548 store_temp_mode(struct device
*dev
, struct device_attribute
*attr
,
549 const char *buf
, size_t count
)
551 struct i2c_client
*client
= to_i2c_client(dev
);
552 struct w83793_data
*data
= i2c_get_clientdata(client
);
553 struct sensor_device_attribute_2
*sensor_attr
=
554 to_sensor_dev_attr_2(attr
);
555 int index
= sensor_attr
->index
;
556 u8 mask
= (index
< 4) ? 0x03 : 0x01;
557 u8 shift
= (index
< 4) ? (2 * index
) : (index
- 4);
558 u8 val
= simple_strtoul(buf
, NULL
, 10);
560 /* transform the sysfs interface values into table above */
561 if ((val
== 6) && (index
< 4)) {
563 } else if ((val
== 3 && index
< 4)
564 || (val
== 4 && index
>= 4)) {
565 /* transform diode or thermistor into internal enable */
571 index
= (index
< 4) ? 0 : 1;
572 mutex_lock(&data
->update_lock
);
573 data
->temp_mode
[index
] =
574 w83793_read_value(client
, W83793_REG_TEMP_MODE
[index
]);
575 data
->temp_mode
[index
] &= ~(mask
<< shift
);
576 data
->temp_mode
[index
] |= val
<< shift
;
577 w83793_write_value(client
, W83793_REG_TEMP_MODE
[index
],
578 data
->temp_mode
[index
]);
579 mutex_unlock(&data
->update_lock
);
584 #define SETUP_PWM_DEFAULT 0
585 #define SETUP_PWM_UPTIME 1 /* Unit in 0.1s */
586 #define SETUP_PWM_DOWNTIME 2 /* Unit in 0.1s */
587 #define SETUP_TEMP_CRITICAL 3
589 show_sf_setup(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
591 struct sensor_device_attribute_2
*sensor_attr
=
592 to_sensor_dev_attr_2(attr
);
593 int nr
= sensor_attr
->nr
;
594 struct w83793_data
*data
= w83793_update_device(dev
);
597 if (SETUP_PWM_DEFAULT
== nr
) {
598 val
= (data
->pwm_default
& 0x3f) << 2;
599 } else if (SETUP_PWM_UPTIME
== nr
) {
600 val
= TIME_FROM_REG(data
->pwm_uptime
);
601 } else if (SETUP_PWM_DOWNTIME
== nr
) {
602 val
= TIME_FROM_REG(data
->pwm_downtime
);
603 } else if (SETUP_TEMP_CRITICAL
== nr
) {
604 val
= TEMP_FROM_REG(data
->temp_critical
& 0x7f);
607 return sprintf(buf
, "%d\n", val
);
611 store_sf_setup(struct device
*dev
, struct device_attribute
*attr
,
612 const char *buf
, size_t count
)
614 struct sensor_device_attribute_2
*sensor_attr
=
615 to_sensor_dev_attr_2(attr
);
616 int nr
= sensor_attr
->nr
;
617 struct i2c_client
*client
= to_i2c_client(dev
);
618 struct w83793_data
*data
= i2c_get_clientdata(client
);
620 mutex_lock(&data
->update_lock
);
621 if (SETUP_PWM_DEFAULT
== nr
) {
623 w83793_read_value(client
, W83793_REG_PWM_DEFAULT
) & 0xc0;
624 data
->pwm_default
|= SENSORS_LIMIT(simple_strtoul(buf
, NULL
,
627 w83793_write_value(client
, W83793_REG_PWM_DEFAULT
,
629 } else if (SETUP_PWM_UPTIME
== nr
) {
630 data
->pwm_uptime
= TIME_TO_REG(simple_strtoul(buf
, NULL
, 10));
631 data
->pwm_uptime
+= data
->pwm_uptime
== 0 ? 1 : 0;
632 w83793_write_value(client
, W83793_REG_PWM_UPTIME
,
634 } else if (SETUP_PWM_DOWNTIME
== nr
) {
635 data
->pwm_downtime
= TIME_TO_REG(simple_strtoul(buf
, NULL
, 10));
636 data
->pwm_downtime
+= data
->pwm_downtime
== 0 ? 1 : 0;
637 w83793_write_value(client
, W83793_REG_PWM_DOWNTIME
,
639 } else { /* SETUP_TEMP_CRITICAL */
640 data
->temp_critical
=
641 w83793_read_value(client
, W83793_REG_TEMP_CRITICAL
) & 0x80;
642 data
->temp_critical
|= TEMP_TO_REG(simple_strtol(buf
, NULL
, 10),
644 w83793_write_value(client
, W83793_REG_TEMP_CRITICAL
,
645 data
->temp_critical
);
648 mutex_unlock(&data
->update_lock
);
653 Temp SmartFan control
655 Temp channel control which pwm fan, bitfield, bit 0 indicate pwm1...
656 It's possible two or more temp channels control the same fan, w83793
657 always prefers to pick the most critical request and applies it to
659 It's possible one fan is not in any mapping of 6 temp channels, this
660 means the fan is manual mode
663 Each temp channel has its own SmartFan mode, and temp channel
664 control fans that are set by TEMP_FAN_MAP
666 1: Thermal Cruise Mode
669 Target temperature in thermal cruise mode, w83793 will try to turn
670 fan speed to keep the temperature of target device around this
674 If Temp higher or lower than target with this tolerance, w83793
675 will take actions to speed up or slow down the fan to keep the
676 temperature within the tolerance range.
679 #define TEMP_FAN_MAP 0
680 #define TEMP_PWM_ENABLE 1
681 #define TEMP_CRUISE 2
682 #define TEMP_TOLERANCE 3
684 show_sf_ctrl(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
686 struct sensor_device_attribute_2
*sensor_attr
=
687 to_sensor_dev_attr_2(attr
);
688 int nr
= sensor_attr
->nr
;
689 int index
= sensor_attr
->index
;
690 struct w83793_data
*data
= w83793_update_device(dev
);
693 if (TEMP_FAN_MAP
== nr
) {
694 val
= data
->temp_fan_map
[index
];
695 } else if (TEMP_PWM_ENABLE
== nr
) {
696 /* +2 to transfrom into 2 and 3 to conform with sysfs intf */
697 val
= ((data
->pwm_enable
>> index
) & 0x01) + 2;
698 } else if (TEMP_CRUISE
== nr
) {
699 val
= TEMP_FROM_REG(data
->temp_cruise
[index
] & 0x7f);
700 } else { /* TEMP_TOLERANCE */
701 val
= data
->tolerance
[index
>> 1] >> ((index
& 0x01) ? 4 : 0);
702 val
= TEMP_FROM_REG(val
& 0x0f);
704 return sprintf(buf
, "%d\n", val
);
708 store_sf_ctrl(struct device
*dev
, struct device_attribute
*attr
,
709 const char *buf
, size_t count
)
711 struct sensor_device_attribute_2
*sensor_attr
=
712 to_sensor_dev_attr_2(attr
);
713 int nr
= sensor_attr
->nr
;
714 int index
= sensor_attr
->index
;
715 struct i2c_client
*client
= to_i2c_client(dev
);
716 struct w83793_data
*data
= i2c_get_clientdata(client
);
719 mutex_lock(&data
->update_lock
);
720 if (TEMP_FAN_MAP
== nr
) {
721 val
= simple_strtoul(buf
, NULL
, 10) & 0xff;
722 w83793_write_value(client
, W83793_REG_TEMP_FAN_MAP(index
), val
);
723 data
->temp_fan_map
[index
] = val
;
724 } else if (TEMP_PWM_ENABLE
== nr
) {
725 val
= simple_strtoul(buf
, NULL
, 10);
726 if (2 == val
|| 3 == val
) {
728 w83793_read_value(client
, W83793_REG_PWM_ENABLE
);
730 data
->pwm_enable
|= 1 << index
;
732 data
->pwm_enable
&= ~(1 << index
);
733 w83793_write_value(client
, W83793_REG_PWM_ENABLE
,
736 mutex_unlock(&data
->update_lock
);
739 } else if (TEMP_CRUISE
== nr
) {
740 data
->temp_cruise
[index
] =
741 w83793_read_value(client
, W83793_REG_TEMP_CRUISE(index
));
742 val
= TEMP_TO_REG(simple_strtol(buf
, NULL
, 10), 0, 0x7f);
743 data
->temp_cruise
[index
] &= 0x80;
744 data
->temp_cruise
[index
] |= val
;
746 w83793_write_value(client
, W83793_REG_TEMP_CRUISE(index
),
747 data
->temp_cruise
[index
]);
748 } else { /* TEMP_TOLERANCE */
750 u8 shift
= (index
& 0x01) ? 4 : 0;
752 w83793_read_value(client
, W83793_REG_TEMP_TOL(i
));
754 val
= TEMP_TO_REG(simple_strtol(buf
, NULL
, 10), 0, 0x0f);
755 data
->tolerance
[i
] &= ~(0x0f << shift
);
756 data
->tolerance
[i
] |= val
<< shift
;
757 w83793_write_value(client
, W83793_REG_TEMP_TOL(i
),
761 mutex_unlock(&data
->update_lock
);
766 show_sf2_pwm(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
768 struct sensor_device_attribute_2
*sensor_attr
=
769 to_sensor_dev_attr_2(attr
);
770 int nr
= sensor_attr
->nr
;
771 int index
= sensor_attr
->index
;
772 struct w83793_data
*data
= w83793_update_device(dev
);
774 return sprintf(buf
, "%d\n", (data
->sf2_pwm
[index
][nr
] & 0x3f) << 2);
778 store_sf2_pwm(struct device
*dev
, struct device_attribute
*attr
,
779 const char *buf
, size_t count
)
781 struct i2c_client
*client
= to_i2c_client(dev
);
782 struct w83793_data
*data
= i2c_get_clientdata(client
);
783 struct sensor_device_attribute_2
*sensor_attr
=
784 to_sensor_dev_attr_2(attr
);
785 int nr
= sensor_attr
->nr
;
786 int index
= sensor_attr
->index
;
787 u8 val
= SENSORS_LIMIT(simple_strtoul(buf
, NULL
, 10), 0, 0xff) >> 2;
789 mutex_lock(&data
->update_lock
);
790 data
->sf2_pwm
[index
][nr
] =
791 w83793_read_value(client
, W83793_REG_SF2_PWM(index
, nr
)) & 0xc0;
792 data
->sf2_pwm
[index
][nr
] |= val
;
793 w83793_write_value(client
, W83793_REG_SF2_PWM(index
, nr
),
794 data
->sf2_pwm
[index
][nr
]);
795 mutex_unlock(&data
->update_lock
);
800 show_sf2_temp(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
802 struct sensor_device_attribute_2
*sensor_attr
=
803 to_sensor_dev_attr_2(attr
);
804 int nr
= sensor_attr
->nr
;
805 int index
= sensor_attr
->index
;
806 struct w83793_data
*data
= w83793_update_device(dev
);
808 return sprintf(buf
, "%ld\n",
809 TEMP_FROM_REG(data
->sf2_temp
[index
][nr
] & 0x7f));
813 store_sf2_temp(struct device
*dev
, struct device_attribute
*attr
,
814 const char *buf
, size_t count
)
816 struct i2c_client
*client
= to_i2c_client(dev
);
817 struct w83793_data
*data
= i2c_get_clientdata(client
);
818 struct sensor_device_attribute_2
*sensor_attr
=
819 to_sensor_dev_attr_2(attr
);
820 int nr
= sensor_attr
->nr
;
821 int index
= sensor_attr
->index
;
822 u8 val
= TEMP_TO_REG(simple_strtol(buf
, NULL
, 10), 0, 0x7f);
824 mutex_lock(&data
->update_lock
);
825 data
->sf2_temp
[index
][nr
] =
826 w83793_read_value(client
, W83793_REG_SF2_TEMP(index
, nr
)) & 0x80;
827 data
->sf2_temp
[index
][nr
] |= val
;
828 w83793_write_value(client
, W83793_REG_SF2_TEMP(index
, nr
),
829 data
->sf2_temp
[index
][nr
]);
830 mutex_unlock(&data
->update_lock
);
834 /* only Vcore A/B and Vtt have additional 2 bits precision */
836 show_in(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
838 struct sensor_device_attribute_2
*sensor_attr
=
839 to_sensor_dev_attr_2(attr
);
840 int nr
= sensor_attr
->nr
;
841 int index
= sensor_attr
->index
;
842 struct w83793_data
*data
= w83793_update_device(dev
);
843 u16 val
= data
->in
[index
][nr
];
847 val
+= (data
->in_low_bits
[nr
] >> (index
* 2)) & 0x3;
849 /* voltage inputs 5VDD and 5VSB needs 150mV offset */
850 val
= val
* scale_in
[index
] + scale_in_add
[index
];
851 return sprintf(buf
, "%d\n", val
);
855 store_in(struct device
*dev
, struct device_attribute
*attr
,
856 const char *buf
, size_t count
)
858 struct sensor_device_attribute_2
*sensor_attr
=
859 to_sensor_dev_attr_2(attr
);
860 int nr
= sensor_attr
->nr
;
861 int index
= sensor_attr
->index
;
862 struct i2c_client
*client
= to_i2c_client(dev
);
863 struct w83793_data
*data
= i2c_get_clientdata(client
);
867 (simple_strtoul(buf
, NULL
, 10) +
868 scale_in
[index
] / 2) / scale_in
[index
];
869 mutex_lock(&data
->update_lock
);
871 /* fix the limit values of 5VDD and 5VSB to ALARM mechanism */
872 if (1 == nr
|| 2 == nr
) {
873 val
-= scale_in_add
[index
] / scale_in
[index
];
875 val
= SENSORS_LIMIT(val
, 0, 255);
877 val
= SENSORS_LIMIT(val
, 0, 0x3FF);
878 data
->in_low_bits
[nr
] =
879 w83793_read_value(client
, W83793_REG_IN_LOW_BITS
[nr
]);
880 data
->in_low_bits
[nr
] &= ~(0x03 << (2 * index
));
881 data
->in_low_bits
[nr
] |= (val
& 0x03) << (2 * index
);
882 w83793_write_value(client
, W83793_REG_IN_LOW_BITS
[nr
],
883 data
->in_low_bits
[nr
]);
886 data
->in
[index
][nr
] = val
;
887 w83793_write_value(client
, W83793_REG_IN
[index
][nr
],
888 data
->in
[index
][nr
]);
889 mutex_unlock(&data
->update_lock
);
895 #define SENSOR_ATTR_IN(index) \
896 SENSOR_ATTR_2(in##index##_input, S_IRUGO, show_in, NULL, \
898 SENSOR_ATTR_2(in##index##_max, S_IRUGO | S_IWUSR, show_in, \
899 store_in, IN_MAX, index), \
900 SENSOR_ATTR_2(in##index##_min, S_IRUGO | S_IWUSR, show_in, \
901 store_in, IN_LOW, index), \
902 SENSOR_ATTR_2(in##index##_alarm, S_IRUGO, show_alarm_beep, \
903 NULL, ALARM_STATUS, index + ((index > 2) ? 1 : 0)), \
904 SENSOR_ATTR_2(in##index##_beep, S_IWUSR | S_IRUGO, \
905 show_alarm_beep, store_beep, BEEP_ENABLE, \
906 index + ((index > 2) ? 1 : 0))
908 #define SENSOR_ATTR_FAN(index) \
909 SENSOR_ATTR_2(fan##index##_alarm, S_IRUGO, show_alarm_beep, \
910 NULL, ALARM_STATUS, index + 17), \
911 SENSOR_ATTR_2(fan##index##_beep, S_IWUSR | S_IRUGO, \
912 show_alarm_beep, store_beep, BEEP_ENABLE, index + 17), \
913 SENSOR_ATTR_2(fan##index##_input, S_IRUGO, show_fan, \
914 NULL, FAN_INPUT, index - 1), \
915 SENSOR_ATTR_2(fan##index##_min, S_IWUSR | S_IRUGO, \
916 show_fan, store_fan_min, FAN_MIN, index - 1)
918 #define SENSOR_ATTR_PWM(index) \
919 SENSOR_ATTR_2(pwm##index, S_IWUSR | S_IRUGO, show_pwm, \
920 store_pwm, PWM_DUTY, index - 1), \
921 SENSOR_ATTR_2(pwm##index##_nonstop, S_IWUSR | S_IRUGO, \
922 show_pwm, store_pwm, PWM_NONSTOP, index - 1), \
923 SENSOR_ATTR_2(pwm##index##_start, S_IWUSR | S_IRUGO, \
924 show_pwm, store_pwm, PWM_START, index - 1), \
925 SENSOR_ATTR_2(pwm##index##_stop_time, S_IWUSR | S_IRUGO, \
926 show_pwm, store_pwm, PWM_STOP_TIME, index - 1)
928 #define SENSOR_ATTR_TEMP(index) \
929 SENSOR_ATTR_2(temp##index##_type, S_IRUGO | S_IWUSR, \
930 show_temp_mode, store_temp_mode, NOT_USED, index - 1), \
931 SENSOR_ATTR_2(temp##index##_input, S_IRUGO, show_temp, \
932 NULL, TEMP_READ, index - 1), \
933 SENSOR_ATTR_2(temp##index##_max, S_IRUGO | S_IWUSR, show_temp, \
934 store_temp, TEMP_CRIT, index - 1), \
935 SENSOR_ATTR_2(temp##index##_max_hyst, S_IRUGO | S_IWUSR, \
936 show_temp, store_temp, TEMP_CRIT_HYST, index - 1), \
937 SENSOR_ATTR_2(temp##index##_warn, S_IRUGO | S_IWUSR, show_temp, \
938 store_temp, TEMP_WARN, index - 1), \
939 SENSOR_ATTR_2(temp##index##_warn_hyst, S_IRUGO | S_IWUSR, \
940 show_temp, store_temp, TEMP_WARN_HYST, index - 1), \
941 SENSOR_ATTR_2(temp##index##_alarm, S_IRUGO, \
942 show_alarm_beep, NULL, ALARM_STATUS, index + 11), \
943 SENSOR_ATTR_2(temp##index##_beep, S_IWUSR | S_IRUGO, \
944 show_alarm_beep, store_beep, BEEP_ENABLE, index + 11), \
945 SENSOR_ATTR_2(temp##index##_auto_channels_pwm, \
946 S_IRUGO | S_IWUSR, show_sf_ctrl, store_sf_ctrl, \
947 TEMP_FAN_MAP, index - 1), \
948 SENSOR_ATTR_2(temp##index##_pwm_enable, S_IWUSR | S_IRUGO, \
949 show_sf_ctrl, store_sf_ctrl, TEMP_PWM_ENABLE, \
951 SENSOR_ATTR_2(thermal_cruise##index, S_IRUGO | S_IWUSR, \
952 show_sf_ctrl, store_sf_ctrl, TEMP_CRUISE, index - 1), \
953 SENSOR_ATTR_2(tolerance##index, S_IRUGO | S_IWUSR, show_sf_ctrl,\
954 store_sf_ctrl, TEMP_TOLERANCE, index - 1), \
955 SENSOR_ATTR_2(temp##index##_auto_point1_pwm, S_IRUGO | S_IWUSR, \
956 show_sf2_pwm, store_sf2_pwm, 0, index - 1), \
957 SENSOR_ATTR_2(temp##index##_auto_point2_pwm, S_IRUGO | S_IWUSR, \
958 show_sf2_pwm, store_sf2_pwm, 1, index - 1), \
959 SENSOR_ATTR_2(temp##index##_auto_point3_pwm, S_IRUGO | S_IWUSR, \
960 show_sf2_pwm, store_sf2_pwm, 2, index - 1), \
961 SENSOR_ATTR_2(temp##index##_auto_point4_pwm, S_IRUGO | S_IWUSR, \
962 show_sf2_pwm, store_sf2_pwm, 3, index - 1), \
963 SENSOR_ATTR_2(temp##index##_auto_point5_pwm, S_IRUGO | S_IWUSR, \
964 show_sf2_pwm, store_sf2_pwm, 4, index - 1), \
965 SENSOR_ATTR_2(temp##index##_auto_point6_pwm, S_IRUGO | S_IWUSR, \
966 show_sf2_pwm, store_sf2_pwm, 5, index - 1), \
967 SENSOR_ATTR_2(temp##index##_auto_point7_pwm, S_IRUGO | S_IWUSR, \
968 show_sf2_pwm, store_sf2_pwm, 6, index - 1), \
969 SENSOR_ATTR_2(temp##index##_auto_point1_temp, S_IRUGO | S_IWUSR,\
970 show_sf2_temp, store_sf2_temp, 0, index - 1), \
971 SENSOR_ATTR_2(temp##index##_auto_point2_temp, S_IRUGO | S_IWUSR,\
972 show_sf2_temp, store_sf2_temp, 1, index - 1), \
973 SENSOR_ATTR_2(temp##index##_auto_point3_temp, S_IRUGO | S_IWUSR,\
974 show_sf2_temp, store_sf2_temp, 2, index - 1), \
975 SENSOR_ATTR_2(temp##index##_auto_point4_temp, S_IRUGO | S_IWUSR,\
976 show_sf2_temp, store_sf2_temp, 3, index - 1), \
977 SENSOR_ATTR_2(temp##index##_auto_point5_temp, S_IRUGO | S_IWUSR,\
978 show_sf2_temp, store_sf2_temp, 4, index - 1), \
979 SENSOR_ATTR_2(temp##index##_auto_point6_temp, S_IRUGO | S_IWUSR,\
980 show_sf2_temp, store_sf2_temp, 5, index - 1), \
981 SENSOR_ATTR_2(temp##index##_auto_point7_temp, S_IRUGO | S_IWUSR,\
982 show_sf2_temp, store_sf2_temp, 6, index - 1)
984 static struct sensor_device_attribute_2 w83793_sensor_attr_2
[] = {
1005 static struct sensor_device_attribute_2 w83793_temp
[] = {
1006 SENSOR_ATTR_TEMP(1),
1007 SENSOR_ATTR_TEMP(2),
1008 SENSOR_ATTR_TEMP(3),
1009 SENSOR_ATTR_TEMP(4),
1010 SENSOR_ATTR_TEMP(5),
1011 SENSOR_ATTR_TEMP(6),
1015 static struct sensor_device_attribute_2 w83793_left_fan
[] = {
1020 SENSOR_ATTR_FAN(10),
1021 SENSOR_ATTR_FAN(11),
1022 SENSOR_ATTR_FAN(12),
1026 static struct sensor_device_attribute_2 w83793_left_pwm
[] = {
1034 static struct sensor_device_attribute_2 w83793_vid
[] = {
1035 SENSOR_ATTR_2(cpu0_vid
, S_IRUGO
, show_vid
, NULL
, NOT_USED
, 0),
1036 SENSOR_ATTR_2(cpu1_vid
, S_IRUGO
, show_vid
, NULL
, NOT_USED
, 1),
1038 static DEVICE_ATTR(vrm
, S_IWUSR
| S_IRUGO
, show_vrm
, store_vrm
);
1040 static struct sensor_device_attribute_2 sda_single_files
[] = {
1041 SENSOR_ATTR_2(chassis
, S_IWUSR
| S_IRUGO
, show_alarm_beep
,
1042 store_chassis_clear
, ALARM_STATUS
, 30),
1043 SENSOR_ATTR_2(beep_enable
, S_IWUSR
| S_IRUGO
, show_beep_enable
,
1044 store_beep_enable
, NOT_USED
, NOT_USED
),
1045 SENSOR_ATTR_2(pwm_default
, S_IWUSR
| S_IRUGO
, show_sf_setup
,
1046 store_sf_setup
, SETUP_PWM_DEFAULT
, NOT_USED
),
1047 SENSOR_ATTR_2(pwm_uptime
, S_IWUSR
| S_IRUGO
, show_sf_setup
,
1048 store_sf_setup
, SETUP_PWM_UPTIME
, NOT_USED
),
1049 SENSOR_ATTR_2(pwm_downtime
, S_IWUSR
| S_IRUGO
, show_sf_setup
,
1050 store_sf_setup
, SETUP_PWM_DOWNTIME
, NOT_USED
),
1051 SENSOR_ATTR_2(temp_critical
, S_IWUSR
| S_IRUGO
, show_sf_setup
,
1052 store_sf_setup
, SETUP_TEMP_CRITICAL
, NOT_USED
),
1055 static void w83793_init_client(struct i2c_client
*client
)
1058 w83793_write_value(client
, W83793_REG_CONFIG
, 0x80);
1061 /* Start monitoring */
1062 w83793_write_value(client
, W83793_REG_CONFIG
,
1063 w83793_read_value(client
, W83793_REG_CONFIG
) | 0x01);
1067 static int w83793_remove(struct i2c_client
*client
)
1069 struct w83793_data
*data
= i2c_get_clientdata(client
);
1070 struct device
*dev
= &client
->dev
;
1073 hwmon_device_unregister(data
->hwmon_dev
);
1075 for (i
= 0; i
< ARRAY_SIZE(w83793_sensor_attr_2
); i
++)
1076 device_remove_file(dev
,
1077 &w83793_sensor_attr_2
[i
].dev_attr
);
1079 for (i
= 0; i
< ARRAY_SIZE(sda_single_files
); i
++)
1080 device_remove_file(dev
, &sda_single_files
[i
].dev_attr
);
1082 for (i
= 0; i
< ARRAY_SIZE(w83793_vid
); i
++)
1083 device_remove_file(dev
, &w83793_vid
[i
].dev_attr
);
1084 device_remove_file(dev
, &dev_attr_vrm
);
1086 for (i
= 0; i
< ARRAY_SIZE(w83793_left_fan
); i
++)
1087 device_remove_file(dev
, &w83793_left_fan
[i
].dev_attr
);
1089 for (i
= 0; i
< ARRAY_SIZE(w83793_left_pwm
); i
++)
1090 device_remove_file(dev
, &w83793_left_pwm
[i
].dev_attr
);
1092 for (i
= 0; i
< ARRAY_SIZE(w83793_temp
); i
++)
1093 device_remove_file(dev
, &w83793_temp
[i
].dev_attr
);
1095 if (data
->lm75
[0] != NULL
)
1096 i2c_unregister_device(data
->lm75
[0]);
1097 if (data
->lm75
[1] != NULL
)
1098 i2c_unregister_device(data
->lm75
[1]);
1106 w83793_detect_subclients(struct i2c_client
*client
)
1109 int address
= client
->addr
;
1111 struct i2c_adapter
*adapter
= client
->adapter
;
1112 struct w83793_data
*data
= i2c_get_clientdata(client
);
1114 id
= i2c_adapter_id(adapter
);
1115 if (force_subclients
[0] == id
&& force_subclients
[1] == address
) {
1116 for (i
= 2; i
<= 3; i
++) {
1117 if (force_subclients
[i
] < 0x48
1118 || force_subclients
[i
] > 0x4f) {
1119 dev_err(&client
->dev
,
1120 "invalid subclient "
1121 "address %d; must be 0x48-0x4f\n",
1122 force_subclients
[i
]);
1127 w83793_write_value(client
, W83793_REG_I2C_SUBADDR
,
1128 (force_subclients
[2] & 0x07) |
1129 ((force_subclients
[3] & 0x07) << 4));
1132 tmp
= w83793_read_value(client
, W83793_REG_I2C_SUBADDR
);
1133 if (!(tmp
& 0x08)) {
1134 data
->lm75
[0] = i2c_new_dummy(adapter
, 0x48 + (tmp
& 0x7));
1136 if (!(tmp
& 0x80)) {
1137 if ((data
->lm75
[0] != NULL
)
1138 && ((tmp
& 0x7) == ((tmp
>> 4) & 0x7))) {
1139 dev_err(&client
->dev
,
1140 "duplicate addresses 0x%x, "
1141 "use force_subclients\n", data
->lm75
[0]->addr
);
1145 data
->lm75
[1] = i2c_new_dummy(adapter
,
1146 0x48 + ((tmp
>> 4) & 0x7));
1151 /* Undo inits in case of errors */
1154 if (data
->lm75
[0] != NULL
)
1155 i2c_unregister_device(data
->lm75
[0]);
1160 /* Return 0 if detection is successful, -ENODEV otherwise */
1161 static int w83793_detect(struct i2c_client
*client
, int kind
,
1162 struct i2c_board_info
*info
)
1165 struct i2c_adapter
*adapter
= client
->adapter
;
1166 unsigned short address
= client
->addr
;
1168 if (!i2c_check_functionality(adapter
, I2C_FUNC_SMBUS_BYTE_DATA
)) {
1172 bank
= i2c_smbus_read_byte_data(client
, W83793_REG_BANKSEL
);
1175 tmp
= bank
& 0x80 ? 0x5c : 0xa3;
1176 /* Check Winbond vendor ID */
1177 if (tmp
!= i2c_smbus_read_byte_data(client
,
1178 W83793_REG_VENDORID
)) {
1179 pr_debug("w83793: Detection failed at check "
1184 /* If Winbond chip, address of chip and W83793_REG_I2C_ADDR
1186 if ((bank
& 0x07) == 0
1187 && i2c_smbus_read_byte_data(client
, W83793_REG_I2C_ADDR
) !=
1189 pr_debug("w83793: Detection failed at check "
1196 /* We have either had a force parameter, or we have already detected the
1197 Winbond. Determine the chip type now */
1200 if (0x7b == i2c_smbus_read_byte_data(client
,
1201 W83793_REG_CHIPID
)) {
1205 dev_warn(&adapter
->dev
, "w83793: Ignoring "
1206 "'force' parameter for unknown chip "
1207 "at address 0x%02x\n", address
);
1212 strlcpy(info
->type
, "w83793", I2C_NAME_SIZE
);
1217 static int w83793_probe(struct i2c_client
*client
,
1218 const struct i2c_device_id
*id
)
1220 struct device
*dev
= &client
->dev
;
1221 struct w83793_data
*data
;
1222 int i
, tmp
, val
, err
;
1223 int files_fan
= ARRAY_SIZE(w83793_left_fan
) / 7;
1224 int files_pwm
= ARRAY_SIZE(w83793_left_pwm
) / 5;
1225 int files_temp
= ARRAY_SIZE(w83793_temp
) / 6;
1227 data
= kzalloc(sizeof(struct w83793_data
), GFP_KERNEL
);
1233 i2c_set_clientdata(client
, data
);
1234 data
->bank
= i2c_smbus_read_byte_data(client
, W83793_REG_BANKSEL
);
1235 mutex_init(&data
->update_lock
);
1237 err
= w83793_detect_subclients(client
);
1241 /* Initialize the chip */
1242 w83793_init_client(client
);
1245 Only fan 1-5 has their own input pins,
1246 Pwm 1-3 has their own pins
1248 data
->has_fan
= 0x1f;
1249 data
->has_pwm
= 0x07;
1250 tmp
= w83793_read_value(client
, W83793_REG_MFC
);
1251 val
= w83793_read_value(client
, W83793_REG_FANIN_CTRL
);
1253 /* check the function of pins 49-56 */
1255 data
->has_vid
|= 0x2; /* has VIDB */
1257 data
->has_pwm
|= 0x18; /* pwm 4,5 */
1258 if (val
& 0x01) { /* fan 6 */
1259 data
->has_fan
|= 0x20;
1260 data
->has_pwm
|= 0x20;
1262 if (val
& 0x02) { /* fan 7 */
1263 data
->has_fan
|= 0x40;
1264 data
->has_pwm
|= 0x40;
1266 if (!(tmp
& 0x40) && (val
& 0x04)) { /* fan 8 */
1267 data
->has_fan
|= 0x80;
1268 data
->has_pwm
|= 0x80;
1272 /* check the function of pins 37-40 */
1274 data
->has_vid
|= 0x1; /* has VIDA */
1275 if (0x08 == (tmp
& 0x0c)) {
1276 if (val
& 0x08) /* fan 9 */
1277 data
->has_fan
|= 0x100;
1278 if (val
& 0x10) /* fan 10 */
1279 data
->has_fan
|= 0x200;
1281 if (0x20 == (tmp
& 0x30)) {
1282 if (val
& 0x20) /* fan 11 */
1283 data
->has_fan
|= 0x400;
1284 if (val
& 0x40) /* fan 12 */
1285 data
->has_fan
|= 0x800;
1288 if ((tmp
& 0x01) && (val
& 0x04)) { /* fan 8, second location */
1289 data
->has_fan
|= 0x80;
1290 data
->has_pwm
|= 0x80;
1293 tmp
= w83793_read_value(client
, W83793_REG_FANIN_SEL
);
1294 if ((tmp
& 0x01) && (val
& 0x08)) { /* fan 9, second location */
1295 data
->has_fan
|= 0x100;
1297 if ((tmp
& 0x02) && (val
& 0x10)) { /* fan 10, second location */
1298 data
->has_fan
|= 0x200;
1300 if ((tmp
& 0x04) && (val
& 0x20)) { /* fan 11, second location */
1301 data
->has_fan
|= 0x400;
1303 if ((tmp
& 0x08) && (val
& 0x40)) { /* fan 12, second location */
1304 data
->has_fan
|= 0x800;
1307 /* check the temp1-6 mode, ignore former AMDSI selected inputs */
1308 tmp
= w83793_read_value(client
,W83793_REG_TEMP_MODE
[0]);
1310 data
->has_temp
|= 0x01;
1312 data
->has_temp
|= 0x02;
1314 data
->has_temp
|= 0x04;
1316 data
->has_temp
|= 0x08;
1318 tmp
= w83793_read_value(client
,W83793_REG_TEMP_MODE
[1]);
1320 data
->has_temp
|= 0x10;
1322 data
->has_temp
|= 0x20;
1324 /* Register sysfs hooks */
1325 for (i
= 0; i
< ARRAY_SIZE(w83793_sensor_attr_2
); i
++) {
1326 err
= device_create_file(dev
,
1327 &w83793_sensor_attr_2
[i
].dev_attr
);
1332 for (i
= 0; i
< ARRAY_SIZE(w83793_vid
); i
++) {
1333 if (!(data
->has_vid
& (1 << i
)))
1335 err
= device_create_file(dev
, &w83793_vid
[i
].dev_attr
);
1339 if (data
->has_vid
) {
1340 data
->vrm
= vid_which_vrm();
1341 err
= device_create_file(dev
, &dev_attr_vrm
);
1346 for (i
= 0; i
< ARRAY_SIZE(sda_single_files
); i
++) {
1347 err
= device_create_file(dev
, &sda_single_files
[i
].dev_attr
);
1353 for (i
= 0; i
< 6; i
++) {
1355 if (!(data
->has_temp
& (1 << i
)))
1357 for (j
= 0; j
< files_temp
; j
++) {
1358 err
= device_create_file(dev
,
1359 &w83793_temp
[(i
) * files_temp
1366 for (i
= 5; i
< 12; i
++) {
1368 if (!(data
->has_fan
& (1 << i
)))
1370 for (j
= 0; j
< files_fan
; j
++) {
1371 err
= device_create_file(dev
,
1372 &w83793_left_fan
[(i
- 5) * files_fan
1379 for (i
= 3; i
< 8; i
++) {
1381 if (!(data
->has_pwm
& (1 << i
)))
1383 for (j
= 0; j
< files_pwm
; j
++) {
1384 err
= device_create_file(dev
,
1385 &w83793_left_pwm
[(i
- 3) * files_pwm
1392 data
->hwmon_dev
= hwmon_device_register(dev
);
1393 if (IS_ERR(data
->hwmon_dev
)) {
1394 err
= PTR_ERR(data
->hwmon_dev
);
1400 /* Unregister sysfs hooks */
1403 for (i
= 0; i
< ARRAY_SIZE(w83793_sensor_attr_2
); i
++)
1404 device_remove_file(dev
, &w83793_sensor_attr_2
[i
].dev_attr
);
1406 for (i
= 0; i
< ARRAY_SIZE(sda_single_files
); i
++)
1407 device_remove_file(dev
, &sda_single_files
[i
].dev_attr
);
1409 for (i
= 0; i
< ARRAY_SIZE(w83793_vid
); i
++)
1410 device_remove_file(dev
, &w83793_vid
[i
].dev_attr
);
1412 for (i
= 0; i
< ARRAY_SIZE(w83793_left_fan
); i
++)
1413 device_remove_file(dev
, &w83793_left_fan
[i
].dev_attr
);
1415 for (i
= 0; i
< ARRAY_SIZE(w83793_left_pwm
); i
++)
1416 device_remove_file(dev
, &w83793_left_pwm
[i
].dev_attr
);
1418 for (i
= 0; i
< ARRAY_SIZE(w83793_temp
); i
++)
1419 device_remove_file(dev
, &w83793_temp
[i
].dev_attr
);
1421 if (data
->lm75
[0] != NULL
)
1422 i2c_unregister_device(data
->lm75
[0]);
1423 if (data
->lm75
[1] != NULL
)
1424 i2c_unregister_device(data
->lm75
[1]);
1431 static void w83793_update_nonvolatile(struct device
*dev
)
1433 struct i2c_client
*client
= to_i2c_client(dev
);
1434 struct w83793_data
*data
= i2c_get_clientdata(client
);
1437 They are somewhat "stable" registers, and to update them everytime
1438 takes so much time, it's just not worthy. Update them in a long
1439 interval to avoid exception.
1441 if (!(time_after(jiffies
, data
->last_nonvolatile
+ HZ
* 300)
1444 /* update voltage limits */
1445 for (i
= 1; i
< 3; i
++) {
1446 for (j
= 0; j
< ARRAY_SIZE(data
->in
); j
++) {
1448 w83793_read_value(client
, W83793_REG_IN
[j
][i
]);
1450 data
->in_low_bits
[i
] =
1451 w83793_read_value(client
, W83793_REG_IN_LOW_BITS
[i
]);
1454 for (i
= 0; i
< ARRAY_SIZE(data
->fan_min
); i
++) {
1455 /* Update the Fan measured value and limits */
1456 if (!(data
->has_fan
& (1 << i
))) {
1460 w83793_read_value(client
, W83793_REG_FAN_MIN(i
)) << 8;
1462 w83793_read_value(client
, W83793_REG_FAN_MIN(i
) + 1);
1465 for (i
= 0; i
< ARRAY_SIZE(data
->temp_fan_map
); i
++) {
1466 if (!(data
->has_temp
& (1 << i
)))
1468 data
->temp_fan_map
[i
] =
1469 w83793_read_value(client
, W83793_REG_TEMP_FAN_MAP(i
));
1470 for (j
= 1; j
< 5; j
++) {
1472 w83793_read_value(client
, W83793_REG_TEMP
[i
][j
]);
1474 data
->temp_cruise
[i
] =
1475 w83793_read_value(client
, W83793_REG_TEMP_CRUISE(i
));
1476 for (j
= 0; j
< 7; j
++) {
1477 data
->sf2_pwm
[i
][j
] =
1478 w83793_read_value(client
, W83793_REG_SF2_PWM(i
, j
));
1479 data
->sf2_temp
[i
][j
] =
1480 w83793_read_value(client
,
1481 W83793_REG_SF2_TEMP(i
, j
));
1485 for (i
= 0; i
< ARRAY_SIZE(data
->temp_mode
); i
++)
1486 data
->temp_mode
[i
] =
1487 w83793_read_value(client
, W83793_REG_TEMP_MODE
[i
]);
1489 for (i
= 0; i
< ARRAY_SIZE(data
->tolerance
); i
++) {
1490 data
->tolerance
[i
] =
1491 w83793_read_value(client
, W83793_REG_TEMP_TOL(i
));
1494 for (i
= 0; i
< ARRAY_SIZE(data
->pwm
); i
++) {
1495 if (!(data
->has_pwm
& (1 << i
)))
1497 data
->pwm
[i
][PWM_NONSTOP
] =
1498 w83793_read_value(client
, W83793_REG_PWM(i
, PWM_NONSTOP
));
1499 data
->pwm
[i
][PWM_START
] =
1500 w83793_read_value(client
, W83793_REG_PWM(i
, PWM_START
));
1501 data
->pwm_stop_time
[i
] =
1502 w83793_read_value(client
, W83793_REG_PWM_STOP_TIME(i
));
1505 data
->pwm_default
= w83793_read_value(client
, W83793_REG_PWM_DEFAULT
);
1506 data
->pwm_enable
= w83793_read_value(client
, W83793_REG_PWM_ENABLE
);
1507 data
->pwm_uptime
= w83793_read_value(client
, W83793_REG_PWM_UPTIME
);
1508 data
->pwm_downtime
= w83793_read_value(client
, W83793_REG_PWM_DOWNTIME
);
1509 data
->temp_critical
=
1510 w83793_read_value(client
, W83793_REG_TEMP_CRITICAL
);
1511 data
->beep_enable
= w83793_read_value(client
, W83793_REG_OVT_BEEP
);
1513 for (i
= 0; i
< ARRAY_SIZE(data
->beeps
); i
++) {
1514 data
->beeps
[i
] = w83793_read_value(client
, W83793_REG_BEEP(i
));
1517 data
->last_nonvolatile
= jiffies
;
1520 static struct w83793_data
*w83793_update_device(struct device
*dev
)
1522 struct i2c_client
*client
= to_i2c_client(dev
);
1523 struct w83793_data
*data
= i2c_get_clientdata(client
);
1526 mutex_lock(&data
->update_lock
);
1528 if (!(time_after(jiffies
, data
->last_updated
+ HZ
* 2)
1532 /* Update the voltages measured value and limits */
1533 for (i
= 0; i
< ARRAY_SIZE(data
->in
); i
++)
1534 data
->in
[i
][IN_READ
] =
1535 w83793_read_value(client
, W83793_REG_IN
[i
][IN_READ
]);
1537 data
->in_low_bits
[IN_READ
] =
1538 w83793_read_value(client
, W83793_REG_IN_LOW_BITS
[IN_READ
]);
1540 for (i
= 0; i
< ARRAY_SIZE(data
->fan
); i
++) {
1541 if (!(data
->has_fan
& (1 << i
))) {
1545 w83793_read_value(client
, W83793_REG_FAN(i
)) << 8;
1547 w83793_read_value(client
, W83793_REG_FAN(i
) + 1);
1550 for (i
= 0; i
< ARRAY_SIZE(data
->temp
); i
++) {
1551 if (!(data
->has_temp
& (1 << i
)))
1553 data
->temp
[i
][TEMP_READ
] =
1554 w83793_read_value(client
, W83793_REG_TEMP
[i
][TEMP_READ
]);
1557 data
->temp_low_bits
=
1558 w83793_read_value(client
, W83793_REG_TEMP_LOW_BITS
);
1560 for (i
= 0; i
< ARRAY_SIZE(data
->pwm
); i
++) {
1561 if (data
->has_pwm
& (1 << i
))
1562 data
->pwm
[i
][PWM_DUTY
] =
1563 w83793_read_value(client
,
1564 W83793_REG_PWM(i
, PWM_DUTY
));
1567 for (i
= 0; i
< ARRAY_SIZE(data
->alarms
); i
++)
1569 w83793_read_value(client
, W83793_REG_ALARM(i
));
1570 if (data
->has_vid
& 0x01)
1571 data
->vid
[0] = w83793_read_value(client
, W83793_REG_VID_INA
);
1572 if (data
->has_vid
& 0x02)
1573 data
->vid
[1] = w83793_read_value(client
, W83793_REG_VID_INB
);
1574 w83793_update_nonvolatile(dev
);
1575 data
->last_updated
= jiffies
;
1579 mutex_unlock(&data
->update_lock
);
1583 /* Ignore the possibility that somebody change bank outside the driver
1584 Must be called with data->update_lock held, except during initialization */
1585 static u8
w83793_read_value(struct i2c_client
*client
, u16 reg
)
1587 struct w83793_data
*data
= i2c_get_clientdata(client
);
1589 u8 new_bank
= reg
>> 8;
1591 new_bank
|= data
->bank
& 0xfc;
1592 if (data
->bank
!= new_bank
) {
1593 if (i2c_smbus_write_byte_data
1594 (client
, W83793_REG_BANKSEL
, new_bank
) >= 0)
1595 data
->bank
= new_bank
;
1597 dev_err(&client
->dev
,
1598 "set bank to %d failed, fall back "
1599 "to bank %d, read reg 0x%x error\n",
1600 new_bank
, data
->bank
, reg
);
1601 res
= 0x0; /* read 0x0 from the chip */
1605 res
= i2c_smbus_read_byte_data(client
, reg
& 0xff);
1610 /* Must be called with data->update_lock held, except during initialization */
1611 static int w83793_write_value(struct i2c_client
*client
, u16 reg
, u8 value
)
1613 struct w83793_data
*data
= i2c_get_clientdata(client
);
1615 u8 new_bank
= reg
>> 8;
1617 new_bank
|= data
->bank
& 0xfc;
1618 if (data
->bank
!= new_bank
) {
1619 if ((res
= i2c_smbus_write_byte_data
1620 (client
, W83793_REG_BANKSEL
, new_bank
)) >= 0)
1621 data
->bank
= new_bank
;
1623 dev_err(&client
->dev
,
1624 "set bank to %d failed, fall back "
1625 "to bank %d, write reg 0x%x error\n",
1626 new_bank
, data
->bank
, reg
);
1631 res
= i2c_smbus_write_byte_data(client
, reg
& 0xff, value
);
1636 static int __init
sensors_w83793_init(void)
1638 return i2c_add_driver(&w83793_driver
);
1641 static void __exit
sensors_w83793_exit(void)
1643 i2c_del_driver(&w83793_driver
);
1646 MODULE_AUTHOR("Yuan Mu");
1647 MODULE_DESCRIPTION("w83793 driver");
1648 MODULE_LICENSE("GPL");
1650 module_init(sensors_w83793_init
);
1651 module_exit(sensors_w83793_exit
);