hwmon: (f71882fg) Delete needless forward declarations
[linux-block.git] / drivers / hwmon / w83791d.c
CommitLineData
9873964d
CS
1/*
2 w83791d.c - Part of lm_sensors, Linux kernel modules for hardware
3 monitoring
4
64383123 5 Copyright (C) 2006-2007 Charles Spirakis <bezaur@gmail.com>
9873964d
CS
6
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.
11
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.
16
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.
20*/
21
22/*
23 Supports following chips:
24
25 Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA
26 w83791d 10 5 3 3 0x71 0x5ca3 yes no
27
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
125751cb
CS
30 w83781d.c files.
31
32 The w83791g chip is the same as the w83791d but lead-free.
9873964d
CS
33*/
34
9873964d
CS
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>
44
45#define NUMBER_OF_VIN 10
46#define NUMBER_OF_FANIN 5
47#define NUMBER_OF_TEMPIN 3
48
49/* Addresses to scan */
25e9c86d
MH
50static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
51 I2C_CLIENT_END };
9873964d
CS
52
53/* Insmod parameters */
54I2C_CLIENT_INSMOD_1(w83791d);
55I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: "
56 "{bus, clientaddr, subclientaddr1, subclientaddr2}");
57
58static int reset;
59module_param(reset, bool, 0);
60MODULE_PARM_DESC(reset, "Set to one to force a hardware chip reset");
61
62static int init;
63module_param(init, bool, 0);
64MODULE_PARM_DESC(init, "Set to one to force extra software initialization");
65
66/* The W83791D registers */
67static 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 */
78};
79
80static 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 */
91};
92static 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 */
103};
104static 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 */
110};
111static 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 */
117};
118
119static const u8 W83791D_REG_FAN_CFG[2] = {
120 0x84, /* FAN 1/2 configuration */
121 0x95, /* FAN 3 configuration */
122};
123
124static 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 */
128};
129
130#define W83791D_REG_BANK 0x4E
131#define W83791D_REG_TEMP2_CONFIG 0xC2
132#define W83791D_REG_TEMP3_CONFIG 0xCA
133
134static 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 */
138};
139
140static 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 */
153};
154
155#define W83791D_REG_BEEP_CONFIG 0x4D
156
157static 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 */
161};
162
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
170
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 */
174
175#define W83791D_REG_VBAT 0x5D
176#define W83791D_REG_I2C_ADDR 0x48
177
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 */
182static inline int w83791d_read(struct i2c_client *client, u8 reg)
183{
184 return i2c_smbus_read_byte_data(client, reg);
185}
186
187static inline int w83791d_write(struct i2c_client *client, u8 reg, u8 value)
188{
189 return i2c_smbus_write_byte_data(client, reg, value);
190}
191
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)
197
198static u8 fan_to_reg(long rpm, int div)
199{
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);
204}
205
206#define FAN_FROM_REG(val,div) ((val) == 0 ? -1 : \
207 ((val) == 255 ? 0 : \
208 1350000 / ((val) * (div))))
209
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)
216
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)
226
227
228#define BEEP_MASK_TO_REG(val) ((val) & 0xffffff)
229#define BEEP_MASK_FROM_REG(val) ((val) & 0xffffff)
230
231#define DIV_FROM_REG(val) (1 << (val))
232
233static u8 div_to_reg(int nr, long val)
234{
235 int i;
236 int max;
237
238 /* first three fan's divisor max out at 8, rest max out at 128 */
239 max = (nr < 3) ? 8 : 128;
240 val = SENSORS_LIMIT(val, 1, max) >> 1;
241 for (i = 0; i < 7; i++) {
242 if (val == 0)
243 break;
244 val >>= 1;
245 }
246 return (u8) i;
247}
248
249struct w83791d_data {
1beeffe4 250 struct device *hwmon_dev;
9873964d
CS
251 struct mutex update_lock;
252
253 char valid; /* !=0 if following fields are valid */
254 unsigned long last_updated; /* In jiffies */
255
256 /* array of 2 pointers to subclients */
257 struct i2c_client *lm75[2];
258
259 /* volts */
260 u8 in[NUMBER_OF_VIN]; /* Register value */
261 u8 in_max[NUMBER_OF_VIN]; /* Register value */
262 u8 in_min[NUMBER_OF_VIN]; /* Register value */
263
264 /* fans */
265 u8 fan[NUMBER_OF_FANIN]; /* Register value */
266 u8 fan_min[NUMBER_OF_FANIN]; /* Register value */
267 u8 fan_div[NUMBER_OF_FANIN]; /* Register encoding, shifted right */
268
269 /* Temperature sensors */
270
271 s8 temp1[3]; /* current, over, thyst */
272 s16 temp_add[2][3]; /* fixed point value. Top 8 bits are the
273 integral part, bottom 8 bits are the
274 fractional part. We only use the top
275 9 bits as the resolution is only
276 to the 0.5 degree C...
277 two sensors with three values
278 (cur, over, hyst) */
279
280 /* Misc */
281 u32 alarms; /* realtime status register encoding,combined */
282 u8 beep_enable; /* Global beep enable */
283 u32 beep_mask; /* Mask off specific beeps */
284 u8 vid; /* Register encoding, combined */
285 u8 vrm; /* hwmon-vid */
286};
287
cb0c1af3
JD
288static int w83791d_probe(struct i2c_client *client,
289 const struct i2c_device_id *id);
290static int w83791d_detect(struct i2c_client *client, int kind,
291 struct i2c_board_info *info);
292static int w83791d_remove(struct i2c_client *client);
9873964d
CS
293
294static int w83791d_read(struct i2c_client *client, u8 register);
295static int w83791d_write(struct i2c_client *client, u8 register, u8 value);
296static struct w83791d_data *w83791d_update_device(struct device *dev);
297
298#ifdef DEBUG
299static void w83791d_print_debug(struct w83791d_data *data, struct device *dev);
300#endif
301
302static void w83791d_init_client(struct i2c_client *client);
303
cb0c1af3
JD
304static const struct i2c_device_id w83791d_id[] = {
305 { "w83791d", w83791d },
306 { }
307};
308MODULE_DEVICE_TABLE(i2c, w83791d_id);
309
9873964d 310static struct i2c_driver w83791d_driver = {
cb0c1af3 311 .class = I2C_CLASS_HWMON,
9873964d
CS
312 .driver = {
313 .name = "w83791d",
314 },
cb0c1af3
JD
315 .probe = w83791d_probe,
316 .remove = w83791d_remove,
317 .id_table = w83791d_id,
318 .detect = w83791d_detect,
319 .address_data = &addr_data,
9873964d
CS
320};
321
322/* following are the sysfs callback functions */
323#define show_in_reg(reg) \
324static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
325 char *buf) \
326{ \
327 struct sensor_device_attribute *sensor_attr = \
328 to_sensor_dev_attr(attr); \
329 struct w83791d_data *data = w83791d_update_device(dev); \
330 int nr = sensor_attr->index; \
331 return sprintf(buf,"%d\n", IN_FROM_REG(data->reg[nr])); \
332}
333
334show_in_reg(in);
335show_in_reg(in_min);
336show_in_reg(in_max);
337
338#define store_in_reg(REG, reg) \
339static ssize_t store_in_##reg(struct device *dev, \
340 struct device_attribute *attr, \
341 const char *buf, size_t count) \
342{ \
343 struct sensor_device_attribute *sensor_attr = \
344 to_sensor_dev_attr(attr); \
345 struct i2c_client *client = to_i2c_client(dev); \
346 struct w83791d_data *data = i2c_get_clientdata(client); \
347 unsigned long val = simple_strtoul(buf, NULL, 10); \
348 int nr = sensor_attr->index; \
349 \
350 mutex_lock(&data->update_lock); \
351 data->in_##reg[nr] = IN_TO_REG(val); \
352 w83791d_write(client, W83791D_REG_IN_##REG[nr], data->in_##reg[nr]); \
353 mutex_unlock(&data->update_lock); \
354 \
355 return count; \
356}
357store_in_reg(MIN, min);
358store_in_reg(MAX, max);
359
360static struct sensor_device_attribute sda_in_input[] = {
361 SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
362 SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
363 SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
364 SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
365 SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
366 SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
367 SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
368 SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
369 SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
370 SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
371};
372
373static struct sensor_device_attribute sda_in_min[] = {
374 SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
375 SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
376 SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
377 SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
378 SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
379 SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
380 SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
381 SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
382 SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
383 SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
384};
385
386static struct sensor_device_attribute sda_in_max[] = {
387 SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
388 SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
389 SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
390 SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
391 SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
392 SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
393 SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
394 SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
395 SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
396 SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
397};
398
64383123
CS
399
400static ssize_t show_beep(struct device *dev, struct device_attribute *attr,
401 char *buf)
402{
403 struct sensor_device_attribute *sensor_attr =
404 to_sensor_dev_attr(attr);
405 struct w83791d_data *data = w83791d_update_device(dev);
406 int bitnr = sensor_attr->index;
407
408 return sprintf(buf, "%d\n", (data->beep_mask >> bitnr) & 1);
409}
410
411static ssize_t store_beep(struct device *dev, struct device_attribute *attr,
412 const char *buf, size_t count)
413{
414 struct sensor_device_attribute *sensor_attr =
415 to_sensor_dev_attr(attr);
416 struct i2c_client *client = to_i2c_client(dev);
417 struct w83791d_data *data = i2c_get_clientdata(client);
418 int bitnr = sensor_attr->index;
419 int bytenr = bitnr / 8;
420 long val = simple_strtol(buf, NULL, 10) ? 1 : 0;
421
422 mutex_lock(&data->update_lock);
423
424 data->beep_mask &= ~(0xff << (bytenr * 8));
425 data->beep_mask |= w83791d_read(client, W83791D_REG_BEEP_CTRL[bytenr])
426 << (bytenr * 8);
427
428 data->beep_mask &= ~(1 << bitnr);
429 data->beep_mask |= val << bitnr;
430
431 w83791d_write(client, W83791D_REG_BEEP_CTRL[bytenr],
432 (data->beep_mask >> (bytenr * 8)) & 0xff);
433
434 mutex_unlock(&data->update_lock);
435
436 return count;
437}
438
439static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
440 char *buf)
441{
442 struct sensor_device_attribute *sensor_attr =
443 to_sensor_dev_attr(attr);
444 struct w83791d_data *data = w83791d_update_device(dev);
445 int bitnr = sensor_attr->index;
446
447 return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
448}
449
450/* Note: The bitmask for the beep enable/disable is different than
451 the bitmask for the alarm. */
452static struct sensor_device_attribute sda_in_beep[] = {
453 SENSOR_ATTR(in0_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 0),
454 SENSOR_ATTR(in1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 13),
455 SENSOR_ATTR(in2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 2),
456 SENSOR_ATTR(in3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 3),
457 SENSOR_ATTR(in4_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 8),
458 SENSOR_ATTR(in5_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 9),
459 SENSOR_ATTR(in6_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 10),
460 SENSOR_ATTR(in7_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 16),
461 SENSOR_ATTR(in8_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 17),
462 SENSOR_ATTR(in9_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 14),
463};
464
465static struct sensor_device_attribute sda_in_alarm[] = {
466 SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
467 SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
468 SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
469 SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
470 SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8),
471 SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 9),
472 SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 10),
473 SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 19),
474 SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 20),
475 SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 14),
476};
477
9873964d
CS
478#define show_fan_reg(reg) \
479static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
480 char *buf) \
481{ \
482 struct sensor_device_attribute *sensor_attr = \
483 to_sensor_dev_attr(attr); \
484 struct w83791d_data *data = w83791d_update_device(dev); \
485 int nr = sensor_attr->index; \
486 return sprintf(buf,"%d\n", \
487 FAN_FROM_REG(data->reg[nr], DIV_FROM_REG(data->fan_div[nr]))); \
488}
489
490show_fan_reg(fan);
491show_fan_reg(fan_min);
492
493static ssize_t store_fan_min(struct device *dev, struct device_attribute *attr,
494 const char *buf, size_t count)
495{
496 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
497 struct i2c_client *client = to_i2c_client(dev);
498 struct w83791d_data *data = i2c_get_clientdata(client);
499 unsigned long val = simple_strtoul(buf, NULL, 10);
500 int nr = sensor_attr->index;
501
502 mutex_lock(&data->update_lock);
503 data->fan_min[nr] = fan_to_reg(val, DIV_FROM_REG(data->fan_div[nr]));
504 w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
505 mutex_unlock(&data->update_lock);
506
507 return count;
508}
509
510static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
511 char *buf)
512{
513 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
514 int nr = sensor_attr->index;
515 struct w83791d_data *data = w83791d_update_device(dev);
516 return sprintf(buf, "%u\n", DIV_FROM_REG(data->fan_div[nr]));
517}
518
519/* Note: we save and restore the fan minimum here, because its value is
520 determined in part by the fan divisor. This follows the principle of
521 least suprise; the user doesn't expect the fan minimum to change just
522 because the divisor changed. */
523static ssize_t store_fan_div(struct device *dev, struct device_attribute *attr,
524 const char *buf, size_t count)
525{
526 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
527 struct i2c_client *client = to_i2c_client(dev);
528 struct w83791d_data *data = i2c_get_clientdata(client);
529 int nr = sensor_attr->index;
530 unsigned long min;
531 u8 tmp_fan_div;
532 u8 fan_div_reg;
533 int indx = 0;
534 u8 keep_mask = 0;
535 u8 new_shift = 0;
536
537 /* Save fan_min */
538 min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr]));
539
540 mutex_lock(&data->update_lock);
541 data->fan_div[nr] = div_to_reg(nr, simple_strtoul(buf, NULL, 10));
542
543 switch (nr) {
544 case 0:
545 indx = 0;
546 keep_mask = 0xcf;
547 new_shift = 4;
548 break;
549 case 1:
550 indx = 0;
551 keep_mask = 0x3f;
552 new_shift = 6;
553 break;
554 case 2:
555 indx = 1;
556 keep_mask = 0x3f;
557 new_shift = 6;
558 break;
559 case 3:
560 indx = 2;
561 keep_mask = 0xf8;
562 new_shift = 0;
563 break;
564 case 4:
565 indx = 2;
566 keep_mask = 0x8f;
567 new_shift = 4;
568 break;
569#ifdef DEBUG
570 default:
571 dev_warn(dev, "store_fan_div: Unexpected nr seen: %d\n", nr);
572 count = -EINVAL;
573 goto err_exit;
574#endif
575 }
576
577 fan_div_reg = w83791d_read(client, W83791D_REG_FAN_DIV[indx])
578 & keep_mask;
579 tmp_fan_div = (data->fan_div[nr] << new_shift) & ~keep_mask;
580
581 w83791d_write(client, W83791D_REG_FAN_DIV[indx],
582 fan_div_reg | tmp_fan_div);
583
584 /* Restore fan_min */
585 data->fan_min[nr] = fan_to_reg(min, DIV_FROM_REG(data->fan_div[nr]));
586 w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
587
588#ifdef DEBUG
589err_exit:
590#endif
591 mutex_unlock(&data->update_lock);
592
593 return count;
594}
595
596static struct sensor_device_attribute sda_fan_input[] = {
597 SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
598 SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
599 SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
600 SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
601 SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
602};
603
604static struct sensor_device_attribute sda_fan_min[] = {
605 SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO,
606 show_fan_min, store_fan_min, 0),
607 SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO,
608 show_fan_min, store_fan_min, 1),
609 SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO,
610 show_fan_min, store_fan_min, 2),
611 SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO,
612 show_fan_min, store_fan_min, 3),
613 SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO,
614 show_fan_min, store_fan_min, 4),
615};
616
617static struct sensor_device_attribute sda_fan_div[] = {
618 SENSOR_ATTR(fan1_div, S_IWUSR | S_IRUGO,
619 show_fan_div, store_fan_div, 0),
620 SENSOR_ATTR(fan2_div, S_IWUSR | S_IRUGO,
621 show_fan_div, store_fan_div, 1),
622 SENSOR_ATTR(fan3_div, S_IWUSR | S_IRUGO,
623 show_fan_div, store_fan_div, 2),
624 SENSOR_ATTR(fan4_div, S_IWUSR | S_IRUGO,
625 show_fan_div, store_fan_div, 3),
626 SENSOR_ATTR(fan5_div, S_IWUSR | S_IRUGO,
627 show_fan_div, store_fan_div, 4),
628};
629
64383123
CS
630static struct sensor_device_attribute sda_fan_beep[] = {
631 SENSOR_ATTR(fan1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 6),
632 SENSOR_ATTR(fan2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 7),
633 SENSOR_ATTR(fan3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 11),
634 SENSOR_ATTR(fan4_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 21),
635 SENSOR_ATTR(fan5_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 22),
636};
637
638static struct sensor_device_attribute sda_fan_alarm[] = {
639 SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6),
640 SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7),
641 SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11),
642 SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 21),
643 SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 22),
644};
645
9873964d
CS
646/* read/write the temperature1, includes measured value and limits */
647static ssize_t show_temp1(struct device *dev, struct device_attribute *devattr,
648 char *buf)
649{
650 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
651 struct w83791d_data *data = w83791d_update_device(dev);
652 return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp1[attr->index]));
653}
654
655static ssize_t store_temp1(struct device *dev, struct device_attribute *devattr,
656 const char *buf, size_t count)
657{
658 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
659 struct i2c_client *client = to_i2c_client(dev);
660 struct w83791d_data *data = i2c_get_clientdata(client);
661 long val = simple_strtol(buf, NULL, 10);
662 int nr = attr->index;
663
664 mutex_lock(&data->update_lock);
665 data->temp1[nr] = TEMP1_TO_REG(val);
666 w83791d_write(client, W83791D_REG_TEMP1[nr], data->temp1[nr]);
667 mutex_unlock(&data->update_lock);
668 return count;
669}
670
671/* read/write temperature2-3, includes measured value and limits */
672static ssize_t show_temp23(struct device *dev, struct device_attribute *devattr,
673 char *buf)
674{
675 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
676 struct w83791d_data *data = w83791d_update_device(dev);
677 int nr = attr->nr;
678 int index = attr->index;
679 return sprintf(buf, "%d\n", TEMP23_FROM_REG(data->temp_add[nr][index]));
680}
681
682static ssize_t store_temp23(struct device *dev,
683 struct device_attribute *devattr,
684 const char *buf, size_t count)
685{
686 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
687 struct i2c_client *client = to_i2c_client(dev);
688 struct w83791d_data *data = i2c_get_clientdata(client);
689 long val = simple_strtol(buf, NULL, 10);
690 int nr = attr->nr;
691 int index = attr->index;
692
693 mutex_lock(&data->update_lock);
694 data->temp_add[nr][index] = TEMP23_TO_REG(val);
695 w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2],
696 data->temp_add[nr][index] >> 8);
697 w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2 + 1],
698 data->temp_add[nr][index] & 0x80);
699 mutex_unlock(&data->update_lock);
700
701 return count;
702}
703
704static struct sensor_device_attribute_2 sda_temp_input[] = {
705 SENSOR_ATTR_2(temp1_input, S_IRUGO, show_temp1, NULL, 0, 0),
706 SENSOR_ATTR_2(temp2_input, S_IRUGO, show_temp23, NULL, 0, 0),
707 SENSOR_ATTR_2(temp3_input, S_IRUGO, show_temp23, NULL, 1, 0),
708};
709
710static struct sensor_device_attribute_2 sda_temp_max[] = {
711 SENSOR_ATTR_2(temp1_max, S_IRUGO | S_IWUSR,
712 show_temp1, store_temp1, 0, 1),
713 SENSOR_ATTR_2(temp2_max, S_IRUGO | S_IWUSR,
714 show_temp23, store_temp23, 0, 1),
715 SENSOR_ATTR_2(temp3_max, S_IRUGO | S_IWUSR,
716 show_temp23, store_temp23, 1, 1),
717};
718
719static struct sensor_device_attribute_2 sda_temp_max_hyst[] = {
720 SENSOR_ATTR_2(temp1_max_hyst, S_IRUGO | S_IWUSR,
721 show_temp1, store_temp1, 0, 2),
722 SENSOR_ATTR_2(temp2_max_hyst, S_IRUGO | S_IWUSR,
723 show_temp23, store_temp23, 0, 2),
724 SENSOR_ATTR_2(temp3_max_hyst, S_IRUGO | S_IWUSR,
725 show_temp23, store_temp23, 1, 2),
726};
727
64383123
CS
728/* Note: The bitmask for the beep enable/disable is different than
729 the bitmask for the alarm. */
730static struct sensor_device_attribute sda_temp_beep[] = {
731 SENSOR_ATTR(temp1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 4),
732 SENSOR_ATTR(temp2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 5),
733 SENSOR_ATTR(temp3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 1),
734};
735
736static struct sensor_device_attribute sda_temp_alarm[] = {
737 SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4),
738 SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5),
739 SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
740};
9873964d
CS
741
742/* get reatime status of all sensors items: voltage, temp, fan */
743static ssize_t show_alarms_reg(struct device *dev,
744 struct device_attribute *attr, char *buf)
745{
746 struct w83791d_data *data = w83791d_update_device(dev);
747 return sprintf(buf, "%u\n", data->alarms);
748}
749
750static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
751
752/* Beep control */
753
754#define GLOBAL_BEEP_ENABLE_SHIFT 15
755#define GLOBAL_BEEP_ENABLE_MASK (1 << GLOBAL_BEEP_ENABLE_SHIFT)
756
757static ssize_t show_beep_enable(struct device *dev,
758 struct device_attribute *attr, char *buf)
759{
760 struct w83791d_data *data = w83791d_update_device(dev);
761 return sprintf(buf, "%d\n", data->beep_enable);
762}
763
764static ssize_t show_beep_mask(struct device *dev,
765 struct device_attribute *attr, char *buf)
766{
767 struct w83791d_data *data = w83791d_update_device(dev);
768 return sprintf(buf, "%d\n", BEEP_MASK_FROM_REG(data->beep_mask));
769}
770
771
772static ssize_t store_beep_mask(struct device *dev,
773 struct device_attribute *attr,
774 const char *buf, size_t count)
775{
776 struct i2c_client *client = to_i2c_client(dev);
777 struct w83791d_data *data = i2c_get_clientdata(client);
778 long val = simple_strtol(buf, NULL, 10);
779 int i;
780
781 mutex_lock(&data->update_lock);
782
783 /* The beep_enable state overrides any enabling request from
784 the masks */
785 data->beep_mask = BEEP_MASK_TO_REG(val) & ~GLOBAL_BEEP_ENABLE_MASK;
786 data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
787
788 val = data->beep_mask;
789
790 for (i = 0; i < 3; i++) {
791 w83791d_write(client, W83791D_REG_BEEP_CTRL[i], (val & 0xff));
792 val >>= 8;
793 }
794
795 mutex_unlock(&data->update_lock);
796
797 return count;
798}
799
800static ssize_t store_beep_enable(struct device *dev,
801 struct device_attribute *attr,
802 const char *buf, size_t count)
803{
804 struct i2c_client *client = to_i2c_client(dev);
805 struct w83791d_data *data = i2c_get_clientdata(client);
806 long val = simple_strtol(buf, NULL, 10);
807
808 mutex_lock(&data->update_lock);
809
810 data->beep_enable = val ? 1 : 0;
811
812 /* Keep the full mask value in sync with the current enable */
813 data->beep_mask &= ~GLOBAL_BEEP_ENABLE_MASK;
814 data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
815
816 /* The global control is in the second beep control register
817 so only need to update that register */
818 val = (data->beep_mask >> 8) & 0xff;
819
820 w83791d_write(client, W83791D_REG_BEEP_CTRL[1], val);
821
822 mutex_unlock(&data->update_lock);
823
824 return count;
825}
826
827static struct sensor_device_attribute sda_beep_ctrl[] = {
828 SENSOR_ATTR(beep_enable, S_IRUGO | S_IWUSR,
829 show_beep_enable, store_beep_enable, 0),
830 SENSOR_ATTR(beep_mask, S_IRUGO | S_IWUSR,
831 show_beep_mask, store_beep_mask, 1)
832};
833
834/* cpu voltage regulation information */
835static ssize_t show_vid_reg(struct device *dev,
836 struct device_attribute *attr, char *buf)
837{
838 struct w83791d_data *data = w83791d_update_device(dev);
839 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
840}
841
842static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
843
844static ssize_t show_vrm_reg(struct device *dev,
845 struct device_attribute *attr, char *buf)
846{
90d6619a 847 struct w83791d_data *data = dev_get_drvdata(dev);
9873964d
CS
848 return sprintf(buf, "%d\n", data->vrm);
849}
850
851static ssize_t store_vrm_reg(struct device *dev,
852 struct device_attribute *attr,
853 const char *buf, size_t count)
854{
8f74efe8 855 struct w83791d_data *data = dev_get_drvdata(dev);
9873964d
CS
856
857 /* No lock needed as vrm is internal to the driver
858 (not read from a chip register) and so is not
859 updated in w83791d_update_device() */
8f74efe8 860 data->vrm = simple_strtoul(buf, NULL, 10);
9873964d
CS
861
862 return count;
863}
864
865static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
866
34fc921a
JC
867#define IN_UNIT_ATTRS(X) \
868 &sda_in_input[X].dev_attr.attr, \
869 &sda_in_min[X].dev_attr.attr, \
64383123
CS
870 &sda_in_max[X].dev_attr.attr, \
871 &sda_in_beep[X].dev_attr.attr, \
872 &sda_in_alarm[X].dev_attr.attr
34fc921a
JC
873
874#define FAN_UNIT_ATTRS(X) \
875 &sda_fan_input[X].dev_attr.attr, \
876 &sda_fan_min[X].dev_attr.attr, \
64383123
CS
877 &sda_fan_div[X].dev_attr.attr, \
878 &sda_fan_beep[X].dev_attr.attr, \
879 &sda_fan_alarm[X].dev_attr.attr
34fc921a
JC
880
881#define TEMP_UNIT_ATTRS(X) \
882 &sda_temp_input[X].dev_attr.attr, \
883 &sda_temp_max[X].dev_attr.attr, \
64383123
CS
884 &sda_temp_max_hyst[X].dev_attr.attr, \
885 &sda_temp_beep[X].dev_attr.attr, \
886 &sda_temp_alarm[X].dev_attr.attr
34fc921a
JC
887
888static struct attribute *w83791d_attributes[] = {
889 IN_UNIT_ATTRS(0),
890 IN_UNIT_ATTRS(1),
891 IN_UNIT_ATTRS(2),
892 IN_UNIT_ATTRS(3),
893 IN_UNIT_ATTRS(4),
894 IN_UNIT_ATTRS(5),
895 IN_UNIT_ATTRS(6),
896 IN_UNIT_ATTRS(7),
897 IN_UNIT_ATTRS(8),
898 IN_UNIT_ATTRS(9),
899 FAN_UNIT_ATTRS(0),
900 FAN_UNIT_ATTRS(1),
901 FAN_UNIT_ATTRS(2),
902 FAN_UNIT_ATTRS(3),
903 FAN_UNIT_ATTRS(4),
904 TEMP_UNIT_ATTRS(0),
905 TEMP_UNIT_ATTRS(1),
906 TEMP_UNIT_ATTRS(2),
907 &dev_attr_alarms.attr,
908 &sda_beep_ctrl[0].dev_attr.attr,
909 &sda_beep_ctrl[1].dev_attr.attr,
910 &dev_attr_cpu0_vid.attr,
911 &dev_attr_vrm.attr,
912 NULL
913};
914
915static const struct attribute_group w83791d_group = {
916 .attrs = w83791d_attributes,
917};
918
9873964d 919
cb0c1af3 920static int w83791d_detect_subclients(struct i2c_client *client)
9873964d 921{
cb0c1af3 922 struct i2c_adapter *adapter = client->adapter;
9873964d 923 struct w83791d_data *data = i2c_get_clientdata(client);
cb0c1af3 924 int address = client->addr;
9873964d
CS
925 int i, id, err;
926 u8 val;
927
928 id = i2c_adapter_id(adapter);
929 if (force_subclients[0] == id && force_subclients[1] == address) {
930 for (i = 2; i <= 3; i++) {
931 if (force_subclients[i] < 0x48 ||
932 force_subclients[i] > 0x4f) {
933 dev_err(&client->dev,
934 "invalid subclient "
935 "address %d; must be 0x48-0x4f\n",
936 force_subclients[i]);
937 err = -ENODEV;
938 goto error_sc_0;
939 }
940 }
941 w83791d_write(client, W83791D_REG_I2C_SUBADDR,
942 (force_subclients[2] & 0x07) |
943 ((force_subclients[3] & 0x07) << 4));
944 }
945
946 val = w83791d_read(client, W83791D_REG_I2C_SUBADDR);
947 if (!(val & 0x08)) {
cb0c1af3 948 data->lm75[0] = i2c_new_dummy(adapter, 0x48 + (val & 0x7));
9873964d
CS
949 }
950 if (!(val & 0x80)) {
951 if ((data->lm75[0] != NULL) &&
952 ((val & 0x7) == ((val >> 4) & 0x7))) {
953 dev_err(&client->dev,
954 "duplicate addresses 0x%x, "
955 "use force_subclient\n",
956 data->lm75[0]->addr);
957 err = -ENODEV;
958 goto error_sc_1;
959 }
cb0c1af3
JD
960 data->lm75[1] = i2c_new_dummy(adapter,
961 0x48 + ((val >> 4) & 0x7));
9873964d
CS
962 }
963
964 return 0;
965
966/* Undo inits in case of errors */
967
968error_sc_1:
cb0c1af3
JD
969 if (data->lm75[0] != NULL)
970 i2c_unregister_device(data->lm75[0]);
9873964d
CS
971error_sc_0:
972 return err;
973}
974
975
cb0c1af3
JD
976/* Return 0 if detection is successful, -ENODEV otherwise */
977static int w83791d_detect(struct i2c_client *client, int kind,
978 struct i2c_board_info *info)
9873964d 979{
cb0c1af3
JD
980 struct i2c_adapter *adapter = client->adapter;
981 int val1, val2;
982 unsigned short address = client->addr;
9873964d
CS
983
984 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
cb0c1af3 985 return -ENODEV;
9873964d
CS
986 }
987
9873964d
CS
988 /* The w83791d may be stuck in some other bank than bank 0. This may
989 make reading other information impossible. Specify a force=...
990 parameter, and the Winbond will be reset to the right bank. */
991 if (kind < 0) {
992 if (w83791d_read(client, W83791D_REG_CONFIG) & 0x80) {
cb0c1af3 993 return -ENODEV;
9873964d
CS
994 }
995 val1 = w83791d_read(client, W83791D_REG_BANK);
996 val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
997 /* Check for Winbond ID if in bank 0 */
998 if (!(val1 & 0x07)) {
999 /* yes it is Bank0 */
1000 if (((!(val1 & 0x80)) && (val2 != 0xa3)) ||
1001 ((val1 & 0x80) && (val2 != 0x5c))) {
cb0c1af3 1002 return -ENODEV;
9873964d
CS
1003 }
1004 }
1005 /* If Winbond chip, address of chip and W83791D_REG_I2C_ADDR
1006 should match */
1007 if (w83791d_read(client, W83791D_REG_I2C_ADDR) != address) {
cb0c1af3 1008 return -ENODEV;
9873964d
CS
1009 }
1010 }
1011
1012 /* We either have a force parameter or we have reason to
1013 believe it is a Winbond chip. Either way, we want bank 0 and
1014 Vendor ID high byte */
1015 val1 = w83791d_read(client, W83791D_REG_BANK) & 0x78;
1016 w83791d_write(client, W83791D_REG_BANK, val1 | 0x80);
1017
1018 /* Verify it is a Winbond w83791d */
1019 if (kind <= 0) {
1020 /* get vendor ID */
1021 val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
1022 if (val2 != 0x5c) { /* the vendor is NOT Winbond */
cb0c1af3 1023 return -ENODEV;
9873964d
CS
1024 }
1025 val1 = w83791d_read(client, W83791D_REG_WCHIPID);
1026 if (val1 == 0x71) {
1027 kind = w83791d;
1028 } else {
1029 if (kind == 0)
cb0c1af3 1030 dev_warn(&adapter->dev,
9873964d
CS
1031 "w83791d: Ignoring 'force' parameter "
1032 "for unknown chip at adapter %d, "
1033 "address 0x%02x\n",
1034 i2c_adapter_id(adapter), address);
cb0c1af3 1035 return -ENODEV;
9873964d
CS
1036 }
1037 }
1038
cb0c1af3
JD
1039 strlcpy(info->type, "w83791d", I2C_NAME_SIZE);
1040
1041 return 0;
1042}
1043
1044static int w83791d_probe(struct i2c_client *client,
1045 const struct i2c_device_id *id)
1046{
1047 struct w83791d_data *data;
1048 struct device *dev = &client->dev;
1049 int i, val1, err;
9873964d
CS
1050
1051#ifdef DEBUG
1052 val1 = w83791d_read(client, W83791D_REG_DID_VID4);
1053 dev_dbg(dev, "Device ID version: %d.%d (0x%02x)\n",
1054 (val1 >> 5) & 0x07, (val1 >> 1) & 0x0f, val1);
1055#endif
1056
cb0c1af3
JD
1057 data = kzalloc(sizeof(struct w83791d_data), GFP_KERNEL);
1058 if (!data) {
1059 err = -ENOMEM;
1060 goto error0;
1061 }
9873964d 1062
cb0c1af3
JD
1063 i2c_set_clientdata(client, data);
1064 mutex_init(&data->update_lock);
9873964d 1065
cb0c1af3
JD
1066 err = w83791d_detect_subclients(client);
1067 if (err)
1068 goto error1;
9873964d
CS
1069
1070 /* Initialize the chip */
1071 w83791d_init_client(client);
1072
1073 /* If the fan_div is changed, make sure there is a rational
1074 fan_min in place */
1075 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1076 data->fan_min[i] = w83791d_read(client, W83791D_REG_FAN_MIN[i]);
1077 }
1078
1079 /* Register sysfs hooks */
34fc921a
JC
1080 if ((err = sysfs_create_group(&client->dev.kobj, &w83791d_group)))
1081 goto error3;
1082
1083 /* Everything is ready, now register the working device */
1beeffe4
TJ
1084 data->hwmon_dev = hwmon_device_register(dev);
1085 if (IS_ERR(data->hwmon_dev)) {
1086 err = PTR_ERR(data->hwmon_dev);
34fc921a 1087 goto error4;
9873964d
CS
1088 }
1089
9873964d
CS
1090 return 0;
1091
34fc921a
JC
1092error4:
1093 sysfs_remove_group(&client->dev.kobj, &w83791d_group);
9873964d 1094error3:
cb0c1af3
JD
1095 if (data->lm75[0] != NULL)
1096 i2c_unregister_device(data->lm75[0]);
1097 if (data->lm75[1] != NULL)
1098 i2c_unregister_device(data->lm75[1]);
9873964d
CS
1099error1:
1100 kfree(data);
1101error0:
1102 return err;
1103}
1104
cb0c1af3 1105static int w83791d_remove(struct i2c_client *client)
9873964d
CS
1106{
1107 struct w83791d_data *data = i2c_get_clientdata(client);
9873964d 1108
cb0c1af3
JD
1109 hwmon_device_unregister(data->hwmon_dev);
1110 sysfs_remove_group(&client->dev.kobj, &w83791d_group);
9873964d 1111
cb0c1af3
JD
1112 if (data->lm75[0] != NULL)
1113 i2c_unregister_device(data->lm75[0]);
1114 if (data->lm75[1] != NULL)
1115 i2c_unregister_device(data->lm75[1]);
9873964d 1116
cb0c1af3 1117 kfree(data);
9873964d
CS
1118 return 0;
1119}
1120
1121static void w83791d_init_client(struct i2c_client *client)
1122{
1123 struct w83791d_data *data = i2c_get_clientdata(client);
1124 u8 tmp;
1125 u8 old_beep;
1126
1127 /* The difference between reset and init is that reset
1128 does a hard reset of the chip via index 0x40, bit 7,
1129 but init simply forces certain registers to have "sane"
1130 values. The hope is that the BIOS has done the right
1131 thing (which is why the default is reset=0, init=0),
1132 but if not, reset is the hard hammer and init
1133 is the soft mallet both of which are trying to whack
1134 things into place...
1135 NOTE: The data sheet makes a distinction between
1136 "power on defaults" and "reset by MR". As far as I can tell,
1137 the hard reset puts everything into a power-on state so I'm
1138 not sure what "reset by MR" means or how it can happen.
1139 */
1140 if (reset || init) {
1141 /* keep some BIOS settings when we... */
1142 old_beep = w83791d_read(client, W83791D_REG_BEEP_CONFIG);
1143
1144 if (reset) {
1145 /* ... reset the chip and ... */
1146 w83791d_write(client, W83791D_REG_CONFIG, 0x80);
1147 }
1148
1149 /* ... disable power-on abnormal beep */
1150 w83791d_write(client, W83791D_REG_BEEP_CONFIG, old_beep | 0x80);
1151
1152 /* disable the global beep (not done by hard reset) */
1153 tmp = w83791d_read(client, W83791D_REG_BEEP_CTRL[1]);
1154 w83791d_write(client, W83791D_REG_BEEP_CTRL[1], tmp & 0xef);
1155
1156 if (init) {
1157 /* Make sure monitoring is turned on for add-ons */
1158 tmp = w83791d_read(client, W83791D_REG_TEMP2_CONFIG);
1159 if (tmp & 1) {
1160 w83791d_write(client, W83791D_REG_TEMP2_CONFIG,
1161 tmp & 0xfe);
1162 }
1163
1164 tmp = w83791d_read(client, W83791D_REG_TEMP3_CONFIG);
1165 if (tmp & 1) {
1166 w83791d_write(client, W83791D_REG_TEMP3_CONFIG,
1167 tmp & 0xfe);
1168 }
1169
1170 /* Start monitoring */
1171 tmp = w83791d_read(client, W83791D_REG_CONFIG) & 0xf7;
1172 w83791d_write(client, W83791D_REG_CONFIG, tmp | 0x01);
1173 }
1174 }
1175
1176 data->vrm = vid_which_vrm();
1177}
1178
1179static struct w83791d_data *w83791d_update_device(struct device *dev)
1180{
1181 struct i2c_client *client = to_i2c_client(dev);
1182 struct w83791d_data *data = i2c_get_clientdata(client);
1183 int i, j;
1184 u8 reg_array_tmp[3];
1185
1186 mutex_lock(&data->update_lock);
1187
1188 if (time_after(jiffies, data->last_updated + (HZ * 3))
1189 || !data->valid) {
1190 dev_dbg(dev, "Starting w83791d device update\n");
1191
1192 /* Update the voltages measured value and limits */
1193 for (i = 0; i < NUMBER_OF_VIN; i++) {
1194 data->in[i] = w83791d_read(client,
1195 W83791D_REG_IN[i]);
1196 data->in_max[i] = w83791d_read(client,
1197 W83791D_REG_IN_MAX[i]);
1198 data->in_min[i] = w83791d_read(client,
1199 W83791D_REG_IN_MIN[i]);
1200 }
1201
1202 /* Update the fan counts and limits */
1203 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1204 /* Update the Fan measured value and limits */
1205 data->fan[i] = w83791d_read(client,
1206 W83791D_REG_FAN[i]);
1207 data->fan_min[i] = w83791d_read(client,
1208 W83791D_REG_FAN_MIN[i]);
1209 }
1210
1211 /* Update the fan divisor */
1212 for (i = 0; i < 3; i++) {
1213 reg_array_tmp[i] = w83791d_read(client,
1214 W83791D_REG_FAN_DIV[i]);
1215 }
1216 data->fan_div[0] = (reg_array_tmp[0] >> 4) & 0x03;
1217 data->fan_div[1] = (reg_array_tmp[0] >> 6) & 0x03;
1218 data->fan_div[2] = (reg_array_tmp[1] >> 6) & 0x03;
1219 data->fan_div[3] = reg_array_tmp[2] & 0x07;
1220 data->fan_div[4] = (reg_array_tmp[2] >> 4) & 0x07;
1221
1222 /* Update the first temperature sensor */
1223 for (i = 0; i < 3; i++) {
1224 data->temp1[i] = w83791d_read(client,
1225 W83791D_REG_TEMP1[i]);
1226 }
1227
1228 /* Update the rest of the temperature sensors */
1229 for (i = 0; i < 2; i++) {
1230 for (j = 0; j < 3; j++) {
1231 data->temp_add[i][j] =
1232 (w83791d_read(client,
1233 W83791D_REG_TEMP_ADD[i][j * 2]) << 8) |
1234 w83791d_read(client,
1235 W83791D_REG_TEMP_ADD[i][j * 2 + 1]);
1236 }
1237 }
1238
1239 /* Update the realtime status */
1240 data->alarms =
1241 w83791d_read(client, W83791D_REG_ALARM1) +
1242 (w83791d_read(client, W83791D_REG_ALARM2) << 8) +
1243 (w83791d_read(client, W83791D_REG_ALARM3) << 16);
1244
1245 /* Update the beep configuration information */
1246 data->beep_mask =
1247 w83791d_read(client, W83791D_REG_BEEP_CTRL[0]) +
1248 (w83791d_read(client, W83791D_REG_BEEP_CTRL[1]) << 8) +
1249 (w83791d_read(client, W83791D_REG_BEEP_CTRL[2]) << 16);
1250
125751cb 1251 /* Extract global beep enable flag */
9873964d
CS
1252 data->beep_enable =
1253 (data->beep_mask >> GLOBAL_BEEP_ENABLE_SHIFT) & 0x01;
1254
1255 /* Update the cpu voltage information */
1256 i = w83791d_read(client, W83791D_REG_VID_FANDIV);
1257 data->vid = i & 0x0f;
1258 data->vid |= (w83791d_read(client, W83791D_REG_DID_VID4) & 0x01)
1259 << 4;
1260
1261 data->last_updated = jiffies;
1262 data->valid = 1;
1263 }
1264
1265 mutex_unlock(&data->update_lock);
1266
1267#ifdef DEBUG
1268 w83791d_print_debug(data, dev);
1269#endif
1270
1271 return data;
1272}
1273
1274#ifdef DEBUG
1275static void w83791d_print_debug(struct w83791d_data *data, struct device *dev)
1276{
1277 int i = 0, j = 0;
1278
1279 dev_dbg(dev, "======Start of w83791d debug values======\n");
1280 dev_dbg(dev, "%d set of Voltages: ===>\n", NUMBER_OF_VIN);
1281 for (i = 0; i < NUMBER_OF_VIN; i++) {
1282 dev_dbg(dev, "vin[%d] is: 0x%02x\n", i, data->in[i]);
1283 dev_dbg(dev, "vin[%d] min is: 0x%02x\n", i, data->in_min[i]);
1284 dev_dbg(dev, "vin[%d] max is: 0x%02x\n", i, data->in_max[i]);
1285 }
1286 dev_dbg(dev, "%d set of Fan Counts/Divisors: ===>\n", NUMBER_OF_FANIN);
1287 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1288 dev_dbg(dev, "fan[%d] is: 0x%02x\n", i, data->fan[i]);
1289 dev_dbg(dev, "fan[%d] min is: 0x%02x\n", i, data->fan_min[i]);
1290 dev_dbg(dev, "fan_div[%d] is: 0x%02x\n", i, data->fan_div[i]);
1291 }
1292
1293 /* temperature math is signed, but only print out the
1294 bits that matter */
1295 dev_dbg(dev, "%d set of Temperatures: ===>\n", NUMBER_OF_TEMPIN);
1296 for (i = 0; i < 3; i++) {
1297 dev_dbg(dev, "temp1[%d] is: 0x%02x\n", i, (u8) data->temp1[i]);
1298 }
1299 for (i = 0; i < 2; i++) {
1300 for (j = 0; j < 3; j++) {
1301 dev_dbg(dev, "temp_add[%d][%d] is: 0x%04x\n", i, j,
1302 (u16) data->temp_add[i][j]);
1303 }
1304 }
1305
1306 dev_dbg(dev, "Misc Information: ===>\n");
1307 dev_dbg(dev, "alarm is: 0x%08x\n", data->alarms);
1308 dev_dbg(dev, "beep_mask is: 0x%08x\n", data->beep_mask);
1309 dev_dbg(dev, "beep_enable is: %d\n", data->beep_enable);
1310 dev_dbg(dev, "vid is: 0x%02x\n", data->vid);
1311 dev_dbg(dev, "vrm is: 0x%02x\n", data->vrm);
1312 dev_dbg(dev, "=======End of w83791d debug values========\n");
1313 dev_dbg(dev, "\n");
1314}
1315#endif
1316
1317static int __init sensors_w83791d_init(void)
1318{
1319 return i2c_add_driver(&w83791d_driver);
1320}
1321
1322static void __exit sensors_w83791d_exit(void)
1323{
1324 i2c_del_driver(&w83791d_driver);
1325}
1326
1327MODULE_AUTHOR("Charles Spirakis <bezaur@gmail.com>");
1328MODULE_DESCRIPTION("W83791D driver");
1329MODULE_LICENSE("GPL");
1330
1331module_init(sensors_w83791d_init);
1332module_exit(sensors_w83791d_exit);