Loading...
1/*
2 w83791d.c - Part of lm_sensors, Linux kernel modules for hardware
3 monitoring
4
5 Copyright (C) 2006-2007 Charles Spirakis <bezaur@gmail.com>
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 5 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
30 w83781d.c files.
31
32 The w83791g chip is the same as the w83791d but lead-free.
33*/
34
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#define NUMBER_OF_PWM 5
49
50/* Addresses to scan */
51static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
52 I2C_CLIENT_END };
53
54/* Insmod parameters */
55
56static unsigned short force_subclients[4];
57module_param_array(force_subclients, short, NULL, 0);
58MODULE_PARM_DESC(force_subclients, "List of subclient addresses: "
59 "{bus, clientaddr, subclientaddr1, subclientaddr2}");
60
61static int reset;
62module_param(reset, bool, 0);
63MODULE_PARM_DESC(reset, "Set to one to force a hardware chip reset");
64
65static int init;
66module_param(init, bool, 0);
67MODULE_PARM_DESC(init, "Set to one to force extra software initialization");
68
69/* The W83791D registers */
70static const u8 W83791D_REG_IN[NUMBER_OF_VIN] = {
71 0x20, /* VCOREA in DataSheet */
72 0x21, /* VINR0 in DataSheet */
73 0x22, /* +3.3VIN in DataSheet */
74 0x23, /* VDD5V in DataSheet */
75 0x24, /* +12VIN in DataSheet */
76 0x25, /* -12VIN in DataSheet */
77 0x26, /* -5VIN in DataSheet */
78 0xB0, /* 5VSB in DataSheet */
79 0xB1, /* VBAT in DataSheet */
80 0xB2 /* VINR1 in DataSheet */
81};
82
83static const u8 W83791D_REG_IN_MAX[NUMBER_OF_VIN] = {
84 0x2B, /* VCOREA High Limit in DataSheet */
85 0x2D, /* VINR0 High Limit in DataSheet */
86 0x2F, /* +3.3VIN High Limit in DataSheet */
87 0x31, /* VDD5V High Limit in DataSheet */
88 0x33, /* +12VIN High Limit in DataSheet */
89 0x35, /* -12VIN High Limit in DataSheet */
90 0x37, /* -5VIN High Limit in DataSheet */
91 0xB4, /* 5VSB High Limit in DataSheet */
92 0xB6, /* VBAT High Limit in DataSheet */
93 0xB8 /* VINR1 High Limit in DataSheet */
94};
95static const u8 W83791D_REG_IN_MIN[NUMBER_OF_VIN] = {
96 0x2C, /* VCOREA Low Limit in DataSheet */
97 0x2E, /* VINR0 Low Limit in DataSheet */
98 0x30, /* +3.3VIN Low Limit in DataSheet */
99 0x32, /* VDD5V Low Limit in DataSheet */
100 0x34, /* +12VIN Low Limit in DataSheet */
101 0x36, /* -12VIN Low Limit in DataSheet */
102 0x38, /* -5VIN Low Limit in DataSheet */
103 0xB5, /* 5VSB Low Limit in DataSheet */
104 0xB7, /* VBAT Low Limit in DataSheet */
105 0xB9 /* VINR1 Low Limit in DataSheet */
106};
107static const u8 W83791D_REG_FAN[NUMBER_OF_FANIN] = {
108 0x28, /* FAN 1 Count in DataSheet */
109 0x29, /* FAN 2 Count in DataSheet */
110 0x2A, /* FAN 3 Count in DataSheet */
111 0xBA, /* FAN 4 Count in DataSheet */
112 0xBB, /* FAN 5 Count in DataSheet */
113};
114static const u8 W83791D_REG_FAN_MIN[NUMBER_OF_FANIN] = {
115 0x3B, /* FAN 1 Count Low Limit in DataSheet */
116 0x3C, /* FAN 2 Count Low Limit in DataSheet */
117 0x3D, /* FAN 3 Count Low Limit in DataSheet */
118 0xBC, /* FAN 4 Count Low Limit in DataSheet */
119 0xBD, /* FAN 5 Count Low Limit in DataSheet */
120};
121
122static const u8 W83791D_REG_PWM[NUMBER_OF_PWM] = {
123 0x81, /* PWM 1 duty cycle register in DataSheet */
124 0x83, /* PWM 2 duty cycle register in DataSheet */
125 0x94, /* PWM 3 duty cycle register in DataSheet */
126 0xA0, /* PWM 4 duty cycle register in DataSheet */
127 0xA1, /* PWM 5 duty cycle register in DataSheet */
128};
129
130static const u8 W83791D_REG_TEMP_TARGET[3] = {
131 0x85, /* PWM 1 target temperature for temp 1 */
132 0x86, /* PWM 2 target temperature for temp 2 */
133 0x96, /* PWM 3 target temperature for temp 3 */
134};
135
136static const u8 W83791D_REG_TEMP_TOL[2] = {
137 0x87, /* PWM 1/2 temperature tolerance */
138 0x97, /* PWM 3 temperature tolerance */
139};
140
141static const u8 W83791D_REG_FAN_CFG[2] = {
142 0x84, /* FAN 1/2 configuration */
143 0x95, /* FAN 3 configuration */
144};
145
146static const u8 W83791D_REG_FAN_DIV[3] = {
147 0x47, /* contains FAN1 and FAN2 Divisor */
148 0x4b, /* contains FAN3 Divisor */
149 0x5C, /* contains FAN4 and FAN5 Divisor */
150};
151
152#define W83791D_REG_BANK 0x4E
153#define W83791D_REG_TEMP2_CONFIG 0xC2
154#define W83791D_REG_TEMP3_CONFIG 0xCA
155
156static const u8 W83791D_REG_TEMP1[3] = {
157 0x27, /* TEMP 1 in DataSheet */
158 0x39, /* TEMP 1 Over in DataSheet */
159 0x3A, /* TEMP 1 Hyst in DataSheet */
160};
161
162static const u8 W83791D_REG_TEMP_ADD[2][6] = {
163 {0xC0, /* TEMP 2 in DataSheet */
164 0xC1, /* TEMP 2(0.5 deg) in DataSheet */
165 0xC5, /* TEMP 2 Over High part in DataSheet */
166 0xC6, /* TEMP 2 Over Low part in DataSheet */
167 0xC3, /* TEMP 2 Thyst High part in DataSheet */
168 0xC4}, /* TEMP 2 Thyst Low part in DataSheet */
169 {0xC8, /* TEMP 3 in DataSheet */
170 0xC9, /* TEMP 3(0.5 deg) in DataSheet */
171 0xCD, /* TEMP 3 Over High part in DataSheet */
172 0xCE, /* TEMP 3 Over Low part in DataSheet */
173 0xCB, /* TEMP 3 Thyst High part in DataSheet */
174 0xCC} /* TEMP 3 Thyst Low part in DataSheet */
175};
176
177#define W83791D_REG_BEEP_CONFIG 0x4D
178
179static const u8 W83791D_REG_BEEP_CTRL[3] = {
180 0x56, /* BEEP Control Register 1 */
181 0x57, /* BEEP Control Register 2 */
182 0xA3, /* BEEP Control Register 3 */
183};
184
185#define W83791D_REG_GPIO 0x15
186#define W83791D_REG_CONFIG 0x40
187#define W83791D_REG_VID_FANDIV 0x47
188#define W83791D_REG_DID_VID4 0x49
189#define W83791D_REG_WCHIPID 0x58
190#define W83791D_REG_CHIPMAN 0x4F
191#define W83791D_REG_PIN 0x4B
192#define W83791D_REG_I2C_SUBADDR 0x4A
193
194#define W83791D_REG_ALARM1 0xA9 /* realtime status register1 */
195#define W83791D_REG_ALARM2 0xAA /* realtime status register2 */
196#define W83791D_REG_ALARM3 0xAB /* realtime status register3 */
197
198#define W83791D_REG_VBAT 0x5D
199#define W83791D_REG_I2C_ADDR 0x48
200
201/* The SMBus locks itself. The Winbond W83791D has a bank select register
202 (index 0x4e), but the driver only accesses registers in bank 0. Since
203 we don't switch banks, we don't need any special code to handle
204 locking access between bank switches */
205static inline int w83791d_read(struct i2c_client *client, u8 reg)
206{
207 return i2c_smbus_read_byte_data(client, reg);
208}
209
210static inline int w83791d_write(struct i2c_client *client, u8 reg, u8 value)
211{
212 return i2c_smbus_write_byte_data(client, reg, value);
213}
214
215/* The analog voltage inputs have 16mV LSB. Since the sysfs output is
216 in mV as would be measured on the chip input pin, need to just
217 multiply/divide by 16 to translate from/to register values. */
218#define IN_TO_REG(val) (SENSORS_LIMIT((((val) + 8) / 16), 0, 255))
219#define IN_FROM_REG(val) ((val) * 16)
220
221static u8 fan_to_reg(long rpm, int div)
222{
223 if (rpm == 0)
224 return 255;
225 rpm = SENSORS_LIMIT(rpm, 1, 1000000);
226 return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1, 254);
227}
228
229#define FAN_FROM_REG(val,div) ((val) == 0 ? -1 : \
230 ((val) == 255 ? 0 : \
231 1350000 / ((val) * (div))))
232
233/* for temp1 which is 8-bit resolution, LSB = 1 degree Celsius */
234#define TEMP1_FROM_REG(val) ((val) * 1000)
235#define TEMP1_TO_REG(val) ((val) <= -128000 ? -128 : \
236 (val) >= 127000 ? 127 : \
237 (val) < 0 ? ((val) - 500) / 1000 : \
238 ((val) + 500) / 1000)
239
240/* for temp2 and temp3 which are 9-bit resolution, LSB = 0.5 degree Celsius
241 Assumes the top 8 bits are the integral amount and the bottom 8 bits
242 are the fractional amount. Since we only have 0.5 degree resolution,
243 the bottom 7 bits will always be zero */
244#define TEMP23_FROM_REG(val) ((val) / 128 * 500)
245#define TEMP23_TO_REG(val) ((val) <= -128000 ? 0x8000 : \
246 (val) >= 127500 ? 0x7F80 : \
247 (val) < 0 ? ((val) - 250) / 500 * 128 : \
248 ((val) + 250) / 500 * 128)
249
250/* for thermal cruise target temp, 7-bits, LSB = 1 degree Celsius */
251#define TARGET_TEMP_TO_REG(val) ((val) < 0 ? 0 : \
252 (val) >= 127000 ? 127 : \
253 ((val) + 500) / 1000)
254
255/* for thermal cruise temp tolerance, 4-bits, LSB = 1 degree Celsius */
256#define TOL_TEMP_TO_REG(val) ((val) < 0 ? 0 : \
257 (val) >= 15000 ? 15 : \
258 ((val) + 500) / 1000)
259
260#define BEEP_MASK_TO_REG(val) ((val) & 0xffffff)
261#define BEEP_MASK_FROM_REG(val) ((val) & 0xffffff)
262
263#define DIV_FROM_REG(val) (1 << (val))
264
265static u8 div_to_reg(int nr, long val)
266{
267 int i;
268
269 /* fan divisors max out at 128 */
270 val = SENSORS_LIMIT(val, 1, 128) >> 1;
271 for (i = 0; i < 7; i++) {
272 if (val == 0)
273 break;
274 val >>= 1;
275 }
276 return (u8) i;
277}
278
279struct w83791d_data {
280 struct device *hwmon_dev;
281 struct mutex update_lock;
282
283 char valid; /* !=0 if following fields are valid */
284 unsigned long last_updated; /* In jiffies */
285
286 /* array of 2 pointers to subclients */
287 struct i2c_client *lm75[2];
288
289 /* volts */
290 u8 in[NUMBER_OF_VIN]; /* Register value */
291 u8 in_max[NUMBER_OF_VIN]; /* Register value */
292 u8 in_min[NUMBER_OF_VIN]; /* Register value */
293
294 /* fans */
295 u8 fan[NUMBER_OF_FANIN]; /* Register value */
296 u8 fan_min[NUMBER_OF_FANIN]; /* Register value */
297 u8 fan_div[NUMBER_OF_FANIN]; /* Register encoding, shifted right */
298
299 /* Temperature sensors */
300
301 s8 temp1[3]; /* current, over, thyst */
302 s16 temp_add[2][3]; /* fixed point value. Top 8 bits are the
303 integral part, bottom 8 bits are the
304 fractional part. We only use the top
305 9 bits as the resolution is only
306 to the 0.5 degree C...
307 two sensors with three values
308 (cur, over, hyst) */
309
310 /* PWMs */
311 u8 pwm[5]; /* pwm duty cycle */
312 u8 pwm_enable[3]; /* pwm enable status for fan 1-3
313 (fan 4-5 only support manual mode) */
314
315 u8 temp_target[3]; /* pwm 1-3 target temperature */
316 u8 temp_tolerance[3]; /* pwm 1-3 temperature tolerance */
317
318 /* Misc */
319 u32 alarms; /* realtime status register encoding,combined */
320 u8 beep_enable; /* Global beep enable */
321 u32 beep_mask; /* Mask off specific beeps */
322 u8 vid; /* Register encoding, combined */
323 u8 vrm; /* hwmon-vid */
324};
325
326static int w83791d_probe(struct i2c_client *client,
327 const struct i2c_device_id *id);
328static int w83791d_detect(struct i2c_client *client,
329 struct i2c_board_info *info);
330static int w83791d_remove(struct i2c_client *client);
331
332static int w83791d_read(struct i2c_client *client, u8 reg);
333static int w83791d_write(struct i2c_client *client, u8 reg, u8 value);
334static struct w83791d_data *w83791d_update_device(struct device *dev);
335
336#ifdef DEBUG
337static void w83791d_print_debug(struct w83791d_data *data, struct device *dev);
338#endif
339
340static void w83791d_init_client(struct i2c_client *client);
341
342static const struct i2c_device_id w83791d_id[] = {
343 { "w83791d", 0 },
344 { }
345};
346MODULE_DEVICE_TABLE(i2c, w83791d_id);
347
348static struct i2c_driver w83791d_driver = {
349 .class = I2C_CLASS_HWMON,
350 .driver = {
351 .name = "w83791d",
352 },
353 .probe = w83791d_probe,
354 .remove = w83791d_remove,
355 .id_table = w83791d_id,
356 .detect = w83791d_detect,
357 .address_list = normal_i2c,
358};
359
360/* following are the sysfs callback functions */
361#define show_in_reg(reg) \
362static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
363 char *buf) \
364{ \
365 struct sensor_device_attribute *sensor_attr = \
366 to_sensor_dev_attr(attr); \
367 struct w83791d_data *data = w83791d_update_device(dev); \
368 int nr = sensor_attr->index; \
369 return sprintf(buf,"%d\n", IN_FROM_REG(data->reg[nr])); \
370}
371
372show_in_reg(in);
373show_in_reg(in_min);
374show_in_reg(in_max);
375
376#define store_in_reg(REG, reg) \
377static ssize_t store_in_##reg(struct device *dev, \
378 struct device_attribute *attr, \
379 const char *buf, size_t count) \
380{ \
381 struct sensor_device_attribute *sensor_attr = \
382 to_sensor_dev_attr(attr); \
383 struct i2c_client *client = to_i2c_client(dev); \
384 struct w83791d_data *data = i2c_get_clientdata(client); \
385 unsigned long val = simple_strtoul(buf, NULL, 10); \
386 int nr = sensor_attr->index; \
387 \
388 mutex_lock(&data->update_lock); \
389 data->in_##reg[nr] = IN_TO_REG(val); \
390 w83791d_write(client, W83791D_REG_IN_##REG[nr], data->in_##reg[nr]); \
391 mutex_unlock(&data->update_lock); \
392 \
393 return count; \
394}
395store_in_reg(MIN, min);
396store_in_reg(MAX, max);
397
398static struct sensor_device_attribute sda_in_input[] = {
399 SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
400 SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
401 SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
402 SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
403 SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
404 SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
405 SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
406 SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
407 SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
408 SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
409};
410
411static struct sensor_device_attribute sda_in_min[] = {
412 SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
413 SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
414 SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
415 SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
416 SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
417 SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
418 SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
419 SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
420 SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
421 SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
422};
423
424static struct sensor_device_attribute sda_in_max[] = {
425 SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
426 SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
427 SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
428 SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
429 SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
430 SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
431 SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
432 SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
433 SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
434 SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
435};
436
437
438static ssize_t show_beep(struct device *dev, struct device_attribute *attr,
439 char *buf)
440{
441 struct sensor_device_attribute *sensor_attr =
442 to_sensor_dev_attr(attr);
443 struct w83791d_data *data = w83791d_update_device(dev);
444 int bitnr = sensor_attr->index;
445
446 return sprintf(buf, "%d\n", (data->beep_mask >> bitnr) & 1);
447}
448
449static ssize_t store_beep(struct device *dev, struct device_attribute *attr,
450 const char *buf, size_t count)
451{
452 struct sensor_device_attribute *sensor_attr =
453 to_sensor_dev_attr(attr);
454 struct i2c_client *client = to_i2c_client(dev);
455 struct w83791d_data *data = i2c_get_clientdata(client);
456 int bitnr = sensor_attr->index;
457 int bytenr = bitnr / 8;
458 long val = simple_strtol(buf, NULL, 10) ? 1 : 0;
459
460 mutex_lock(&data->update_lock);
461
462 data->beep_mask &= ~(0xff << (bytenr * 8));
463 data->beep_mask |= w83791d_read(client, W83791D_REG_BEEP_CTRL[bytenr])
464 << (bytenr * 8);
465
466 data->beep_mask &= ~(1 << bitnr);
467 data->beep_mask |= val << bitnr;
468
469 w83791d_write(client, W83791D_REG_BEEP_CTRL[bytenr],
470 (data->beep_mask >> (bytenr * 8)) & 0xff);
471
472 mutex_unlock(&data->update_lock);
473
474 return count;
475}
476
477static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
478 char *buf)
479{
480 struct sensor_device_attribute *sensor_attr =
481 to_sensor_dev_attr(attr);
482 struct w83791d_data *data = w83791d_update_device(dev);
483 int bitnr = sensor_attr->index;
484
485 return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
486}
487
488/* Note: The bitmask for the beep enable/disable is different than
489 the bitmask for the alarm. */
490static struct sensor_device_attribute sda_in_beep[] = {
491 SENSOR_ATTR(in0_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 0),
492 SENSOR_ATTR(in1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 13),
493 SENSOR_ATTR(in2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 2),
494 SENSOR_ATTR(in3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 3),
495 SENSOR_ATTR(in4_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 8),
496 SENSOR_ATTR(in5_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 9),
497 SENSOR_ATTR(in6_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 10),
498 SENSOR_ATTR(in7_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 16),
499 SENSOR_ATTR(in8_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 17),
500 SENSOR_ATTR(in9_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 14),
501};
502
503static struct sensor_device_attribute sda_in_alarm[] = {
504 SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
505 SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
506 SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
507 SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
508 SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8),
509 SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 9),
510 SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 10),
511 SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 19),
512 SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 20),
513 SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 14),
514};
515
516#define show_fan_reg(reg) \
517static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
518 char *buf) \
519{ \
520 struct sensor_device_attribute *sensor_attr = \
521 to_sensor_dev_attr(attr); \
522 struct w83791d_data *data = w83791d_update_device(dev); \
523 int nr = sensor_attr->index; \
524 return sprintf(buf,"%d\n", \
525 FAN_FROM_REG(data->reg[nr], DIV_FROM_REG(data->fan_div[nr]))); \
526}
527
528show_fan_reg(fan);
529show_fan_reg(fan_min);
530
531static ssize_t store_fan_min(struct device *dev, struct device_attribute *attr,
532 const char *buf, size_t count)
533{
534 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
535 struct i2c_client *client = to_i2c_client(dev);
536 struct w83791d_data *data = i2c_get_clientdata(client);
537 unsigned long val = simple_strtoul(buf, NULL, 10);
538 int nr = sensor_attr->index;
539
540 mutex_lock(&data->update_lock);
541 data->fan_min[nr] = fan_to_reg(val, DIV_FROM_REG(data->fan_div[nr]));
542 w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
543 mutex_unlock(&data->update_lock);
544
545 return count;
546}
547
548static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
549 char *buf)
550{
551 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
552 int nr = sensor_attr->index;
553 struct w83791d_data *data = w83791d_update_device(dev);
554 return sprintf(buf, "%u\n", DIV_FROM_REG(data->fan_div[nr]));
555}
556
557/* Note: we save and restore the fan minimum here, because its value is
558 determined in part by the fan divisor. This follows the principle of
559 least surprise; the user doesn't expect the fan minimum to change just
560 because the divisor changed. */
561static ssize_t store_fan_div(struct device *dev, struct device_attribute *attr,
562 const char *buf, size_t count)
563{
564 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
565 struct i2c_client *client = to_i2c_client(dev);
566 struct w83791d_data *data = i2c_get_clientdata(client);
567 int nr = sensor_attr->index;
568 unsigned long min;
569 u8 tmp_fan_div;
570 u8 fan_div_reg;
571 u8 vbat_reg;
572 int indx = 0;
573 u8 keep_mask = 0;
574 u8 new_shift = 0;
575
576 /* Save fan_min */
577 min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr]));
578
579 mutex_lock(&data->update_lock);
580 data->fan_div[nr] = div_to_reg(nr, simple_strtoul(buf, NULL, 10));
581
582 switch (nr) {
583 case 0:
584 indx = 0;
585 keep_mask = 0xcf;
586 new_shift = 4;
587 break;
588 case 1:
589 indx = 0;
590 keep_mask = 0x3f;
591 new_shift = 6;
592 break;
593 case 2:
594 indx = 1;
595 keep_mask = 0x3f;
596 new_shift = 6;
597 break;
598 case 3:
599 indx = 2;
600 keep_mask = 0xf8;
601 new_shift = 0;
602 break;
603 case 4:
604 indx = 2;
605 keep_mask = 0x8f;
606 new_shift = 4;
607 break;
608#ifdef DEBUG
609 default:
610 dev_warn(dev, "store_fan_div: Unexpected nr seen: %d\n", nr);
611 count = -EINVAL;
612 goto err_exit;
613#endif
614 }
615
616 fan_div_reg = w83791d_read(client, W83791D_REG_FAN_DIV[indx])
617 & keep_mask;
618 tmp_fan_div = (data->fan_div[nr] << new_shift) & ~keep_mask;
619
620 w83791d_write(client, W83791D_REG_FAN_DIV[indx],
621 fan_div_reg | tmp_fan_div);
622
623 /* Bit 2 of fans 0-2 is stored in the vbat register (bits 5-7) */
624 if (nr < 3) {
625 keep_mask = ~(1 << (nr + 5));
626 vbat_reg = w83791d_read(client, W83791D_REG_VBAT)
627 & keep_mask;
628 tmp_fan_div = (data->fan_div[nr] << (3 + nr)) & ~keep_mask;
629 w83791d_write(client, W83791D_REG_VBAT,
630 vbat_reg | tmp_fan_div);
631 }
632
633 /* Restore fan_min */
634 data->fan_min[nr] = fan_to_reg(min, DIV_FROM_REG(data->fan_div[nr]));
635 w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
636
637#ifdef DEBUG
638err_exit:
639#endif
640 mutex_unlock(&data->update_lock);
641
642 return count;
643}
644
645static struct sensor_device_attribute sda_fan_input[] = {
646 SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
647 SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
648 SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
649 SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
650 SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
651};
652
653static struct sensor_device_attribute sda_fan_min[] = {
654 SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO,
655 show_fan_min, store_fan_min, 0),
656 SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO,
657 show_fan_min, store_fan_min, 1),
658 SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO,
659 show_fan_min, store_fan_min, 2),
660 SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO,
661 show_fan_min, store_fan_min, 3),
662 SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO,
663 show_fan_min, store_fan_min, 4),
664};
665
666static struct sensor_device_attribute sda_fan_div[] = {
667 SENSOR_ATTR(fan1_div, S_IWUSR | S_IRUGO,
668 show_fan_div, store_fan_div, 0),
669 SENSOR_ATTR(fan2_div, S_IWUSR | S_IRUGO,
670 show_fan_div, store_fan_div, 1),
671 SENSOR_ATTR(fan3_div, S_IWUSR | S_IRUGO,
672 show_fan_div, store_fan_div, 2),
673 SENSOR_ATTR(fan4_div, S_IWUSR | S_IRUGO,
674 show_fan_div, store_fan_div, 3),
675 SENSOR_ATTR(fan5_div, S_IWUSR | S_IRUGO,
676 show_fan_div, store_fan_div, 4),
677};
678
679static struct sensor_device_attribute sda_fan_beep[] = {
680 SENSOR_ATTR(fan1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 6),
681 SENSOR_ATTR(fan2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 7),
682 SENSOR_ATTR(fan3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 11),
683 SENSOR_ATTR(fan4_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 21),
684 SENSOR_ATTR(fan5_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 22),
685};
686
687static struct sensor_device_attribute sda_fan_alarm[] = {
688 SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6),
689 SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7),
690 SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11),
691 SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 21),
692 SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 22),
693};
694
695/* read/write PWMs */
696static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
697 char *buf)
698{
699 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
700 int nr = sensor_attr->index;
701 struct w83791d_data *data = w83791d_update_device(dev);
702 return sprintf(buf, "%u\n", data->pwm[nr]);
703}
704
705static ssize_t store_pwm(struct device *dev, struct device_attribute *attr,
706 const char *buf, size_t count)
707{
708 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
709 struct i2c_client *client = to_i2c_client(dev);
710 struct w83791d_data *data = i2c_get_clientdata(client);
711 int nr = sensor_attr->index;
712 unsigned long val;
713
714 if (strict_strtoul(buf, 10, &val))
715 return -EINVAL;
716
717 mutex_lock(&data->update_lock);
718 data->pwm[nr] = SENSORS_LIMIT(val, 0, 255);
719 w83791d_write(client, W83791D_REG_PWM[nr], data->pwm[nr]);
720 mutex_unlock(&data->update_lock);
721 return count;
722}
723
724static struct sensor_device_attribute sda_pwm[] = {
725 SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO,
726 show_pwm, store_pwm, 0),
727 SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO,
728 show_pwm, store_pwm, 1),
729 SENSOR_ATTR(pwm3, S_IWUSR | S_IRUGO,
730 show_pwm, store_pwm, 2),
731 SENSOR_ATTR(pwm4, S_IWUSR | S_IRUGO,
732 show_pwm, store_pwm, 3),
733 SENSOR_ATTR(pwm5, S_IWUSR | S_IRUGO,
734 show_pwm, store_pwm, 4),
735};
736
737static ssize_t show_pwmenable(struct device *dev, struct device_attribute *attr,
738 char *buf)
739{
740 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
741 int nr = sensor_attr->index;
742 struct w83791d_data *data = w83791d_update_device(dev);
743 return sprintf(buf, "%u\n", data->pwm_enable[nr] + 1);
744}
745
746static ssize_t store_pwmenable(struct device *dev,
747 struct device_attribute *attr, const char *buf, size_t count)
748{
749 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
750 struct i2c_client *client = to_i2c_client(dev);
751 struct w83791d_data *data = i2c_get_clientdata(client);
752 int nr = sensor_attr->index;
753 unsigned long val;
754 u8 reg_cfg_tmp;
755 u8 reg_idx = 0;
756 u8 val_shift = 0;
757 u8 keep_mask = 0;
758
759 int ret = strict_strtoul(buf, 10, &val);
760
761 if (ret || val < 1 || val > 3)
762 return -EINVAL;
763
764 mutex_lock(&data->update_lock);
765 data->pwm_enable[nr] = val - 1;
766 switch (nr) {
767 case 0:
768 reg_idx = 0;
769 val_shift = 2;
770 keep_mask = 0xf3;
771 break;
772 case 1:
773 reg_idx = 0;
774 val_shift = 4;
775 keep_mask = 0xcf;
776 break;
777 case 2:
778 reg_idx = 1;
779 val_shift = 2;
780 keep_mask = 0xf3;
781 break;
782 }
783
784 reg_cfg_tmp = w83791d_read(client, W83791D_REG_FAN_CFG[reg_idx]);
785 reg_cfg_tmp = (reg_cfg_tmp & keep_mask) |
786 data->pwm_enable[nr] << val_shift;
787
788 w83791d_write(client, W83791D_REG_FAN_CFG[reg_idx], reg_cfg_tmp);
789 mutex_unlock(&data->update_lock);
790
791 return count;
792}
793static struct sensor_device_attribute sda_pwmenable[] = {
794 SENSOR_ATTR(pwm1_enable, S_IWUSR | S_IRUGO,
795 show_pwmenable, store_pwmenable, 0),
796 SENSOR_ATTR(pwm2_enable, S_IWUSR | S_IRUGO,
797 show_pwmenable, store_pwmenable, 1),
798 SENSOR_ATTR(pwm3_enable, S_IWUSR | S_IRUGO,
799 show_pwmenable, store_pwmenable, 2),
800};
801
802/* For Smart Fan I / Thermal Cruise */
803static ssize_t show_temp_target(struct device *dev,
804 struct device_attribute *attr, char *buf)
805{
806 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
807 struct w83791d_data *data = w83791d_update_device(dev);
808 int nr = sensor_attr->index;
809 return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp_target[nr]));
810}
811
812static ssize_t store_temp_target(struct device *dev,
813 struct device_attribute *attr, const char *buf, size_t count)
814{
815 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
816 struct i2c_client *client = to_i2c_client(dev);
817 struct w83791d_data *data = i2c_get_clientdata(client);
818 int nr = sensor_attr->index;
819 unsigned long val;
820 u8 target_mask;
821
822 if (strict_strtoul(buf, 10, &val))
823 return -EINVAL;
824
825 mutex_lock(&data->update_lock);
826 data->temp_target[nr] = TARGET_TEMP_TO_REG(val);
827 target_mask = w83791d_read(client,
828 W83791D_REG_TEMP_TARGET[nr]) & 0x80;
829 w83791d_write(client, W83791D_REG_TEMP_TARGET[nr],
830 data->temp_target[nr] | target_mask);
831 mutex_unlock(&data->update_lock);
832 return count;
833}
834
835static struct sensor_device_attribute sda_temp_target[] = {
836 SENSOR_ATTR(temp1_target, S_IWUSR | S_IRUGO,
837 show_temp_target, store_temp_target, 0),
838 SENSOR_ATTR(temp2_target, S_IWUSR | S_IRUGO,
839 show_temp_target, store_temp_target, 1),
840 SENSOR_ATTR(temp3_target, S_IWUSR | S_IRUGO,
841 show_temp_target, store_temp_target, 2),
842};
843
844static ssize_t show_temp_tolerance(struct device *dev,
845 struct device_attribute *attr, char *buf)
846{
847 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
848 struct w83791d_data *data = w83791d_update_device(dev);
849 int nr = sensor_attr->index;
850 return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp_tolerance[nr]));
851}
852
853static ssize_t store_temp_tolerance(struct device *dev,
854 struct device_attribute *attr, const char *buf, size_t count)
855{
856 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
857 struct i2c_client *client = to_i2c_client(dev);
858 struct w83791d_data *data = i2c_get_clientdata(client);
859 int nr = sensor_attr->index;
860 unsigned long val;
861 u8 target_mask;
862 u8 reg_idx = 0;
863 u8 val_shift = 0;
864 u8 keep_mask = 0;
865
866 if (strict_strtoul(buf, 10, &val))
867 return -EINVAL;
868
869 switch (nr) {
870 case 0:
871 reg_idx = 0;
872 val_shift = 0;
873 keep_mask = 0xf0;
874 break;
875 case 1:
876 reg_idx = 0;
877 val_shift = 4;
878 keep_mask = 0x0f;
879 break;
880 case 2:
881 reg_idx = 1;
882 val_shift = 0;
883 keep_mask = 0xf0;
884 break;
885 }
886
887 mutex_lock(&data->update_lock);
888 data->temp_tolerance[nr] = TOL_TEMP_TO_REG(val);
889 target_mask = w83791d_read(client,
890 W83791D_REG_TEMP_TOL[reg_idx]) & keep_mask;
891 w83791d_write(client, W83791D_REG_TEMP_TOL[reg_idx],
892 (data->temp_tolerance[nr] << val_shift) | target_mask);
893 mutex_unlock(&data->update_lock);
894 return count;
895}
896
897static struct sensor_device_attribute sda_temp_tolerance[] = {
898 SENSOR_ATTR(temp1_tolerance, S_IWUSR | S_IRUGO,
899 show_temp_tolerance, store_temp_tolerance, 0),
900 SENSOR_ATTR(temp2_tolerance, S_IWUSR | S_IRUGO,
901 show_temp_tolerance, store_temp_tolerance, 1),
902 SENSOR_ATTR(temp3_tolerance, S_IWUSR | S_IRUGO,
903 show_temp_tolerance, store_temp_tolerance, 2),
904};
905
906/* read/write the temperature1, includes measured value and limits */
907static ssize_t show_temp1(struct device *dev, struct device_attribute *devattr,
908 char *buf)
909{
910 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
911 struct w83791d_data *data = w83791d_update_device(dev);
912 return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp1[attr->index]));
913}
914
915static ssize_t store_temp1(struct device *dev, struct device_attribute *devattr,
916 const char *buf, size_t count)
917{
918 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
919 struct i2c_client *client = to_i2c_client(dev);
920 struct w83791d_data *data = i2c_get_clientdata(client);
921 long val = simple_strtol(buf, NULL, 10);
922 int nr = attr->index;
923
924 mutex_lock(&data->update_lock);
925 data->temp1[nr] = TEMP1_TO_REG(val);
926 w83791d_write(client, W83791D_REG_TEMP1[nr], data->temp1[nr]);
927 mutex_unlock(&data->update_lock);
928 return count;
929}
930
931/* read/write temperature2-3, includes measured value and limits */
932static ssize_t show_temp23(struct device *dev, struct device_attribute *devattr,
933 char *buf)
934{
935 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
936 struct w83791d_data *data = w83791d_update_device(dev);
937 int nr = attr->nr;
938 int index = attr->index;
939 return sprintf(buf, "%d\n", TEMP23_FROM_REG(data->temp_add[nr][index]));
940}
941
942static ssize_t store_temp23(struct device *dev,
943 struct device_attribute *devattr,
944 const char *buf, size_t count)
945{
946 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
947 struct i2c_client *client = to_i2c_client(dev);
948 struct w83791d_data *data = i2c_get_clientdata(client);
949 long val = simple_strtol(buf, NULL, 10);
950 int nr = attr->nr;
951 int index = attr->index;
952
953 mutex_lock(&data->update_lock);
954 data->temp_add[nr][index] = TEMP23_TO_REG(val);
955 w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2],
956 data->temp_add[nr][index] >> 8);
957 w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2 + 1],
958 data->temp_add[nr][index] & 0x80);
959 mutex_unlock(&data->update_lock);
960
961 return count;
962}
963
964static struct sensor_device_attribute_2 sda_temp_input[] = {
965 SENSOR_ATTR_2(temp1_input, S_IRUGO, show_temp1, NULL, 0, 0),
966 SENSOR_ATTR_2(temp2_input, S_IRUGO, show_temp23, NULL, 0, 0),
967 SENSOR_ATTR_2(temp3_input, S_IRUGO, show_temp23, NULL, 1, 0),
968};
969
970static struct sensor_device_attribute_2 sda_temp_max[] = {
971 SENSOR_ATTR_2(temp1_max, S_IRUGO | S_IWUSR,
972 show_temp1, store_temp1, 0, 1),
973 SENSOR_ATTR_2(temp2_max, S_IRUGO | S_IWUSR,
974 show_temp23, store_temp23, 0, 1),
975 SENSOR_ATTR_2(temp3_max, S_IRUGO | S_IWUSR,
976 show_temp23, store_temp23, 1, 1),
977};
978
979static struct sensor_device_attribute_2 sda_temp_max_hyst[] = {
980 SENSOR_ATTR_2(temp1_max_hyst, S_IRUGO | S_IWUSR,
981 show_temp1, store_temp1, 0, 2),
982 SENSOR_ATTR_2(temp2_max_hyst, S_IRUGO | S_IWUSR,
983 show_temp23, store_temp23, 0, 2),
984 SENSOR_ATTR_2(temp3_max_hyst, S_IRUGO | S_IWUSR,
985 show_temp23, store_temp23, 1, 2),
986};
987
988/* Note: The bitmask for the beep enable/disable is different than
989 the bitmask for the alarm. */
990static struct sensor_device_attribute sda_temp_beep[] = {
991 SENSOR_ATTR(temp1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 4),
992 SENSOR_ATTR(temp2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 5),
993 SENSOR_ATTR(temp3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 1),
994};
995
996static struct sensor_device_attribute sda_temp_alarm[] = {
997 SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4),
998 SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5),
999 SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
1000};
1001
1002/* get reatime status of all sensors items: voltage, temp, fan */
1003static ssize_t show_alarms_reg(struct device *dev,
1004 struct device_attribute *attr, char *buf)
1005{
1006 struct w83791d_data *data = w83791d_update_device(dev);
1007 return sprintf(buf, "%u\n", data->alarms);
1008}
1009
1010static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
1011
1012/* Beep control */
1013
1014#define GLOBAL_BEEP_ENABLE_SHIFT 15
1015#define GLOBAL_BEEP_ENABLE_MASK (1 << GLOBAL_BEEP_ENABLE_SHIFT)
1016
1017static ssize_t show_beep_enable(struct device *dev,
1018 struct device_attribute *attr, char *buf)
1019{
1020 struct w83791d_data *data = w83791d_update_device(dev);
1021 return sprintf(buf, "%d\n", data->beep_enable);
1022}
1023
1024static ssize_t show_beep_mask(struct device *dev,
1025 struct device_attribute *attr, char *buf)
1026{
1027 struct w83791d_data *data = w83791d_update_device(dev);
1028 return sprintf(buf, "%d\n", BEEP_MASK_FROM_REG(data->beep_mask));
1029}
1030
1031
1032static ssize_t store_beep_mask(struct device *dev,
1033 struct device_attribute *attr,
1034 const char *buf, size_t count)
1035{
1036 struct i2c_client *client = to_i2c_client(dev);
1037 struct w83791d_data *data = i2c_get_clientdata(client);
1038 long val = simple_strtol(buf, NULL, 10);
1039 int i;
1040
1041 mutex_lock(&data->update_lock);
1042
1043 /* The beep_enable state overrides any enabling request from
1044 the masks */
1045 data->beep_mask = BEEP_MASK_TO_REG(val) & ~GLOBAL_BEEP_ENABLE_MASK;
1046 data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
1047
1048 val = data->beep_mask;
1049
1050 for (i = 0; i < 3; i++) {
1051 w83791d_write(client, W83791D_REG_BEEP_CTRL[i], (val & 0xff));
1052 val >>= 8;
1053 }
1054
1055 mutex_unlock(&data->update_lock);
1056
1057 return count;
1058}
1059
1060static ssize_t store_beep_enable(struct device *dev,
1061 struct device_attribute *attr,
1062 const char *buf, size_t count)
1063{
1064 struct i2c_client *client = to_i2c_client(dev);
1065 struct w83791d_data *data = i2c_get_clientdata(client);
1066 long val = simple_strtol(buf, NULL, 10);
1067
1068 mutex_lock(&data->update_lock);
1069
1070 data->beep_enable = val ? 1 : 0;
1071
1072 /* Keep the full mask value in sync with the current enable */
1073 data->beep_mask &= ~GLOBAL_BEEP_ENABLE_MASK;
1074 data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
1075
1076 /* The global control is in the second beep control register
1077 so only need to update that register */
1078 val = (data->beep_mask >> 8) & 0xff;
1079
1080 w83791d_write(client, W83791D_REG_BEEP_CTRL[1], val);
1081
1082 mutex_unlock(&data->update_lock);
1083
1084 return count;
1085}
1086
1087static struct sensor_device_attribute sda_beep_ctrl[] = {
1088 SENSOR_ATTR(beep_enable, S_IRUGO | S_IWUSR,
1089 show_beep_enable, store_beep_enable, 0),
1090 SENSOR_ATTR(beep_mask, S_IRUGO | S_IWUSR,
1091 show_beep_mask, store_beep_mask, 1)
1092};
1093
1094/* cpu voltage regulation information */
1095static ssize_t show_vid_reg(struct device *dev,
1096 struct device_attribute *attr, char *buf)
1097{
1098 struct w83791d_data *data = w83791d_update_device(dev);
1099 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
1100}
1101
1102static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
1103
1104static ssize_t show_vrm_reg(struct device *dev,
1105 struct device_attribute *attr, char *buf)
1106{
1107 struct w83791d_data *data = dev_get_drvdata(dev);
1108 return sprintf(buf, "%d\n", data->vrm);
1109}
1110
1111static ssize_t store_vrm_reg(struct device *dev,
1112 struct device_attribute *attr,
1113 const char *buf, size_t count)
1114{
1115 struct w83791d_data *data = dev_get_drvdata(dev);
1116
1117 /* No lock needed as vrm is internal to the driver
1118 (not read from a chip register) and so is not
1119 updated in w83791d_update_device() */
1120 data->vrm = simple_strtoul(buf, NULL, 10);
1121
1122 return count;
1123}
1124
1125static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
1126
1127#define IN_UNIT_ATTRS(X) \
1128 &sda_in_input[X].dev_attr.attr, \
1129 &sda_in_min[X].dev_attr.attr, \
1130 &sda_in_max[X].dev_attr.attr, \
1131 &sda_in_beep[X].dev_attr.attr, \
1132 &sda_in_alarm[X].dev_attr.attr
1133
1134#define FAN_UNIT_ATTRS(X) \
1135 &sda_fan_input[X].dev_attr.attr, \
1136 &sda_fan_min[X].dev_attr.attr, \
1137 &sda_fan_div[X].dev_attr.attr, \
1138 &sda_fan_beep[X].dev_attr.attr, \
1139 &sda_fan_alarm[X].dev_attr.attr
1140
1141#define TEMP_UNIT_ATTRS(X) \
1142 &sda_temp_input[X].dev_attr.attr, \
1143 &sda_temp_max[X].dev_attr.attr, \
1144 &sda_temp_max_hyst[X].dev_attr.attr, \
1145 &sda_temp_beep[X].dev_attr.attr, \
1146 &sda_temp_alarm[X].dev_attr.attr
1147
1148static struct attribute *w83791d_attributes[] = {
1149 IN_UNIT_ATTRS(0),
1150 IN_UNIT_ATTRS(1),
1151 IN_UNIT_ATTRS(2),
1152 IN_UNIT_ATTRS(3),
1153 IN_UNIT_ATTRS(4),
1154 IN_UNIT_ATTRS(5),
1155 IN_UNIT_ATTRS(6),
1156 IN_UNIT_ATTRS(7),
1157 IN_UNIT_ATTRS(8),
1158 IN_UNIT_ATTRS(9),
1159 FAN_UNIT_ATTRS(0),
1160 FAN_UNIT_ATTRS(1),
1161 FAN_UNIT_ATTRS(2),
1162 TEMP_UNIT_ATTRS(0),
1163 TEMP_UNIT_ATTRS(1),
1164 TEMP_UNIT_ATTRS(2),
1165 &dev_attr_alarms.attr,
1166 &sda_beep_ctrl[0].dev_attr.attr,
1167 &sda_beep_ctrl[1].dev_attr.attr,
1168 &dev_attr_cpu0_vid.attr,
1169 &dev_attr_vrm.attr,
1170 &sda_pwm[0].dev_attr.attr,
1171 &sda_pwm[1].dev_attr.attr,
1172 &sda_pwm[2].dev_attr.attr,
1173 &sda_pwmenable[0].dev_attr.attr,
1174 &sda_pwmenable[1].dev_attr.attr,
1175 &sda_pwmenable[2].dev_attr.attr,
1176 &sda_temp_target[0].dev_attr.attr,
1177 &sda_temp_target[1].dev_attr.attr,
1178 &sda_temp_target[2].dev_attr.attr,
1179 &sda_temp_tolerance[0].dev_attr.attr,
1180 &sda_temp_tolerance[1].dev_attr.attr,
1181 &sda_temp_tolerance[2].dev_attr.attr,
1182 NULL
1183};
1184
1185static const struct attribute_group w83791d_group = {
1186 .attrs = w83791d_attributes,
1187};
1188
1189/* Separate group of attributes for fan/pwm 4-5. Their pins can also be
1190 in use for GPIO in which case their sysfs-interface should not be made
1191 available */
1192static struct attribute *w83791d_attributes_fanpwm45[] = {
1193 FAN_UNIT_ATTRS(3),
1194 FAN_UNIT_ATTRS(4),
1195 &sda_pwm[3].dev_attr.attr,
1196 &sda_pwm[4].dev_attr.attr,
1197 NULL
1198};
1199
1200static const struct attribute_group w83791d_group_fanpwm45 = {
1201 .attrs = w83791d_attributes_fanpwm45,
1202};
1203
1204static int w83791d_detect_subclients(struct i2c_client *client)
1205{
1206 struct i2c_adapter *adapter = client->adapter;
1207 struct w83791d_data *data = i2c_get_clientdata(client);
1208 int address = client->addr;
1209 int i, id, err;
1210 u8 val;
1211
1212 id = i2c_adapter_id(adapter);
1213 if (force_subclients[0] == id && force_subclients[1] == address) {
1214 for (i = 2; i <= 3; i++) {
1215 if (force_subclients[i] < 0x48 ||
1216 force_subclients[i] > 0x4f) {
1217 dev_err(&client->dev,
1218 "invalid subclient "
1219 "address %d; must be 0x48-0x4f\n",
1220 force_subclients[i]);
1221 err = -ENODEV;
1222 goto error_sc_0;
1223 }
1224 }
1225 w83791d_write(client, W83791D_REG_I2C_SUBADDR,
1226 (force_subclients[2] & 0x07) |
1227 ((force_subclients[3] & 0x07) << 4));
1228 }
1229
1230 val = w83791d_read(client, W83791D_REG_I2C_SUBADDR);
1231 if (!(val & 0x08)) {
1232 data->lm75[0] = i2c_new_dummy(adapter, 0x48 + (val & 0x7));
1233 }
1234 if (!(val & 0x80)) {
1235 if ((data->lm75[0] != NULL) &&
1236 ((val & 0x7) == ((val >> 4) & 0x7))) {
1237 dev_err(&client->dev,
1238 "duplicate addresses 0x%x, "
1239 "use force_subclient\n",
1240 data->lm75[0]->addr);
1241 err = -ENODEV;
1242 goto error_sc_1;
1243 }
1244 data->lm75[1] = i2c_new_dummy(adapter,
1245 0x48 + ((val >> 4) & 0x7));
1246 }
1247
1248 return 0;
1249
1250/* Undo inits in case of errors */
1251
1252error_sc_1:
1253 if (data->lm75[0] != NULL)
1254 i2c_unregister_device(data->lm75[0]);
1255error_sc_0:
1256 return err;
1257}
1258
1259
1260/* Return 0 if detection is successful, -ENODEV otherwise */
1261static int w83791d_detect(struct i2c_client *client,
1262 struct i2c_board_info *info)
1263{
1264 struct i2c_adapter *adapter = client->adapter;
1265 int val1, val2;
1266 unsigned short address = client->addr;
1267
1268 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1269 return -ENODEV;
1270 }
1271
1272 if (w83791d_read(client, W83791D_REG_CONFIG) & 0x80)
1273 return -ENODEV;
1274
1275 val1 = w83791d_read(client, W83791D_REG_BANK);
1276 val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
1277 /* Check for Winbond ID if in bank 0 */
1278 if (!(val1 & 0x07)) {
1279 if ((!(val1 & 0x80) && val2 != 0xa3) ||
1280 ( (val1 & 0x80) && val2 != 0x5c)) {
1281 return -ENODEV;
1282 }
1283 }
1284 /* If Winbond chip, address of chip and W83791D_REG_I2C_ADDR
1285 should match */
1286 if (w83791d_read(client, W83791D_REG_I2C_ADDR) != address)
1287 return -ENODEV;
1288
1289 /* We want bank 0 and Vendor ID high byte */
1290 val1 = w83791d_read(client, W83791D_REG_BANK) & 0x78;
1291 w83791d_write(client, W83791D_REG_BANK, val1 | 0x80);
1292
1293 /* Verify it is a Winbond w83791d */
1294 val1 = w83791d_read(client, W83791D_REG_WCHIPID);
1295 val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
1296 if (val1 != 0x71 || val2 != 0x5c)
1297 return -ENODEV;
1298
1299 strlcpy(info->type, "w83791d", I2C_NAME_SIZE);
1300
1301 return 0;
1302}
1303
1304static int w83791d_probe(struct i2c_client *client,
1305 const struct i2c_device_id *id)
1306{
1307 struct w83791d_data *data;
1308 struct device *dev = &client->dev;
1309 int i, err;
1310 u8 has_fanpwm45;
1311
1312#ifdef DEBUG
1313 int val1;
1314 val1 = w83791d_read(client, W83791D_REG_DID_VID4);
1315 dev_dbg(dev, "Device ID version: %d.%d (0x%02x)\n",
1316 (val1 >> 5) & 0x07, (val1 >> 1) & 0x0f, val1);
1317#endif
1318
1319 data = kzalloc(sizeof(struct w83791d_data), GFP_KERNEL);
1320 if (!data) {
1321 err = -ENOMEM;
1322 goto error0;
1323 }
1324
1325 i2c_set_clientdata(client, data);
1326 mutex_init(&data->update_lock);
1327
1328 err = w83791d_detect_subclients(client);
1329 if (err)
1330 goto error1;
1331
1332 /* Initialize the chip */
1333 w83791d_init_client(client);
1334
1335 /* If the fan_div is changed, make sure there is a rational
1336 fan_min in place */
1337 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1338 data->fan_min[i] = w83791d_read(client, W83791D_REG_FAN_MIN[i]);
1339 }
1340
1341 /* Register sysfs hooks */
1342 if ((err = sysfs_create_group(&client->dev.kobj, &w83791d_group)))
1343 goto error3;
1344
1345 /* Check if pins of fan/pwm 4-5 are in use as GPIO */
1346 has_fanpwm45 = w83791d_read(client, W83791D_REG_GPIO) & 0x10;
1347 if (has_fanpwm45) {
1348 err = sysfs_create_group(&client->dev.kobj,
1349 &w83791d_group_fanpwm45);
1350 if (err)
1351 goto error4;
1352 }
1353
1354 /* Everything is ready, now register the working device */
1355 data->hwmon_dev = hwmon_device_register(dev);
1356 if (IS_ERR(data->hwmon_dev)) {
1357 err = PTR_ERR(data->hwmon_dev);
1358 goto error5;
1359 }
1360
1361 return 0;
1362
1363error5:
1364 if (has_fanpwm45)
1365 sysfs_remove_group(&client->dev.kobj, &w83791d_group_fanpwm45);
1366error4:
1367 sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1368error3:
1369 if (data->lm75[0] != NULL)
1370 i2c_unregister_device(data->lm75[0]);
1371 if (data->lm75[1] != NULL)
1372 i2c_unregister_device(data->lm75[1]);
1373error1:
1374 kfree(data);
1375error0:
1376 return err;
1377}
1378
1379static int w83791d_remove(struct i2c_client *client)
1380{
1381 struct w83791d_data *data = i2c_get_clientdata(client);
1382
1383 hwmon_device_unregister(data->hwmon_dev);
1384 sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1385
1386 if (data->lm75[0] != NULL)
1387 i2c_unregister_device(data->lm75[0]);
1388 if (data->lm75[1] != NULL)
1389 i2c_unregister_device(data->lm75[1]);
1390
1391 kfree(data);
1392 return 0;
1393}
1394
1395static void w83791d_init_client(struct i2c_client *client)
1396{
1397 struct w83791d_data *data = i2c_get_clientdata(client);
1398 u8 tmp;
1399 u8 old_beep;
1400
1401 /* The difference between reset and init is that reset
1402 does a hard reset of the chip via index 0x40, bit 7,
1403 but init simply forces certain registers to have "sane"
1404 values. The hope is that the BIOS has done the right
1405 thing (which is why the default is reset=0, init=0),
1406 but if not, reset is the hard hammer and init
1407 is the soft mallet both of which are trying to whack
1408 things into place...
1409 NOTE: The data sheet makes a distinction between
1410 "power on defaults" and "reset by MR". As far as I can tell,
1411 the hard reset puts everything into a power-on state so I'm
1412 not sure what "reset by MR" means or how it can happen.
1413 */
1414 if (reset || init) {
1415 /* keep some BIOS settings when we... */
1416 old_beep = w83791d_read(client, W83791D_REG_BEEP_CONFIG);
1417
1418 if (reset) {
1419 /* ... reset the chip and ... */
1420 w83791d_write(client, W83791D_REG_CONFIG, 0x80);
1421 }
1422
1423 /* ... disable power-on abnormal beep */
1424 w83791d_write(client, W83791D_REG_BEEP_CONFIG, old_beep | 0x80);
1425
1426 /* disable the global beep (not done by hard reset) */
1427 tmp = w83791d_read(client, W83791D_REG_BEEP_CTRL[1]);
1428 w83791d_write(client, W83791D_REG_BEEP_CTRL[1], tmp & 0xef);
1429
1430 if (init) {
1431 /* Make sure monitoring is turned on for add-ons */
1432 tmp = w83791d_read(client, W83791D_REG_TEMP2_CONFIG);
1433 if (tmp & 1) {
1434 w83791d_write(client, W83791D_REG_TEMP2_CONFIG,
1435 tmp & 0xfe);
1436 }
1437
1438 tmp = w83791d_read(client, W83791D_REG_TEMP3_CONFIG);
1439 if (tmp & 1) {
1440 w83791d_write(client, W83791D_REG_TEMP3_CONFIG,
1441 tmp & 0xfe);
1442 }
1443
1444 /* Start monitoring */
1445 tmp = w83791d_read(client, W83791D_REG_CONFIG) & 0xf7;
1446 w83791d_write(client, W83791D_REG_CONFIG, tmp | 0x01);
1447 }
1448 }
1449
1450 data->vrm = vid_which_vrm();
1451}
1452
1453static struct w83791d_data *w83791d_update_device(struct device *dev)
1454{
1455 struct i2c_client *client = to_i2c_client(dev);
1456 struct w83791d_data *data = i2c_get_clientdata(client);
1457 int i, j;
1458 u8 reg_array_tmp[3];
1459 u8 vbat_reg;
1460
1461 mutex_lock(&data->update_lock);
1462
1463 if (time_after(jiffies, data->last_updated + (HZ * 3))
1464 || !data->valid) {
1465 dev_dbg(dev, "Starting w83791d device update\n");
1466
1467 /* Update the voltages measured value and limits */
1468 for (i = 0; i < NUMBER_OF_VIN; i++) {
1469 data->in[i] = w83791d_read(client,
1470 W83791D_REG_IN[i]);
1471 data->in_max[i] = w83791d_read(client,
1472 W83791D_REG_IN_MAX[i]);
1473 data->in_min[i] = w83791d_read(client,
1474 W83791D_REG_IN_MIN[i]);
1475 }
1476
1477 /* Update the fan counts and limits */
1478 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1479 /* Update the Fan measured value and limits */
1480 data->fan[i] = w83791d_read(client,
1481 W83791D_REG_FAN[i]);
1482 data->fan_min[i] = w83791d_read(client,
1483 W83791D_REG_FAN_MIN[i]);
1484 }
1485
1486 /* Update the fan divisor */
1487 for (i = 0; i < 3; i++) {
1488 reg_array_tmp[i] = w83791d_read(client,
1489 W83791D_REG_FAN_DIV[i]);
1490 }
1491 data->fan_div[0] = (reg_array_tmp[0] >> 4) & 0x03;
1492 data->fan_div[1] = (reg_array_tmp[0] >> 6) & 0x03;
1493 data->fan_div[2] = (reg_array_tmp[1] >> 6) & 0x03;
1494 data->fan_div[3] = reg_array_tmp[2] & 0x07;
1495 data->fan_div[4] = (reg_array_tmp[2] >> 4) & 0x07;
1496
1497 /* The fan divisor for fans 0-2 get bit 2 from
1498 bits 5-7 respectively of vbat register */
1499 vbat_reg = w83791d_read(client, W83791D_REG_VBAT);
1500 for (i = 0; i < 3; i++)
1501 data->fan_div[i] |= (vbat_reg >> (3 + i)) & 0x04;
1502
1503 /* Update PWM duty cycle */
1504 for (i = 0; i < NUMBER_OF_PWM; i++) {
1505 data->pwm[i] = w83791d_read(client,
1506 W83791D_REG_PWM[i]);
1507 }
1508
1509 /* Update PWM enable status */
1510 for (i = 0; i < 2; i++) {
1511 reg_array_tmp[i] = w83791d_read(client,
1512 W83791D_REG_FAN_CFG[i]);
1513 }
1514 data->pwm_enable[0] = (reg_array_tmp[0] >> 2) & 0x03;
1515 data->pwm_enable[1] = (reg_array_tmp[0] >> 4) & 0x03;
1516 data->pwm_enable[2] = (reg_array_tmp[1] >> 2) & 0x03;
1517
1518 /* Update PWM target temperature */
1519 for (i = 0; i < 3; i++) {
1520 data->temp_target[i] = w83791d_read(client,
1521 W83791D_REG_TEMP_TARGET[i]) & 0x7f;
1522 }
1523
1524 /* Update PWM temperature tolerance */
1525 for (i = 0; i < 2; i++) {
1526 reg_array_tmp[i] = w83791d_read(client,
1527 W83791D_REG_TEMP_TOL[i]);
1528 }
1529 data->temp_tolerance[0] = reg_array_tmp[0] & 0x0f;
1530 data->temp_tolerance[1] = (reg_array_tmp[0] >> 4) & 0x0f;
1531 data->temp_tolerance[2] = reg_array_tmp[1] & 0x0f;
1532
1533 /* Update the first temperature sensor */
1534 for (i = 0; i < 3; i++) {
1535 data->temp1[i] = w83791d_read(client,
1536 W83791D_REG_TEMP1[i]);
1537 }
1538
1539 /* Update the rest of the temperature sensors */
1540 for (i = 0; i < 2; i++) {
1541 for (j = 0; j < 3; j++) {
1542 data->temp_add[i][j] =
1543 (w83791d_read(client,
1544 W83791D_REG_TEMP_ADD[i][j * 2]) << 8) |
1545 w83791d_read(client,
1546 W83791D_REG_TEMP_ADD[i][j * 2 + 1]);
1547 }
1548 }
1549
1550 /* Update the realtime status */
1551 data->alarms =
1552 w83791d_read(client, W83791D_REG_ALARM1) +
1553 (w83791d_read(client, W83791D_REG_ALARM2) << 8) +
1554 (w83791d_read(client, W83791D_REG_ALARM3) << 16);
1555
1556 /* Update the beep configuration information */
1557 data->beep_mask =
1558 w83791d_read(client, W83791D_REG_BEEP_CTRL[0]) +
1559 (w83791d_read(client, W83791D_REG_BEEP_CTRL[1]) << 8) +
1560 (w83791d_read(client, W83791D_REG_BEEP_CTRL[2]) << 16);
1561
1562 /* Extract global beep enable flag */
1563 data->beep_enable =
1564 (data->beep_mask >> GLOBAL_BEEP_ENABLE_SHIFT) & 0x01;
1565
1566 /* Update the cpu voltage information */
1567 i = w83791d_read(client, W83791D_REG_VID_FANDIV);
1568 data->vid = i & 0x0f;
1569 data->vid |= (w83791d_read(client, W83791D_REG_DID_VID4) & 0x01)
1570 << 4;
1571
1572 data->last_updated = jiffies;
1573 data->valid = 1;
1574 }
1575
1576 mutex_unlock(&data->update_lock);
1577
1578#ifdef DEBUG
1579 w83791d_print_debug(data, dev);
1580#endif
1581
1582 return data;
1583}
1584
1585#ifdef DEBUG
1586static void w83791d_print_debug(struct w83791d_data *data, struct device *dev)
1587{
1588 int i = 0, j = 0;
1589
1590 dev_dbg(dev, "======Start of w83791d debug values======\n");
1591 dev_dbg(dev, "%d set of Voltages: ===>\n", NUMBER_OF_VIN);
1592 for (i = 0; i < NUMBER_OF_VIN; i++) {
1593 dev_dbg(dev, "vin[%d] is: 0x%02x\n", i, data->in[i]);
1594 dev_dbg(dev, "vin[%d] min is: 0x%02x\n", i, data->in_min[i]);
1595 dev_dbg(dev, "vin[%d] max is: 0x%02x\n", i, data->in_max[i]);
1596 }
1597 dev_dbg(dev, "%d set of Fan Counts/Divisors: ===>\n", NUMBER_OF_FANIN);
1598 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1599 dev_dbg(dev, "fan[%d] is: 0x%02x\n", i, data->fan[i]);
1600 dev_dbg(dev, "fan[%d] min is: 0x%02x\n", i, data->fan_min[i]);
1601 dev_dbg(dev, "fan_div[%d] is: 0x%02x\n", i, data->fan_div[i]);
1602 }
1603
1604 /* temperature math is signed, but only print out the
1605 bits that matter */
1606 dev_dbg(dev, "%d set of Temperatures: ===>\n", NUMBER_OF_TEMPIN);
1607 for (i = 0; i < 3; i++) {
1608 dev_dbg(dev, "temp1[%d] is: 0x%02x\n", i, (u8) data->temp1[i]);
1609 }
1610 for (i = 0; i < 2; i++) {
1611 for (j = 0; j < 3; j++) {
1612 dev_dbg(dev, "temp_add[%d][%d] is: 0x%04x\n", i, j,
1613 (u16) data->temp_add[i][j]);
1614 }
1615 }
1616
1617 dev_dbg(dev, "Misc Information: ===>\n");
1618 dev_dbg(dev, "alarm is: 0x%08x\n", data->alarms);
1619 dev_dbg(dev, "beep_mask is: 0x%08x\n", data->beep_mask);
1620 dev_dbg(dev, "beep_enable is: %d\n", data->beep_enable);
1621 dev_dbg(dev, "vid is: 0x%02x\n", data->vid);
1622 dev_dbg(dev, "vrm is: 0x%02x\n", data->vrm);
1623 dev_dbg(dev, "=======End of w83791d debug values========\n");
1624 dev_dbg(dev, "\n");
1625}
1626#endif
1627
1628static int __init sensors_w83791d_init(void)
1629{
1630 return i2c_add_driver(&w83791d_driver);
1631}
1632
1633static void __exit sensors_w83791d_exit(void)
1634{
1635 i2c_del_driver(&w83791d_driver);
1636}
1637
1638MODULE_AUTHOR("Charles Spirakis <bezaur@gmail.com>");
1639MODULE_DESCRIPTION("W83791D driver");
1640MODULE_LICENSE("GPL");
1641
1642module_init(sensors_w83791d_init);
1643module_exit(sensors_w83791d_exit);
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * w83791d.c - Part of lm_sensors, Linux kernel modules for hardware
4 * monitoring
5 *
6 * Copyright (C) 2006-2007 Charles Spirakis <bezaur@gmail.com>
7 */
8
9/*
10 * Supports following chips:
11 *
12 * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA
13 * w83791d 10 5 5 3 0x71 0x5ca3 yes no
14 *
15 * The w83791d chip appears to be part way between the 83781d and the
16 * 83792d. Thus, this file is derived from both the w83792d.c and
17 * w83781d.c files.
18 *
19 * The w83791g chip is the same as the w83791d but lead-free.
20 */
21
22#include <linux/module.h>
23#include <linux/init.h>
24#include <linux/slab.h>
25#include <linux/i2c.h>
26#include <linux/hwmon.h>
27#include <linux/hwmon-vid.h>
28#include <linux/hwmon-sysfs.h>
29#include <linux/err.h>
30#include <linux/mutex.h>
31#include <linux/jiffies.h>
32
33#define NUMBER_OF_VIN 10
34#define NUMBER_OF_FANIN 5
35#define NUMBER_OF_TEMPIN 3
36#define NUMBER_OF_PWM 5
37
38/* Addresses to scan */
39static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
40 I2C_CLIENT_END };
41
42/* Insmod parameters */
43
44static unsigned short force_subclients[4];
45module_param_array(force_subclients, short, NULL, 0);
46MODULE_PARM_DESC(force_subclients,
47 "List of subclient addresses: {bus, clientaddr, subclientaddr1, subclientaddr2}");
48
49static bool reset;
50module_param(reset, bool, 0);
51MODULE_PARM_DESC(reset, "Set to one to force a hardware chip reset");
52
53static bool init;
54module_param(init, bool, 0);
55MODULE_PARM_DESC(init, "Set to one to force extra software initialization");
56
57/* The W83791D registers */
58static const u8 W83791D_REG_IN[NUMBER_OF_VIN] = {
59 0x20, /* VCOREA in DataSheet */
60 0x21, /* VINR0 in DataSheet */
61 0x22, /* +3.3VIN in DataSheet */
62 0x23, /* VDD5V in DataSheet */
63 0x24, /* +12VIN in DataSheet */
64 0x25, /* -12VIN in DataSheet */
65 0x26, /* -5VIN in DataSheet */
66 0xB0, /* 5VSB in DataSheet */
67 0xB1, /* VBAT in DataSheet */
68 0xB2 /* VINR1 in DataSheet */
69};
70
71static const u8 W83791D_REG_IN_MAX[NUMBER_OF_VIN] = {
72 0x2B, /* VCOREA High Limit in DataSheet */
73 0x2D, /* VINR0 High Limit in DataSheet */
74 0x2F, /* +3.3VIN High Limit in DataSheet */
75 0x31, /* VDD5V High Limit in DataSheet */
76 0x33, /* +12VIN High Limit in DataSheet */
77 0x35, /* -12VIN High Limit in DataSheet */
78 0x37, /* -5VIN High Limit in DataSheet */
79 0xB4, /* 5VSB High Limit in DataSheet */
80 0xB6, /* VBAT High Limit in DataSheet */
81 0xB8 /* VINR1 High Limit in DataSheet */
82};
83static const u8 W83791D_REG_IN_MIN[NUMBER_OF_VIN] = {
84 0x2C, /* VCOREA Low Limit in DataSheet */
85 0x2E, /* VINR0 Low Limit in DataSheet */
86 0x30, /* +3.3VIN Low Limit in DataSheet */
87 0x32, /* VDD5V Low Limit in DataSheet */
88 0x34, /* +12VIN Low Limit in DataSheet */
89 0x36, /* -12VIN Low Limit in DataSheet */
90 0x38, /* -5VIN Low Limit in DataSheet */
91 0xB5, /* 5VSB Low Limit in DataSheet */
92 0xB7, /* VBAT Low Limit in DataSheet */
93 0xB9 /* VINR1 Low Limit in DataSheet */
94};
95static const u8 W83791D_REG_FAN[NUMBER_OF_FANIN] = {
96 0x28, /* FAN 1 Count in DataSheet */
97 0x29, /* FAN 2 Count in DataSheet */
98 0x2A, /* FAN 3 Count in DataSheet */
99 0xBA, /* FAN 4 Count in DataSheet */
100 0xBB, /* FAN 5 Count in DataSheet */
101};
102static const u8 W83791D_REG_FAN_MIN[NUMBER_OF_FANIN] = {
103 0x3B, /* FAN 1 Count Low Limit in DataSheet */
104 0x3C, /* FAN 2 Count Low Limit in DataSheet */
105 0x3D, /* FAN 3 Count Low Limit in DataSheet */
106 0xBC, /* FAN 4 Count Low Limit in DataSheet */
107 0xBD, /* FAN 5 Count Low Limit in DataSheet */
108};
109
110static const u8 W83791D_REG_PWM[NUMBER_OF_PWM] = {
111 0x81, /* PWM 1 duty cycle register in DataSheet */
112 0x83, /* PWM 2 duty cycle register in DataSheet */
113 0x94, /* PWM 3 duty cycle register in DataSheet */
114 0xA0, /* PWM 4 duty cycle register in DataSheet */
115 0xA1, /* PWM 5 duty cycle register in DataSheet */
116};
117
118static const u8 W83791D_REG_TEMP_TARGET[3] = {
119 0x85, /* PWM 1 target temperature for temp 1 */
120 0x86, /* PWM 2 target temperature for temp 2 */
121 0x96, /* PWM 3 target temperature for temp 3 */
122};
123
124static const u8 W83791D_REG_TEMP_TOL[2] = {
125 0x87, /* PWM 1/2 temperature tolerance */
126 0x97, /* PWM 3 temperature tolerance */
127};
128
129static const u8 W83791D_REG_FAN_CFG[2] = {
130 0x84, /* FAN 1/2 configuration */
131 0x95, /* FAN 3 configuration */
132};
133
134static const u8 W83791D_REG_FAN_DIV[3] = {
135 0x47, /* contains FAN1 and FAN2 Divisor */
136 0x4b, /* contains FAN3 Divisor */
137 0x5C, /* contains FAN4 and FAN5 Divisor */
138};
139
140#define W83791D_REG_BANK 0x4E
141#define W83791D_REG_TEMP2_CONFIG 0xC2
142#define W83791D_REG_TEMP3_CONFIG 0xCA
143
144static const u8 W83791D_REG_TEMP1[3] = {
145 0x27, /* TEMP 1 in DataSheet */
146 0x39, /* TEMP 1 Over in DataSheet */
147 0x3A, /* TEMP 1 Hyst in DataSheet */
148};
149
150static const u8 W83791D_REG_TEMP_ADD[2][6] = {
151 {0xC0, /* TEMP 2 in DataSheet */
152 0xC1, /* TEMP 2(0.5 deg) in DataSheet */
153 0xC5, /* TEMP 2 Over High part in DataSheet */
154 0xC6, /* TEMP 2 Over Low part in DataSheet */
155 0xC3, /* TEMP 2 Thyst High part in DataSheet */
156 0xC4}, /* TEMP 2 Thyst Low part in DataSheet */
157 {0xC8, /* TEMP 3 in DataSheet */
158 0xC9, /* TEMP 3(0.5 deg) in DataSheet */
159 0xCD, /* TEMP 3 Over High part in DataSheet */
160 0xCE, /* TEMP 3 Over Low part in DataSheet */
161 0xCB, /* TEMP 3 Thyst High part in DataSheet */
162 0xCC} /* TEMP 3 Thyst Low part in DataSheet */
163};
164
165#define W83791D_REG_BEEP_CONFIG 0x4D
166
167static const u8 W83791D_REG_BEEP_CTRL[3] = {
168 0x56, /* BEEP Control Register 1 */
169 0x57, /* BEEP Control Register 2 */
170 0xA3, /* BEEP Control Register 3 */
171};
172
173#define W83791D_REG_GPIO 0x15
174#define W83791D_REG_CONFIG 0x40
175#define W83791D_REG_VID_FANDIV 0x47
176#define W83791D_REG_DID_VID4 0x49
177#define W83791D_REG_WCHIPID 0x58
178#define W83791D_REG_CHIPMAN 0x4F
179#define W83791D_REG_PIN 0x4B
180#define W83791D_REG_I2C_SUBADDR 0x4A
181
182#define W83791D_REG_ALARM1 0xA9 /* realtime status register1 */
183#define W83791D_REG_ALARM2 0xAA /* realtime status register2 */
184#define W83791D_REG_ALARM3 0xAB /* realtime status register3 */
185
186#define W83791D_REG_VBAT 0x5D
187#define W83791D_REG_I2C_ADDR 0x48
188
189/*
190 * The SMBus locks itself. The Winbond W83791D has a bank select register
191 * (index 0x4e), but the driver only accesses registers in bank 0. Since
192 * we don't switch banks, we don't need any special code to handle
193 * locking access between bank switches
194 */
195static inline int w83791d_read(struct i2c_client *client, u8 reg)
196{
197 return i2c_smbus_read_byte_data(client, reg);
198}
199
200static inline int w83791d_write(struct i2c_client *client, u8 reg, u8 value)
201{
202 return i2c_smbus_write_byte_data(client, reg, value);
203}
204
205/*
206 * The analog voltage inputs have 16mV LSB. Since the sysfs output is
207 * in mV as would be measured on the chip input pin, need to just
208 * multiply/divide by 16 to translate from/to register values.
209 */
210#define IN_TO_REG(val) (clamp_val((((val) + 8) / 16), 0, 255))
211#define IN_FROM_REG(val) ((val) * 16)
212
213static u8 fan_to_reg(long rpm, int div)
214{
215 if (rpm == 0)
216 return 255;
217 rpm = clamp_val(rpm, 1, 1000000);
218 return clamp_val((1350000 + rpm * div / 2) / (rpm * div), 1, 254);
219}
220
221#define FAN_FROM_REG(val, div) ((val) == 0 ? -1 : \
222 ((val) == 255 ? 0 : \
223 1350000 / ((val) * (div))))
224
225/* for temp1 which is 8-bit resolution, LSB = 1 degree Celsius */
226#define TEMP1_FROM_REG(val) ((val) * 1000)
227#define TEMP1_TO_REG(val) ((val) <= -128000 ? -128 : \
228 (val) >= 127000 ? 127 : \
229 (val) < 0 ? ((val) - 500) / 1000 : \
230 ((val) + 500) / 1000)
231
232/*
233 * for temp2 and temp3 which are 9-bit resolution, LSB = 0.5 degree Celsius
234 * Assumes the top 8 bits are the integral amount and the bottom 8 bits
235 * are the fractional amount. Since we only have 0.5 degree resolution,
236 * the bottom 7 bits will always be zero
237 */
238#define TEMP23_FROM_REG(val) ((val) / 128 * 500)
239#define TEMP23_TO_REG(val) (DIV_ROUND_CLOSEST(clamp_val((val), -128000, \
240 127500), 500) * 128)
241
242/* for thermal cruise target temp, 7-bits, LSB = 1 degree Celsius */
243#define TARGET_TEMP_TO_REG(val) DIV_ROUND_CLOSEST(clamp_val((val), 0, 127000), \
244 1000)
245
246/* for thermal cruise temp tolerance, 4-bits, LSB = 1 degree Celsius */
247#define TOL_TEMP_TO_REG(val) DIV_ROUND_CLOSEST(clamp_val((val), 0, 15000), \
248 1000)
249
250#define BEEP_MASK_TO_REG(val) ((val) & 0xffffff)
251#define BEEP_MASK_FROM_REG(val) ((val) & 0xffffff)
252
253#define DIV_FROM_REG(val) (1 << (val))
254
255static u8 div_to_reg(int nr, long val)
256{
257 int i;
258
259 /* fan divisors max out at 128 */
260 val = clamp_val(val, 1, 128) >> 1;
261 for (i = 0; i < 7; i++) {
262 if (val == 0)
263 break;
264 val >>= 1;
265 }
266 return (u8) i;
267}
268
269struct w83791d_data {
270 struct device *hwmon_dev;
271 struct mutex update_lock;
272
273 char valid; /* !=0 if following fields are valid */
274 unsigned long last_updated; /* In jiffies */
275
276 /* array of 2 pointers to subclients */
277 struct i2c_client *lm75[2];
278
279 /* volts */
280 u8 in[NUMBER_OF_VIN]; /* Register value */
281 u8 in_max[NUMBER_OF_VIN]; /* Register value */
282 u8 in_min[NUMBER_OF_VIN]; /* Register value */
283
284 /* fans */
285 u8 fan[NUMBER_OF_FANIN]; /* Register value */
286 u8 fan_min[NUMBER_OF_FANIN]; /* Register value */
287 u8 fan_div[NUMBER_OF_FANIN]; /* Register encoding, shifted right */
288
289 /* Temperature sensors */
290
291 s8 temp1[3]; /* current, over, thyst */
292 s16 temp_add[2][3]; /* fixed point value. Top 8 bits are the
293 * integral part, bottom 8 bits are the
294 * fractional part. We only use the top
295 * 9 bits as the resolution is only
296 * to the 0.5 degree C...
297 * two sensors with three values
298 * (cur, over, hyst)
299 */
300
301 /* PWMs */
302 u8 pwm[5]; /* pwm duty cycle */
303 u8 pwm_enable[3]; /* pwm enable status for fan 1-3
304 * (fan 4-5 only support manual mode)
305 */
306
307 u8 temp_target[3]; /* pwm 1-3 target temperature */
308 u8 temp_tolerance[3]; /* pwm 1-3 temperature tolerance */
309
310 /* Misc */
311 u32 alarms; /* realtime status register encoding,combined */
312 u8 beep_enable; /* Global beep enable */
313 u32 beep_mask; /* Mask off specific beeps */
314 u8 vid; /* Register encoding, combined */
315 u8 vrm; /* hwmon-vid */
316};
317
318static int w83791d_probe(struct i2c_client *client,
319 const struct i2c_device_id *id);
320static int w83791d_detect(struct i2c_client *client,
321 struct i2c_board_info *info);
322static int w83791d_remove(struct i2c_client *client);
323
324static int w83791d_read(struct i2c_client *client, u8 reg);
325static int w83791d_write(struct i2c_client *client, u8 reg, u8 value);
326static struct w83791d_data *w83791d_update_device(struct device *dev);
327
328#ifdef DEBUG
329static void w83791d_print_debug(struct w83791d_data *data, struct device *dev);
330#endif
331
332static void w83791d_init_client(struct i2c_client *client);
333
334static const struct i2c_device_id w83791d_id[] = {
335 { "w83791d", 0 },
336 { }
337};
338MODULE_DEVICE_TABLE(i2c, w83791d_id);
339
340static struct i2c_driver w83791d_driver = {
341 .class = I2C_CLASS_HWMON,
342 .driver = {
343 .name = "w83791d",
344 },
345 .probe = w83791d_probe,
346 .remove = w83791d_remove,
347 .id_table = w83791d_id,
348 .detect = w83791d_detect,
349 .address_list = normal_i2c,
350};
351
352/* following are the sysfs callback functions */
353#define show_in_reg(reg) \
354static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
355 char *buf) \
356{ \
357 struct sensor_device_attribute *sensor_attr = \
358 to_sensor_dev_attr(attr); \
359 struct w83791d_data *data = w83791d_update_device(dev); \
360 int nr = sensor_attr->index; \
361 return sprintf(buf, "%d\n", IN_FROM_REG(data->reg[nr])); \
362}
363
364show_in_reg(in);
365show_in_reg(in_min);
366show_in_reg(in_max);
367
368#define store_in_reg(REG, reg) \
369static ssize_t store_in_##reg(struct device *dev, \
370 struct device_attribute *attr, \
371 const char *buf, size_t count) \
372{ \
373 struct sensor_device_attribute *sensor_attr = \
374 to_sensor_dev_attr(attr); \
375 struct i2c_client *client = to_i2c_client(dev); \
376 struct w83791d_data *data = i2c_get_clientdata(client); \
377 int nr = sensor_attr->index; \
378 unsigned long val; \
379 int err = kstrtoul(buf, 10, &val); \
380 if (err) \
381 return err; \
382 mutex_lock(&data->update_lock); \
383 data->in_##reg[nr] = IN_TO_REG(val); \
384 w83791d_write(client, W83791D_REG_IN_##REG[nr], data->in_##reg[nr]); \
385 mutex_unlock(&data->update_lock); \
386 \
387 return count; \
388}
389store_in_reg(MIN, min);
390store_in_reg(MAX, max);
391
392static struct sensor_device_attribute sda_in_input[] = {
393 SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
394 SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
395 SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
396 SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
397 SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
398 SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
399 SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
400 SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
401 SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
402 SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
403};
404
405static struct sensor_device_attribute sda_in_min[] = {
406 SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
407 SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
408 SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
409 SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
410 SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
411 SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
412 SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
413 SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
414 SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
415 SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
416};
417
418static struct sensor_device_attribute sda_in_max[] = {
419 SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
420 SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
421 SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
422 SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
423 SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
424 SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
425 SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
426 SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
427 SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
428 SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
429};
430
431
432static ssize_t show_beep(struct device *dev, struct device_attribute *attr,
433 char *buf)
434{
435 struct sensor_device_attribute *sensor_attr =
436 to_sensor_dev_attr(attr);
437 struct w83791d_data *data = w83791d_update_device(dev);
438 int bitnr = sensor_attr->index;
439
440 return sprintf(buf, "%d\n", (data->beep_mask >> bitnr) & 1);
441}
442
443static ssize_t store_beep(struct device *dev, struct device_attribute *attr,
444 const char *buf, size_t count)
445{
446 struct sensor_device_attribute *sensor_attr =
447 to_sensor_dev_attr(attr);
448 struct i2c_client *client = to_i2c_client(dev);
449 struct w83791d_data *data = i2c_get_clientdata(client);
450 int bitnr = sensor_attr->index;
451 int bytenr = bitnr / 8;
452 unsigned long val;
453 int err;
454
455 err = kstrtoul(buf, 10, &val);
456 if (err)
457 return err;
458
459 val = val ? 1 : 0;
460
461 mutex_lock(&data->update_lock);
462
463 data->beep_mask &= ~(0xff << (bytenr * 8));
464 data->beep_mask |= w83791d_read(client, W83791D_REG_BEEP_CTRL[bytenr])
465 << (bytenr * 8);
466
467 data->beep_mask &= ~(1 << bitnr);
468 data->beep_mask |= val << bitnr;
469
470 w83791d_write(client, W83791D_REG_BEEP_CTRL[bytenr],
471 (data->beep_mask >> (bytenr * 8)) & 0xff);
472
473 mutex_unlock(&data->update_lock);
474
475 return count;
476}
477
478static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
479 char *buf)
480{
481 struct sensor_device_attribute *sensor_attr =
482 to_sensor_dev_attr(attr);
483 struct w83791d_data *data = w83791d_update_device(dev);
484 int bitnr = sensor_attr->index;
485
486 return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
487}
488
489/*
490 * Note: The bitmask for the beep enable/disable is different than
491 * the bitmask for the alarm.
492 */
493static struct sensor_device_attribute sda_in_beep[] = {
494 SENSOR_ATTR(in0_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 0),
495 SENSOR_ATTR(in1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 13),
496 SENSOR_ATTR(in2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 2),
497 SENSOR_ATTR(in3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 3),
498 SENSOR_ATTR(in4_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 8),
499 SENSOR_ATTR(in5_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 9),
500 SENSOR_ATTR(in6_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 10),
501 SENSOR_ATTR(in7_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 16),
502 SENSOR_ATTR(in8_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 17),
503 SENSOR_ATTR(in9_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 14),
504};
505
506static struct sensor_device_attribute sda_in_alarm[] = {
507 SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
508 SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
509 SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
510 SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
511 SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8),
512 SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 9),
513 SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 10),
514 SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 19),
515 SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 20),
516 SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 14),
517};
518
519#define show_fan_reg(reg) \
520static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
521 char *buf) \
522{ \
523 struct sensor_device_attribute *sensor_attr = \
524 to_sensor_dev_attr(attr); \
525 struct w83791d_data *data = w83791d_update_device(dev); \
526 int nr = sensor_attr->index; \
527 return sprintf(buf, "%d\n", \
528 FAN_FROM_REG(data->reg[nr], DIV_FROM_REG(data->fan_div[nr]))); \
529}
530
531show_fan_reg(fan);
532show_fan_reg(fan_min);
533
534static ssize_t store_fan_min(struct device *dev, struct device_attribute *attr,
535 const char *buf, size_t count)
536{
537 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
538 struct i2c_client *client = to_i2c_client(dev);
539 struct w83791d_data *data = i2c_get_clientdata(client);
540 int nr = sensor_attr->index;
541 unsigned long val;
542 int err;
543
544 err = kstrtoul(buf, 10, &val);
545 if (err)
546 return err;
547
548 mutex_lock(&data->update_lock);
549 data->fan_min[nr] = fan_to_reg(val, DIV_FROM_REG(data->fan_div[nr]));
550 w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
551 mutex_unlock(&data->update_lock);
552
553 return count;
554}
555
556static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
557 char *buf)
558{
559 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
560 int nr = sensor_attr->index;
561 struct w83791d_data *data = w83791d_update_device(dev);
562 return sprintf(buf, "%u\n", DIV_FROM_REG(data->fan_div[nr]));
563}
564
565/*
566 * Note: we save and restore the fan minimum here, because its value is
567 * determined in part by the fan divisor. This follows the principle of
568 * least surprise; the user doesn't expect the fan minimum to change just
569 * because the divisor changed.
570 */
571static ssize_t store_fan_div(struct device *dev, struct device_attribute *attr,
572 const char *buf, size_t count)
573{
574 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
575 struct i2c_client *client = to_i2c_client(dev);
576 struct w83791d_data *data = i2c_get_clientdata(client);
577 int nr = sensor_attr->index;
578 unsigned long min;
579 u8 tmp_fan_div;
580 u8 fan_div_reg;
581 u8 vbat_reg;
582 int indx = 0;
583 u8 keep_mask = 0;
584 u8 new_shift = 0;
585 unsigned long val;
586 int err;
587
588 err = kstrtoul(buf, 10, &val);
589 if (err)
590 return err;
591
592 /* Save fan_min */
593 min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr]));
594
595 mutex_lock(&data->update_lock);
596 data->fan_div[nr] = div_to_reg(nr, val);
597
598 switch (nr) {
599 case 0:
600 indx = 0;
601 keep_mask = 0xcf;
602 new_shift = 4;
603 break;
604 case 1:
605 indx = 0;
606 keep_mask = 0x3f;
607 new_shift = 6;
608 break;
609 case 2:
610 indx = 1;
611 keep_mask = 0x3f;
612 new_shift = 6;
613 break;
614 case 3:
615 indx = 2;
616 keep_mask = 0xf8;
617 new_shift = 0;
618 break;
619 case 4:
620 indx = 2;
621 keep_mask = 0x8f;
622 new_shift = 4;
623 break;
624#ifdef DEBUG
625 default:
626 dev_warn(dev, "store_fan_div: Unexpected nr seen: %d\n", nr);
627 count = -EINVAL;
628 goto err_exit;
629#endif
630 }
631
632 fan_div_reg = w83791d_read(client, W83791D_REG_FAN_DIV[indx])
633 & keep_mask;
634 tmp_fan_div = (data->fan_div[nr] << new_shift) & ~keep_mask;
635
636 w83791d_write(client, W83791D_REG_FAN_DIV[indx],
637 fan_div_reg | tmp_fan_div);
638
639 /* Bit 2 of fans 0-2 is stored in the vbat register (bits 5-7) */
640 if (nr < 3) {
641 keep_mask = ~(1 << (nr + 5));
642 vbat_reg = w83791d_read(client, W83791D_REG_VBAT)
643 & keep_mask;
644 tmp_fan_div = (data->fan_div[nr] << (3 + nr)) & ~keep_mask;
645 w83791d_write(client, W83791D_REG_VBAT,
646 vbat_reg | tmp_fan_div);
647 }
648
649 /* Restore fan_min */
650 data->fan_min[nr] = fan_to_reg(min, DIV_FROM_REG(data->fan_div[nr]));
651 w83791d_write(client, W83791D_REG_FAN_MIN[nr], data->fan_min[nr]);
652
653#ifdef DEBUG
654err_exit:
655#endif
656 mutex_unlock(&data->update_lock);
657
658 return count;
659}
660
661static struct sensor_device_attribute sda_fan_input[] = {
662 SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
663 SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
664 SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
665 SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
666 SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
667};
668
669static struct sensor_device_attribute sda_fan_min[] = {
670 SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO,
671 show_fan_min, store_fan_min, 0),
672 SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO,
673 show_fan_min, store_fan_min, 1),
674 SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO,
675 show_fan_min, store_fan_min, 2),
676 SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO,
677 show_fan_min, store_fan_min, 3),
678 SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO,
679 show_fan_min, store_fan_min, 4),
680};
681
682static struct sensor_device_attribute sda_fan_div[] = {
683 SENSOR_ATTR(fan1_div, S_IWUSR | S_IRUGO,
684 show_fan_div, store_fan_div, 0),
685 SENSOR_ATTR(fan2_div, S_IWUSR | S_IRUGO,
686 show_fan_div, store_fan_div, 1),
687 SENSOR_ATTR(fan3_div, S_IWUSR | S_IRUGO,
688 show_fan_div, store_fan_div, 2),
689 SENSOR_ATTR(fan4_div, S_IWUSR | S_IRUGO,
690 show_fan_div, store_fan_div, 3),
691 SENSOR_ATTR(fan5_div, S_IWUSR | S_IRUGO,
692 show_fan_div, store_fan_div, 4),
693};
694
695static struct sensor_device_attribute sda_fan_beep[] = {
696 SENSOR_ATTR(fan1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 6),
697 SENSOR_ATTR(fan2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 7),
698 SENSOR_ATTR(fan3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 11),
699 SENSOR_ATTR(fan4_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 21),
700 SENSOR_ATTR(fan5_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 22),
701};
702
703static struct sensor_device_attribute sda_fan_alarm[] = {
704 SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6),
705 SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7),
706 SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11),
707 SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 21),
708 SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 22),
709};
710
711/* read/write PWMs */
712static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
713 char *buf)
714{
715 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
716 int nr = sensor_attr->index;
717 struct w83791d_data *data = w83791d_update_device(dev);
718 return sprintf(buf, "%u\n", data->pwm[nr]);
719}
720
721static ssize_t store_pwm(struct device *dev, struct device_attribute *attr,
722 const char *buf, size_t count)
723{
724 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
725 struct i2c_client *client = to_i2c_client(dev);
726 struct w83791d_data *data = i2c_get_clientdata(client);
727 int nr = sensor_attr->index;
728 unsigned long val;
729
730 if (kstrtoul(buf, 10, &val))
731 return -EINVAL;
732
733 mutex_lock(&data->update_lock);
734 data->pwm[nr] = clamp_val(val, 0, 255);
735 w83791d_write(client, W83791D_REG_PWM[nr], data->pwm[nr]);
736 mutex_unlock(&data->update_lock);
737 return count;
738}
739
740static struct sensor_device_attribute sda_pwm[] = {
741 SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO,
742 show_pwm, store_pwm, 0),
743 SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO,
744 show_pwm, store_pwm, 1),
745 SENSOR_ATTR(pwm3, S_IWUSR | S_IRUGO,
746 show_pwm, store_pwm, 2),
747 SENSOR_ATTR(pwm4, S_IWUSR | S_IRUGO,
748 show_pwm, store_pwm, 3),
749 SENSOR_ATTR(pwm5, S_IWUSR | S_IRUGO,
750 show_pwm, store_pwm, 4),
751};
752
753static ssize_t show_pwmenable(struct device *dev, struct device_attribute *attr,
754 char *buf)
755{
756 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
757 int nr = sensor_attr->index;
758 struct w83791d_data *data = w83791d_update_device(dev);
759 return sprintf(buf, "%u\n", data->pwm_enable[nr] + 1);
760}
761
762static ssize_t store_pwmenable(struct device *dev,
763 struct device_attribute *attr, const char *buf, size_t count)
764{
765 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
766 struct i2c_client *client = to_i2c_client(dev);
767 struct w83791d_data *data = i2c_get_clientdata(client);
768 int nr = sensor_attr->index;
769 unsigned long val;
770 u8 reg_cfg_tmp;
771 u8 reg_idx = 0;
772 u8 val_shift = 0;
773 u8 keep_mask = 0;
774
775 int ret = kstrtoul(buf, 10, &val);
776
777 if (ret || val < 1 || val > 3)
778 return -EINVAL;
779
780 mutex_lock(&data->update_lock);
781 data->pwm_enable[nr] = val - 1;
782 switch (nr) {
783 case 0:
784 reg_idx = 0;
785 val_shift = 2;
786 keep_mask = 0xf3;
787 break;
788 case 1:
789 reg_idx = 0;
790 val_shift = 4;
791 keep_mask = 0xcf;
792 break;
793 case 2:
794 reg_idx = 1;
795 val_shift = 2;
796 keep_mask = 0xf3;
797 break;
798 }
799
800 reg_cfg_tmp = w83791d_read(client, W83791D_REG_FAN_CFG[reg_idx]);
801 reg_cfg_tmp = (reg_cfg_tmp & keep_mask) |
802 data->pwm_enable[nr] << val_shift;
803
804 w83791d_write(client, W83791D_REG_FAN_CFG[reg_idx], reg_cfg_tmp);
805 mutex_unlock(&data->update_lock);
806
807 return count;
808}
809static struct sensor_device_attribute sda_pwmenable[] = {
810 SENSOR_ATTR(pwm1_enable, S_IWUSR | S_IRUGO,
811 show_pwmenable, store_pwmenable, 0),
812 SENSOR_ATTR(pwm2_enable, S_IWUSR | S_IRUGO,
813 show_pwmenable, store_pwmenable, 1),
814 SENSOR_ATTR(pwm3_enable, S_IWUSR | S_IRUGO,
815 show_pwmenable, store_pwmenable, 2),
816};
817
818/* For Smart Fan I / Thermal Cruise */
819static ssize_t show_temp_target(struct device *dev,
820 struct device_attribute *attr, char *buf)
821{
822 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
823 struct w83791d_data *data = w83791d_update_device(dev);
824 int nr = sensor_attr->index;
825 return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp_target[nr]));
826}
827
828static ssize_t store_temp_target(struct device *dev,
829 struct device_attribute *attr, const char *buf, size_t count)
830{
831 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
832 struct i2c_client *client = to_i2c_client(dev);
833 struct w83791d_data *data = i2c_get_clientdata(client);
834 int nr = sensor_attr->index;
835 long val;
836 u8 target_mask;
837
838 if (kstrtol(buf, 10, &val))
839 return -EINVAL;
840
841 mutex_lock(&data->update_lock);
842 data->temp_target[nr] = TARGET_TEMP_TO_REG(val);
843 target_mask = w83791d_read(client,
844 W83791D_REG_TEMP_TARGET[nr]) & 0x80;
845 w83791d_write(client, W83791D_REG_TEMP_TARGET[nr],
846 data->temp_target[nr] | target_mask);
847 mutex_unlock(&data->update_lock);
848 return count;
849}
850
851static struct sensor_device_attribute sda_temp_target[] = {
852 SENSOR_ATTR(temp1_target, S_IWUSR | S_IRUGO,
853 show_temp_target, store_temp_target, 0),
854 SENSOR_ATTR(temp2_target, S_IWUSR | S_IRUGO,
855 show_temp_target, store_temp_target, 1),
856 SENSOR_ATTR(temp3_target, S_IWUSR | S_IRUGO,
857 show_temp_target, store_temp_target, 2),
858};
859
860static ssize_t show_temp_tolerance(struct device *dev,
861 struct device_attribute *attr, char *buf)
862{
863 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
864 struct w83791d_data *data = w83791d_update_device(dev);
865 int nr = sensor_attr->index;
866 return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp_tolerance[nr]));
867}
868
869static ssize_t store_temp_tolerance(struct device *dev,
870 struct device_attribute *attr, const char *buf, size_t count)
871{
872 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
873 struct i2c_client *client = to_i2c_client(dev);
874 struct w83791d_data *data = i2c_get_clientdata(client);
875 int nr = sensor_attr->index;
876 unsigned long val;
877 u8 target_mask;
878 u8 reg_idx = 0;
879 u8 val_shift = 0;
880 u8 keep_mask = 0;
881
882 if (kstrtoul(buf, 10, &val))
883 return -EINVAL;
884
885 switch (nr) {
886 case 0:
887 reg_idx = 0;
888 val_shift = 0;
889 keep_mask = 0xf0;
890 break;
891 case 1:
892 reg_idx = 0;
893 val_shift = 4;
894 keep_mask = 0x0f;
895 break;
896 case 2:
897 reg_idx = 1;
898 val_shift = 0;
899 keep_mask = 0xf0;
900 break;
901 }
902
903 mutex_lock(&data->update_lock);
904 data->temp_tolerance[nr] = TOL_TEMP_TO_REG(val);
905 target_mask = w83791d_read(client,
906 W83791D_REG_TEMP_TOL[reg_idx]) & keep_mask;
907 w83791d_write(client, W83791D_REG_TEMP_TOL[reg_idx],
908 (data->temp_tolerance[nr] << val_shift) | target_mask);
909 mutex_unlock(&data->update_lock);
910 return count;
911}
912
913static struct sensor_device_attribute sda_temp_tolerance[] = {
914 SENSOR_ATTR(temp1_tolerance, S_IWUSR | S_IRUGO,
915 show_temp_tolerance, store_temp_tolerance, 0),
916 SENSOR_ATTR(temp2_tolerance, S_IWUSR | S_IRUGO,
917 show_temp_tolerance, store_temp_tolerance, 1),
918 SENSOR_ATTR(temp3_tolerance, S_IWUSR | S_IRUGO,
919 show_temp_tolerance, store_temp_tolerance, 2),
920};
921
922/* read/write the temperature1, includes measured value and limits */
923static ssize_t show_temp1(struct device *dev, struct device_attribute *devattr,
924 char *buf)
925{
926 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
927 struct w83791d_data *data = w83791d_update_device(dev);
928 return sprintf(buf, "%d\n", TEMP1_FROM_REG(data->temp1[attr->index]));
929}
930
931static ssize_t store_temp1(struct device *dev, struct device_attribute *devattr,
932 const char *buf, size_t count)
933{
934 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
935 struct i2c_client *client = to_i2c_client(dev);
936 struct w83791d_data *data = i2c_get_clientdata(client);
937 int nr = attr->index;
938 long val;
939 int err;
940
941 err = kstrtol(buf, 10, &val);
942 if (err)
943 return err;
944
945 mutex_lock(&data->update_lock);
946 data->temp1[nr] = TEMP1_TO_REG(val);
947 w83791d_write(client, W83791D_REG_TEMP1[nr], data->temp1[nr]);
948 mutex_unlock(&data->update_lock);
949 return count;
950}
951
952/* read/write temperature2-3, includes measured value and limits */
953static ssize_t show_temp23(struct device *dev, struct device_attribute *devattr,
954 char *buf)
955{
956 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
957 struct w83791d_data *data = w83791d_update_device(dev);
958 int nr = attr->nr;
959 int index = attr->index;
960 return sprintf(buf, "%d\n", TEMP23_FROM_REG(data->temp_add[nr][index]));
961}
962
963static ssize_t store_temp23(struct device *dev,
964 struct device_attribute *devattr,
965 const char *buf, size_t count)
966{
967 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
968 struct i2c_client *client = to_i2c_client(dev);
969 struct w83791d_data *data = i2c_get_clientdata(client);
970 long val;
971 int err;
972 int nr = attr->nr;
973 int index = attr->index;
974
975 err = kstrtol(buf, 10, &val);
976 if (err)
977 return err;
978
979 mutex_lock(&data->update_lock);
980 data->temp_add[nr][index] = TEMP23_TO_REG(val);
981 w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2],
982 data->temp_add[nr][index] >> 8);
983 w83791d_write(client, W83791D_REG_TEMP_ADD[nr][index * 2 + 1],
984 data->temp_add[nr][index] & 0x80);
985 mutex_unlock(&data->update_lock);
986
987 return count;
988}
989
990static struct sensor_device_attribute_2 sda_temp_input[] = {
991 SENSOR_ATTR_2(temp1_input, S_IRUGO, show_temp1, NULL, 0, 0),
992 SENSOR_ATTR_2(temp2_input, S_IRUGO, show_temp23, NULL, 0, 0),
993 SENSOR_ATTR_2(temp3_input, S_IRUGO, show_temp23, NULL, 1, 0),
994};
995
996static struct sensor_device_attribute_2 sda_temp_max[] = {
997 SENSOR_ATTR_2(temp1_max, S_IRUGO | S_IWUSR,
998 show_temp1, store_temp1, 0, 1),
999 SENSOR_ATTR_2(temp2_max, S_IRUGO | S_IWUSR,
1000 show_temp23, store_temp23, 0, 1),
1001 SENSOR_ATTR_2(temp3_max, S_IRUGO | S_IWUSR,
1002 show_temp23, store_temp23, 1, 1),
1003};
1004
1005static struct sensor_device_attribute_2 sda_temp_max_hyst[] = {
1006 SENSOR_ATTR_2(temp1_max_hyst, S_IRUGO | S_IWUSR,
1007 show_temp1, store_temp1, 0, 2),
1008 SENSOR_ATTR_2(temp2_max_hyst, S_IRUGO | S_IWUSR,
1009 show_temp23, store_temp23, 0, 2),
1010 SENSOR_ATTR_2(temp3_max_hyst, S_IRUGO | S_IWUSR,
1011 show_temp23, store_temp23, 1, 2),
1012};
1013
1014/*
1015 * Note: The bitmask for the beep enable/disable is different than
1016 * the bitmask for the alarm.
1017 */
1018static struct sensor_device_attribute sda_temp_beep[] = {
1019 SENSOR_ATTR(temp1_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 4),
1020 SENSOR_ATTR(temp2_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 5),
1021 SENSOR_ATTR(temp3_beep, S_IWUSR | S_IRUGO, show_beep, store_beep, 1),
1022};
1023
1024static struct sensor_device_attribute sda_temp_alarm[] = {
1025 SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4),
1026 SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5),
1027 SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
1028};
1029
1030/* get realtime status of all sensors items: voltage, temp, fan */
1031static ssize_t alarms_show(struct device *dev, struct device_attribute *attr,
1032 char *buf)
1033{
1034 struct w83791d_data *data = w83791d_update_device(dev);
1035 return sprintf(buf, "%u\n", data->alarms);
1036}
1037
1038static DEVICE_ATTR_RO(alarms);
1039
1040/* Beep control */
1041
1042#define GLOBAL_BEEP_ENABLE_SHIFT 15
1043#define GLOBAL_BEEP_ENABLE_MASK (1 << GLOBAL_BEEP_ENABLE_SHIFT)
1044
1045static ssize_t show_beep_enable(struct device *dev,
1046 struct device_attribute *attr, char *buf)
1047{
1048 struct w83791d_data *data = w83791d_update_device(dev);
1049 return sprintf(buf, "%d\n", data->beep_enable);
1050}
1051
1052static ssize_t show_beep_mask(struct device *dev,
1053 struct device_attribute *attr, char *buf)
1054{
1055 struct w83791d_data *data = w83791d_update_device(dev);
1056 return sprintf(buf, "%d\n", BEEP_MASK_FROM_REG(data->beep_mask));
1057}
1058
1059
1060static ssize_t store_beep_mask(struct device *dev,
1061 struct device_attribute *attr,
1062 const char *buf, size_t count)
1063{
1064 struct i2c_client *client = to_i2c_client(dev);
1065 struct w83791d_data *data = i2c_get_clientdata(client);
1066 int i;
1067 long val;
1068 int err;
1069
1070 err = kstrtol(buf, 10, &val);
1071 if (err)
1072 return err;
1073
1074 mutex_lock(&data->update_lock);
1075
1076 /*
1077 * The beep_enable state overrides any enabling request from
1078 * the masks
1079 */
1080 data->beep_mask = BEEP_MASK_TO_REG(val) & ~GLOBAL_BEEP_ENABLE_MASK;
1081 data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
1082
1083 val = data->beep_mask;
1084
1085 for (i = 0; i < 3; i++) {
1086 w83791d_write(client, W83791D_REG_BEEP_CTRL[i], (val & 0xff));
1087 val >>= 8;
1088 }
1089
1090 mutex_unlock(&data->update_lock);
1091
1092 return count;
1093}
1094
1095static ssize_t store_beep_enable(struct device *dev,
1096 struct device_attribute *attr,
1097 const char *buf, size_t count)
1098{
1099 struct i2c_client *client = to_i2c_client(dev);
1100 struct w83791d_data *data = i2c_get_clientdata(client);
1101 long val;
1102 int err;
1103
1104 err = kstrtol(buf, 10, &val);
1105 if (err)
1106 return err;
1107
1108 mutex_lock(&data->update_lock);
1109
1110 data->beep_enable = val ? 1 : 0;
1111
1112 /* Keep the full mask value in sync with the current enable */
1113 data->beep_mask &= ~GLOBAL_BEEP_ENABLE_MASK;
1114 data->beep_mask |= (data->beep_enable << GLOBAL_BEEP_ENABLE_SHIFT);
1115
1116 /*
1117 * The global control is in the second beep control register
1118 * so only need to update that register
1119 */
1120 val = (data->beep_mask >> 8) & 0xff;
1121
1122 w83791d_write(client, W83791D_REG_BEEP_CTRL[1], val);
1123
1124 mutex_unlock(&data->update_lock);
1125
1126 return count;
1127}
1128
1129static struct sensor_device_attribute sda_beep_ctrl[] = {
1130 SENSOR_ATTR(beep_enable, S_IRUGO | S_IWUSR,
1131 show_beep_enable, store_beep_enable, 0),
1132 SENSOR_ATTR(beep_mask, S_IRUGO | S_IWUSR,
1133 show_beep_mask, store_beep_mask, 1)
1134};
1135
1136/* cpu voltage regulation information */
1137static ssize_t cpu0_vid_show(struct device *dev,
1138 struct device_attribute *attr, char *buf)
1139{
1140 struct w83791d_data *data = w83791d_update_device(dev);
1141 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
1142}
1143
1144static DEVICE_ATTR_RO(cpu0_vid);
1145
1146static ssize_t vrm_show(struct device *dev, struct device_attribute *attr,
1147 char *buf)
1148{
1149 struct w83791d_data *data = dev_get_drvdata(dev);
1150 return sprintf(buf, "%d\n", data->vrm);
1151}
1152
1153static ssize_t vrm_store(struct device *dev, struct device_attribute *attr,
1154 const char *buf, size_t count)
1155{
1156 struct w83791d_data *data = dev_get_drvdata(dev);
1157 unsigned long val;
1158 int err;
1159
1160 /*
1161 * No lock needed as vrm is internal to the driver
1162 * (not read from a chip register) and so is not
1163 * updated in w83791d_update_device()
1164 */
1165
1166 err = kstrtoul(buf, 10, &val);
1167 if (err)
1168 return err;
1169
1170 if (val > 255)
1171 return -EINVAL;
1172
1173 data->vrm = val;
1174 return count;
1175}
1176
1177static DEVICE_ATTR_RW(vrm);
1178
1179#define IN_UNIT_ATTRS(X) \
1180 &sda_in_input[X].dev_attr.attr, \
1181 &sda_in_min[X].dev_attr.attr, \
1182 &sda_in_max[X].dev_attr.attr, \
1183 &sda_in_beep[X].dev_attr.attr, \
1184 &sda_in_alarm[X].dev_attr.attr
1185
1186#define FAN_UNIT_ATTRS(X) \
1187 &sda_fan_input[X].dev_attr.attr, \
1188 &sda_fan_min[X].dev_attr.attr, \
1189 &sda_fan_div[X].dev_attr.attr, \
1190 &sda_fan_beep[X].dev_attr.attr, \
1191 &sda_fan_alarm[X].dev_attr.attr
1192
1193#define TEMP_UNIT_ATTRS(X) \
1194 &sda_temp_input[X].dev_attr.attr, \
1195 &sda_temp_max[X].dev_attr.attr, \
1196 &sda_temp_max_hyst[X].dev_attr.attr, \
1197 &sda_temp_beep[X].dev_attr.attr, \
1198 &sda_temp_alarm[X].dev_attr.attr
1199
1200static struct attribute *w83791d_attributes[] = {
1201 IN_UNIT_ATTRS(0),
1202 IN_UNIT_ATTRS(1),
1203 IN_UNIT_ATTRS(2),
1204 IN_UNIT_ATTRS(3),
1205 IN_UNIT_ATTRS(4),
1206 IN_UNIT_ATTRS(5),
1207 IN_UNIT_ATTRS(6),
1208 IN_UNIT_ATTRS(7),
1209 IN_UNIT_ATTRS(8),
1210 IN_UNIT_ATTRS(9),
1211 FAN_UNIT_ATTRS(0),
1212 FAN_UNIT_ATTRS(1),
1213 FAN_UNIT_ATTRS(2),
1214 TEMP_UNIT_ATTRS(0),
1215 TEMP_UNIT_ATTRS(1),
1216 TEMP_UNIT_ATTRS(2),
1217 &dev_attr_alarms.attr,
1218 &sda_beep_ctrl[0].dev_attr.attr,
1219 &sda_beep_ctrl[1].dev_attr.attr,
1220 &dev_attr_cpu0_vid.attr,
1221 &dev_attr_vrm.attr,
1222 &sda_pwm[0].dev_attr.attr,
1223 &sda_pwm[1].dev_attr.attr,
1224 &sda_pwm[2].dev_attr.attr,
1225 &sda_pwmenable[0].dev_attr.attr,
1226 &sda_pwmenable[1].dev_attr.attr,
1227 &sda_pwmenable[2].dev_attr.attr,
1228 &sda_temp_target[0].dev_attr.attr,
1229 &sda_temp_target[1].dev_attr.attr,
1230 &sda_temp_target[2].dev_attr.attr,
1231 &sda_temp_tolerance[0].dev_attr.attr,
1232 &sda_temp_tolerance[1].dev_attr.attr,
1233 &sda_temp_tolerance[2].dev_attr.attr,
1234 NULL
1235};
1236
1237static const struct attribute_group w83791d_group = {
1238 .attrs = w83791d_attributes,
1239};
1240
1241/*
1242 * Separate group of attributes for fan/pwm 4-5. Their pins can also be
1243 * in use for GPIO in which case their sysfs-interface should not be made
1244 * available
1245 */
1246static struct attribute *w83791d_attributes_fanpwm45[] = {
1247 FAN_UNIT_ATTRS(3),
1248 FAN_UNIT_ATTRS(4),
1249 &sda_pwm[3].dev_attr.attr,
1250 &sda_pwm[4].dev_attr.attr,
1251 NULL
1252};
1253
1254static const struct attribute_group w83791d_group_fanpwm45 = {
1255 .attrs = w83791d_attributes_fanpwm45,
1256};
1257
1258static int w83791d_detect_subclients(struct i2c_client *client)
1259{
1260 struct i2c_adapter *adapter = client->adapter;
1261 struct w83791d_data *data = i2c_get_clientdata(client);
1262 int address = client->addr;
1263 int i, id;
1264 u8 val;
1265
1266 id = i2c_adapter_id(adapter);
1267 if (force_subclients[0] == id && force_subclients[1] == address) {
1268 for (i = 2; i <= 3; i++) {
1269 if (force_subclients[i] < 0x48 ||
1270 force_subclients[i] > 0x4f) {
1271 dev_err(&client->dev,
1272 "invalid subclient "
1273 "address %d; must be 0x48-0x4f\n",
1274 force_subclients[i]);
1275 return -ENODEV;
1276 }
1277 }
1278 w83791d_write(client, W83791D_REG_I2C_SUBADDR,
1279 (force_subclients[2] & 0x07) |
1280 ((force_subclients[3] & 0x07) << 4));
1281 }
1282
1283 val = w83791d_read(client, W83791D_REG_I2C_SUBADDR);
1284 if (!(val & 0x08))
1285 data->lm75[0] = devm_i2c_new_dummy_device(&client->dev, adapter,
1286 0x48 + (val & 0x7));
1287 if (!(val & 0x80)) {
1288 if (!IS_ERR(data->lm75[0]) &&
1289 ((val & 0x7) == ((val >> 4) & 0x7))) {
1290 dev_err(&client->dev,
1291 "duplicate addresses 0x%x, "
1292 "use force_subclient\n",
1293 data->lm75[0]->addr);
1294 return -ENODEV;
1295 }
1296 data->lm75[1] = devm_i2c_new_dummy_device(&client->dev, adapter,
1297 0x48 + ((val >> 4) & 0x7));
1298 }
1299
1300 return 0;
1301}
1302
1303
1304/* Return 0 if detection is successful, -ENODEV otherwise */
1305static int w83791d_detect(struct i2c_client *client,
1306 struct i2c_board_info *info)
1307{
1308 struct i2c_adapter *adapter = client->adapter;
1309 int val1, val2;
1310 unsigned short address = client->addr;
1311
1312 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1313 return -ENODEV;
1314
1315 if (w83791d_read(client, W83791D_REG_CONFIG) & 0x80)
1316 return -ENODEV;
1317
1318 val1 = w83791d_read(client, W83791D_REG_BANK);
1319 val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
1320 /* Check for Winbond ID if in bank 0 */
1321 if (!(val1 & 0x07)) {
1322 if ((!(val1 & 0x80) && val2 != 0xa3) ||
1323 ((val1 & 0x80) && val2 != 0x5c)) {
1324 return -ENODEV;
1325 }
1326 }
1327 /*
1328 * If Winbond chip, address of chip and W83791D_REG_I2C_ADDR
1329 * should match
1330 */
1331 if (w83791d_read(client, W83791D_REG_I2C_ADDR) != address)
1332 return -ENODEV;
1333
1334 /* We want bank 0 and Vendor ID high byte */
1335 val1 = w83791d_read(client, W83791D_REG_BANK) & 0x78;
1336 w83791d_write(client, W83791D_REG_BANK, val1 | 0x80);
1337
1338 /* Verify it is a Winbond w83791d */
1339 val1 = w83791d_read(client, W83791D_REG_WCHIPID);
1340 val2 = w83791d_read(client, W83791D_REG_CHIPMAN);
1341 if (val1 != 0x71 || val2 != 0x5c)
1342 return -ENODEV;
1343
1344 strlcpy(info->type, "w83791d", I2C_NAME_SIZE);
1345
1346 return 0;
1347}
1348
1349static int w83791d_probe(struct i2c_client *client,
1350 const struct i2c_device_id *id)
1351{
1352 struct w83791d_data *data;
1353 struct device *dev = &client->dev;
1354 int i, err;
1355 u8 has_fanpwm45;
1356
1357#ifdef DEBUG
1358 int val1;
1359 val1 = w83791d_read(client, W83791D_REG_DID_VID4);
1360 dev_dbg(dev, "Device ID version: %d.%d (0x%02x)\n",
1361 (val1 >> 5) & 0x07, (val1 >> 1) & 0x0f, val1);
1362#endif
1363
1364 data = devm_kzalloc(&client->dev, sizeof(struct w83791d_data),
1365 GFP_KERNEL);
1366 if (!data)
1367 return -ENOMEM;
1368
1369 i2c_set_clientdata(client, data);
1370 mutex_init(&data->update_lock);
1371
1372 err = w83791d_detect_subclients(client);
1373 if (err)
1374 return err;
1375
1376 /* Initialize the chip */
1377 w83791d_init_client(client);
1378
1379 /*
1380 * If the fan_div is changed, make sure there is a rational
1381 * fan_min in place
1382 */
1383 for (i = 0; i < NUMBER_OF_FANIN; i++)
1384 data->fan_min[i] = w83791d_read(client, W83791D_REG_FAN_MIN[i]);
1385
1386 /* Register sysfs hooks */
1387 err = sysfs_create_group(&client->dev.kobj, &w83791d_group);
1388 if (err)
1389 return err;
1390
1391 /* Check if pins of fan/pwm 4-5 are in use as GPIO */
1392 has_fanpwm45 = w83791d_read(client, W83791D_REG_GPIO) & 0x10;
1393 if (has_fanpwm45) {
1394 err = sysfs_create_group(&client->dev.kobj,
1395 &w83791d_group_fanpwm45);
1396 if (err)
1397 goto error4;
1398 }
1399
1400 /* Everything is ready, now register the working device */
1401 data->hwmon_dev = hwmon_device_register(dev);
1402 if (IS_ERR(data->hwmon_dev)) {
1403 err = PTR_ERR(data->hwmon_dev);
1404 goto error5;
1405 }
1406
1407 return 0;
1408
1409error5:
1410 if (has_fanpwm45)
1411 sysfs_remove_group(&client->dev.kobj, &w83791d_group_fanpwm45);
1412error4:
1413 sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1414 return err;
1415}
1416
1417static int w83791d_remove(struct i2c_client *client)
1418{
1419 struct w83791d_data *data = i2c_get_clientdata(client);
1420
1421 hwmon_device_unregister(data->hwmon_dev);
1422 sysfs_remove_group(&client->dev.kobj, &w83791d_group);
1423
1424 return 0;
1425}
1426
1427static void w83791d_init_client(struct i2c_client *client)
1428{
1429 struct w83791d_data *data = i2c_get_clientdata(client);
1430 u8 tmp;
1431 u8 old_beep;
1432
1433 /*
1434 * The difference between reset and init is that reset
1435 * does a hard reset of the chip via index 0x40, bit 7,
1436 * but init simply forces certain registers to have "sane"
1437 * values. The hope is that the BIOS has done the right
1438 * thing (which is why the default is reset=0, init=0),
1439 * but if not, reset is the hard hammer and init
1440 * is the soft mallet both of which are trying to whack
1441 * things into place...
1442 * NOTE: The data sheet makes a distinction between
1443 * "power on defaults" and "reset by MR". As far as I can tell,
1444 * the hard reset puts everything into a power-on state so I'm
1445 * not sure what "reset by MR" means or how it can happen.
1446 */
1447 if (reset || init) {
1448 /* keep some BIOS settings when we... */
1449 old_beep = w83791d_read(client, W83791D_REG_BEEP_CONFIG);
1450
1451 if (reset) {
1452 /* ... reset the chip and ... */
1453 w83791d_write(client, W83791D_REG_CONFIG, 0x80);
1454 }
1455
1456 /* ... disable power-on abnormal beep */
1457 w83791d_write(client, W83791D_REG_BEEP_CONFIG, old_beep | 0x80);
1458
1459 /* disable the global beep (not done by hard reset) */
1460 tmp = w83791d_read(client, W83791D_REG_BEEP_CTRL[1]);
1461 w83791d_write(client, W83791D_REG_BEEP_CTRL[1], tmp & 0xef);
1462
1463 if (init) {
1464 /* Make sure monitoring is turned on for add-ons */
1465 tmp = w83791d_read(client, W83791D_REG_TEMP2_CONFIG);
1466 if (tmp & 1) {
1467 w83791d_write(client, W83791D_REG_TEMP2_CONFIG,
1468 tmp & 0xfe);
1469 }
1470
1471 tmp = w83791d_read(client, W83791D_REG_TEMP3_CONFIG);
1472 if (tmp & 1) {
1473 w83791d_write(client, W83791D_REG_TEMP3_CONFIG,
1474 tmp & 0xfe);
1475 }
1476
1477 /* Start monitoring */
1478 tmp = w83791d_read(client, W83791D_REG_CONFIG) & 0xf7;
1479 w83791d_write(client, W83791D_REG_CONFIG, tmp | 0x01);
1480 }
1481 }
1482
1483 data->vrm = vid_which_vrm();
1484}
1485
1486static struct w83791d_data *w83791d_update_device(struct device *dev)
1487{
1488 struct i2c_client *client = to_i2c_client(dev);
1489 struct w83791d_data *data = i2c_get_clientdata(client);
1490 int i, j;
1491 u8 reg_array_tmp[3];
1492 u8 vbat_reg;
1493
1494 mutex_lock(&data->update_lock);
1495
1496 if (time_after(jiffies, data->last_updated + (HZ * 3))
1497 || !data->valid) {
1498 dev_dbg(dev, "Starting w83791d device update\n");
1499
1500 /* Update the voltages measured value and limits */
1501 for (i = 0; i < NUMBER_OF_VIN; i++) {
1502 data->in[i] = w83791d_read(client,
1503 W83791D_REG_IN[i]);
1504 data->in_max[i] = w83791d_read(client,
1505 W83791D_REG_IN_MAX[i]);
1506 data->in_min[i] = w83791d_read(client,
1507 W83791D_REG_IN_MIN[i]);
1508 }
1509
1510 /* Update the fan counts and limits */
1511 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1512 /* Update the Fan measured value and limits */
1513 data->fan[i] = w83791d_read(client,
1514 W83791D_REG_FAN[i]);
1515 data->fan_min[i] = w83791d_read(client,
1516 W83791D_REG_FAN_MIN[i]);
1517 }
1518
1519 /* Update the fan divisor */
1520 for (i = 0; i < 3; i++) {
1521 reg_array_tmp[i] = w83791d_read(client,
1522 W83791D_REG_FAN_DIV[i]);
1523 }
1524 data->fan_div[0] = (reg_array_tmp[0] >> 4) & 0x03;
1525 data->fan_div[1] = (reg_array_tmp[0] >> 6) & 0x03;
1526 data->fan_div[2] = (reg_array_tmp[1] >> 6) & 0x03;
1527 data->fan_div[3] = reg_array_tmp[2] & 0x07;
1528 data->fan_div[4] = (reg_array_tmp[2] >> 4) & 0x07;
1529
1530 /*
1531 * The fan divisor for fans 0-2 get bit 2 from
1532 * bits 5-7 respectively of vbat register
1533 */
1534 vbat_reg = w83791d_read(client, W83791D_REG_VBAT);
1535 for (i = 0; i < 3; i++)
1536 data->fan_div[i] |= (vbat_reg >> (3 + i)) & 0x04;
1537
1538 /* Update PWM duty cycle */
1539 for (i = 0; i < NUMBER_OF_PWM; i++) {
1540 data->pwm[i] = w83791d_read(client,
1541 W83791D_REG_PWM[i]);
1542 }
1543
1544 /* Update PWM enable status */
1545 for (i = 0; i < 2; i++) {
1546 reg_array_tmp[i] = w83791d_read(client,
1547 W83791D_REG_FAN_CFG[i]);
1548 }
1549 data->pwm_enable[0] = (reg_array_tmp[0] >> 2) & 0x03;
1550 data->pwm_enable[1] = (reg_array_tmp[0] >> 4) & 0x03;
1551 data->pwm_enable[2] = (reg_array_tmp[1] >> 2) & 0x03;
1552
1553 /* Update PWM target temperature */
1554 for (i = 0; i < 3; i++) {
1555 data->temp_target[i] = w83791d_read(client,
1556 W83791D_REG_TEMP_TARGET[i]) & 0x7f;
1557 }
1558
1559 /* Update PWM temperature tolerance */
1560 for (i = 0; i < 2; i++) {
1561 reg_array_tmp[i] = w83791d_read(client,
1562 W83791D_REG_TEMP_TOL[i]);
1563 }
1564 data->temp_tolerance[0] = reg_array_tmp[0] & 0x0f;
1565 data->temp_tolerance[1] = (reg_array_tmp[0] >> 4) & 0x0f;
1566 data->temp_tolerance[2] = reg_array_tmp[1] & 0x0f;
1567
1568 /* Update the first temperature sensor */
1569 for (i = 0; i < 3; i++) {
1570 data->temp1[i] = w83791d_read(client,
1571 W83791D_REG_TEMP1[i]);
1572 }
1573
1574 /* Update the rest of the temperature sensors */
1575 for (i = 0; i < 2; i++) {
1576 for (j = 0; j < 3; j++) {
1577 data->temp_add[i][j] =
1578 (w83791d_read(client,
1579 W83791D_REG_TEMP_ADD[i][j * 2]) << 8) |
1580 w83791d_read(client,
1581 W83791D_REG_TEMP_ADD[i][j * 2 + 1]);
1582 }
1583 }
1584
1585 /* Update the realtime status */
1586 data->alarms =
1587 w83791d_read(client, W83791D_REG_ALARM1) +
1588 (w83791d_read(client, W83791D_REG_ALARM2) << 8) +
1589 (w83791d_read(client, W83791D_REG_ALARM3) << 16);
1590
1591 /* Update the beep configuration information */
1592 data->beep_mask =
1593 w83791d_read(client, W83791D_REG_BEEP_CTRL[0]) +
1594 (w83791d_read(client, W83791D_REG_BEEP_CTRL[1]) << 8) +
1595 (w83791d_read(client, W83791D_REG_BEEP_CTRL[2]) << 16);
1596
1597 /* Extract global beep enable flag */
1598 data->beep_enable =
1599 (data->beep_mask >> GLOBAL_BEEP_ENABLE_SHIFT) & 0x01;
1600
1601 /* Update the cpu voltage information */
1602 i = w83791d_read(client, W83791D_REG_VID_FANDIV);
1603 data->vid = i & 0x0f;
1604 data->vid |= (w83791d_read(client, W83791D_REG_DID_VID4) & 0x01)
1605 << 4;
1606
1607 data->last_updated = jiffies;
1608 data->valid = 1;
1609 }
1610
1611 mutex_unlock(&data->update_lock);
1612
1613#ifdef DEBUG
1614 w83791d_print_debug(data, dev);
1615#endif
1616
1617 return data;
1618}
1619
1620#ifdef DEBUG
1621static void w83791d_print_debug(struct w83791d_data *data, struct device *dev)
1622{
1623 int i = 0, j = 0;
1624
1625 dev_dbg(dev, "======Start of w83791d debug values======\n");
1626 dev_dbg(dev, "%d set of Voltages: ===>\n", NUMBER_OF_VIN);
1627 for (i = 0; i < NUMBER_OF_VIN; i++) {
1628 dev_dbg(dev, "vin[%d] is: 0x%02x\n", i, data->in[i]);
1629 dev_dbg(dev, "vin[%d] min is: 0x%02x\n", i, data->in_min[i]);
1630 dev_dbg(dev, "vin[%d] max is: 0x%02x\n", i, data->in_max[i]);
1631 }
1632 dev_dbg(dev, "%d set of Fan Counts/Divisors: ===>\n", NUMBER_OF_FANIN);
1633 for (i = 0; i < NUMBER_OF_FANIN; i++) {
1634 dev_dbg(dev, "fan[%d] is: 0x%02x\n", i, data->fan[i]);
1635 dev_dbg(dev, "fan[%d] min is: 0x%02x\n", i, data->fan_min[i]);
1636 dev_dbg(dev, "fan_div[%d] is: 0x%02x\n", i, data->fan_div[i]);
1637 }
1638
1639 /*
1640 * temperature math is signed, but only print out the
1641 * bits that matter
1642 */
1643 dev_dbg(dev, "%d set of Temperatures: ===>\n", NUMBER_OF_TEMPIN);
1644 for (i = 0; i < 3; i++)
1645 dev_dbg(dev, "temp1[%d] is: 0x%02x\n", i, (u8) data->temp1[i]);
1646 for (i = 0; i < 2; i++) {
1647 for (j = 0; j < 3; j++) {
1648 dev_dbg(dev, "temp_add[%d][%d] is: 0x%04x\n", i, j,
1649 (u16) data->temp_add[i][j]);
1650 }
1651 }
1652
1653 dev_dbg(dev, "Misc Information: ===>\n");
1654 dev_dbg(dev, "alarm is: 0x%08x\n", data->alarms);
1655 dev_dbg(dev, "beep_mask is: 0x%08x\n", data->beep_mask);
1656 dev_dbg(dev, "beep_enable is: %d\n", data->beep_enable);
1657 dev_dbg(dev, "vid is: 0x%02x\n", data->vid);
1658 dev_dbg(dev, "vrm is: 0x%02x\n", data->vrm);
1659 dev_dbg(dev, "=======End of w83791d debug values========\n");
1660 dev_dbg(dev, "\n");
1661}
1662#endif
1663
1664module_i2c_driver(w83791d_driver);
1665
1666MODULE_AUTHOR("Charles Spirakis <bezaur@gmail.com>");
1667MODULE_DESCRIPTION("W83791D driver");
1668MODULE_LICENSE("GPL");