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 w83793_data *data = dev_get_drvdata(dev);
247 return sprintf(buf, "%d\n", data->vrm);
251 show_vid(struct device *dev, struct device_attribute *attr, char *buf)
253 struct w83793_data *data = w83793_update_device(dev);
254 struct sensor_device_attribute_2 *sensor_attr =
255 to_sensor_dev_attr_2(attr);
256 int index = sensor_attr->index;
258 return sprintf(buf, "%d\n", vid_from_reg(data->vid[index], data->vrm));
262 store_vrm(struct device *dev, struct device_attribute *attr,
263 const char *buf, size_t count)
265 struct w83793_data *data = dev_get_drvdata(dev);
266 data->vrm = simple_strtoul(buf, NULL, 10);
270 #define ALARM_STATUS 0
271 #define BEEP_ENABLE 1
273 show_alarm_beep(struct device *dev, struct device_attribute *attr, char *buf)
275 struct w83793_data *data = w83793_update_device(dev);
276 struct sensor_device_attribute_2 *sensor_attr =
277 to_sensor_dev_attr_2(attr);
278 int nr = sensor_attr->nr;
279 int index = sensor_attr->index >> 3;
280 int bit = sensor_attr->index & 0x07;
283 if (ALARM_STATUS == nr) {
284 val = (data->alarms[index] >> (bit)) & 1;
285 } else { /* BEEP_ENABLE */
286 val = (data->beeps[index] >> (bit)) & 1;
289 return sprintf(buf, "%u\n", val);
293 store_beep(struct device *dev, struct device_attribute *attr,
294 const char *buf, size_t count)
296 struct i2c_client *client = to_i2c_client(dev);
297 struct w83793_data *data = i2c_get_clientdata(client);
298 struct sensor_device_attribute_2 *sensor_attr =
299 to_sensor_dev_attr_2(attr);
300 int index = sensor_attr->index >> 3;
301 int shift = sensor_attr->index & 0x07;
302 u8 beep_bit = 1 << shift;
305 val = simple_strtoul(buf, NULL, 10);
306 if (val != 0 && val != 1)
309 mutex_lock(&data->update_lock);
310 data->beeps[index] = w83793_read_value(client, W83793_REG_BEEP(index));
311 data->beeps[index] &= ~beep_bit;
312 data->beeps[index] |= val << shift;
313 w83793_write_value(client, W83793_REG_BEEP(index), data->beeps[index]);
314 mutex_unlock(&data->update_lock);
320 show_beep_enable(struct device *dev, struct device_attribute *attr, char *buf)
322 struct w83793_data *data = w83793_update_device(dev);
323 return sprintf(buf, "%u\n", (data->beep_enable >> 1) & 0x01);
327 store_beep_enable(struct device *dev, struct device_attribute *attr,
328 const char *buf, size_t count)
330 struct i2c_client *client = to_i2c_client(dev);
331 struct w83793_data *data = i2c_get_clientdata(client);
332 u8 val = simple_strtoul(buf, NULL, 10);
334 if (val != 0 && val != 1)
337 mutex_lock(&data->update_lock);
338 data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP)
340 data->beep_enable |= val << 1;
341 w83793_write_value(client, W83793_REG_OVT_BEEP, data->beep_enable);
342 mutex_unlock(&data->update_lock);
347 /* Write any value to clear chassis alarm */
349 store_chassis_clear(struct device *dev,
350 struct device_attribute *attr, const char *buf,
353 struct i2c_client *client = to_i2c_client(dev);
354 struct w83793_data *data = i2c_get_clientdata(client);
357 mutex_lock(&data->update_lock);
358 val = w83793_read_value(client, W83793_REG_CLR_CHASSIS);
360 w83793_write_value(client, W83793_REG_CLR_CHASSIS, val);
361 mutex_unlock(&data->update_lock);
368 show_fan(struct device *dev, struct device_attribute *attr, char *buf)
370 struct sensor_device_attribute_2 *sensor_attr =
371 to_sensor_dev_attr_2(attr);
372 int nr = sensor_attr->nr;
373 int index = sensor_attr->index;
374 struct w83793_data *data = w83793_update_device(dev);
377 if (FAN_INPUT == nr) {
378 val = data->fan[index] & 0x0fff;
380 val = data->fan_min[index] & 0x0fff;
383 return sprintf(buf, "%lu\n", FAN_FROM_REG(val));
387 store_fan_min(struct device *dev, struct device_attribute *attr,
388 const char *buf, size_t count)
390 struct sensor_device_attribute_2 *sensor_attr =
391 to_sensor_dev_attr_2(attr);
392 int index = sensor_attr->index;
393 struct i2c_client *client = to_i2c_client(dev);
394 struct w83793_data *data = i2c_get_clientdata(client);
395 u16 val = FAN_TO_REG(simple_strtoul(buf, NULL, 10));
397 mutex_lock(&data->update_lock);
398 data->fan_min[index] = val;
399 w83793_write_value(client, W83793_REG_FAN_MIN(index),
401 w83793_write_value(client, W83793_REG_FAN_MIN(index) + 1, val & 0xff);
402 mutex_unlock(&data->update_lock);
408 show_pwm(struct device *dev, struct device_attribute *attr, char *buf)
410 struct sensor_device_attribute_2 *sensor_attr =
411 to_sensor_dev_attr_2(attr);
412 struct w83793_data *data = w83793_update_device(dev);
414 int nr = sensor_attr->nr;
415 int index = sensor_attr->index;
417 if (PWM_STOP_TIME == nr)
418 val = TIME_FROM_REG(data->pwm_stop_time[index]);
420 val = (data->pwm[index][nr] & 0x3f) << 2;
422 return sprintf(buf, "%d\n", val);
426 store_pwm(struct device *dev, struct device_attribute *attr,
427 const char *buf, size_t count)
429 struct i2c_client *client = to_i2c_client(dev);
430 struct w83793_data *data = i2c_get_clientdata(client);
431 struct sensor_device_attribute_2 *sensor_attr =
432 to_sensor_dev_attr_2(attr);
433 int nr = sensor_attr->nr;
434 int index = sensor_attr->index;
437 mutex_lock(&data->update_lock);
438 if (PWM_STOP_TIME == nr) {
439 val = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
440 data->pwm_stop_time[index] = val;
441 w83793_write_value(client, W83793_REG_PWM_STOP_TIME(index),
444 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 0xff)
446 data->pwm[index][nr] =
447 w83793_read_value(client, W83793_REG_PWM(index, nr)) & 0xc0;
448 data->pwm[index][nr] |= val;
449 w83793_write_value(client, W83793_REG_PWM(index, nr),
450 data->pwm[index][nr]);
453 mutex_unlock(&data->update_lock);
458 show_temp(struct device *dev, struct device_attribute *attr, char *buf)
460 struct sensor_device_attribute_2 *sensor_attr =
461 to_sensor_dev_attr_2(attr);
462 int nr = sensor_attr->nr;
463 int index = sensor_attr->index;
464 struct w83793_data *data = w83793_update_device(dev);
465 long temp = TEMP_FROM_REG(data->temp[index][nr]);
467 if (TEMP_READ == nr && index < 4) { /* Only TD1-TD4 have low bits */
468 int low = ((data->temp_low_bits >> (index * 2)) & 0x03) * 250;
469 temp += temp > 0 ? low : -low;
471 return sprintf(buf, "%ld\n", temp);
475 store_temp(struct device *dev, struct device_attribute *attr,
476 const char *buf, size_t count)
478 struct sensor_device_attribute_2 *sensor_attr =
479 to_sensor_dev_attr_2(attr);
480 int nr = sensor_attr->nr;
481 int index = sensor_attr->index;
482 struct i2c_client *client = to_i2c_client(dev);
483 struct w83793_data *data = i2c_get_clientdata(client);
484 long tmp = simple_strtol(buf, NULL, 10);
486 mutex_lock(&data->update_lock);
487 data->temp[index][nr] = TEMP_TO_REG(tmp, -128, 127);
488 w83793_write_value(client, W83793_REG_TEMP[index][nr],
489 data->temp[index][nr]);
490 mutex_unlock(&data->update_lock);
496 each has 4 mode:(2 bits)
498 1: Use internal temp sensor(default)
500 3: Use sensor in Intel CPU and get result by PECI
503 each has 2 mode:(1 bit)
504 0: Disable temp sensor monitor
505 1: To enable temp sensors monitor
508 /* 0 disable, 6 PECI */
509 static u8 TO_TEMP_MODE[] = { 0, 0, 0, 6 };
512 show_temp_mode(struct device *dev, struct device_attribute *attr, char *buf)
514 struct w83793_data *data = w83793_update_device(dev);
515 struct sensor_device_attribute_2 *sensor_attr =
516 to_sensor_dev_attr_2(attr);
517 int index = sensor_attr->index;
518 u8 mask = (index < 4) ? 0x03 : 0x01;
519 u8 shift = (index < 4) ? (2 * index) : (index - 4);
521 index = (index < 4) ? 0 : 1;
523 tmp = (data->temp_mode[index] >> shift) & mask;
525 /* for the internal sensor, found out if diode or thermistor */
527 tmp = index == 0 ? 3 : 4;
529 tmp = TO_TEMP_MODE[tmp];
532 return sprintf(buf, "%d\n", tmp);
536 store_temp_mode(struct device *dev, struct device_attribute *attr,
537 const char *buf, size_t count)
539 struct i2c_client *client = to_i2c_client(dev);
540 struct w83793_data *data = i2c_get_clientdata(client);
541 struct sensor_device_attribute_2 *sensor_attr =
542 to_sensor_dev_attr_2(attr);
543 int index = sensor_attr->index;
544 u8 mask = (index < 4) ? 0x03 : 0x01;
545 u8 shift = (index < 4) ? (2 * index) : (index - 4);
546 u8 val = simple_strtoul(buf, NULL, 10);
548 /* transform the sysfs interface values into table above */
549 if ((val == 6) && (index < 4)) {
551 } else if ((val == 3 && index < 4)
552 || (val == 4 && index >= 4)) {
553 /* transform diode or thermistor into internal enable */
559 index = (index < 4) ? 0 : 1;
560 mutex_lock(&data->update_lock);
561 data->temp_mode[index] =
562 w83793_read_value(client, W83793_REG_TEMP_MODE[index]);
563 data->temp_mode[index] &= ~(mask << shift);
564 data->temp_mode[index] |= val << shift;
565 w83793_write_value(client, W83793_REG_TEMP_MODE[index],
566 data->temp_mode[index]);
567 mutex_unlock(&data->update_lock);
572 #define SETUP_PWM_DEFAULT 0
573 #define SETUP_PWM_UPTIME 1 /* Unit in 0.1s */
574 #define SETUP_PWM_DOWNTIME 2 /* Unit in 0.1s */
575 #define SETUP_TEMP_CRITICAL 3
577 show_sf_setup(struct device *dev, struct device_attribute *attr, char *buf)
579 struct sensor_device_attribute_2 *sensor_attr =
580 to_sensor_dev_attr_2(attr);
581 int nr = sensor_attr->nr;
582 struct w83793_data *data = w83793_update_device(dev);
585 if (SETUP_PWM_DEFAULT == nr) {
586 val = (data->pwm_default & 0x3f) << 2;
587 } else if (SETUP_PWM_UPTIME == nr) {
588 val = TIME_FROM_REG(data->pwm_uptime);
589 } else if (SETUP_PWM_DOWNTIME == nr) {
590 val = TIME_FROM_REG(data->pwm_downtime);
591 } else if (SETUP_TEMP_CRITICAL == nr) {
592 val = TEMP_FROM_REG(data->temp_critical & 0x7f);
595 return sprintf(buf, "%d\n", val);
599 store_sf_setup(struct device *dev, struct device_attribute *attr,
600 const char *buf, size_t count)
602 struct sensor_device_attribute_2 *sensor_attr =
603 to_sensor_dev_attr_2(attr);
604 int nr = sensor_attr->nr;
605 struct i2c_client *client = to_i2c_client(dev);
606 struct w83793_data *data = i2c_get_clientdata(client);
608 mutex_lock(&data->update_lock);
609 if (SETUP_PWM_DEFAULT == nr) {
611 w83793_read_value(client, W83793_REG_PWM_DEFAULT) & 0xc0;
612 data->pwm_default |= SENSORS_LIMIT(simple_strtoul(buf, NULL,
615 w83793_write_value(client, W83793_REG_PWM_DEFAULT,
617 } else if (SETUP_PWM_UPTIME == nr) {
618 data->pwm_uptime = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
619 data->pwm_uptime += data->pwm_uptime == 0 ? 1 : 0;
620 w83793_write_value(client, W83793_REG_PWM_UPTIME,
622 } else if (SETUP_PWM_DOWNTIME == nr) {
623 data->pwm_downtime = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
624 data->pwm_downtime += data->pwm_downtime == 0 ? 1 : 0;
625 w83793_write_value(client, W83793_REG_PWM_DOWNTIME,
627 } else { /* SETUP_TEMP_CRITICAL */
628 data->temp_critical =
629 w83793_read_value(client, W83793_REG_TEMP_CRITICAL) & 0x80;
630 data->temp_critical |= TEMP_TO_REG(simple_strtol(buf, NULL, 10),
632 w83793_write_value(client, W83793_REG_TEMP_CRITICAL,
633 data->temp_critical);
636 mutex_unlock(&data->update_lock);
641 Temp SmartFan control
643 Temp channel control which pwm fan, bitfield, bit 0 indicate pwm1...
644 It's possible two or more temp channels control the same fan, w83793
645 always prefers to pick the most critical request and applies it to
647 It's possible one fan is not in any mapping of 6 temp channels, this
648 means the fan is manual mode
651 Each temp channel has its own SmartFan mode, and temp channel
652 control fans that are set by TEMP_FAN_MAP
654 1: Thermal Cruise Mode
657 Target temperature in thermal cruise mode, w83793 will try to turn
658 fan speed to keep the temperature of target device around this
662 If Temp higher or lower than target with this tolerance, w83793
663 will take actions to speed up or slow down the fan to keep the
664 temperature within the tolerance range.
667 #define TEMP_FAN_MAP 0
668 #define TEMP_PWM_ENABLE 1
669 #define TEMP_CRUISE 2
670 #define TEMP_TOLERANCE 3
672 show_sf_ctrl(struct device *dev, struct device_attribute *attr, char *buf)
674 struct sensor_device_attribute_2 *sensor_attr =
675 to_sensor_dev_attr_2(attr);
676 int nr = sensor_attr->nr;
677 int index = sensor_attr->index;
678 struct w83793_data *data = w83793_update_device(dev);
681 if (TEMP_FAN_MAP == nr) {
682 val = data->temp_fan_map[index];
683 } else if (TEMP_PWM_ENABLE == nr) {
684 /* +2 to transfrom into 2 and 3 to conform with sysfs intf */
685 val = ((data->pwm_enable >> index) & 0x01) + 2;
686 } else if (TEMP_CRUISE == nr) {
687 val = TEMP_FROM_REG(data->temp_cruise[index] & 0x7f);
688 } else { /* TEMP_TOLERANCE */
689 val = data->tolerance[index >> 1] >> ((index & 0x01) ? 4 : 0);
690 val = TEMP_FROM_REG(val & 0x0f);
692 return sprintf(buf, "%d\n", val);
696 store_sf_ctrl(struct device *dev, struct device_attribute *attr,
697 const char *buf, size_t count)
699 struct sensor_device_attribute_2 *sensor_attr =
700 to_sensor_dev_attr_2(attr);
701 int nr = sensor_attr->nr;
702 int index = sensor_attr->index;
703 struct i2c_client *client = to_i2c_client(dev);
704 struct w83793_data *data = i2c_get_clientdata(client);
707 mutex_lock(&data->update_lock);
708 if (TEMP_FAN_MAP == nr) {
709 val = simple_strtoul(buf, NULL, 10) & 0xff;
710 w83793_write_value(client, W83793_REG_TEMP_FAN_MAP(index), val);
711 data->temp_fan_map[index] = val;
712 } else if (TEMP_PWM_ENABLE == nr) {
713 val = simple_strtoul(buf, NULL, 10);
714 if (2 == val || 3 == val) {
716 w83793_read_value(client, W83793_REG_PWM_ENABLE);
718 data->pwm_enable |= 1 << index;
720 data->pwm_enable &= ~(1 << index);
721 w83793_write_value(client, W83793_REG_PWM_ENABLE,
724 mutex_unlock(&data->update_lock);
727 } else if (TEMP_CRUISE == nr) {
728 data->temp_cruise[index] =
729 w83793_read_value(client, W83793_REG_TEMP_CRUISE(index));
730 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x7f);
731 data->temp_cruise[index] &= 0x80;
732 data->temp_cruise[index] |= val;
734 w83793_write_value(client, W83793_REG_TEMP_CRUISE(index),
735 data->temp_cruise[index]);
736 } else { /* TEMP_TOLERANCE */
738 u8 shift = (index & 0x01) ? 4 : 0;
740 w83793_read_value(client, W83793_REG_TEMP_TOL(i));
742 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x0f);
743 data->tolerance[i] &= ~(0x0f << shift);
744 data->tolerance[i] |= val << shift;
745 w83793_write_value(client, W83793_REG_TEMP_TOL(i),
749 mutex_unlock(&data->update_lock);
754 show_sf2_pwm(struct device *dev, struct device_attribute *attr, char *buf)
756 struct sensor_device_attribute_2 *sensor_attr =
757 to_sensor_dev_attr_2(attr);
758 int nr = sensor_attr->nr;
759 int index = sensor_attr->index;
760 struct w83793_data *data = w83793_update_device(dev);
762 return sprintf(buf, "%d\n", (data->sf2_pwm[index][nr] & 0x3f) << 2);
766 store_sf2_pwm(struct device *dev, struct device_attribute *attr,
767 const char *buf, size_t count)
769 struct i2c_client *client = to_i2c_client(dev);
770 struct w83793_data *data = i2c_get_clientdata(client);
771 struct sensor_device_attribute_2 *sensor_attr =
772 to_sensor_dev_attr_2(attr);
773 int nr = sensor_attr->nr;
774 int index = sensor_attr->index;
775 u8 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 0xff) >> 2;
777 mutex_lock(&data->update_lock);
778 data->sf2_pwm[index][nr] =
779 w83793_read_value(client, W83793_REG_SF2_PWM(index, nr)) & 0xc0;
780 data->sf2_pwm[index][nr] |= val;
781 w83793_write_value(client, W83793_REG_SF2_PWM(index, nr),
782 data->sf2_pwm[index][nr]);
783 mutex_unlock(&data->update_lock);
788 show_sf2_temp(struct device *dev, struct device_attribute *attr, char *buf)
790 struct sensor_device_attribute_2 *sensor_attr =
791 to_sensor_dev_attr_2(attr);
792 int nr = sensor_attr->nr;
793 int index = sensor_attr->index;
794 struct w83793_data *data = w83793_update_device(dev);
796 return sprintf(buf, "%ld\n",
797 TEMP_FROM_REG(data->sf2_temp[index][nr] & 0x7f));
801 store_sf2_temp(struct device *dev, struct device_attribute *attr,
802 const char *buf, size_t count)
804 struct i2c_client *client = to_i2c_client(dev);
805 struct w83793_data *data = i2c_get_clientdata(client);
806 struct sensor_device_attribute_2 *sensor_attr =
807 to_sensor_dev_attr_2(attr);
808 int nr = sensor_attr->nr;
809 int index = sensor_attr->index;
810 u8 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x7f);
812 mutex_lock(&data->update_lock);
813 data->sf2_temp[index][nr] =
814 w83793_read_value(client, W83793_REG_SF2_TEMP(index, nr)) & 0x80;
815 data->sf2_temp[index][nr] |= val;
816 w83793_write_value(client, W83793_REG_SF2_TEMP(index, nr),
817 data->sf2_temp[index][nr]);
818 mutex_unlock(&data->update_lock);
822 /* only Vcore A/B and Vtt have additional 2 bits precision */
824 show_in(struct device *dev, struct device_attribute *attr, char *buf)
826 struct sensor_device_attribute_2 *sensor_attr =
827 to_sensor_dev_attr_2(attr);
828 int nr = sensor_attr->nr;
829 int index = sensor_attr->index;
830 struct w83793_data *data = w83793_update_device(dev);
831 u16 val = data->in[index][nr];
835 val += (data->in_low_bits[nr] >> (index * 2)) & 0x3;
837 /* voltage inputs 5VDD and 5VSB needs 150mV offset */
838 val = val * scale_in[index] + scale_in_add[index];
839 return sprintf(buf, "%d\n", val);
843 store_in(struct device *dev, struct device_attribute *attr,
844 const char *buf, size_t count)
846 struct sensor_device_attribute_2 *sensor_attr =
847 to_sensor_dev_attr_2(attr);
848 int nr = sensor_attr->nr;
849 int index = sensor_attr->index;
850 struct i2c_client *client = to_i2c_client(dev);
851 struct w83793_data *data = i2c_get_clientdata(client);
855 (simple_strtoul(buf, NULL, 10) +
856 scale_in[index] / 2) / scale_in[index];
857 mutex_lock(&data->update_lock);
859 /* fix the limit values of 5VDD and 5VSB to ALARM mechanism */
860 if (1 == nr || 2 == nr) {
861 val -= scale_in_add[index] / scale_in[index];
863 val = SENSORS_LIMIT(val, 0, 255);
865 val = SENSORS_LIMIT(val, 0, 0x3FF);
866 data->in_low_bits[nr] =
867 w83793_read_value(client, W83793_REG_IN_LOW_BITS[nr]);
868 data->in_low_bits[nr] &= ~(0x03 << (2 * index));
869 data->in_low_bits[nr] |= (val & 0x03) << (2 * index);
870 w83793_write_value(client, W83793_REG_IN_LOW_BITS[nr],
871 data->in_low_bits[nr]);
874 data->in[index][nr] = val;
875 w83793_write_value(client, W83793_REG_IN[index][nr],
876 data->in[index][nr]);
877 mutex_unlock(&data->update_lock);
883 #define SENSOR_ATTR_IN(index) \
884 SENSOR_ATTR_2(in##index##_input, S_IRUGO, show_in, NULL, \
886 SENSOR_ATTR_2(in##index##_max, S_IRUGO | S_IWUSR, show_in, \
887 store_in, IN_MAX, index), \
888 SENSOR_ATTR_2(in##index##_min, S_IRUGO | S_IWUSR, show_in, \
889 store_in, IN_LOW, index), \
890 SENSOR_ATTR_2(in##index##_alarm, S_IRUGO, show_alarm_beep, \
891 NULL, ALARM_STATUS, index + ((index > 2) ? 1 : 0)), \
892 SENSOR_ATTR_2(in##index##_beep, S_IWUSR | S_IRUGO, \
893 show_alarm_beep, store_beep, BEEP_ENABLE, \
894 index + ((index > 2) ? 1 : 0))
896 #define SENSOR_ATTR_FAN(index) \
897 SENSOR_ATTR_2(fan##index##_alarm, S_IRUGO, show_alarm_beep, \
898 NULL, ALARM_STATUS, index + 17), \
899 SENSOR_ATTR_2(fan##index##_beep, S_IWUSR | S_IRUGO, \
900 show_alarm_beep, store_beep, BEEP_ENABLE, index + 17), \
901 SENSOR_ATTR_2(fan##index##_input, S_IRUGO, show_fan, \
902 NULL, FAN_INPUT, index - 1), \
903 SENSOR_ATTR_2(fan##index##_min, S_IWUSR | S_IRUGO, \
904 show_fan, store_fan_min, FAN_MIN, index - 1)
906 #define SENSOR_ATTR_PWM(index) \
907 SENSOR_ATTR_2(pwm##index, S_IWUSR | S_IRUGO, show_pwm, \
908 store_pwm, PWM_DUTY, index - 1), \
909 SENSOR_ATTR_2(pwm##index##_nonstop, S_IWUSR | S_IRUGO, \
910 show_pwm, store_pwm, PWM_NONSTOP, index - 1), \
911 SENSOR_ATTR_2(pwm##index##_start, S_IWUSR | S_IRUGO, \
912 show_pwm, store_pwm, PWM_START, index - 1), \
913 SENSOR_ATTR_2(pwm##index##_stop_time, S_IWUSR | S_IRUGO, \
914 show_pwm, store_pwm, PWM_STOP_TIME, index - 1)
916 #define SENSOR_ATTR_TEMP(index) \
917 SENSOR_ATTR_2(temp##index##_type, S_IRUGO | S_IWUSR, \
918 show_temp_mode, store_temp_mode, NOT_USED, index - 1), \
919 SENSOR_ATTR_2(temp##index##_input, S_IRUGO, show_temp, \
920 NULL, TEMP_READ, index - 1), \
921 SENSOR_ATTR_2(temp##index##_max, S_IRUGO | S_IWUSR, show_temp, \
922 store_temp, TEMP_CRIT, index - 1), \
923 SENSOR_ATTR_2(temp##index##_max_hyst, S_IRUGO | S_IWUSR, \
924 show_temp, store_temp, TEMP_CRIT_HYST, index - 1), \
925 SENSOR_ATTR_2(temp##index##_warn, S_IRUGO | S_IWUSR, show_temp, \
926 store_temp, TEMP_WARN, index - 1), \
927 SENSOR_ATTR_2(temp##index##_warn_hyst, S_IRUGO | S_IWUSR, \
928 show_temp, store_temp, TEMP_WARN_HYST, index - 1), \
929 SENSOR_ATTR_2(temp##index##_alarm, S_IRUGO, \
930 show_alarm_beep, NULL, ALARM_STATUS, index + 11), \
931 SENSOR_ATTR_2(temp##index##_beep, S_IWUSR | S_IRUGO, \
932 show_alarm_beep, store_beep, BEEP_ENABLE, index + 11), \
933 SENSOR_ATTR_2(temp##index##_auto_channels_pwm, \
934 S_IRUGO | S_IWUSR, show_sf_ctrl, store_sf_ctrl, \
935 TEMP_FAN_MAP, index - 1), \
936 SENSOR_ATTR_2(temp##index##_pwm_enable, S_IWUSR | S_IRUGO, \
937 show_sf_ctrl, store_sf_ctrl, TEMP_PWM_ENABLE, \
939 SENSOR_ATTR_2(thermal_cruise##index, S_IRUGO | S_IWUSR, \
940 show_sf_ctrl, store_sf_ctrl, TEMP_CRUISE, index - 1), \
941 SENSOR_ATTR_2(tolerance##index, S_IRUGO | S_IWUSR, show_sf_ctrl,\
942 store_sf_ctrl, TEMP_TOLERANCE, index - 1), \
943 SENSOR_ATTR_2(temp##index##_auto_point1_pwm, S_IRUGO | S_IWUSR, \
944 show_sf2_pwm, store_sf2_pwm, 0, index - 1), \
945 SENSOR_ATTR_2(temp##index##_auto_point2_pwm, S_IRUGO | S_IWUSR, \
946 show_sf2_pwm, store_sf2_pwm, 1, index - 1), \
947 SENSOR_ATTR_2(temp##index##_auto_point3_pwm, S_IRUGO | S_IWUSR, \
948 show_sf2_pwm, store_sf2_pwm, 2, index - 1), \
949 SENSOR_ATTR_2(temp##index##_auto_point4_pwm, S_IRUGO | S_IWUSR, \
950 show_sf2_pwm, store_sf2_pwm, 3, index - 1), \
951 SENSOR_ATTR_2(temp##index##_auto_point5_pwm, S_IRUGO | S_IWUSR, \
952 show_sf2_pwm, store_sf2_pwm, 4, index - 1), \
953 SENSOR_ATTR_2(temp##index##_auto_point6_pwm, S_IRUGO | S_IWUSR, \
954 show_sf2_pwm, store_sf2_pwm, 5, index - 1), \
955 SENSOR_ATTR_2(temp##index##_auto_point7_pwm, S_IRUGO | S_IWUSR, \
956 show_sf2_pwm, store_sf2_pwm, 6, index - 1), \
957 SENSOR_ATTR_2(temp##index##_auto_point1_temp, S_IRUGO | S_IWUSR,\
958 show_sf2_temp, store_sf2_temp, 0, index - 1), \
959 SENSOR_ATTR_2(temp##index##_auto_point2_temp, S_IRUGO | S_IWUSR,\
960 show_sf2_temp, store_sf2_temp, 1, index - 1), \
961 SENSOR_ATTR_2(temp##index##_auto_point3_temp, S_IRUGO | S_IWUSR,\
962 show_sf2_temp, store_sf2_temp, 2, index - 1), \
963 SENSOR_ATTR_2(temp##index##_auto_point4_temp, S_IRUGO | S_IWUSR,\
964 show_sf2_temp, store_sf2_temp, 3, index - 1), \
965 SENSOR_ATTR_2(temp##index##_auto_point5_temp, S_IRUGO | S_IWUSR,\
966 show_sf2_temp, store_sf2_temp, 4, index - 1), \
967 SENSOR_ATTR_2(temp##index##_auto_point6_temp, S_IRUGO | S_IWUSR,\
968 show_sf2_temp, store_sf2_temp, 5, index - 1), \
969 SENSOR_ATTR_2(temp##index##_auto_point7_temp, S_IRUGO | S_IWUSR,\
970 show_sf2_temp, store_sf2_temp, 6, index - 1)
972 static struct sensor_device_attribute_2 w83793_sensor_attr_2[] = {
993 static struct sensor_device_attribute_2 w83793_temp[] = {
1003 static struct sensor_device_attribute_2 w83793_left_fan[] = {
1008 SENSOR_ATTR_FAN(10),
1009 SENSOR_ATTR_FAN(11),
1010 SENSOR_ATTR_FAN(12),
1014 static struct sensor_device_attribute_2 w83793_left_pwm[] = {
1022 static struct sensor_device_attribute_2 w83793_vid[] = {
1023 SENSOR_ATTR_2(cpu0_vid, S_IRUGO, show_vid, NULL, NOT_USED, 0),
1024 SENSOR_ATTR_2(cpu1_vid, S_IRUGO, show_vid, NULL, NOT_USED, 1),
1027 static struct sensor_device_attribute_2 sda_single_files[] = {
1028 SENSOR_ATTR_2(vrm, S_IWUSR | S_IRUGO, show_vrm, store_vrm,
1029 NOT_USED, NOT_USED),
1030 SENSOR_ATTR_2(chassis, S_IWUSR | S_IRUGO, show_alarm_beep,
1031 store_chassis_clear, ALARM_STATUS, 30),
1032 SENSOR_ATTR_2(beep_enable, S_IWUSR | S_IRUGO, show_beep_enable,
1033 store_beep_enable, NOT_USED, NOT_USED),
1034 SENSOR_ATTR_2(pwm_default, S_IWUSR | S_IRUGO, show_sf_setup,
1035 store_sf_setup, SETUP_PWM_DEFAULT, NOT_USED),
1036 SENSOR_ATTR_2(pwm_uptime, S_IWUSR | S_IRUGO, show_sf_setup,
1037 store_sf_setup, SETUP_PWM_UPTIME, NOT_USED),
1038 SENSOR_ATTR_2(pwm_downtime, S_IWUSR | S_IRUGO, show_sf_setup,
1039 store_sf_setup, SETUP_PWM_DOWNTIME, NOT_USED),
1040 SENSOR_ATTR_2(temp_critical, S_IWUSR | S_IRUGO, show_sf_setup,
1041 store_sf_setup, SETUP_TEMP_CRITICAL, NOT_USED),
1044 static void w83793_init_client(struct i2c_client *client)
1047 w83793_write_value(client, W83793_REG_CONFIG, 0x80);
1050 /* Start monitoring */
1051 w83793_write_value(client, W83793_REG_CONFIG,
1052 w83793_read_value(client, W83793_REG_CONFIG) | 0x01);
1056 static int w83793_attach_adapter(struct i2c_adapter *adapter)
1058 if (!(adapter->class & I2C_CLASS_HWMON))
1060 return i2c_probe(adapter, &addr_data, w83793_detect);
1063 static int w83793_detach_client(struct i2c_client *client)
1065 struct w83793_data *data = i2c_get_clientdata(client);
1066 struct device *dev = &client->dev;
1071 hwmon_device_unregister(data->hwmon_dev);
1073 for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1074 device_remove_file(dev,
1075 &w83793_sensor_attr_2[i].dev_attr);
1077 for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1078 device_remove_file(dev, &sda_single_files[i].dev_attr);
1080 for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1081 device_remove_file(dev, &w83793_vid[i].dev_attr);
1083 for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1084 device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1086 for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1087 device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1089 for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1090 device_remove_file(dev, &w83793_temp[i].dev_attr);
1093 if ((err = i2c_detach_client(client)))
1107 w83793_create_subclient(struct i2c_adapter *adapter,
1108 struct i2c_client *client, int addr,
1109 struct i2c_client **sub_cli)
1112 struct i2c_client *sub_client;
1114 (*sub_cli) = sub_client =
1115 kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
1116 if (!(sub_client)) {
1119 sub_client->addr = 0x48 + addr;
1120 i2c_set_clientdata(sub_client, NULL);
1121 sub_client->adapter = adapter;
1122 sub_client->driver = &w83793_driver;
1123 strlcpy(sub_client->name, "w83793 subclient", I2C_NAME_SIZE);
1124 if ((err = i2c_attach_client(sub_client))) {
1125 dev_err(&client->dev, "subclient registration "
1126 "at address 0x%x failed\n", sub_client->addr);
1133 w83793_detect_subclients(struct i2c_adapter *adapter, int address,
1134 int kind, struct i2c_client *client)
1138 struct w83793_data *data = i2c_get_clientdata(client);
1140 id = i2c_adapter_id(adapter);
1141 if (force_subclients[0] == id && force_subclients[1] == address) {
1142 for (i = 2; i <= 3; i++) {
1143 if (force_subclients[i] < 0x48
1144 || force_subclients[i] > 0x4f) {
1145 dev_err(&client->dev,
1146 "invalid subclient "
1147 "address %d; must be 0x48-0x4f\n",
1148 force_subclients[i]);
1153 w83793_write_value(client, W83793_REG_I2C_SUBADDR,
1154 (force_subclients[2] & 0x07) |
1155 ((force_subclients[3] & 0x07) << 4));
1158 tmp = w83793_read_value(client, W83793_REG_I2C_SUBADDR);
1159 if (!(tmp & 0x08)) {
1161 w83793_create_subclient(adapter, client, tmp & 0x7,
1166 if (!(tmp & 0x80)) {
1167 if ((data->lm75[0] != NULL)
1168 && ((tmp & 0x7) == ((tmp >> 4) & 0x7))) {
1169 dev_err(&client->dev,
1170 "duplicate addresses 0x%x, "
1171 "use force_subclients\n", data->lm75[0]->addr);
1175 err = w83793_create_subclient(adapter, client,
1176 (tmp >> 4) & 0x7, &data->lm75[1]);
1183 /* Undo inits in case of errors */
1186 if (data->lm75[0] != NULL) {
1187 i2c_detach_client(data->lm75[0]);
1188 kfree(data->lm75[0]);
1194 static int w83793_detect(struct i2c_adapter *adapter, int address, int kind)
1198 struct i2c_client *client;
1200 struct w83793_data *data;
1201 int files_fan = ARRAY_SIZE(w83793_left_fan) / 7;
1202 int files_pwm = ARRAY_SIZE(w83793_left_pwm) / 5;
1203 int files_temp = ARRAY_SIZE(w83793_temp) / 6;
1206 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1210 /* OK. For now, we presume we have a valid client. We now create the
1211 client structure, even though we cannot fill it completely yet.
1212 But it allows us to access w83793_{read,write}_value. */
1214 if (!(data = kzalloc(sizeof(struct w83793_data), GFP_KERNEL))) {
1219 client = &data->client;
1221 i2c_set_clientdata(client, data);
1222 client->addr = address;
1223 client->adapter = adapter;
1224 client->driver = &w83793_driver;
1226 data->bank = i2c_smbus_read_byte_data(client, W83793_REG_BANKSEL);
1228 /* Now, we do the remaining detection. */
1230 tmp = data->bank & 0x80 ? 0x5c : 0xa3;
1231 /* Check Winbond vendor ID */
1232 if (tmp != i2c_smbus_read_byte_data(client,
1233 W83793_REG_VENDORID)) {
1234 pr_debug("w83793: Detection failed at check "
1240 /* If Winbond chip, address of chip and W83793_REG_I2C_ADDR
1242 if ((data->bank & 0x07) == 0
1243 && i2c_smbus_read_byte_data(client, W83793_REG_I2C_ADDR) !=
1245 pr_debug("w83793: Detection failed at check "
1253 /* We have either had a force parameter, or we have already detected the
1254 Winbond. Determine the chip type now */
1257 if (0x7b == w83793_read_value(client, W83793_REG_CHIPID)) {
1261 dev_warn(&adapter->dev, "w83793: Ignoring "
1262 "'force' parameter for unknown chip "
1263 "at address 0x%02x\n", address);
1269 /* Fill in the remaining client fields and put into the global list */
1270 strlcpy(client->name, "w83793", I2C_NAME_SIZE);
1272 mutex_init(&data->update_lock);
1274 /* Tell the I2C layer a new client has arrived */
1275 if ((err = i2c_attach_client(client)))
1278 if ((err = w83793_detect_subclients(adapter, address, kind, client)))
1281 /* Initialize the chip */
1282 w83793_init_client(client);
1284 data->vrm = vid_which_vrm();
1286 Only fan 1-5 has their own input pins,
1287 Pwm 1-3 has their own pins
1289 data->has_fan = 0x1f;
1290 data->has_pwm = 0x07;
1291 tmp = w83793_read_value(client, W83793_REG_MFC);
1292 val = w83793_read_value(client, W83793_REG_FANIN_CTRL);
1294 /* check the function of pins 49-56 */
1295 if (!(tmp & 0x80)) {
1296 data->has_pwm |= 0x18; /* pwm 4,5 */
1297 if (val & 0x01) { /* fan 6 */
1298 data->has_fan |= 0x20;
1299 data->has_pwm |= 0x20;
1301 if (val & 0x02) { /* fan 7 */
1302 data->has_fan |= 0x40;
1303 data->has_pwm |= 0x40;
1305 if (!(tmp & 0x40) && (val & 0x04)) { /* fan 8 */
1306 data->has_fan |= 0x80;
1307 data->has_pwm |= 0x80;
1311 if (0x08 == (tmp & 0x0c)) {
1312 if (val & 0x08) /* fan 9 */
1313 data->has_fan |= 0x100;
1314 if (val & 0x10) /* fan 10 */
1315 data->has_fan |= 0x200;
1318 if (0x20 == (tmp & 0x30)) {
1319 if (val & 0x20) /* fan 11 */
1320 data->has_fan |= 0x400;
1321 if (val & 0x40) /* fan 12 */
1322 data->has_fan |= 0x800;
1325 if ((tmp & 0x01) && (val & 0x04)) { /* fan 8, second location */
1326 data->has_fan |= 0x80;
1327 data->has_pwm |= 0x80;
1330 tmp = w83793_read_value(client, W83793_REG_FANIN_SEL);
1331 if ((tmp & 0x01) && (val & 0x08)) { /* fan 9, second location */
1332 data->has_fan |= 0x100;
1334 if ((tmp & 0x02) && (val & 0x10)) { /* fan 10, second location */
1335 data->has_fan |= 0x200;
1337 if ((tmp & 0x04) && (val & 0x20)) { /* fan 11, second location */
1338 data->has_fan |= 0x400;
1340 if ((tmp & 0x08) && (val & 0x40)) { /* fan 12, second location */
1341 data->has_fan |= 0x800;
1344 /* check the temp1-6 mode, ignore former AMDSI selected inputs */
1345 tmp = w83793_read_value(client,W83793_REG_TEMP_MODE[0]);
1347 data->has_temp |= 0x01;
1349 data->has_temp |= 0x02;
1351 data->has_temp |= 0x04;
1353 data->has_temp |= 0x08;
1355 tmp = w83793_read_value(client,W83793_REG_TEMP_MODE[1]);
1357 data->has_temp |= 0x10;
1359 data->has_temp |= 0x20;
1361 /* Detect the VID usage and ignore unused input */
1362 tmp = w83793_read_value(client, W83793_REG_MFC);
1364 data->has_vid |= 0x1; /* has VIDA */
1366 data->has_vid |= 0x2; /* has VIDB */
1368 /* Register sysfs hooks */
1369 for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++) {
1370 err = device_create_file(dev,
1371 &w83793_sensor_attr_2[i].dev_attr);
1376 for (i = 0; i < ARRAY_SIZE(w83793_vid); i++) {
1377 if (!(data->has_vid & (1 << i)))
1379 err = device_create_file(dev, &w83793_vid[i].dev_attr);
1384 for (i = 0; i < ARRAY_SIZE(sda_single_files); i++) {
1385 err = device_create_file(dev, &sda_single_files[i].dev_attr);
1391 for (i = 0; i < 6; i++) {
1393 if (!(data->has_temp & (1 << i)))
1395 for (j = 0; j < files_temp; j++) {
1396 err = device_create_file(dev,
1397 &w83793_temp[(i) * files_temp
1404 for (i = 5; i < 12; i++) {
1406 if (!(data->has_fan & (1 << i)))
1408 for (j = 0; j < files_fan; j++) {
1409 err = device_create_file(dev,
1410 &w83793_left_fan[(i - 5) * files_fan
1417 for (i = 3; i < 8; i++) {
1419 if (!(data->has_pwm & (1 << i)))
1421 for (j = 0; j < files_pwm; j++) {
1422 err = device_create_file(dev,
1423 &w83793_left_pwm[(i - 3) * files_pwm
1430 data->hwmon_dev = hwmon_device_register(dev);
1431 if (IS_ERR(data->hwmon_dev)) {
1432 err = PTR_ERR(data->hwmon_dev);
1438 /* Unregister sysfs hooks */
1441 for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1442 device_remove_file(dev, &w83793_sensor_attr_2[i].dev_attr);
1444 for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1445 device_remove_file(dev, &sda_single_files[i].dev_attr);
1447 for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1448 device_remove_file(dev, &w83793_vid[i].dev_attr);
1450 for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1451 device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1453 for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1454 device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1456 for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1457 device_remove_file(dev, &w83793_temp[i].dev_attr);
1459 if (data->lm75[0] != NULL) {
1460 i2c_detach_client(data->lm75[0]);
1461 kfree(data->lm75[0]);
1463 if (data->lm75[1] != NULL) {
1464 i2c_detach_client(data->lm75[1]);
1465 kfree(data->lm75[1]);
1468 i2c_detach_client(client);
1475 static void w83793_update_nonvolatile(struct device *dev)
1477 struct i2c_client *client = to_i2c_client(dev);
1478 struct w83793_data *data = i2c_get_clientdata(client);
1481 They are somewhat "stable" registers, and to update them everytime
1482 takes so much time, it's just not worthy. Update them in a long
1483 interval to avoid exception.
1485 if (!(time_after(jiffies, data->last_nonvolatile + HZ * 300)
1488 /* update voltage limits */
1489 for (i = 1; i < 3; i++) {
1490 for (j = 0; j < ARRAY_SIZE(data->in); j++) {
1492 w83793_read_value(client, W83793_REG_IN[j][i]);
1494 data->in_low_bits[i] =
1495 w83793_read_value(client, W83793_REG_IN_LOW_BITS[i]);
1498 for (i = 0; i < ARRAY_SIZE(data->fan_min); i++) {
1499 /* Update the Fan measured value and limits */
1500 if (!(data->has_fan & (1 << i))) {
1504 w83793_read_value(client, W83793_REG_FAN_MIN(i)) << 8;
1506 w83793_read_value(client, W83793_REG_FAN_MIN(i) + 1);
1509 for (i = 0; i < ARRAY_SIZE(data->temp_fan_map); i++) {
1510 if (!(data->has_temp & (1 << i)))
1512 data->temp_fan_map[i] =
1513 w83793_read_value(client, W83793_REG_TEMP_FAN_MAP(i));
1514 for (j = 1; j < 5; j++) {
1516 w83793_read_value(client, W83793_REG_TEMP[i][j]);
1518 data->temp_cruise[i] =
1519 w83793_read_value(client, W83793_REG_TEMP_CRUISE(i));
1520 for (j = 0; j < 7; j++) {
1521 data->sf2_pwm[i][j] =
1522 w83793_read_value(client, W83793_REG_SF2_PWM(i, j));
1523 data->sf2_temp[i][j] =
1524 w83793_read_value(client,
1525 W83793_REG_SF2_TEMP(i, j));
1529 for (i = 0; i < ARRAY_SIZE(data->temp_mode); i++)
1530 data->temp_mode[i] =
1531 w83793_read_value(client, W83793_REG_TEMP_MODE[i]);
1533 for (i = 0; i < ARRAY_SIZE(data->tolerance); i++) {
1534 data->tolerance[i] =
1535 w83793_read_value(client, W83793_REG_TEMP_TOL(i));
1538 for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
1539 if (!(data->has_pwm & (1 << i)))
1541 data->pwm[i][PWM_NONSTOP] =
1542 w83793_read_value(client, W83793_REG_PWM(i, PWM_NONSTOP));
1543 data->pwm[i][PWM_START] =
1544 w83793_read_value(client, W83793_REG_PWM(i, PWM_START));
1545 data->pwm_stop_time[i] =
1546 w83793_read_value(client, W83793_REG_PWM_STOP_TIME(i));
1549 data->pwm_default = w83793_read_value(client, W83793_REG_PWM_DEFAULT);
1550 data->pwm_enable = w83793_read_value(client, W83793_REG_PWM_ENABLE);
1551 data->pwm_uptime = w83793_read_value(client, W83793_REG_PWM_UPTIME);
1552 data->pwm_downtime = w83793_read_value(client, W83793_REG_PWM_DOWNTIME);
1553 data->temp_critical =
1554 w83793_read_value(client, W83793_REG_TEMP_CRITICAL);
1555 data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP);
1557 for (i = 0; i < ARRAY_SIZE(data->beeps); i++) {
1558 data->beeps[i] = w83793_read_value(client, W83793_REG_BEEP(i));
1561 data->last_nonvolatile = jiffies;
1564 static struct w83793_data *w83793_update_device(struct device *dev)
1566 struct i2c_client *client = to_i2c_client(dev);
1567 struct w83793_data *data = i2c_get_clientdata(client);
1570 mutex_lock(&data->update_lock);
1572 if (!(time_after(jiffies, data->last_updated + HZ * 2)
1576 /* Update the voltages measured value and limits */
1577 for (i = 0; i < ARRAY_SIZE(data->in); i++)
1578 data->in[i][IN_READ] =
1579 w83793_read_value(client, W83793_REG_IN[i][IN_READ]);
1581 data->in_low_bits[IN_READ] =
1582 w83793_read_value(client, W83793_REG_IN_LOW_BITS[IN_READ]);
1584 for (i = 0; i < ARRAY_SIZE(data->fan); i++) {
1585 if (!(data->has_fan & (1 << i))) {
1589 w83793_read_value(client, W83793_REG_FAN(i)) << 8;
1591 w83793_read_value(client, W83793_REG_FAN(i) + 1);
1594 for (i = 0; i < ARRAY_SIZE(data->temp); i++) {
1595 if (!(data->has_temp & (1 << i)))
1597 data->temp[i][TEMP_READ] =
1598 w83793_read_value(client, W83793_REG_TEMP[i][TEMP_READ]);
1601 data->temp_low_bits =
1602 w83793_read_value(client, W83793_REG_TEMP_LOW_BITS);
1604 for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
1605 if (data->has_pwm & (1 << i))
1606 data->pwm[i][PWM_DUTY] =
1607 w83793_read_value(client,
1608 W83793_REG_PWM(i, PWM_DUTY));
1611 for (i = 0; i < ARRAY_SIZE(data->alarms); i++)
1613 w83793_read_value(client, W83793_REG_ALARM(i));
1614 if (data->has_vid & 0x01)
1615 data->vid[0] = w83793_read_value(client, W83793_REG_VID_INA);
1616 if (data->has_vid & 0x02)
1617 data->vid[1] = w83793_read_value(client, W83793_REG_VID_INB);
1618 w83793_update_nonvolatile(dev);
1619 data->last_updated = jiffies;
1623 mutex_unlock(&data->update_lock);
1627 /* Ignore the possibility that somebody change bank outside the driver
1628 Must be called with data->update_lock held, except during initialization */
1629 static u8 w83793_read_value(struct i2c_client *client, u16 reg)
1631 struct w83793_data *data = i2c_get_clientdata(client);
1633 u8 new_bank = reg >> 8;
1635 new_bank |= data->bank & 0xfc;
1636 if (data->bank != new_bank) {
1637 if (i2c_smbus_write_byte_data
1638 (client, W83793_REG_BANKSEL, new_bank) >= 0)
1639 data->bank = new_bank;
1641 dev_err(&client->dev,
1642 "set bank to %d failed, fall back "
1643 "to bank %d, read reg 0x%x error\n",
1644 new_bank, data->bank, reg);
1645 res = 0x0; /* read 0x0 from the chip */
1649 res = i2c_smbus_read_byte_data(client, reg & 0xff);
1654 /* Must be called with data->update_lock held, except during initialization */
1655 static int w83793_write_value(struct i2c_client *client, u16 reg, u8 value)
1657 struct w83793_data *data = i2c_get_clientdata(client);
1659 u8 new_bank = reg >> 8;
1661 new_bank |= data->bank & 0xfc;
1662 if (data->bank != new_bank) {
1663 if ((res = i2c_smbus_write_byte_data
1664 (client, W83793_REG_BANKSEL, new_bank)) >= 0)
1665 data->bank = new_bank;
1667 dev_err(&client->dev,
1668 "set bank to %d failed, fall back "
1669 "to bank %d, write reg 0x%x error\n",
1670 new_bank, data->bank, reg);
1675 res = i2c_smbus_write_byte_data(client, reg & 0xff, value);
1680 static int __init sensors_w83793_init(void)
1682 return i2c_add_driver(&w83793_driver);
1685 static void __exit sensors_w83793_exit(void)
1687 i2c_del_driver(&w83793_driver);
1690 MODULE_AUTHOR("Yuan Mu");
1691 MODULE_DESCRIPTION("w83793 driver");
1692 MODULE_LICENSE("GPL");
1694 module_init(sensors_w83793_init);
1695 module_exit(sensors_w83793_exit);