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 unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f, I2C_CLIENT_END };
42 /* Insmod parameters */
43 I2C_CLIENT_INSMOD_1(w83793);
44 I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: "
45 "{bus, clientaddr, subclientaddr1, subclientaddr2}");
48 module_param(reset, bool, 0);
49 MODULE_PARM_DESC(reset, "Set to 1 to reset chip, not recommended");
52 Address 0x00, 0x0d, 0x0e, 0x0f in all three banks are reserved
53 as ID, Bank Select registers
55 #define W83793_REG_BANKSEL 0x00
56 #define W83793_REG_VENDORID 0x0d
57 #define W83793_REG_CHIPID 0x0e
58 #define W83793_REG_DEVICEID 0x0f
60 #define W83793_REG_CONFIG 0x40
61 #define W83793_REG_MFC 0x58
62 #define W83793_REG_FANIN_CTRL 0x5c
63 #define W83793_REG_FANIN_SEL 0x5d
64 #define W83793_REG_I2C_ADDR 0x0b
65 #define W83793_REG_I2C_SUBADDR 0x0c
66 #define W83793_REG_VID_INA 0x05
67 #define W83793_REG_VID_INB 0x06
68 #define W83793_REG_VID_LATCHA 0x07
69 #define W83793_REG_VID_LATCHB 0x08
70 #define W83793_REG_VID_CTRL 0x59
72 static u16 W83793_REG_TEMP_MODE[2] = { 0x5e, 0x5f };
76 #define TEMP_CRIT_HYST 2
78 #define TEMP_WARN_HYST 4
79 /* only crit and crit_hyst affect real-time alarm status
80 current crit crit_hyst warn warn_hyst */
81 static u16 W83793_REG_TEMP[][5] = {
82 {0x1c, 0x78, 0x79, 0x7a, 0x7b},
83 {0x1d, 0x7c, 0x7d, 0x7e, 0x7f},
84 {0x1e, 0x80, 0x81, 0x82, 0x83},
85 {0x1f, 0x84, 0x85, 0x86, 0x87},
86 {0x20, 0x88, 0x89, 0x8a, 0x8b},
87 {0x21, 0x8c, 0x8d, 0x8e, 0x8f},
90 #define W83793_REG_TEMP_LOW_BITS 0x22
92 #define W83793_REG_BEEP(index) (0x53 + (index))
93 #define W83793_REG_ALARM(index) (0x4b + (index))
95 #define W83793_REG_CLR_CHASSIS 0x4a /* SMI MASK4 */
96 #define W83793_REG_IRQ_CTRL 0x50
97 #define W83793_REG_OVT_CTRL 0x51
98 #define W83793_REG_OVT_BEEP 0x52
103 static const u16 W83793_REG_IN[][3] = {
104 /* Current, High, Low */
105 {0x10, 0x60, 0x61}, /* Vcore A */
106 {0x11, 0x62, 0x63}, /* Vcore B */
107 {0x12, 0x64, 0x65}, /* Vtt */
108 {0x14, 0x6a, 0x6b}, /* VSEN1 */
109 {0x15, 0x6c, 0x6d}, /* VSEN2 */
110 {0x16, 0x6e, 0x6f}, /* +3VSEN */
111 {0x17, 0x70, 0x71}, /* +12VSEN */
112 {0x18, 0x72, 0x73}, /* 5VDD */
113 {0x19, 0x74, 0x75}, /* 5VSB */
114 {0x1a, 0x76, 0x77}, /* VBAT */
117 /* Low Bits of Vcore A/B Vtt Read/High/Low */
118 static const u16 W83793_REG_IN_LOW_BITS[] = { 0x1b, 0x68, 0x69 };
119 static u8 scale_in[] = { 2, 2, 2, 16, 16, 16, 8, 24, 24, 16 };
120 static u8 scale_in_add[] = { 0, 0, 0, 0, 0, 0, 0, 150, 150, 0 };
122 #define W83793_REG_FAN(index) (0x23 + 2 * (index)) /* High byte */
123 #define W83793_REG_FAN_MIN(index) (0x90 + 2 * (index)) /* High byte */
125 #define W83793_REG_PWM_DEFAULT 0xb2
126 #define W83793_REG_PWM_ENABLE 0x207
127 #define W83793_REG_PWM_UPTIME 0xc3 /* Unit in 0.1 second */
128 #define W83793_REG_PWM_DOWNTIME 0xc4 /* Unit in 0.1 second */
129 #define W83793_REG_TEMP_CRITICAL 0xc5
133 #define PWM_NONSTOP 2
134 #define PWM_STOP_TIME 3
135 #define W83793_REG_PWM(index, nr) (((nr) == 0 ? 0xb3 : \
136 (nr) == 1 ? 0x220 : 0x218) + (index))
138 /* bit field, fan1 is bit0, fan2 is bit1 ... */
139 #define W83793_REG_TEMP_FAN_MAP(index) (0x201 + (index))
140 #define W83793_REG_TEMP_TOL(index) (0x208 + (index))
141 #define W83793_REG_TEMP_CRUISE(index) (0x210 + (index))
142 #define W83793_REG_PWM_STOP_TIME(index) (0x228 + (index))
143 #define W83793_REG_SF2_TEMP(index, nr) (0x230 + ((index) << 4) + (nr))
144 #define W83793_REG_SF2_PWM(index, nr) (0x238 + ((index) << 4) + (nr))
146 static inline unsigned long FAN_FROM_REG(u16 val)
148 if ((val >= 0xfff) || (val == 0))
150 return (1350000UL / val);
153 static inline u16 FAN_TO_REG(long rpm)
157 return SENSORS_LIMIT((1350000 + (rpm >> 1)) / rpm, 1, 0xffe);
160 static inline unsigned long TIME_FROM_REG(u8 reg)
165 static inline u8 TIME_TO_REG(unsigned long val)
167 return SENSORS_LIMIT((val + 50) / 100, 0, 0xff);
170 static inline long TEMP_FROM_REG(s8 reg)
175 static inline s8 TEMP_TO_REG(long val, s8 min, s8 max)
177 return SENSORS_LIMIT((val + (val < 0 ? -500 : 500)) / 1000, min, max);
181 struct i2c_client client;
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_attach_adapter(struct i2c_adapter *adapter);
229 static int w83793_detect(struct i2c_adapter *adapter, int address, int kind);
230 static int w83793_detach_client(struct i2c_client *client);
231 static void w83793_init_client(struct i2c_client *client);
232 static void w83793_update_nonvolatile(struct device *dev);
233 static struct w83793_data *w83793_update_device(struct device *dev);
235 static struct i2c_driver w83793_driver = {
239 .attach_adapter = w83793_attach_adapter,
240 .detach_client = w83793_detach_client,
244 show_vrm(struct device *dev, struct device_attribute *attr, char *buf)
246 struct i2c_client *client = to_i2c_client(dev);
247 struct w83793_data *data = i2c_get_clientdata(client);
249 return sprintf(buf, "%d\n", data->vrm);
253 show_vid(struct device *dev, struct device_attribute *attr, char *buf)
255 struct w83793_data *data = w83793_update_device(dev);
256 struct sensor_device_attribute_2 *sensor_attr =
257 to_sensor_dev_attr_2(attr);
258 int index = sensor_attr->index;
260 return sprintf(buf, "%d\n", vid_from_reg(data->vid[index], data->vrm));
264 store_vrm(struct device *dev, struct device_attribute *attr,
265 const char *buf, size_t count)
267 struct i2c_client *client = to_i2c_client(dev);
268 struct w83793_data *data = i2c_get_clientdata(client);
270 data->vrm = simple_strtoul(buf, NULL, 10);
274 #define ALARM_STATUS 0
275 #define BEEP_ENABLE 1
277 show_alarm_beep(struct device *dev, struct device_attribute *attr, char *buf)
279 struct w83793_data *data = w83793_update_device(dev);
280 struct sensor_device_attribute_2 *sensor_attr =
281 to_sensor_dev_attr_2(attr);
282 int nr = sensor_attr->nr;
283 int index = sensor_attr->index >> 3;
284 int bit = sensor_attr->index & 0x07;
287 if (ALARM_STATUS == nr) {
288 val = (data->alarms[index] >> (bit)) & 1;
289 } else { /* BEEP_ENABLE */
290 val = (data->beeps[index] >> (bit)) & 1;
293 return sprintf(buf, "%u\n", val);
297 store_beep(struct device *dev, struct device_attribute *attr,
298 const char *buf, size_t count)
300 struct i2c_client *client = to_i2c_client(dev);
301 struct w83793_data *data = i2c_get_clientdata(client);
302 struct sensor_device_attribute_2 *sensor_attr =
303 to_sensor_dev_attr_2(attr);
304 int index = sensor_attr->index >> 3;
305 int shift = sensor_attr->index & 0x07;
306 u8 beep_bit = 1 << shift;
309 val = simple_strtoul(buf, NULL, 10);
310 if (val != 0 && val != 1)
313 mutex_lock(&data->update_lock);
314 data->beeps[index] = w83793_read_value(client, W83793_REG_BEEP(index));
315 data->beeps[index] &= ~beep_bit;
316 data->beeps[index] |= val << shift;
317 w83793_write_value(client, W83793_REG_BEEP(index), data->beeps[index]);
318 mutex_unlock(&data->update_lock);
324 show_beep_enable(struct device *dev, struct device_attribute *attr, char *buf)
326 struct w83793_data *data = w83793_update_device(dev);
327 return sprintf(buf, "%u\n", (data->beep_enable >> 1) & 0x01);
331 store_beep_enable(struct device *dev, struct device_attribute *attr,
332 const char *buf, size_t count)
334 struct i2c_client *client = to_i2c_client(dev);
335 struct w83793_data *data = i2c_get_clientdata(client);
336 u8 val = simple_strtoul(buf, NULL, 10);
338 if (val != 0 && val != 1)
341 mutex_lock(&data->update_lock);
342 data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP)
344 data->beep_enable |= val << 1;
345 w83793_write_value(client, W83793_REG_OVT_BEEP, data->beep_enable);
346 mutex_unlock(&data->update_lock);
351 /* Write any value to clear chassis alarm */
353 store_chassis_clear(struct device *dev,
354 struct device_attribute *attr, const char *buf,
357 struct i2c_client *client = to_i2c_client(dev);
358 struct w83793_data *data = i2c_get_clientdata(client);
361 mutex_lock(&data->update_lock);
362 val = w83793_read_value(client, W83793_REG_CLR_CHASSIS);
364 w83793_write_value(client, W83793_REG_CLR_CHASSIS, val);
365 mutex_unlock(&data->update_lock);
372 show_fan(struct device *dev, struct device_attribute *attr, char *buf)
374 struct sensor_device_attribute_2 *sensor_attr =
375 to_sensor_dev_attr_2(attr);
376 int nr = sensor_attr->nr;
377 int index = sensor_attr->index;
378 struct w83793_data *data = w83793_update_device(dev);
381 if (FAN_INPUT == nr) {
382 val = data->fan[index] & 0x0fff;
384 val = data->fan_min[index] & 0x0fff;
387 return sprintf(buf, "%lu\n", FAN_FROM_REG(val));
391 store_fan_min(struct device *dev, struct device_attribute *attr,
392 const char *buf, size_t count)
394 struct sensor_device_attribute_2 *sensor_attr =
395 to_sensor_dev_attr_2(attr);
396 int index = sensor_attr->index;
397 struct i2c_client *client = to_i2c_client(dev);
398 struct w83793_data *data = i2c_get_clientdata(client);
399 u16 val = FAN_TO_REG(simple_strtoul(buf, NULL, 10));
401 mutex_lock(&data->update_lock);
402 data->fan_min[index] = val;
403 w83793_write_value(client, W83793_REG_FAN_MIN(index),
405 w83793_write_value(client, W83793_REG_FAN_MIN(index) + 1, val & 0xff);
406 mutex_unlock(&data->update_lock);
412 show_pwm(struct device *dev, struct device_attribute *attr, char *buf)
414 struct sensor_device_attribute_2 *sensor_attr =
415 to_sensor_dev_attr_2(attr);
416 struct w83793_data *data = w83793_update_device(dev);
418 int nr = sensor_attr->nr;
419 int index = sensor_attr->index;
421 if (PWM_STOP_TIME == nr)
422 val = TIME_FROM_REG(data->pwm_stop_time[index]);
424 val = (data->pwm[index][nr] & 0x3f) << 2;
426 return sprintf(buf, "%d\n", val);
430 store_pwm(struct device *dev, struct device_attribute *attr,
431 const char *buf, size_t count)
433 struct i2c_client *client = to_i2c_client(dev);
434 struct w83793_data *data = i2c_get_clientdata(client);
435 struct sensor_device_attribute_2 *sensor_attr =
436 to_sensor_dev_attr_2(attr);
437 int nr = sensor_attr->nr;
438 int index = sensor_attr->index;
441 mutex_lock(&data->update_lock);
442 if (PWM_STOP_TIME == nr) {
443 val = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
444 data->pwm_stop_time[index] = val;
445 w83793_write_value(client, W83793_REG_PWM_STOP_TIME(index),
448 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 0xff)
450 data->pwm[index][nr] =
451 w83793_read_value(client, W83793_REG_PWM(index, nr)) & 0xc0;
452 data->pwm[index][nr] |= val;
453 w83793_write_value(client, W83793_REG_PWM(index, nr),
454 data->pwm[index][nr]);
457 mutex_unlock(&data->update_lock);
462 show_temp(struct device *dev, struct device_attribute *attr, char *buf)
464 struct sensor_device_attribute_2 *sensor_attr =
465 to_sensor_dev_attr_2(attr);
466 int nr = sensor_attr->nr;
467 int index = sensor_attr->index;
468 struct w83793_data *data = w83793_update_device(dev);
469 long temp = TEMP_FROM_REG(data->temp[index][nr]);
471 if (TEMP_READ == nr && index < 4) { /* Only TD1-TD4 have low bits */
472 int low = ((data->temp_low_bits >> (index * 2)) & 0x03) * 250;
473 temp += temp > 0 ? low : -low;
475 return sprintf(buf, "%ld\n", temp);
479 store_temp(struct device *dev, struct device_attribute *attr,
480 const char *buf, size_t count)
482 struct sensor_device_attribute_2 *sensor_attr =
483 to_sensor_dev_attr_2(attr);
484 int nr = sensor_attr->nr;
485 int index = sensor_attr->index;
486 struct i2c_client *client = to_i2c_client(dev);
487 struct w83793_data *data = i2c_get_clientdata(client);
488 long tmp = simple_strtol(buf, NULL, 10);
490 mutex_lock(&data->update_lock);
491 data->temp[index][nr] = TEMP_TO_REG(tmp, -128, 127);
492 w83793_write_value(client, W83793_REG_TEMP[index][nr],
493 data->temp[index][nr]);
494 mutex_unlock(&data->update_lock);
500 each has 4 mode:(2 bits)
502 1: Use internal temp sensor(default)
504 3: Use sensor in Intel CPU and get result by PECI
507 each has 2 mode:(1 bit)
508 0: Disable temp sensor monitor
509 1: To enable temp sensors monitor
512 /* 0 disable, 6 PECI */
513 static u8 TO_TEMP_MODE[] = { 0, 0, 0, 6 };
516 show_temp_mode(struct device *dev, struct device_attribute *attr, char *buf)
518 struct w83793_data *data = w83793_update_device(dev);
519 struct sensor_device_attribute_2 *sensor_attr =
520 to_sensor_dev_attr_2(attr);
521 int index = sensor_attr->index;
522 u8 mask = (index < 4) ? 0x03 : 0x01;
523 u8 shift = (index < 4) ? (2 * index) : (index - 4);
525 index = (index < 4) ? 0 : 1;
527 tmp = (data->temp_mode[index] >> shift) & mask;
529 /* for the internal sensor, found out if diode or thermistor */
531 tmp = index == 0 ? 3 : 4;
533 tmp = TO_TEMP_MODE[tmp];
536 return sprintf(buf, "%d\n", tmp);
540 store_temp_mode(struct device *dev, struct device_attribute *attr,
541 const char *buf, size_t count)
543 struct i2c_client *client = to_i2c_client(dev);
544 struct w83793_data *data = i2c_get_clientdata(client);
545 struct sensor_device_attribute_2 *sensor_attr =
546 to_sensor_dev_attr_2(attr);
547 int index = sensor_attr->index;
548 u8 mask = (index < 4) ? 0x03 : 0x01;
549 u8 shift = (index < 4) ? (2 * index) : (index - 4);
550 u8 val = simple_strtoul(buf, NULL, 10);
552 /* transform the sysfs interface values into table above */
553 if ((val == 6) && (index < 4)) {
555 } else if ((val == 3 && index < 4)
556 || (val == 4 && index >= 4)) {
557 /* transform diode or thermistor into internal enable */
563 index = (index < 4) ? 0 : 1;
564 mutex_lock(&data->update_lock);
565 data->temp_mode[index] =
566 w83793_read_value(client, W83793_REG_TEMP_MODE[index]);
567 data->temp_mode[index] &= ~(mask << shift);
568 data->temp_mode[index] |= val << shift;
569 w83793_write_value(client, W83793_REG_TEMP_MODE[index],
570 data->temp_mode[index]);
571 mutex_unlock(&data->update_lock);
576 #define SETUP_PWM_DEFAULT 0
577 #define SETUP_PWM_UPTIME 1 /* Unit in 0.1s */
578 #define SETUP_PWM_DOWNTIME 2 /* Unit in 0.1s */
579 #define SETUP_TEMP_CRITICAL 3
581 show_sf_setup(struct device *dev, struct device_attribute *attr, char *buf)
583 struct sensor_device_attribute_2 *sensor_attr =
584 to_sensor_dev_attr_2(attr);
585 int nr = sensor_attr->nr;
586 struct w83793_data *data = w83793_update_device(dev);
589 if (SETUP_PWM_DEFAULT == nr) {
590 val = (data->pwm_default & 0x3f) << 2;
591 } else if (SETUP_PWM_UPTIME == nr) {
592 val = TIME_FROM_REG(data->pwm_uptime);
593 } else if (SETUP_PWM_DOWNTIME == nr) {
594 val = TIME_FROM_REG(data->pwm_downtime);
595 } else if (SETUP_TEMP_CRITICAL == nr) {
596 val = TEMP_FROM_REG(data->temp_critical & 0x7f);
599 return sprintf(buf, "%d\n", val);
603 store_sf_setup(struct device *dev, struct device_attribute *attr,
604 const char *buf, size_t count)
606 struct sensor_device_attribute_2 *sensor_attr =
607 to_sensor_dev_attr_2(attr);
608 int nr = sensor_attr->nr;
609 struct i2c_client *client = to_i2c_client(dev);
610 struct w83793_data *data = i2c_get_clientdata(client);
612 mutex_lock(&data->update_lock);
613 if (SETUP_PWM_DEFAULT == nr) {
615 w83793_read_value(client, W83793_REG_PWM_DEFAULT) & 0xc0;
616 data->pwm_default |= SENSORS_LIMIT(simple_strtoul(buf, NULL,
619 w83793_write_value(client, W83793_REG_PWM_DEFAULT,
621 } else if (SETUP_PWM_UPTIME == nr) {
622 data->pwm_uptime = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
623 data->pwm_uptime += data->pwm_uptime == 0 ? 1 : 0;
624 w83793_write_value(client, W83793_REG_PWM_UPTIME,
626 } else if (SETUP_PWM_DOWNTIME == nr) {
627 data->pwm_downtime = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
628 data->pwm_downtime += data->pwm_downtime == 0 ? 1 : 0;
629 w83793_write_value(client, W83793_REG_PWM_DOWNTIME,
631 } else { /* SETUP_TEMP_CRITICAL */
632 data->temp_critical =
633 w83793_read_value(client, W83793_REG_TEMP_CRITICAL) & 0x80;
634 data->temp_critical |= TEMP_TO_REG(simple_strtol(buf, NULL, 10),
636 w83793_write_value(client, W83793_REG_TEMP_CRITICAL,
637 data->temp_critical);
640 mutex_unlock(&data->update_lock);
645 Temp SmartFan control
647 Temp channel control which pwm fan, bitfield, bit 0 indicate pwm1...
648 It's possible two or more temp channels control the same fan, w83793
649 always prefers to pick the most critical request and applies it to
651 It's possible one fan is not in any mapping of 6 temp channels, this
652 means the fan is manual mode
655 Each temp channel has its own SmartFan mode, and temp channel
656 control fans that are set by TEMP_FAN_MAP
658 1: Thermal Cruise Mode
661 Target temperature in thermal cruise mode, w83793 will try to turn
662 fan speed to keep the temperature of target device around this
666 If Temp higher or lower than target with this tolerance, w83793
667 will take actions to speed up or slow down the fan to keep the
668 temperature within the tolerance range.
671 #define TEMP_FAN_MAP 0
672 #define TEMP_PWM_ENABLE 1
673 #define TEMP_CRUISE 2
674 #define TEMP_TOLERANCE 3
676 show_sf_ctrl(struct device *dev, struct device_attribute *attr, char *buf)
678 struct sensor_device_attribute_2 *sensor_attr =
679 to_sensor_dev_attr_2(attr);
680 int nr = sensor_attr->nr;
681 int index = sensor_attr->index;
682 struct w83793_data *data = w83793_update_device(dev);
685 if (TEMP_FAN_MAP == nr) {
686 val = data->temp_fan_map[index];
687 } else if (TEMP_PWM_ENABLE == nr) {
688 /* +2 to transfrom into 2 and 3 to conform with sysfs intf */
689 val = ((data->pwm_enable >> index) & 0x01) + 2;
690 } else if (TEMP_CRUISE == nr) {
691 val = TEMP_FROM_REG(data->temp_cruise[index] & 0x7f);
692 } else { /* TEMP_TOLERANCE */
693 val = data->tolerance[index >> 1] >> ((index & 0x01) ? 4 : 0);
694 val = TEMP_FROM_REG(val & 0x0f);
696 return sprintf(buf, "%d\n", val);
700 store_sf_ctrl(struct device *dev, struct device_attribute *attr,
701 const char *buf, size_t count)
703 struct sensor_device_attribute_2 *sensor_attr =
704 to_sensor_dev_attr_2(attr);
705 int nr = sensor_attr->nr;
706 int index = sensor_attr->index;
707 struct i2c_client *client = to_i2c_client(dev);
708 struct w83793_data *data = i2c_get_clientdata(client);
711 mutex_lock(&data->update_lock);
712 if (TEMP_FAN_MAP == nr) {
713 val = simple_strtoul(buf, NULL, 10) & 0xff;
714 w83793_write_value(client, W83793_REG_TEMP_FAN_MAP(index), val);
715 data->temp_fan_map[index] = val;
716 } else if (TEMP_PWM_ENABLE == nr) {
717 val = simple_strtoul(buf, NULL, 10);
718 if (2 == val || 3 == val) {
720 w83793_read_value(client, W83793_REG_PWM_ENABLE);
722 data->pwm_enable |= 1 << index;
724 data->pwm_enable &= ~(1 << index);
725 w83793_write_value(client, W83793_REG_PWM_ENABLE,
728 mutex_unlock(&data->update_lock);
731 } else if (TEMP_CRUISE == nr) {
732 data->temp_cruise[index] =
733 w83793_read_value(client, W83793_REG_TEMP_CRUISE(index));
734 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x7f);
735 data->temp_cruise[index] &= 0x80;
736 data->temp_cruise[index] |= val;
738 w83793_write_value(client, W83793_REG_TEMP_CRUISE(index),
739 data->temp_cruise[index]);
740 } else { /* TEMP_TOLERANCE */
742 u8 shift = (index & 0x01) ? 4 : 0;
744 w83793_read_value(client, W83793_REG_TEMP_TOL(i));
746 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x0f);
747 data->tolerance[i] &= ~(0x0f << shift);
748 data->tolerance[i] |= val << shift;
749 w83793_write_value(client, W83793_REG_TEMP_TOL(i),
753 mutex_unlock(&data->update_lock);
758 show_sf2_pwm(struct device *dev, struct device_attribute *attr, char *buf)
760 struct sensor_device_attribute_2 *sensor_attr =
761 to_sensor_dev_attr_2(attr);
762 int nr = sensor_attr->nr;
763 int index = sensor_attr->index;
764 struct w83793_data *data = w83793_update_device(dev);
766 return sprintf(buf, "%d\n", (data->sf2_pwm[index][nr] & 0x3f) << 2);
770 store_sf2_pwm(struct device *dev, struct device_attribute *attr,
771 const char *buf, size_t count)
773 struct i2c_client *client = to_i2c_client(dev);
774 struct w83793_data *data = i2c_get_clientdata(client);
775 struct sensor_device_attribute_2 *sensor_attr =
776 to_sensor_dev_attr_2(attr);
777 int nr = sensor_attr->nr;
778 int index = sensor_attr->index;
779 u8 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 0xff) >> 2;
781 mutex_lock(&data->update_lock);
782 data->sf2_pwm[index][nr] =
783 w83793_read_value(client, W83793_REG_SF2_PWM(index, nr)) & 0xc0;
784 data->sf2_pwm[index][nr] |= val;
785 w83793_write_value(client, W83793_REG_SF2_PWM(index, nr),
786 data->sf2_pwm[index][nr]);
787 mutex_unlock(&data->update_lock);
792 show_sf2_temp(struct device *dev, struct device_attribute *attr, char *buf)
794 struct sensor_device_attribute_2 *sensor_attr =
795 to_sensor_dev_attr_2(attr);
796 int nr = sensor_attr->nr;
797 int index = sensor_attr->index;
798 struct w83793_data *data = w83793_update_device(dev);
800 return sprintf(buf, "%ld\n",
801 TEMP_FROM_REG(data->sf2_temp[index][nr] & 0x7f));
805 store_sf2_temp(struct device *dev, struct device_attribute *attr,
806 const char *buf, size_t count)
808 struct i2c_client *client = to_i2c_client(dev);
809 struct w83793_data *data = i2c_get_clientdata(client);
810 struct sensor_device_attribute_2 *sensor_attr =
811 to_sensor_dev_attr_2(attr);
812 int nr = sensor_attr->nr;
813 int index = sensor_attr->index;
814 u8 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x7f);
816 mutex_lock(&data->update_lock);
817 data->sf2_temp[index][nr] =
818 w83793_read_value(client, W83793_REG_SF2_TEMP(index, nr)) & 0x80;
819 data->sf2_temp[index][nr] |= val;
820 w83793_write_value(client, W83793_REG_SF2_TEMP(index, nr),
821 data->sf2_temp[index][nr]);
822 mutex_unlock(&data->update_lock);
826 /* only Vcore A/B and Vtt have additional 2 bits precision */
828 show_in(struct device *dev, struct device_attribute *attr, char *buf)
830 struct sensor_device_attribute_2 *sensor_attr =
831 to_sensor_dev_attr_2(attr);
832 int nr = sensor_attr->nr;
833 int index = sensor_attr->index;
834 struct w83793_data *data = w83793_update_device(dev);
835 u16 val = data->in[index][nr];
839 val += (data->in_low_bits[nr] >> (index * 2)) & 0x3;
841 /* voltage inputs 5VDD and 5VSB needs 150mV offset */
842 val = val * scale_in[index] + scale_in_add[index];
843 return sprintf(buf, "%d\n", val);
847 store_in(struct device *dev, struct device_attribute *attr,
848 const char *buf, size_t count)
850 struct sensor_device_attribute_2 *sensor_attr =
851 to_sensor_dev_attr_2(attr);
852 int nr = sensor_attr->nr;
853 int index = sensor_attr->index;
854 struct i2c_client *client = to_i2c_client(dev);
855 struct w83793_data *data = i2c_get_clientdata(client);
859 (simple_strtoul(buf, NULL, 10) +
860 scale_in[index] / 2) / scale_in[index];
861 mutex_lock(&data->update_lock);
863 /* fix the limit values of 5VDD and 5VSB to ALARM mechanism */
864 if (1 == nr || 2 == nr) {
865 val -= scale_in_add[index] / scale_in[index];
867 val = SENSORS_LIMIT(val, 0, 255);
869 val = SENSORS_LIMIT(val, 0, 0x3FF);
870 data->in_low_bits[nr] =
871 w83793_read_value(client, W83793_REG_IN_LOW_BITS[nr]);
872 data->in_low_bits[nr] &= ~(0x03 << (2 * index));
873 data->in_low_bits[nr] |= (val & 0x03) << (2 * index);
874 w83793_write_value(client, W83793_REG_IN_LOW_BITS[nr],
875 data->in_low_bits[nr]);
878 data->in[index][nr] = val;
879 w83793_write_value(client, W83793_REG_IN[index][nr],
880 data->in[index][nr]);
881 mutex_unlock(&data->update_lock);
887 #define SENSOR_ATTR_IN(index) \
888 SENSOR_ATTR_2(in##index##_input, S_IRUGO, show_in, NULL, \
890 SENSOR_ATTR_2(in##index##_max, S_IRUGO | S_IWUSR, show_in, \
891 store_in, IN_MAX, index), \
892 SENSOR_ATTR_2(in##index##_min, S_IRUGO | S_IWUSR, show_in, \
893 store_in, IN_LOW, index), \
894 SENSOR_ATTR_2(in##index##_alarm, S_IRUGO, show_alarm_beep, \
895 NULL, ALARM_STATUS, index + ((index > 2) ? 1 : 0)), \
896 SENSOR_ATTR_2(in##index##_beep, S_IWUSR | S_IRUGO, \
897 show_alarm_beep, store_beep, BEEP_ENABLE, \
898 index + ((index > 2) ? 1 : 0))
900 #define SENSOR_ATTR_FAN(index) \
901 SENSOR_ATTR_2(fan##index##_alarm, S_IRUGO, show_alarm_beep, \
902 NULL, ALARM_STATUS, index + 17), \
903 SENSOR_ATTR_2(fan##index##_beep, S_IWUSR | S_IRUGO, \
904 show_alarm_beep, store_beep, BEEP_ENABLE, index + 17), \
905 SENSOR_ATTR_2(fan##index##_input, S_IRUGO, show_fan, \
906 NULL, FAN_INPUT, index - 1), \
907 SENSOR_ATTR_2(fan##index##_min, S_IWUSR | S_IRUGO, \
908 show_fan, store_fan_min, FAN_MIN, index - 1)
910 #define SENSOR_ATTR_PWM(index) \
911 SENSOR_ATTR_2(pwm##index, S_IWUSR | S_IRUGO, show_pwm, \
912 store_pwm, PWM_DUTY, index - 1), \
913 SENSOR_ATTR_2(pwm##index##_nonstop, S_IWUSR | S_IRUGO, \
914 show_pwm, store_pwm, PWM_NONSTOP, index - 1), \
915 SENSOR_ATTR_2(pwm##index##_start, S_IWUSR | S_IRUGO, \
916 show_pwm, store_pwm, PWM_START, index - 1), \
917 SENSOR_ATTR_2(pwm##index##_stop_time, S_IWUSR | S_IRUGO, \
918 show_pwm, store_pwm, PWM_STOP_TIME, index - 1)
920 #define SENSOR_ATTR_TEMP(index) \
921 SENSOR_ATTR_2(temp##index##_type, S_IRUGO | S_IWUSR, \
922 show_temp_mode, store_temp_mode, NOT_USED, index - 1), \
923 SENSOR_ATTR_2(temp##index##_input, S_IRUGO, show_temp, \
924 NULL, TEMP_READ, index - 1), \
925 SENSOR_ATTR_2(temp##index##_max, S_IRUGO | S_IWUSR, show_temp, \
926 store_temp, TEMP_CRIT, index - 1), \
927 SENSOR_ATTR_2(temp##index##_max_hyst, S_IRUGO | S_IWUSR, \
928 show_temp, store_temp, TEMP_CRIT_HYST, index - 1), \
929 SENSOR_ATTR_2(temp##index##_warn, S_IRUGO | S_IWUSR, show_temp, \
930 store_temp, TEMP_WARN, index - 1), \
931 SENSOR_ATTR_2(temp##index##_warn_hyst, S_IRUGO | S_IWUSR, \
932 show_temp, store_temp, TEMP_WARN_HYST, index - 1), \
933 SENSOR_ATTR_2(temp##index##_alarm, S_IRUGO, \
934 show_alarm_beep, NULL, ALARM_STATUS, index + 11), \
935 SENSOR_ATTR_2(temp##index##_beep, S_IWUSR | S_IRUGO, \
936 show_alarm_beep, store_beep, BEEP_ENABLE, index + 11), \
937 SENSOR_ATTR_2(temp##index##_auto_channels_pwm, \
938 S_IRUGO | S_IWUSR, show_sf_ctrl, store_sf_ctrl, \
939 TEMP_FAN_MAP, index - 1), \
940 SENSOR_ATTR_2(temp##index##_pwm_enable, S_IWUSR | S_IRUGO, \
941 show_sf_ctrl, store_sf_ctrl, TEMP_PWM_ENABLE, \
943 SENSOR_ATTR_2(thermal_cruise##index, S_IRUGO | S_IWUSR, \
944 show_sf_ctrl, store_sf_ctrl, TEMP_CRUISE, index - 1), \
945 SENSOR_ATTR_2(tolerance##index, S_IRUGO | S_IWUSR, show_sf_ctrl,\
946 store_sf_ctrl, TEMP_TOLERANCE, index - 1), \
947 SENSOR_ATTR_2(temp##index##_auto_point1_pwm, S_IRUGO | S_IWUSR, \
948 show_sf2_pwm, store_sf2_pwm, 0, index - 1), \
949 SENSOR_ATTR_2(temp##index##_auto_point2_pwm, S_IRUGO | S_IWUSR, \
950 show_sf2_pwm, store_sf2_pwm, 1, index - 1), \
951 SENSOR_ATTR_2(temp##index##_auto_point3_pwm, S_IRUGO | S_IWUSR, \
952 show_sf2_pwm, store_sf2_pwm, 2, index - 1), \
953 SENSOR_ATTR_2(temp##index##_auto_point4_pwm, S_IRUGO | S_IWUSR, \
954 show_sf2_pwm, store_sf2_pwm, 3, index - 1), \
955 SENSOR_ATTR_2(temp##index##_auto_point5_pwm, S_IRUGO | S_IWUSR, \
956 show_sf2_pwm, store_sf2_pwm, 4, index - 1), \
957 SENSOR_ATTR_2(temp##index##_auto_point6_pwm, S_IRUGO | S_IWUSR, \
958 show_sf2_pwm, store_sf2_pwm, 5, index - 1), \
959 SENSOR_ATTR_2(temp##index##_auto_point7_pwm, S_IRUGO | S_IWUSR, \
960 show_sf2_pwm, store_sf2_pwm, 6, index - 1), \
961 SENSOR_ATTR_2(temp##index##_auto_point1_temp, S_IRUGO | S_IWUSR,\
962 show_sf2_temp, store_sf2_temp, 0, index - 1), \
963 SENSOR_ATTR_2(temp##index##_auto_point2_temp, S_IRUGO | S_IWUSR,\
964 show_sf2_temp, store_sf2_temp, 1, index - 1), \
965 SENSOR_ATTR_2(temp##index##_auto_point3_temp, S_IRUGO | S_IWUSR,\
966 show_sf2_temp, store_sf2_temp, 2, index - 1), \
967 SENSOR_ATTR_2(temp##index##_auto_point4_temp, S_IRUGO | S_IWUSR,\
968 show_sf2_temp, store_sf2_temp, 3, index - 1), \
969 SENSOR_ATTR_2(temp##index##_auto_point5_temp, S_IRUGO | S_IWUSR,\
970 show_sf2_temp, store_sf2_temp, 4, index - 1), \
971 SENSOR_ATTR_2(temp##index##_auto_point6_temp, S_IRUGO | S_IWUSR,\
972 show_sf2_temp, store_sf2_temp, 5, index - 1), \
973 SENSOR_ATTR_2(temp##index##_auto_point7_temp, S_IRUGO | S_IWUSR,\
974 show_sf2_temp, store_sf2_temp, 6, index - 1)
976 static struct sensor_device_attribute_2 w83793_sensor_attr_2[] = {
997 static struct sensor_device_attribute_2 w83793_temp[] = {
1000 SENSOR_ATTR_TEMP(3),
1001 SENSOR_ATTR_TEMP(4),
1002 SENSOR_ATTR_TEMP(5),
1003 SENSOR_ATTR_TEMP(6),
1007 static struct sensor_device_attribute_2 w83793_left_fan[] = {
1012 SENSOR_ATTR_FAN(10),
1013 SENSOR_ATTR_FAN(11),
1014 SENSOR_ATTR_FAN(12),
1018 static struct sensor_device_attribute_2 w83793_left_pwm[] = {
1026 static struct sensor_device_attribute_2 w83793_vid[] = {
1027 SENSOR_ATTR_2(cpu0_vid, S_IRUGO, show_vid, NULL, NOT_USED, 0),
1028 SENSOR_ATTR_2(cpu1_vid, S_IRUGO, show_vid, NULL, NOT_USED, 1),
1031 static struct sensor_device_attribute_2 sda_single_files[] = {
1032 SENSOR_ATTR_2(vrm, S_IWUSR | S_IRUGO, show_vrm, store_vrm,
1033 NOT_USED, NOT_USED),
1034 SENSOR_ATTR_2(chassis, S_IWUSR | S_IRUGO, show_alarm_beep,
1035 store_chassis_clear, ALARM_STATUS, 30),
1036 SENSOR_ATTR_2(beep_enable, S_IWUSR | S_IRUGO, show_beep_enable,
1037 store_beep_enable, NOT_USED, NOT_USED),
1038 SENSOR_ATTR_2(pwm_default, S_IWUSR | S_IRUGO, show_sf_setup,
1039 store_sf_setup, SETUP_PWM_DEFAULT, NOT_USED),
1040 SENSOR_ATTR_2(pwm_uptime, S_IWUSR | S_IRUGO, show_sf_setup,
1041 store_sf_setup, SETUP_PWM_UPTIME, NOT_USED),
1042 SENSOR_ATTR_2(pwm_downtime, S_IWUSR | S_IRUGO, show_sf_setup,
1043 store_sf_setup, SETUP_PWM_DOWNTIME, NOT_USED),
1044 SENSOR_ATTR_2(temp_critical, S_IWUSR | S_IRUGO, show_sf_setup,
1045 store_sf_setup, SETUP_TEMP_CRITICAL, NOT_USED),
1048 static void w83793_init_client(struct i2c_client *client)
1051 w83793_write_value(client, W83793_REG_CONFIG, 0x80);
1054 /* Start monitoring */
1055 w83793_write_value(client, W83793_REG_CONFIG,
1056 w83793_read_value(client, W83793_REG_CONFIG) | 0x01);
1060 static int w83793_attach_adapter(struct i2c_adapter *adapter)
1062 if (!(adapter->class & I2C_CLASS_HWMON))
1064 return i2c_probe(adapter, &addr_data, w83793_detect);
1067 static int w83793_detach_client(struct i2c_client *client)
1069 struct w83793_data *data = i2c_get_clientdata(client);
1070 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);
1087 for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1088 device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1090 for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1091 device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1093 for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1094 device_remove_file(dev, &w83793_temp[i].dev_attr);
1097 if ((err = i2c_detach_client(client)))
1111 w83793_create_subclient(struct i2c_adapter *adapter,
1112 struct i2c_client *client, int addr,
1113 struct i2c_client **sub_cli)
1116 struct i2c_client *sub_client;
1118 (*sub_cli) = sub_client =
1119 kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
1120 if (!(sub_client)) {
1123 sub_client->addr = 0x48 + addr;
1124 i2c_set_clientdata(sub_client, NULL);
1125 sub_client->adapter = adapter;
1126 sub_client->driver = &w83793_driver;
1127 strlcpy(sub_client->name, "w83793 subclient", I2C_NAME_SIZE);
1128 if ((err = i2c_attach_client(sub_client))) {
1129 dev_err(&client->dev, "subclient registration "
1130 "at address 0x%x failed\n", sub_client->addr);
1137 w83793_detect_subclients(struct i2c_adapter *adapter, int address,
1138 int kind, struct i2c_client *client)
1142 struct w83793_data *data = i2c_get_clientdata(client);
1144 id = i2c_adapter_id(adapter);
1145 if (force_subclients[0] == id && force_subclients[1] == address) {
1146 for (i = 2; i <= 3; i++) {
1147 if (force_subclients[i] < 0x48
1148 || force_subclients[i] > 0x4f) {
1149 dev_err(&client->dev,
1150 "invalid subclient "
1151 "address %d; must be 0x48-0x4f\n",
1152 force_subclients[i]);
1157 w83793_write_value(client, W83793_REG_I2C_SUBADDR,
1158 (force_subclients[2] & 0x07) |
1159 ((force_subclients[3] & 0x07) << 4));
1162 tmp = w83793_read_value(client, W83793_REG_I2C_SUBADDR);
1163 if (!(tmp & 0x08)) {
1165 w83793_create_subclient(adapter, client, tmp & 0x7,
1170 if (!(tmp & 0x80)) {
1171 if ((data->lm75[0] != NULL)
1172 && ((tmp & 0x7) == ((tmp >> 4) & 0x7))) {
1173 dev_err(&client->dev,
1174 "duplicate addresses 0x%x, "
1175 "use force_subclients\n", data->lm75[0]->addr);
1179 err = w83793_create_subclient(adapter, client,
1180 (tmp >> 4) & 0x7, &data->lm75[1]);
1187 /* Undo inits in case of errors */
1190 if (data->lm75[0] != NULL) {
1191 i2c_detach_client(data->lm75[0]);
1192 kfree(data->lm75[0]);
1198 static int w83793_detect(struct i2c_adapter *adapter, int address, int kind)
1202 struct i2c_client *client;
1204 struct w83793_data *data;
1205 int files_fan = ARRAY_SIZE(w83793_left_fan) / 7;
1206 int files_pwm = ARRAY_SIZE(w83793_left_pwm) / 5;
1207 int files_temp = ARRAY_SIZE(w83793_temp) / 6;
1210 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1214 /* OK. For now, we presume we have a valid client. We now create the
1215 client structure, even though we cannot fill it completely yet.
1216 But it allows us to access w83793_{read,write}_value. */
1218 if (!(data = kzalloc(sizeof(struct w83793_data), GFP_KERNEL))) {
1223 client = &data->client;
1225 i2c_set_clientdata(client, data);
1226 client->addr = address;
1227 client->adapter = adapter;
1228 client->driver = &w83793_driver;
1230 data->bank = i2c_smbus_read_byte_data(client, W83793_REG_BANKSEL);
1232 /* Now, we do the remaining detection. */
1234 tmp = data->bank & 0x80 ? 0x5c : 0xa3;
1235 /* Check Winbond vendor ID */
1236 if (tmp != i2c_smbus_read_byte_data(client,
1237 W83793_REG_VENDORID)) {
1238 pr_debug("w83793: Detection failed at check "
1244 /* If Winbond chip, address of chip and W83793_REG_I2C_ADDR
1246 if ((data->bank & 0x07) == 0
1247 && i2c_smbus_read_byte_data(client, W83793_REG_I2C_ADDR) !=
1249 pr_debug("w83793: Detection failed at check "
1257 /* We have either had a force parameter, or we have already detected the
1258 Winbond. Determine the chip type now */
1261 if (0x7b == w83793_read_value(client, W83793_REG_CHIPID)) {
1265 dev_warn(&adapter->dev, "w83793: Ignoring "
1266 "'force' parameter for unknown chip "
1267 "at address 0x%02x\n", address);
1273 /* Fill in the remaining client fields and put into the global list */
1274 strlcpy(client->name, "w83793", I2C_NAME_SIZE);
1276 mutex_init(&data->update_lock);
1278 /* Tell the I2C layer a new client has arrived */
1279 if ((err = i2c_attach_client(client)))
1282 if ((err = w83793_detect_subclients(adapter, address, kind, client)))
1285 /* Initialize the chip */
1286 w83793_init_client(client);
1288 data->vrm = vid_which_vrm();
1290 Only fan 1-5 has their own input pins,
1291 Pwm 1-3 has their own pins
1293 data->has_fan = 0x1f;
1294 data->has_pwm = 0x07;
1295 tmp = w83793_read_value(client, W83793_REG_MFC);
1296 val = w83793_read_value(client, W83793_REG_FANIN_CTRL);
1298 /* check the function of pins 49-56 */
1299 if (!(tmp & 0x80)) {
1300 data->has_pwm |= 0x18; /* pwm 4,5 */
1301 if (val & 0x01) { /* fan 6 */
1302 data->has_fan |= 0x20;
1303 data->has_pwm |= 0x20;
1305 if (val & 0x02) { /* fan 7 */
1306 data->has_fan |= 0x40;
1307 data->has_pwm |= 0x40;
1309 if (!(tmp & 0x40) && (val & 0x04)) { /* fan 8 */
1310 data->has_fan |= 0x80;
1311 data->has_pwm |= 0x80;
1315 if (0x08 == (tmp & 0x0c)) {
1316 if (val & 0x08) /* fan 9 */
1317 data->has_fan |= 0x100;
1318 if (val & 0x10) /* fan 10 */
1319 data->has_fan |= 0x200;
1322 if (0x20 == (tmp & 0x30)) {
1323 if (val & 0x20) /* fan 11 */
1324 data->has_fan |= 0x400;
1325 if (val & 0x40) /* fan 12 */
1326 data->has_fan |= 0x800;
1329 if ((tmp & 0x01) && (val & 0x04)) { /* fan 8, second location */
1330 data->has_fan |= 0x80;
1331 data->has_pwm |= 0x80;
1334 tmp = w83793_read_value(client, W83793_REG_FANIN_SEL);
1335 if ((tmp & 0x01) && (val & 0x08)) { /* fan 9, second location */
1336 data->has_fan |= 0x100;
1338 if ((tmp & 0x02) && (val & 0x10)) { /* fan 10, second location */
1339 data->has_fan |= 0x200;
1341 if ((tmp & 0x04) && (val & 0x20)) { /* fan 11, second location */
1342 data->has_fan |= 0x400;
1344 if ((tmp & 0x08) && (val & 0x40)) { /* fan 12, second location */
1345 data->has_fan |= 0x800;
1348 /* check the temp1-6 mode, ignore former AMDSI selected inputs */
1349 tmp = w83793_read_value(client,W83793_REG_TEMP_MODE[0]);
1351 data->has_temp |= 0x01;
1353 data->has_temp |= 0x02;
1355 data->has_temp |= 0x04;
1357 data->has_temp |= 0x08;
1359 tmp = w83793_read_value(client,W83793_REG_TEMP_MODE[1]);
1361 data->has_temp |= 0x10;
1363 data->has_temp |= 0x20;
1365 /* Detect the VID usage and ignore unused input */
1366 tmp = w83793_read_value(client, W83793_REG_MFC);
1368 data->has_vid |= 0x1; /* has VIDA */
1370 data->has_vid |= 0x2; /* has VIDB */
1372 /* Register sysfs hooks */
1373 for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++) {
1374 err = device_create_file(dev,
1375 &w83793_sensor_attr_2[i].dev_attr);
1380 for (i = 0; i < ARRAY_SIZE(w83793_vid); i++) {
1381 if (!(data->has_vid & (1 << i)))
1383 err = device_create_file(dev, &w83793_vid[i].dev_attr);
1388 for (i = 0; i < ARRAY_SIZE(sda_single_files); i++) {
1389 err = device_create_file(dev, &sda_single_files[i].dev_attr);
1395 for (i = 0; i < 6; i++) {
1397 if (!(data->has_temp & (1 << i)))
1399 for (j = 0; j < files_temp; j++) {
1400 err = device_create_file(dev,
1401 &w83793_temp[(i) * files_temp
1408 for (i = 5; i < 12; i++) {
1410 if (!(data->has_fan & (1 << i)))
1412 for (j = 0; j < files_fan; j++) {
1413 err = device_create_file(dev,
1414 &w83793_left_fan[(i - 5) * files_fan
1421 for (i = 3; i < 8; i++) {
1423 if (!(data->has_pwm & (1 << i)))
1425 for (j = 0; j < files_pwm; j++) {
1426 err = device_create_file(dev,
1427 &w83793_left_pwm[(i - 3) * files_pwm
1434 data->hwmon_dev = hwmon_device_register(dev);
1435 if (IS_ERR(data->hwmon_dev)) {
1436 err = PTR_ERR(data->hwmon_dev);
1442 /* Unregister sysfs hooks */
1445 for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1446 device_remove_file(dev, &w83793_sensor_attr_2[i].dev_attr);
1448 for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1449 device_remove_file(dev, &sda_single_files[i].dev_attr);
1451 for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1452 device_remove_file(dev, &w83793_vid[i].dev_attr);
1454 for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1455 device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1457 for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1458 device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1460 for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1461 device_remove_file(dev, &w83793_temp[i].dev_attr);
1463 if (data->lm75[0] != NULL) {
1464 i2c_detach_client(data->lm75[0]);
1465 kfree(data->lm75[0]);
1467 if (data->lm75[1] != NULL) {
1468 i2c_detach_client(data->lm75[1]);
1469 kfree(data->lm75[1]);
1472 i2c_detach_client(client);
1479 static void w83793_update_nonvolatile(struct device *dev)
1481 struct i2c_client *client = to_i2c_client(dev);
1482 struct w83793_data *data = i2c_get_clientdata(client);
1485 They are somewhat "stable" registers, and to update them everytime
1486 takes so much time, it's just not worthy. Update them in a long
1487 interval to avoid exception.
1489 if (!(time_after(jiffies, data->last_nonvolatile + HZ * 300)
1492 /* update voltage limits */
1493 for (i = 1; i < 3; i++) {
1494 for (j = 0; j < ARRAY_SIZE(data->in); j++) {
1496 w83793_read_value(client, W83793_REG_IN[j][i]);
1498 data->in_low_bits[i] =
1499 w83793_read_value(client, W83793_REG_IN_LOW_BITS[i]);
1502 for (i = 0; i < ARRAY_SIZE(data->fan_min); i++) {
1503 /* Update the Fan measured value and limits */
1504 if (!(data->has_fan & (1 << i))) {
1508 w83793_read_value(client, W83793_REG_FAN_MIN(i)) << 8;
1510 w83793_read_value(client, W83793_REG_FAN_MIN(i) + 1);
1513 for (i = 0; i < ARRAY_SIZE(data->temp_fan_map); i++) {
1514 if (!(data->has_temp & (1 << i)))
1516 data->temp_fan_map[i] =
1517 w83793_read_value(client, W83793_REG_TEMP_FAN_MAP(i));
1518 for (j = 1; j < 5; j++) {
1520 w83793_read_value(client, W83793_REG_TEMP[i][j]);
1522 data->temp_cruise[i] =
1523 w83793_read_value(client, W83793_REG_TEMP_CRUISE(i));
1524 for (j = 0; j < 7; j++) {
1525 data->sf2_pwm[i][j] =
1526 w83793_read_value(client, W83793_REG_SF2_PWM(i, j));
1527 data->sf2_temp[i][j] =
1528 w83793_read_value(client,
1529 W83793_REG_SF2_TEMP(i, j));
1533 for (i = 0; i < ARRAY_SIZE(data->temp_mode); i++)
1534 data->temp_mode[i] =
1535 w83793_read_value(client, W83793_REG_TEMP_MODE[i]);
1537 for (i = 0; i < ARRAY_SIZE(data->tolerance); i++) {
1538 data->tolerance[i] =
1539 w83793_read_value(client, W83793_REG_TEMP_TOL(i));
1542 for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
1543 if (!(data->has_pwm & (1 << i)))
1545 data->pwm[i][PWM_NONSTOP] =
1546 w83793_read_value(client, W83793_REG_PWM(i, PWM_NONSTOP));
1547 data->pwm[i][PWM_START] =
1548 w83793_read_value(client, W83793_REG_PWM(i, PWM_START));
1549 data->pwm_stop_time[i] =
1550 w83793_read_value(client, W83793_REG_PWM_STOP_TIME(i));
1553 data->pwm_default = w83793_read_value(client, W83793_REG_PWM_DEFAULT);
1554 data->pwm_enable = w83793_read_value(client, W83793_REG_PWM_ENABLE);
1555 data->pwm_uptime = w83793_read_value(client, W83793_REG_PWM_UPTIME);
1556 data->pwm_downtime = w83793_read_value(client, W83793_REG_PWM_DOWNTIME);
1557 data->temp_critical =
1558 w83793_read_value(client, W83793_REG_TEMP_CRITICAL);
1559 data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP);
1561 for (i = 0; i < ARRAY_SIZE(data->beeps); i++) {
1562 data->beeps[i] = w83793_read_value(client, W83793_REG_BEEP(i));
1565 data->last_nonvolatile = jiffies;
1568 static struct w83793_data *w83793_update_device(struct device *dev)
1570 struct i2c_client *client = to_i2c_client(dev);
1571 struct w83793_data *data = i2c_get_clientdata(client);
1574 mutex_lock(&data->update_lock);
1576 if (!(time_after(jiffies, data->last_updated + HZ * 2)
1580 /* Update the voltages measured value and limits */
1581 for (i = 0; i < ARRAY_SIZE(data->in); i++)
1582 data->in[i][IN_READ] =
1583 w83793_read_value(client, W83793_REG_IN[i][IN_READ]);
1585 data->in_low_bits[IN_READ] =
1586 w83793_read_value(client, W83793_REG_IN_LOW_BITS[IN_READ]);
1588 for (i = 0; i < ARRAY_SIZE(data->fan); i++) {
1589 if (!(data->has_fan & (1 << i))) {
1593 w83793_read_value(client, W83793_REG_FAN(i)) << 8;
1595 w83793_read_value(client, W83793_REG_FAN(i) + 1);
1598 for (i = 0; i < ARRAY_SIZE(data->temp); i++) {
1599 if (!(data->has_temp & (1 << i)))
1601 data->temp[i][TEMP_READ] =
1602 w83793_read_value(client, W83793_REG_TEMP[i][TEMP_READ]);
1605 data->temp_low_bits =
1606 w83793_read_value(client, W83793_REG_TEMP_LOW_BITS);
1608 for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
1609 if (data->has_pwm & (1 << i))
1610 data->pwm[i][PWM_DUTY] =
1611 w83793_read_value(client,
1612 W83793_REG_PWM(i, PWM_DUTY));
1615 for (i = 0; i < ARRAY_SIZE(data->alarms); i++)
1617 w83793_read_value(client, W83793_REG_ALARM(i));
1618 if (data->has_vid & 0x01)
1619 data->vid[0] = w83793_read_value(client, W83793_REG_VID_INA);
1620 if (data->has_vid & 0x02)
1621 data->vid[1] = w83793_read_value(client, W83793_REG_VID_INB);
1622 w83793_update_nonvolatile(dev);
1623 data->last_updated = jiffies;
1627 mutex_unlock(&data->update_lock);
1631 /* Ignore the possibility that somebody change bank outside the driver
1632 Must be called with data->update_lock held, except during initialization */
1633 static u8 w83793_read_value(struct i2c_client *client, u16 reg)
1635 struct w83793_data *data = i2c_get_clientdata(client);
1637 u8 new_bank = reg >> 8;
1639 new_bank |= data->bank & 0xfc;
1640 if (data->bank != new_bank) {
1641 if (i2c_smbus_write_byte_data
1642 (client, W83793_REG_BANKSEL, new_bank) >= 0)
1643 data->bank = new_bank;
1645 dev_err(&client->dev,
1646 "set bank to %d failed, fall back "
1647 "to bank %d, read reg 0x%x error\n",
1648 new_bank, data->bank, reg);
1649 res = 0x0; /* read 0x0 from the chip */
1653 res = i2c_smbus_read_byte_data(client, reg & 0xff);
1658 /* Must be called with data->update_lock held, except during initialization */
1659 static int w83793_write_value(struct i2c_client *client, u16 reg, u8 value)
1661 struct w83793_data *data = i2c_get_clientdata(client);
1663 u8 new_bank = reg >> 8;
1665 new_bank |= data->bank & 0xfc;
1666 if (data->bank != new_bank) {
1667 if ((res = i2c_smbus_write_byte_data
1668 (client, W83793_REG_BANKSEL, new_bank)) >= 0)
1669 data->bank = new_bank;
1671 dev_err(&client->dev,
1672 "set bank to %d failed, fall back "
1673 "to bank %d, write reg 0x%x error\n",
1674 new_bank, data->bank, reg);
1679 res = i2c_smbus_write_byte_data(client, reg & 0xff, value);
1684 static int __init sensors_w83793_init(void)
1686 return i2c_add_driver(&w83793_driver);
1689 static void __exit sensors_w83793_exit(void)
1691 i2c_del_driver(&w83793_driver);
1694 MODULE_AUTHOR("Yuan Mu");
1695 MODULE_DESCRIPTION("w83793 driver");
1696 MODULE_LICENSE("GPL");
1698 module_init(sensors_w83793_init);
1699 module_exit(sensors_w83793_exit);