traps: x86_64: remove trace_hardirqs_fixup from DO_ERROR_INFO macro
[linux-2.6/mini2440.git] / drivers / hwmon / w83791d.c
blobde21142d106c10efbbd3af4858c0c9c140360606
1 /*
2 w83791d.c - Part of lm_sensors, Linux kernel modules for hardware
3 monitoring
5 Copyright (C) 2006-2007 Charles Spirakis <bezaur@gmail.com>
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; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 Supports following chips:
25 Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA
26 w83791d 10 5 3 3 0x71 0x5ca3 yes no
28 The w83791d chip appears to be part way between the 83781d and the
29 83792d. Thus, this file is derived from both the w83792d.c and
30 w83781d.c files.
32 The w83791g chip is the same as the w83791d but lead-free.
35 #include <linux/module.h>
36 #include <linux/init.h>
37 #include <linux/slab.h>
38 #include <linux/i2c.h>
39 #include <linux/hwmon.h>
40 #include <linux/hwmon-vid.h>
41 #include <linux/hwmon-sysfs.h>
42 #include <linux/err.h>
43 #include <linux/mutex.h>
45 #define NUMBER_OF_VIN 10
46 #define NUMBER_OF_FANIN 5
47 #define NUMBER_OF_TEMPIN 3
49 /* Addresses to scan */
50 static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
51 I2C_CLIENT_END };
53 /* Insmod parameters */
54 I2C_CLIENT_INSMOD_1(w83791d);
55 I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: "
56 "{bus, clientaddr, subclientaddr1, subclientaddr2}");
58 static int reset;
59 module_param(reset, bool, 0);
60 MODULE_PARM_DESC(reset, "Set to one to force a hardware chip reset");
62 static int init;
63 module_param(init, bool, 0);
64 MODULE_PARM_DESC(init, "Set to one to force extra software initialization");
66 /* The W83791D registers */
67 static const u8 W83791D_REG_IN[NUMBER_OF_VIN] = {
68 0x20, /* VCOREA in DataSheet */
69 0x21, /* VINR0 in DataSheet */
70 0x22, /* +3.3VIN in DataSheet */
71 0x23, /* VDD5V in DataSheet */
72 0x24, /* +12VIN in DataSheet */
73 0x25, /* -12VIN in DataSheet */
74 0x26, /* -5VIN in DataSheet */
75 0xB0, /* 5VSB in DataSheet */
76 0xB1, /* VBAT in DataSheet */
77 0xB2 /* VINR1 in DataSheet */
80 static const u8 W83791D_REG_IN_MAX[NUMBER_OF_VIN] = {
81 0x2B, /* VCOREA High Limit in DataSheet */
82 0x2D, /* VINR0 High Limit in DataSheet */
83 0x2F, /* +3.3VIN High Limit in DataSheet */
84 0x31, /* VDD5V High Limit in DataSheet */
85 0x33, /* +12VIN High Limit in DataSheet */
86 0x35, /* -12VIN High Limit in DataSheet */
87 0x37, /* -5VIN High Limit in DataSheet */
88 0xB4, /* 5VSB High Limit in DataSheet */
89 0xB6, /* VBAT High Limit in DataSheet */
90 0xB8 /* VINR1 High Limit in DataSheet */
92 static const u8 W83791D_REG_IN_MIN[NUMBER_OF_VIN] = {
93 0x2C, /* VCOREA Low Limit in DataSheet */
94 0x2E, /* VINR0 Low Limit in DataSheet */
95 0x30, /* +3.3VIN Low Limit in DataSheet */
96 0x32, /* VDD5V Low Limit in DataSheet */
97 0x34, /* +12VIN Low Limit in DataSheet */
98 0x36, /* -12VIN Low Limit in DataSheet */
99 0x38, /* -5VIN Low Limit in DataSheet */
100 0xB5, /* 5VSB Low Limit in DataSheet */
101 0xB7, /* VBAT Low Limit in DataSheet */
102 0xB9 /* VINR1 Low Limit in DataSheet */
104 static const u8 W83791D_REG_FAN[NUMBER_OF_FANIN] = {
105 0x28, /* FAN 1 Count in DataSheet */
106 0x29, /* FAN 2 Count in DataSheet */
107 0x2A, /* FAN 3 Count in DataSheet */
108 0xBA, /* FAN 4 Count in DataSheet */
109 0xBB, /* FAN 5 Count in DataSheet */
111 static const u8 W83791D_REG_FAN_MIN[NUMBER_OF_FANIN] = {
112 0x3B, /* FAN 1 Count Low Limit in DataSheet */
113 0x3C, /* FAN 2 Count Low Limit in DataSheet */
114 0x3D, /* FAN 3 Count Low Limit in DataSheet */
115 0xBC, /* FAN 4 Count Low Limit in DataSheet */
116 0xBD, /* FAN 5 Count Low Limit in DataSheet */
119 static const u8 W83791D_REG_FAN_CFG[2] = {
120 0x84, /* FAN 1/2 configuration */
121 0x95, /* FAN 3 configuration */
124 static const u8 W83791D_REG_FAN_DIV[3] = {
125 0x47, /* contains FAN1 and FAN2 Divisor */
126 0x4b, /* contains FAN3 Divisor */
127 0x5C, /* contains FAN4 and FAN5 Divisor */
130 #define W83791D_REG_BANK 0x4E
131 #define W83791D_REG_TEMP2_CONFIG 0xC2
132 #define W83791D_REG_TEMP3_CONFIG 0xCA
134 static const u8 W83791D_REG_TEMP1[3] = {
135 0x27, /* TEMP 1 in DataSheet */
136 0x39, /* TEMP 1 Over in DataSheet */
137 0x3A, /* TEMP 1 Hyst in DataSheet */
140 static const u8 W83791D_REG_TEMP_ADD[2][6] = {
141 {0xC0, /* TEMP 2 in DataSheet */
142 0xC1, /* TEMP 2(0.5 deg) in DataSheet */
143 0xC5, /* TEMP 2 Over High part in DataSheet */
144 0xC6, /* TEMP 2 Over Low part in DataSheet */
145 0xC3, /* TEMP 2 Thyst High part in DataSheet */
146 0xC4}, /* TEMP 2 Thyst Low part in DataSheet */
147 {0xC8, /* TEMP 3 in DataSheet */
148 0xC9, /* TEMP 3(0.5 deg) in DataSheet */
149 0xCD, /* TEMP 3 Over High part in DataSheet */
150 0xCE, /* TEMP 3 Over Low part in DataSheet */
151 0xCB, /* TEMP 3 Thyst High part in DataSheet */
152 0xCC} /* TEMP 3 Thyst Low part in DataSheet */
155 #define W83791D_REG_BEEP_CONFIG 0x4D
157 static const u8 W83791D_REG_BEEP_CTRL[3] = {
158 0x56, /* BEEP Control Register 1 */
159 0x57, /* BEEP Control Register 2 */
160 0xA3, /* BEEP Control Register 3 */
163 #define W83791D_REG_CONFIG 0x40
164 #define W83791D_REG_VID_FANDIV 0x47
165 #define W83791D_REG_DID_VID4 0x49
166 #define W83791D_REG_WCHIPID 0x58
167 #define W83791D_REG_CHIPMAN 0x4F
168 #define W83791D_REG_PIN 0x4B
169 #define W83791D_REG_I2C_SUBADDR 0x4A
171 #define W83791D_REG_ALARM1 0xA9 /* realtime status register1 */
172 #define W83791D_REG_ALARM2 0xAA /* realtime status register2 */
173 #define W83791D_REG_ALARM3 0xAB /* realtime status register3 */
175 #define W83791D_REG_VBAT 0x5D
176 #define W83791D_REG_I2C_ADDR 0x48
178 /* The SMBus locks itself. The Winbond W83791D has a bank select register
179 (index 0x4e), but the driver only accesses registers in bank 0. Since
180 we don't switch banks, we don't need any special code to handle
181 locking access between bank switches */
182 static inline int w83791d_read(struct i2c_client *client, u8 reg)
184 return i2c_smbus_read_byte_data(client, reg);
187 static inline int w83791d_write(struct i2c_client *client, u8 reg, u8 value)
189 return i2c_smbus_write_byte_data(client, reg, value);
192 /* The analog voltage inputs have 16mV LSB. Since the sysfs output is
193 in mV as would be measured on the chip input pin, need to just
194 multiply/divide by 16 to translate from/to register values. */
195 #define IN_TO_REG(val) (SENSORS_LIMIT((((val) + 8) / 16), 0, 255))
196 #define IN_FROM_REG(val) ((val) * 16)
198 static u8 fan_to_reg(long rpm, int div)
200 if (rpm == 0)
201 return 255;
202 rpm = SENSORS_LIMIT(rpm, 1, 1000000);
203 return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1, 254);
206 #define FAN_FROM_REG(val,div) ((val) == 0 ? -1 : \
207 ((val) == 255 ? 0 : \
208 1350000 / ((val) * (div))))
210 /* for temp1 which is 8-bit resolution, LSB = 1 degree Celsius */
211 #define TEMP1_FROM_REG(val) ((val) * 1000)
212 #define TEMP1_TO_REG(val) ((val) <= -128000 ? -128 : \
213 (val) >= 127000 ? 127 : \
214 (val) < 0 ? ((val) - 500) / 1000 : \
215 ((val) + 500) / 1000)
217 /* for temp2 and temp3 which are 9-bit resolution, LSB = 0.5 degree Celsius
218 Assumes the top 8 bits are the integral amount and the bottom 8 bits
219 are the fractional amount. Since we only have 0.5 degree resolution,
220 the bottom 7 bits will always be zero */
221 #define TEMP23_FROM_REG(val) ((val) / 128 * 500)
222 #define TEMP23_TO_REG(val) ((val) <= -128000 ? 0x8000 : \
223 (val) >= 127500 ? 0x7F80 : \
224 (val) < 0 ? ((val) - 250) / 500 * 128 : \
225 ((val) + 250) / 500 * 128)
228 #define BEEP_MASK_TO_REG(val) ((val) & 0xffffff)
229 #define BEEP_MASK_FROM_REG(val) ((val) & 0xffffff)
231 #define DIV_FROM_REG(val) (1 << (val))
233 static u8 div_to_reg(int nr, long val)
235 int i;
237 /* fan divisors max out at 128 */
238 val = SENSORS_LIMIT(val, 1, 128) >> 1;
239 for (i = 0; i < 7; i++) {
240 if (val == 0)
241 break;
242 val >>= 1;
244 return (u8) i;
247 struct w83791d_data {
248 struct device *hwmon_dev;
249 struct mutex update_lock;
251 char valid; /* !=0 if following fields are valid */
252 unsigned long last_updated; /* In jiffies */
254 /* array of 2 pointers to subclients */
255 struct i2c_client *lm75[2];
257 /* volts */
258 u8 in[NUMBER_OF_VIN]; /* Register value */
259 u8 in_max[NUMBER_OF_VIN]; /* Register value */
260 u8 in_min[NUMBER_OF_VIN]; /* Register value */
262 /* fans */
263 u8 fan[NUMBER_OF_FANIN]; /* Register value */
264 u8 fan_min[NUMBER_OF_FANIN]; /* Register value */
265 u8 fan_div[NUMBER_OF_FANIN]; /* Register encoding, shifted right */
267 /* Temperature sensors */
269 s8 temp1[3]; /* current, over, thyst */
270 s16 temp_add[2][3]; /* fixed point value. Top 8 bits are the
271 integral part, bottom 8 bits are the
272 fractional part. We only use the top
273 9 bits as the resolution is only
274 to the 0.5 degree C...
275 two sensors with three values
276 (cur, over, hyst) */
278 /* Misc */
279 u32 alarms; /* realtime status register encoding,combined */
280 u8 beep_enable; /* Global beep enable */
281 u32 beep_mask; /* Mask off specific beeps */
282 u8 vid; /* Register encoding, combined */
283 u8 vrm; /* hwmon-vid */
286 static int w83791d_probe(struct i2c_client *client,
287 const struct i2c_device_id *id);
288 static int w83791d_detect(struct i2c_client *client, int kind,
289 struct i2c_board_info *info);
290 static int w83791d_remove(struct i2c_client *client);
292 static int w83791d_read(struct i2c_client *client, u8 register);
293 static int w83791d_write(struct i2c_client *client, u8 register, u8 value);
294 static struct w83791d_data *w83791d_update_device(struct device *dev);
296 #ifdef DEBUG
297 static void w83791d_print_debug(struct w83791d_data *data, struct device *dev);
298 #endif
300 static void w83791d_init_client(struct i2c_client *client);
302 static const struct i2c_device_id w83791d_id[] = {
303 { "w83791d", w83791d },
306 MODULE_DEVICE_TABLE(i2c, w83791d_id);
308 static struct i2c_driver w83791d_driver = {
309 .class = I2C_CLASS_HWMON,
310 .driver = {
311 .name = "w83791d",
313 .probe = w83791d_probe,
314 .remove = w83791d_remove,
315 .id_table = w83791d_id,
316 .detect = w83791d_detect,
317 .address_data = &addr_data,
320 /* following are the sysfs callback functions */
321 #define show_in_reg(reg) \
322 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
323 char *buf) \
325 struct sensor_device_attribute *sensor_attr = \
326 to_sensor_dev_attr(attr); \
327 struct w83791d_data *data = w83791d_update_device(dev); \
328 int nr = sensor_attr->index; \
329 return sprintf(buf,"%d\n", IN_FROM_REG(data->reg[nr])); \
332 show_in_reg(in);
333 show_in_reg(in_min);
334 show_in_reg(in_max);
336 #define store_in_reg(REG, reg) \
337 static ssize_t store_in_##reg(struct device *dev, \
338 struct device_attribute *attr, \
339 const char *buf, size_t count) \
341 struct sensor_device_attribute *sensor_attr = \
342 to_sensor_dev_attr(attr); \
343 struct i2c_client *client = to_i2c_client(dev); \
344 struct w83791d_data *data = i2c_get_clientdata(client); \
345 unsigned long val = simple_strtoul(buf, NULL, 10); \
346 int nr = sensor_attr->index; \
348 mutex_lock(&data->update_lock); \
349 data->in_##reg[nr] = IN_TO_REG(val); \
350 w83791d_write(client, W83791D_REG_IN_##REG[nr], data->in_##reg[nr]); \
351 mutex_unlock(&data->update_lock); \
353 return count; \
355 store_in_reg(MIN, min);
356 store_in_reg(MAX, max);
358 static struct sensor_device_attribute sda_in_input[] = {
359 SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
360 SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
361 SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
362 SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
363 SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
364 SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
365 SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
366 SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
367 SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
368 SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
371 static struct sensor_device_attribute sda_in_min[] = {
372 SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
373 SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
374 SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
375 SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
376 SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
377 SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
378 SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
379 SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
380 SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
381 SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
384 static struct sensor_device_attribute sda_in_max[] = {
385 SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
386 SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
387 SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
388 SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
389 SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
390 SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
391 SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
392 SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
393 SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
394 SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
398 static ssize_t show_beep(struct device *dev, struct device_attribute *attr,
399 char *buf)
401 struct sensor_device_attribute *sensor_attr =
402 to_sensor_dev_attr(attr);
403 struct w83791d_data *data = w83791d_update_device(dev);
404 int bitnr = sensor_attr->index;
406 return sprintf(buf, "%d\n", (data->beep_mask >> bitnr) & 1);
409 static ssize_t store_beep(struct device *dev, struct device_attribute *attr,
410 const char *buf, size_t count)
412 struct sensor_device_attribute *sensor_attr =
413 to_sensor_dev_attr(attr);
414 struct i2c_client *client = to_i2c_client(dev);
415 struct w83791d_data *data = i2c_get_clientdata(client);
416 int bitnr = sensor_attr->index;
417 int bytenr = bitnr / 8;
418 long val = simple_strtol(buf, NULL, 10) ? 1 : 0;
420 mutex_lock(&data->update_lock);
422 data->beep_mask &= ~(0xff << (bytenr * 8));
423 data->beep_mask |= w83791d_read(client, W83791D_REG_BEEP_CTRL[bytenr])
424 << (bytenr * 8);
426 data->beep_mask &= ~(1 << bitnr);
427 data->beep_mask |= val << bitnr;
429 w83791d_write(client, W83791D_REG_BEEP_CTRL[bytenr],
430 (data->beep_mask >> (bytenr * 8)) & 0xff);
432 mutex_unlock(&data->update_lock);
434 return count;
437 static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
438 char *buf)
440 struct sensor_device_attribute *sensor_attr =
441 to_sensor_dev_attr(attr);
442 struct w83791d_data *data = w83791d_update_device(dev);
443 int bitnr = sensor_attr->index;
445 return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
448 /* Note: The bitmask for the beep enable/disable is different than
449 the bitmask for the alarm. */
450 static struct sensor_device_attribute sda_in_beep[] = {
451 SENSOR_ATTR(in0_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 0),
452 SENSOR_ATTR(in1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 13),
453 SENSOR_ATTR(in2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 2),
454 SENSOR_ATTR(in3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 3),
455 SENSOR_ATTR(in4_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 8),
456 SENSOR_ATTR(in5_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 9),
457 SENSOR_ATTR(in6_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 10),
458 SENSOR_ATTR(in7_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 16),
459 SENSOR_ATTR(in8_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 17),
460 SENSOR_ATTR(in9_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 14),
463 static struct sensor_device_attribute sda_in_alarm[] = {
464 SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
465 SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
466 SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
467 SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
468 SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8),
469 SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 9),
470 SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 10),
471 SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 19),
472 SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 20),
473 SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 14),
476 #define show_fan_reg(reg) \
477 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
478 char *buf) \
480 struct sensor_device_attribute *sensor_attr = \
481 to_sensor_dev_attr(attr); \
482 struct w83791d_data *data = w83791d_update_device(dev); \
483 int nr = sensor_attr->index; \
484 return sprintf(buf,"%d\n", \
485 FAN_FROM_REG(data->reg[nr], DIV_FROM_REG(data->fan_div[nr]))); \
488 show_fan_reg(fan);
489 show_fan_reg(fan_min);
491 static ssize_t store_fan_min(struct device *dev, struct device_attribute *attr,
492 const char *buf, size_t count)
494 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
495 struct i2c_client *client = to_i2c_client(dev);
496 struct w83791d_data *data = i2c_get_clientdata(client);
497 unsigned long val = simple_strtoul(buf, NULL, 10);
498 int nr = sensor_attr->index;
500 mutex_lock(&data->update_lock);
501 data->fan_min[nr] = fan_to_reg(val, DIV_FROM_REG(data->fan_div[nr]));
502 w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
503 mutex_unlock(&data->update_lock);
505 return count;
508 static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
509 char *buf)
511 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
512 int nr = sensor_attr->index;
513 struct w83791d_data *data = w83791d_update_device(dev);
514 return sprintf(buf, "%u\n", DIV_FROM_REG(data->fan_div[nr]));
517 /* Note: we save and restore the fan minimum here, because its value is
518 determined in part by the fan divisor. This follows the principle of
519 least suprise; the user doesn't expect the fan minimum to change just
520 because the divisor changed. */
521 static ssize_t store_fan_div(struct device *dev, struct device_attribute *attr,
522 const char *buf, size_t count)
524 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
525 struct i2c_client *client = to_i2c_client(dev);
526 struct w83791d_data *data = i2c_get_clientdata(client);
527 int nr = sensor_attr->index;
528 unsigned long min;
529 u8 tmp_fan_div;
530 u8 fan_div_reg;
531 u8 vbat_reg;
532 int indx = 0;
533 u8 keep_mask = 0;
534 u8 new_shift = 0;
536 /* Save fan_min */
537 min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr]));
539 mutex_lock(&data->update_lock);
540 data->fan_div[nr] = div_to_reg(nr, simple_strtoul(buf, NULL, 10));
542 switch (nr) {
543 case 0:
544 indx = 0;
545 keep_mask = 0xcf;
546 new_shift = 4;
547 break;
548 case 1:
549 indx = 0;
550 keep_mask = 0x3f;
551 new_shift = 6;
552 break;
553 case 2:
554 indx = 1;
555 keep_mask = 0x3f;
556 new_shift = 6;
557 break;
558 case 3:
559 indx = 2;
560 keep_mask = 0xf8;
561 new_shift = 0;
562 break;
563 case 4:
564 indx = 2;
565 keep_mask = 0x8f;
566 new_shift = 4;
567 break;
568 #ifdef DEBUG
569 default:
570 dev_warn(dev, "store_fan_div: Unexpected nr seen: %d\n", nr);
571 count = -EINVAL;
572 goto err_exit;
573 #endif
576 fan_div_reg = w83791d_read(client, W83791D_REG_FAN_DIV[indx])
577 & keep_mask;
578 tmp_fan_div = (data->fan_div[nr] << new_shift) & ~keep_mask;
580 w83791d_write(client, W83791D_REG_FAN_DIV[indx],
581 fan_div_reg | tmp_fan_div);
583 /* Bit 2 of fans 0-2 is stored in the vbat register (bits 5-7) */
584 if (nr < 3) {
585 keep_mask = ~(1 << (nr + 5));
586 vbat_reg = w83791d_read(client, W83791D_REG_VBAT)
587 & keep_mask;
588 tmp_fan_div = (data->fan_div[nr] << (3 + nr)) & ~keep_mask;
589 w83791d_write(client, W83791D_REG_VBAT,
590 vbat_reg | tmp_fan_div);
593 /* Restore fan_min */
594 data->fan_min[nr] = fan_to_reg(min, DIV_FROM_REG(data->fan_div[nr]));
595 w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
597 #ifdef DEBUG
598 err_exit:
599 #endif
600 mutex_unlock(&data->update_lock);
602 return count;
605 static struct sensor_device_attribute sda_fan_input[] = {
606 SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
607 SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
608 SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
609 SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
610 SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
613 static struct sensor_device_attribute sda_fan_min[] = {
614 SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO,
615 show_fan_min, store_fan_min, 0),
616 SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO,
617 show_fan_min, store_fan_min, 1),
618 SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO,
619 show_fan_min, store_fan_min, 2),
620 SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO,
621 show_fan_min, store_fan_min, 3),
622 SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO,
623 show_fan_min, store_fan_min, 4),
626 static struct sensor_device_attribute sda_fan_div[] = {
627 SENSOR_ATTR(fan1_div, S_IWUSR | S_IRUGO,
628 show_fan_div, store_fan_div, 0),
629 SENSOR_ATTR(fan2_div, S_IWUSR | S_IRUGO,
630 show_fan_div, store_fan_div, 1),
631 SENSOR_ATTR(fan3_div, S_IWUSR | S_IRUGO,
632 show_fan_div, store_fan_div, 2),
633 SENSOR_ATTR(fan4_div, S_IWUSR | S_IRUGO,
634 show_fan_div, store_fan_div, 3),
635 SENSOR_ATTR(fan5_div, S_IWUSR | S_IRUGO,
636 show_fan_div, store_fan_div, 4),
639 static struct sensor_device_attribute sda_fan_beep[] = {
640 SENSOR_ATTR(fan1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 6),
641 SENSOR_ATTR(fan2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 7),
642 SENSOR_ATTR(fan3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 11),
643 SENSOR_ATTR(fan4_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 21),
644 SENSOR_ATTR(fan5_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 22),
647 static struct sensor_device_attribute sda_fan_alarm[] = {
648 SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6),
649 SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7),
650 SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11),
651 SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 21),
652 SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 22),
655 /* read/write the temperature1, includes measured value and limits */
656 static ssize_t show_temp1(struct device *dev, struct device_attribute *devattr,
657 char *buf)
659 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
660 struct w83791d_data *data = w83791d_update_device(dev);
661 return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp1[attr->index]));
664 static ssize_t store_temp1(struct device *dev, struct device_attribute *devattr,
665 const char *buf, size_t count)
667 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
668 struct i2c_client *client = to_i2c_client(dev);
669 struct w83791d_data *data = i2c_get_clientdata(client);
670 long val = simple_strtol(buf, NULL, 10);
671 int nr = attr->index;
673 mutex_lock(&data->update_lock);
674 data->temp1[nr] = TEMP1_TO_REG(val);
675 w83791d_write(client, W83791D_REG_TEMP1[nr], data->temp1[nr]);
676 mutex_unlock(&data->update_lock);
677 return count;
680 /* read/write temperature2-3, includes measured value and limits */
681 static ssize_t show_temp23(struct device *dev, struct device_attribute *devattr,
682 char *buf)
684 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
685 struct w83791d_data *data = w83791d_update_device(dev);
686 int nr = attr->nr;
687 int index = attr->index;
688 return sprintf(buf, "%d\n", TEMP23_FROM_REG(data->temp_add[nr][index]));
691 static ssize_t store_temp23(struct device *dev,
692 struct device_attribute *devattr,
693 const char *buf, size_t count)
695 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
696 struct i2c_client *client = to_i2c_client(dev);
697 struct w83791d_data *data = i2c_get_clientdata(client);
698 long val = simple_strtol(buf, NULL, 10);
699 int nr = attr->nr;
700 int index = attr->index;
702 mutex_lock(&data->update_lock);
703 data->temp_add[nr][index] = TEMP23_TO_REG(val);
704 w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2],
705 data->temp_add[nr][index] >> 8);
706 w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2 + 1],
707 data->temp_add[nr][index] & 0x80);
708 mutex_unlock(&data->update_lock);
710 return count;
713 static struct sensor_device_attribute_2 sda_temp_input[] = {
714 SENSOR_ATTR_2(temp1_input, S_IRUGO, show_temp1, NULL, 0, 0),
715 SENSOR_ATTR_2(temp2_input, S_IRUGO, show_temp23, NULL, 0, 0),
716 SENSOR_ATTR_2(temp3_input, S_IRUGO, show_temp23, NULL, 1, 0),
719 static struct sensor_device_attribute_2 sda_temp_max[] = {
720 SENSOR_ATTR_2(temp1_max, S_IRUGO | S_IWUSR,
721 show_temp1, store_temp1, 0, 1),
722 SENSOR_ATTR_2(temp2_max, S_IRUGO | S_IWUSR,
723 show_temp23, store_temp23, 0, 1),
724 SENSOR_ATTR_2(temp3_max, S_IRUGO | S_IWUSR,
725 show_temp23, store_temp23, 1, 1),
728 static struct sensor_device_attribute_2 sda_temp_max_hyst[] = {
729 SENSOR_ATTR_2(temp1_max_hyst, S_IRUGO | S_IWUSR,
730 show_temp1, store_temp1, 0, 2),
731 SENSOR_ATTR_2(temp2_max_hyst, S_IRUGO | S_IWUSR,
732 show_temp23, store_temp23, 0, 2),
733 SENSOR_ATTR_2(temp3_max_hyst, S_IRUGO | S_IWUSR,
734 show_temp23, store_temp23, 1, 2),
737 /* Note: The bitmask for the beep enable/disable is different than
738 the bitmask for the alarm. */
739 static struct sensor_device_attribute sda_temp_beep[] = {
740 SENSOR_ATTR(temp1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 4),
741 SENSOR_ATTR(temp2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 5),
742 SENSOR_ATTR(temp3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 1),
745 static struct sensor_device_attribute sda_temp_alarm[] = {
746 SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4),
747 SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5),
748 SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
751 /* get reatime status of all sensors items: voltage, temp, fan */
752 static ssize_t show_alarms_reg(struct device *dev,
753 struct device_attribute *attr, char *buf)
755 struct w83791d_data *data = w83791d_update_device(dev);
756 return sprintf(buf, "%u\n", data->alarms);
759 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
761 /* Beep control */
763 #define GLOBAL_BEEP_ENABLE_SHIFT 15
764 #define GLOBAL_BEEP_ENABLE_MASK (1 << GLOBAL_BEEP_ENABLE_SHIFT)
766 static ssize_t show_beep_enable(struct device *dev,
767 struct device_attribute *attr, char *buf)
769 struct w83791d_data *data = w83791d_update_device(dev);
770 return sprintf(buf, "%d\n", data->beep_enable);
773 static ssize_t show_beep_mask(struct device *dev,
774 struct device_attribute *attr, char *buf)
776 struct w83791d_data *data = w83791d_update_device(dev);
777 return sprintf(buf, "%d\n", BEEP_MASK_FROM_REG(data->beep_mask));
781 static ssize_t store_beep_mask(struct device *dev,
782 struct device_attribute *attr,
783 const char *buf, size_t count)
785 struct i2c_client *client = to_i2c_client(dev);
786 struct w83791d_data *data = i2c_get_clientdata(client);
787 long val = simple_strtol(buf, NULL, 10);
788 int i;
790 mutex_lock(&data->update_lock);
792 /* The beep_enable state overrides any enabling request from
793 the masks */
794 data->beep_mask = BEEP_MASK_TO_REG(val) & ~GLOBAL_BEEP_ENABLE_MASK;
795 data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
797 val = data->beep_mask;
799 for (i = 0; i < 3; i++) {
800 w83791d_write(client, W83791D_REG_BEEP_CTRL[i], (val & 0xff));
801 val >>= 8;
804 mutex_unlock(&data->update_lock);
806 return count;
809 static ssize_t store_beep_enable(struct device *dev,
810 struct device_attribute *attr,
811 const char *buf, size_t count)
813 struct i2c_client *client = to_i2c_client(dev);
814 struct w83791d_data *data = i2c_get_clientdata(client);
815 long val = simple_strtol(buf, NULL, 10);
817 mutex_lock(&data->update_lock);
819 data->beep_enable = val ? 1 : 0;
821 /* Keep the full mask value in sync with the current enable */
822 data->beep_mask &= ~GLOBAL_BEEP_ENABLE_MASK;
823 data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
825 /* The global control is in the second beep control register
826 so only need to update that register */
827 val = (data->beep_mask >> 8) & 0xff;
829 w83791d_write(client, W83791D_REG_BEEP_CTRL[1], val);
831 mutex_unlock(&data->update_lock);
833 return count;
836 static struct sensor_device_attribute sda_beep_ctrl[] = {
837 SENSOR_ATTR(beep_enable, S_IRUGO | S_IWUSR,
838 show_beep_enable, store_beep_enable, 0),
839 SENSOR_ATTR(beep_mask, S_IRUGO | S_IWUSR,
840 show_beep_mask, store_beep_mask, 1)
843 /* cpu voltage regulation information */
844 static ssize_t show_vid_reg(struct device *dev,
845 struct device_attribute *attr, char *buf)
847 struct w83791d_data *data = w83791d_update_device(dev);
848 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
851 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
853 static ssize_t show_vrm_reg(struct device *dev,
854 struct device_attribute *attr, char *buf)
856 struct w83791d_data *data = dev_get_drvdata(dev);
857 return sprintf(buf, "%d\n", data->vrm);
860 static ssize_t store_vrm_reg(struct device *dev,
861 struct device_attribute *attr,
862 const char *buf, size_t count)
864 struct w83791d_data *data = dev_get_drvdata(dev);
866 /* No lock needed as vrm is internal to the driver
867 (not read from a chip register) and so is not
868 updated in w83791d_update_device() */
869 data->vrm = simple_strtoul(buf, NULL, 10);
871 return count;
874 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
876 #define IN_UNIT_ATTRS(X) \
877 &sda_in_input[X].dev_attr.attr, \
878 &sda_in_min[X].dev_attr.attr, \
879 &sda_in_max[X].dev_attr.attr, \
880 &sda_in_beep[X].dev_attr.attr, \
881 &sda_in_alarm[X].dev_attr.attr
883 #define FAN_UNIT_ATTRS(X) \
884 &sda_fan_input[X].dev_attr.attr, \
885 &sda_fan_min[X].dev_attr.attr, \
886 &sda_fan_div[X].dev_attr.attr, \
887 &sda_fan_beep[X].dev_attr.attr, \
888 &sda_fan_alarm[X].dev_attr.attr
890 #define TEMP_UNIT_ATTRS(X) \
891 &sda_temp_input[X].dev_attr.attr, \
892 &sda_temp_max[X].dev_attr.attr, \
893 &sda_temp_max_hyst[X].dev_attr.attr, \
894 &sda_temp_beep[X].dev_attr.attr, \
895 &sda_temp_alarm[X].dev_attr.attr
897 static struct attribute *w83791d_attributes[] = {
898 IN_UNIT_ATTRS(0),
899 IN_UNIT_ATTRS(1),
900 IN_UNIT_ATTRS(2),
901 IN_UNIT_ATTRS(3),
902 IN_UNIT_ATTRS(4),
903 IN_UNIT_ATTRS(5),
904 IN_UNIT_ATTRS(6),
905 IN_UNIT_ATTRS(7),
906 IN_UNIT_ATTRS(8),
907 IN_UNIT_ATTRS(9),
908 FAN_UNIT_ATTRS(0),
909 FAN_UNIT_ATTRS(1),
910 FAN_UNIT_ATTRS(2),
911 FAN_UNIT_ATTRS(3),
912 FAN_UNIT_ATTRS(4),
913 TEMP_UNIT_ATTRS(0),
914 TEMP_UNIT_ATTRS(1),
915 TEMP_UNIT_ATTRS(2),
916 &dev_attr_alarms.attr,
917 &sda_beep_ctrl[0].dev_attr.attr,
918 &sda_beep_ctrl[1].dev_attr.attr,
919 &dev_attr_cpu0_vid.attr,
920 &dev_attr_vrm.attr,
921 NULL
924 static const struct attribute_group w83791d_group = {
925 .attrs = w83791d_attributes,
929 static int w83791d_detect_subclients(struct i2c_client *client)
931 struct i2c_adapter *adapter = client->adapter;
932 struct w83791d_data *data = i2c_get_clientdata(client);
933 int address = client->addr;
934 int i, id, err;
935 u8 val;
937 id = i2c_adapter_id(adapter);
938 if (force_subclients[0] == id && force_subclients[1] == address) {
939 for (i = 2; i <= 3; i++) {
940 if (force_subclients[i] < 0x48 ||
941 force_subclients[i] > 0x4f) {
942 dev_err(&client->dev,
943 "invalid subclient "
944 "address %d; must be 0x48-0x4f\n",
945 force_subclients[i]);
946 err = -ENODEV;
947 goto error_sc_0;
950 w83791d_write(client, W83791D_REG_I2C_SUBADDR,
951 (force_subclients[2] & 0x07) |
952 ((force_subclients[3] & 0x07) << 4));
955 val = w83791d_read(client, W83791D_REG_I2C_SUBADDR);
956 if (!(val & 0x08)) {
957 data->lm75[0] = i2c_new_dummy(adapter, 0x48 + (val & 0x7));
959 if (!(val & 0x80)) {
960 if ((data->lm75[0] != NULL) &&
961 ((val & 0x7) == ((val >> 4) & 0x7))) {
962 dev_err(&client->dev,
963 "duplicate addresses 0x%x, "
964 "use force_subclient\n",
965 data->lm75[0]->addr);
966 err = -ENODEV;
967 goto error_sc_1;
969 data->lm75[1] = i2c_new_dummy(adapter,
970 0x48 + ((val >> 4) & 0x7));
973 return 0;
975 /* Undo inits in case of errors */
977 error_sc_1:
978 if (data->lm75[0] != NULL)
979 i2c_unregister_device(data->lm75[0]);
980 error_sc_0:
981 return err;
985 /* Return 0 if detection is successful, -ENODEV otherwise */
986 static int w83791d_detect(struct i2c_client *client, int kind,
987 struct i2c_board_info *info)
989 struct i2c_adapter *adapter = client->adapter;
990 int val1, val2;
991 unsigned short address = client->addr;
993 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
994 return -ENODEV;
997 /* The w83791d may be stuck in some other bank than bank 0. This may
998 make reading other information impossible. Specify a force=...
999 parameter, and the Winbond will be reset to the right bank. */
1000 if (kind < 0) {
1001 if (w83791d_read(client, W83791D_REG_CONFIG) & 0x80) {
1002 return -ENODEV;
1004 val1 = w83791d_read(client, W83791D_REG_BANK);
1005 val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
1006 /* Check for Winbond ID if in bank 0 */
1007 if (!(val1 & 0x07)) {
1008 /* yes it is Bank0 */
1009 if (((!(val1 & 0x80)) && (val2 != 0xa3)) ||
1010 ((val1 & 0x80) && (val2 != 0x5c))) {
1011 return -ENODEV;
1014 /* If Winbond chip, address of chip and W83791D_REG_I2C_ADDR
1015 should match */
1016 if (w83791d_read(client, W83791D_REG_I2C_ADDR) != address) {
1017 return -ENODEV;
1021 /* We either have a force parameter or we have reason to
1022 believe it is a Winbond chip. Either way, we want bank 0 and
1023 Vendor ID high byte */
1024 val1 = w83791d_read(client, W83791D_REG_BANK) & 0x78;
1025 w83791d_write(client, W83791D_REG_BANK, val1 | 0x80);
1027 /* Verify it is a Winbond w83791d */
1028 if (kind <= 0) {
1029 /* get vendor ID */
1030 val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
1031 if (val2 != 0x5c) { /* the vendor is NOT Winbond */
1032 return -ENODEV;
1034 val1 = w83791d_read(client, W83791D_REG_WCHIPID);
1035 if (val1 == 0x71) {
1036 kind = w83791d;
1037 } else {
1038 if (kind == 0)
1039 dev_warn(&adapter->dev,
1040 "w83791d: Ignoring 'force' parameter "
1041 "for unknown chip at adapter %d, "
1042 "address 0x%02x\n",
1043 i2c_adapter_id(adapter), address);
1044 return -ENODEV;
1048 strlcpy(info->type, "w83791d", I2C_NAME_SIZE);
1050 return 0;
1053 static int w83791d_probe(struct i2c_client *client,
1054 const struct i2c_device_id *id)
1056 struct w83791d_data *data;
1057 struct device *dev = &client->dev;
1058 int i, err;
1060 #ifdef DEBUG
1061 int val1;
1062 val1 = w83791d_read(client, W83791D_REG_DID_VID4);
1063 dev_dbg(dev, "Device ID version: %d.%d (0x%02x)\n",
1064 (val1 >> 5) & 0x07, (val1 >> 1) & 0x0f, val1);
1065 #endif
1067 data = kzalloc(sizeof(struct w83791d_data), GFP_KERNEL);
1068 if (!data) {
1069 err = -ENOMEM;
1070 goto error0;
1073 i2c_set_clientdata(client, data);
1074 mutex_init(&data->update_lock);
1076 err = w83791d_detect_subclients(client);
1077 if (err)
1078 goto error1;
1080 /* Initialize the chip */
1081 w83791d_init_client(client);
1083 /* If the fan_div is changed, make sure there is a rational
1084 fan_min in place */
1085 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1086 data->fan_min[i] = w83791d_read(client, W83791D_REG_FAN_MIN[i]);
1089 /* Register sysfs hooks */
1090 if ((err = sysfs_create_group(&client->dev.kobj, &w83791d_group)))
1091 goto error3;
1093 /* Everything is ready, now register the working device */
1094 data->hwmon_dev = hwmon_device_register(dev);
1095 if (IS_ERR(data->hwmon_dev)) {
1096 err = PTR_ERR(data->hwmon_dev);
1097 goto error4;
1100 return 0;
1102 error4:
1103 sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1104 error3:
1105 if (data->lm75[0] != NULL)
1106 i2c_unregister_device(data->lm75[0]);
1107 if (data->lm75[1] != NULL)
1108 i2c_unregister_device(data->lm75[1]);
1109 error1:
1110 kfree(data);
1111 error0:
1112 return err;
1115 static int w83791d_remove(struct i2c_client *client)
1117 struct w83791d_data *data = i2c_get_clientdata(client);
1119 hwmon_device_unregister(data->hwmon_dev);
1120 sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1122 if (data->lm75[0] != NULL)
1123 i2c_unregister_device(data->lm75[0]);
1124 if (data->lm75[1] != NULL)
1125 i2c_unregister_device(data->lm75[1]);
1127 kfree(data);
1128 return 0;
1131 static void w83791d_init_client(struct i2c_client *client)
1133 struct w83791d_data *data = i2c_get_clientdata(client);
1134 u8 tmp;
1135 u8 old_beep;
1137 /* The difference between reset and init is that reset
1138 does a hard reset of the chip via index 0x40, bit 7,
1139 but init simply forces certain registers to have "sane"
1140 values. The hope is that the BIOS has done the right
1141 thing (which is why the default is reset=0, init=0),
1142 but if not, reset is the hard hammer and init
1143 is the soft mallet both of which are trying to whack
1144 things into place...
1145 NOTE: The data sheet makes a distinction between
1146 "power on defaults" and "reset by MR". As far as I can tell,
1147 the hard reset puts everything into a power-on state so I'm
1148 not sure what "reset by MR" means or how it can happen.
1150 if (reset || init) {
1151 /* keep some BIOS settings when we... */
1152 old_beep = w83791d_read(client, W83791D_REG_BEEP_CONFIG);
1154 if (reset) {
1155 /* ... reset the chip and ... */
1156 w83791d_write(client, W83791D_REG_CONFIG, 0x80);
1159 /* ... disable power-on abnormal beep */
1160 w83791d_write(client, W83791D_REG_BEEP_CONFIG, old_beep | 0x80);
1162 /* disable the global beep (not done by hard reset) */
1163 tmp = w83791d_read(client, W83791D_REG_BEEP_CTRL[1]);
1164 w83791d_write(client, W83791D_REG_BEEP_CTRL[1], tmp & 0xef);
1166 if (init) {
1167 /* Make sure monitoring is turned on for add-ons */
1168 tmp = w83791d_read(client, W83791D_REG_TEMP2_CONFIG);
1169 if (tmp & 1) {
1170 w83791d_write(client, W83791D_REG_TEMP2_CONFIG,
1171 tmp & 0xfe);
1174 tmp = w83791d_read(client, W83791D_REG_TEMP3_CONFIG);
1175 if (tmp & 1) {
1176 w83791d_write(client, W83791D_REG_TEMP3_CONFIG,
1177 tmp & 0xfe);
1180 /* Start monitoring */
1181 tmp = w83791d_read(client, W83791D_REG_CONFIG) & 0xf7;
1182 w83791d_write(client, W83791D_REG_CONFIG, tmp | 0x01);
1186 data->vrm = vid_which_vrm();
1189 static struct w83791d_data *w83791d_update_device(struct device *dev)
1191 struct i2c_client *client = to_i2c_client(dev);
1192 struct w83791d_data *data = i2c_get_clientdata(client);
1193 int i, j;
1194 u8 reg_array_tmp[3];
1195 u8 vbat_reg;
1197 mutex_lock(&data->update_lock);
1199 if (time_after(jiffies, data->last_updated + (HZ * 3))
1200 || !data->valid) {
1201 dev_dbg(dev, "Starting w83791d device update\n");
1203 /* Update the voltages measured value and limits */
1204 for (i = 0; i < NUMBER_OF_VIN; i++) {
1205 data->in[i] = w83791d_read(client,
1206 W83791D_REG_IN[i]);
1207 data->in_max[i] = w83791d_read(client,
1208 W83791D_REG_IN_MAX[i]);
1209 data->in_min[i] = w83791d_read(client,
1210 W83791D_REG_IN_MIN[i]);
1213 /* Update the fan counts and limits */
1214 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1215 /* Update the Fan measured value and limits */
1216 data->fan[i] = w83791d_read(client,
1217 W83791D_REG_FAN[i]);
1218 data->fan_min[i] = w83791d_read(client,
1219 W83791D_REG_FAN_MIN[i]);
1222 /* Update the fan divisor */
1223 for (i = 0; i < 3; i++) {
1224 reg_array_tmp[i] = w83791d_read(client,
1225 W83791D_REG_FAN_DIV[i]);
1227 data->fan_div[0] = (reg_array_tmp[0] >> 4) & 0x03;
1228 data->fan_div[1] = (reg_array_tmp[0] >> 6) & 0x03;
1229 data->fan_div[2] = (reg_array_tmp[1] >> 6) & 0x03;
1230 data->fan_div[3] = reg_array_tmp[2] & 0x07;
1231 data->fan_div[4] = (reg_array_tmp[2] >> 4) & 0x07;
1233 /* The fan divisor for fans 0-2 get bit 2 from
1234 bits 5-7 respectively of vbat register */
1235 vbat_reg = w83791d_read(client, W83791D_REG_VBAT);
1236 for (i = 0; i < 3; i++)
1237 data->fan_div[i] |= (vbat_reg >> (3 + i)) & 0x04;
1239 /* Update the first temperature sensor */
1240 for (i = 0; i < 3; i++) {
1241 data->temp1[i] = w83791d_read(client,
1242 W83791D_REG_TEMP1[i]);
1245 /* Update the rest of the temperature sensors */
1246 for (i = 0; i < 2; i++) {
1247 for (j = 0; j < 3; j++) {
1248 data->temp_add[i][j] =
1249 (w83791d_read(client,
1250 W83791D_REG_TEMP_ADD[i][j * 2]) << 8) |
1251 w83791d_read(client,
1252 W83791D_REG_TEMP_ADD[i][j * 2 + 1]);
1256 /* Update the realtime status */
1257 data->alarms =
1258 w83791d_read(client, W83791D_REG_ALARM1) +
1259 (w83791d_read(client, W83791D_REG_ALARM2) << 8) +
1260 (w83791d_read(client, W83791D_REG_ALARM3) << 16);
1262 /* Update the beep configuration information */
1263 data->beep_mask =
1264 w83791d_read(client, W83791D_REG_BEEP_CTRL[0]) +
1265 (w83791d_read(client, W83791D_REG_BEEP_CTRL[1]) << 8) +
1266 (w83791d_read(client, W83791D_REG_BEEP_CTRL[2]) << 16);
1268 /* Extract global beep enable flag */
1269 data->beep_enable =
1270 (data->beep_mask >> GLOBAL_BEEP_ENABLE_SHIFT) & 0x01;
1272 /* Update the cpu voltage information */
1273 i = w83791d_read(client, W83791D_REG_VID_FANDIV);
1274 data->vid = i & 0x0f;
1275 data->vid |= (w83791d_read(client, W83791D_REG_DID_VID4) & 0x01)
1276 << 4;
1278 data->last_updated = jiffies;
1279 data->valid = 1;
1282 mutex_unlock(&data->update_lock);
1284 #ifdef DEBUG
1285 w83791d_print_debug(data, dev);
1286 #endif
1288 return data;
1291 #ifdef DEBUG
1292 static void w83791d_print_debug(struct w83791d_data *data, struct device *dev)
1294 int i = 0, j = 0;
1296 dev_dbg(dev, "======Start of w83791d debug values======\n");
1297 dev_dbg(dev, "%d set of Voltages: ===>\n", NUMBER_OF_VIN);
1298 for (i = 0; i < NUMBER_OF_VIN; i++) {
1299 dev_dbg(dev, "vin[%d] is: 0x%02x\n", i, data->in[i]);
1300 dev_dbg(dev, "vin[%d] min is: 0x%02x\n", i, data->in_min[i]);
1301 dev_dbg(dev, "vin[%d] max is: 0x%02x\n", i, data->in_max[i]);
1303 dev_dbg(dev, "%d set of Fan Counts/Divisors: ===>\n", NUMBER_OF_FANIN);
1304 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1305 dev_dbg(dev, "fan[%d] is: 0x%02x\n", i, data->fan[i]);
1306 dev_dbg(dev, "fan[%d] min is: 0x%02x\n", i, data->fan_min[i]);
1307 dev_dbg(dev, "fan_div[%d] is: 0x%02x\n", i, data->fan_div[i]);
1310 /* temperature math is signed, but only print out the
1311 bits that matter */
1312 dev_dbg(dev, "%d set of Temperatures: ===>\n", NUMBER_OF_TEMPIN);
1313 for (i = 0; i < 3; i++) {
1314 dev_dbg(dev, "temp1[%d] is: 0x%02x\n", i, (u8) data->temp1[i]);
1316 for (i = 0; i < 2; i++) {
1317 for (j = 0; j < 3; j++) {
1318 dev_dbg(dev, "temp_add[%d][%d] is: 0x%04x\n", i, j,
1319 (u16) data->temp_add[i][j]);
1323 dev_dbg(dev, "Misc Information: ===>\n");
1324 dev_dbg(dev, "alarm is: 0x%08x\n", data->alarms);
1325 dev_dbg(dev, "beep_mask is: 0x%08x\n", data->beep_mask);
1326 dev_dbg(dev, "beep_enable is: %d\n", data->beep_enable);
1327 dev_dbg(dev, "vid is: 0x%02x\n", data->vid);
1328 dev_dbg(dev, "vrm is: 0x%02x\n", data->vrm);
1329 dev_dbg(dev, "=======End of w83791d debug values========\n");
1330 dev_dbg(dev, "\n");
1332 #endif
1334 static int __init sensors_w83791d_init(void)
1336 return i2c_add_driver(&w83791d_driver);
1339 static void __exit sensors_w83791d_exit(void)
1341 i2c_del_driver(&w83791d_driver);
1344 MODULE_AUTHOR("Charles Spirakis <bezaur@gmail.com>");
1345 MODULE_DESCRIPTION("W83791D driver");
1346 MODULE_LICENSE("GPL");
1348 module_init(sensors_w83791d_init);
1349 module_exit(sensors_w83791d_exit);