1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * w83791d.c - Part of lm_sensors, Linux kernel modules for hardware
6 * Copyright (C) 2006-2007 Charles Spirakis <bezaur@gmail.com>
10 * Supports following chips:
12 * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA
13 * w83791d 10 5 5 3 0x71 0x5ca3 yes no
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
19 * The w83791g chip is the same as the w83791d but lead-free.
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>
33 #define NUMBER_OF_VIN 10
34 #define NUMBER_OF_FANIN 5
35 #define NUMBER_OF_TEMPIN 3
36 #define NUMBER_OF_PWM 5
38 /* Addresses to scan */
39 static const unsigned short normal_i2c
[] = { 0x2c, 0x2d, 0x2e, 0x2f,
42 /* Insmod parameters */
44 static unsigned short force_subclients
[4];
45 module_param_array(force_subclients
, short, NULL
, 0);
46 MODULE_PARM_DESC(force_subclients
,
47 "List of subclient addresses: {bus, clientaddr, subclientaddr1, subclientaddr2}");
50 module_param(reset
, bool, 0);
51 MODULE_PARM_DESC(reset
, "Set to one to force a hardware chip reset");
54 module_param(init
, bool, 0);
55 MODULE_PARM_DESC(init
, "Set to one to force extra software initialization");
57 /* The W83791D registers */
58 static 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 */
71 static 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 */
83 static 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 */
95 static 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 */
102 static 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 */
110 static 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 */
118 static 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 */
124 static const u8 W83791D_REG_TEMP_TOL
[2] = {
125 0x87, /* PWM 1/2 temperature tolerance */
126 0x97, /* PWM 3 temperature tolerance */
129 static const u8 W83791D_REG_FAN_CFG
[2] = {
130 0x84, /* FAN 1/2 configuration */
131 0x95, /* FAN 3 configuration */
134 static 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 */
140 #define W83791D_REG_BANK 0x4E
141 #define W83791D_REG_TEMP2_CONFIG 0xC2
142 #define W83791D_REG_TEMP3_CONFIG 0xCA
144 static 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 */
150 static 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 */
165 #define W83791D_REG_BEEP_CONFIG 0x4D
167 static 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 */
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
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 */
186 #define W83791D_REG_VBAT 0x5D
187 #define W83791D_REG_I2C_ADDR 0x48
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
195 static inline int w83791d_read(struct i2c_client
*client
, u8 reg
)
197 return i2c_smbus_read_byte_data(client
, reg
);
200 static inline int w83791d_write(struct i2c_client
*client
, u8 reg
, u8 value
)
202 return i2c_smbus_write_byte_data(client
, reg
, value
);
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.
210 #define IN_TO_REG(val) (clamp_val((((val) + 8) / 16), 0, 255))
211 #define IN_FROM_REG(val) ((val) * 16)
213 static u8
fan_to_reg(long rpm
, int div
)
217 rpm
= clamp_val(rpm
, 1, 1000000);
218 return clamp_val((1350000 + rpm
* div
/ 2) / (rpm
* div
), 1, 254);
221 #define FAN_FROM_REG(val, div) ((val) == 0 ? -1 : \
222 ((val) == 255 ? 0 : \
223 1350000 / ((val) * (div))))
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)
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
238 #define TEMP23_FROM_REG(val) ((val) / 128 * 500)
239 #define TEMP23_TO_REG(val) (DIV_ROUND_CLOSEST(clamp_val((val), -128000, \
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), \
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), \
250 #define BEEP_MASK_TO_REG(val) ((val) & 0xffffff)
251 #define BEEP_MASK_FROM_REG(val) ((val) & 0xffffff)
253 #define DIV_FROM_REG(val) (1 << (val))
255 static u8
div_to_reg(int nr
, long val
)
259 /* fan divisors max out at 128 */
260 val
= clamp_val(val
, 1, 128) >> 1;
261 for (i
= 0; i
< 7; i
++) {
269 struct w83791d_data
{
270 struct device
*hwmon_dev
;
271 struct mutex update_lock
;
273 bool valid
; /* true if following fields are valid */
274 unsigned long last_updated
; /* In jiffies */
277 u8 in
[NUMBER_OF_VIN
]; /* Register value */
278 u8 in_max
[NUMBER_OF_VIN
]; /* Register value */
279 u8 in_min
[NUMBER_OF_VIN
]; /* Register value */
282 u8 fan
[NUMBER_OF_FANIN
]; /* Register value */
283 u8 fan_min
[NUMBER_OF_FANIN
]; /* Register value */
284 u8 fan_div
[NUMBER_OF_FANIN
]; /* Register encoding, shifted right */
286 /* Temperature sensors */
288 s8 temp1
[3]; /* current, over, thyst */
289 s16 temp_add
[2][3]; /* fixed point value. Top 8 bits are the
290 * integral part, bottom 8 bits are the
291 * fractional part. We only use the top
292 * 9 bits as the resolution is only
293 * to the 0.5 degree C...
294 * two sensors with three values
299 u8 pwm
[5]; /* pwm duty cycle */
300 u8 pwm_enable
[3]; /* pwm enable status for fan 1-3
301 * (fan 4-5 only support manual mode)
304 u8 temp_target
[3]; /* pwm 1-3 target temperature */
305 u8 temp_tolerance
[3]; /* pwm 1-3 temperature tolerance */
308 u32 alarms
; /* realtime status register encoding,combined */
309 u8 beep_enable
; /* Global beep enable */
310 u32 beep_mask
; /* Mask off specific beeps */
311 u8 vid
; /* Register encoding, combined */
312 u8 vrm
; /* hwmon-vid */
315 static int w83791d_probe(struct i2c_client
*client
);
316 static int w83791d_detect(struct i2c_client
*client
,
317 struct i2c_board_info
*info
);
318 static void w83791d_remove(struct i2c_client
*client
);
320 static int w83791d_read(struct i2c_client
*client
, u8 reg
);
321 static int w83791d_write(struct i2c_client
*client
, u8 reg
, u8 value
);
322 static struct w83791d_data
*w83791d_update_device(struct device
*dev
);
325 static void w83791d_print_debug(struct w83791d_data
*data
, struct device
*dev
);
328 static void w83791d_init_client(struct i2c_client
*client
);
330 static const struct i2c_device_id w83791d_id
[] = {
334 MODULE_DEVICE_TABLE(i2c
, w83791d_id
);
336 static struct i2c_driver w83791d_driver
= {
337 .class = I2C_CLASS_HWMON
,
341 .probe
= w83791d_probe
,
342 .remove
= w83791d_remove
,
343 .id_table
= w83791d_id
,
344 .detect
= w83791d_detect
,
345 .address_list
= normal_i2c
,
348 /* following are the sysfs callback functions */
349 #define show_in_reg(reg) \
350 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
353 struct sensor_device_attribute *sensor_attr = \
354 to_sensor_dev_attr(attr); \
355 struct w83791d_data *data = w83791d_update_device(dev); \
356 int nr = sensor_attr->index; \
357 return sprintf(buf, "%d\n", IN_FROM_REG(data->reg[nr])); \
364 #define store_in_reg(REG, reg) \
365 static ssize_t store_in_##reg(struct device *dev, \
366 struct device_attribute *attr, \
367 const char *buf, size_t count) \
369 struct sensor_device_attribute *sensor_attr = \
370 to_sensor_dev_attr(attr); \
371 struct i2c_client *client = to_i2c_client(dev); \
372 struct w83791d_data *data = i2c_get_clientdata(client); \
373 int nr = sensor_attr->index; \
375 int err = kstrtoul(buf, 10, &val); \
378 mutex_lock(&data->update_lock); \
379 data->in_##reg[nr] = IN_TO_REG(val); \
380 w83791d_write(client, W83791D_REG_IN_##REG[nr], data->in_##reg[nr]); \
381 mutex_unlock(&data->update_lock); \
385 store_in_reg(MIN
, min
);
386 store_in_reg(MAX
, max
);
388 static struct sensor_device_attribute sda_in_input
[] = {
389 SENSOR_ATTR(in0_input
, S_IRUGO
, show_in
, NULL
, 0),
390 SENSOR_ATTR(in1_input
, S_IRUGO
, show_in
, NULL
, 1),
391 SENSOR_ATTR(in2_input
, S_IRUGO
, show_in
, NULL
, 2),
392 SENSOR_ATTR(in3_input
, S_IRUGO
, show_in
, NULL
, 3),
393 SENSOR_ATTR(in4_input
, S_IRUGO
, show_in
, NULL
, 4),
394 SENSOR_ATTR(in5_input
, S_IRUGO
, show_in
, NULL
, 5),
395 SENSOR_ATTR(in6_input
, S_IRUGO
, show_in
, NULL
, 6),
396 SENSOR_ATTR(in7_input
, S_IRUGO
, show_in
, NULL
, 7),
397 SENSOR_ATTR(in8_input
, S_IRUGO
, show_in
, NULL
, 8),
398 SENSOR_ATTR(in9_input
, S_IRUGO
, show_in
, NULL
, 9),
401 static struct sensor_device_attribute sda_in_min
[] = {
402 SENSOR_ATTR(in0_min
, S_IWUSR
| S_IRUGO
, show_in_min
, store_in_min
, 0),
403 SENSOR_ATTR(in1_min
, S_IWUSR
| S_IRUGO
, show_in_min
, store_in_min
, 1),
404 SENSOR_ATTR(in2_min
, S_IWUSR
| S_IRUGO
, show_in_min
, store_in_min
, 2),
405 SENSOR_ATTR(in3_min
, S_IWUSR
| S_IRUGO
, show_in_min
, store_in_min
, 3),
406 SENSOR_ATTR(in4_min
, S_IWUSR
| S_IRUGO
, show_in_min
, store_in_min
, 4),
407 SENSOR_ATTR(in5_min
, S_IWUSR
| S_IRUGO
, show_in_min
, store_in_min
, 5),
408 SENSOR_ATTR(in6_min
, S_IWUSR
| S_IRUGO
, show_in_min
, store_in_min
, 6),
409 SENSOR_ATTR(in7_min
, S_IWUSR
| S_IRUGO
, show_in_min
, store_in_min
, 7),
410 SENSOR_ATTR(in8_min
, S_IWUSR
| S_IRUGO
, show_in_min
, store_in_min
, 8),
411 SENSOR_ATTR(in9_min
, S_IWUSR
| S_IRUGO
, show_in_min
, store_in_min
, 9),
414 static struct sensor_device_attribute sda_in_max
[] = {
415 SENSOR_ATTR(in0_max
, S_IWUSR
| S_IRUGO
, show_in_max
, store_in_max
, 0),
416 SENSOR_ATTR(in1_max
, S_IWUSR
| S_IRUGO
, show_in_max
, store_in_max
, 1),
417 SENSOR_ATTR(in2_max
, S_IWUSR
| S_IRUGO
, show_in_max
, store_in_max
, 2),
418 SENSOR_ATTR(in3_max
, S_IWUSR
| S_IRUGO
, show_in_max
, store_in_max
, 3),
419 SENSOR_ATTR(in4_max
, S_IWUSR
| S_IRUGO
, show_in_max
, store_in_max
, 4),
420 SENSOR_ATTR(in5_max
, S_IWUSR
| S_IRUGO
, show_in_max
, store_in_max
, 5),
421 SENSOR_ATTR(in6_max
, S_IWUSR
| S_IRUGO
, show_in_max
, store_in_max
, 6),
422 SENSOR_ATTR(in7_max
, S_IWUSR
| S_IRUGO
, show_in_max
, store_in_max
, 7),
423 SENSOR_ATTR(in8_max
, S_IWUSR
| S_IRUGO
, show_in_max
, store_in_max
, 8),
424 SENSOR_ATTR(in9_max
, S_IWUSR
| S_IRUGO
, show_in_max
, store_in_max
, 9),
428 static ssize_t
show_beep(struct device
*dev
, struct device_attribute
*attr
,
431 struct sensor_device_attribute
*sensor_attr
=
432 to_sensor_dev_attr(attr
);
433 struct w83791d_data
*data
= w83791d_update_device(dev
);
434 int bitnr
= sensor_attr
->index
;
436 return sprintf(buf
, "%d\n", (data
->beep_mask
>> bitnr
) & 1);
439 static ssize_t
store_beep(struct device
*dev
, struct device_attribute
*attr
,
440 const char *buf
, size_t count
)
442 struct sensor_device_attribute
*sensor_attr
=
443 to_sensor_dev_attr(attr
);
444 struct i2c_client
*client
= to_i2c_client(dev
);
445 struct w83791d_data
*data
= i2c_get_clientdata(client
);
446 int bitnr
= sensor_attr
->index
;
447 int bytenr
= bitnr
/ 8;
451 err
= kstrtoul(buf
, 10, &val
);
457 mutex_lock(&data
->update_lock
);
459 data
->beep_mask
&= ~(0xff << (bytenr
* 8));
460 data
->beep_mask
|= w83791d_read(client
, W83791D_REG_BEEP_CTRL
[bytenr
])
463 data
->beep_mask
&= ~(1 << bitnr
);
464 data
->beep_mask
|= val
<< bitnr
;
466 w83791d_write(client
, W83791D_REG_BEEP_CTRL
[bytenr
],
467 (data
->beep_mask
>> (bytenr
* 8)) & 0xff);
469 mutex_unlock(&data
->update_lock
);
474 static ssize_t
show_alarm(struct device
*dev
, struct device_attribute
*attr
,
477 struct sensor_device_attribute
*sensor_attr
=
478 to_sensor_dev_attr(attr
);
479 struct w83791d_data
*data
= w83791d_update_device(dev
);
480 int bitnr
= sensor_attr
->index
;
482 return sprintf(buf
, "%d\n", (data
->alarms
>> bitnr
) & 1);
486 * Note: The bitmask for the beep enable/disable is different than
487 * the bitmask for the alarm.
489 static struct sensor_device_attribute sda_in_beep
[] = {
490 SENSOR_ATTR(in0_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 0),
491 SENSOR_ATTR(in1_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 13),
492 SENSOR_ATTR(in2_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 2),
493 SENSOR_ATTR(in3_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 3),
494 SENSOR_ATTR(in4_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 8),
495 SENSOR_ATTR(in5_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 9),
496 SENSOR_ATTR(in6_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 10),
497 SENSOR_ATTR(in7_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 16),
498 SENSOR_ATTR(in8_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 17),
499 SENSOR_ATTR(in9_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 14),
502 static struct sensor_device_attribute sda_in_alarm
[] = {
503 SENSOR_ATTR(in0_alarm
, S_IRUGO
, show_alarm
, NULL
, 0),
504 SENSOR_ATTR(in1_alarm
, S_IRUGO
, show_alarm
, NULL
, 1),
505 SENSOR_ATTR(in2_alarm
, S_IRUGO
, show_alarm
, NULL
, 2),
506 SENSOR_ATTR(in3_alarm
, S_IRUGO
, show_alarm
, NULL
, 3),
507 SENSOR_ATTR(in4_alarm
, S_IRUGO
, show_alarm
, NULL
, 8),
508 SENSOR_ATTR(in5_alarm
, S_IRUGO
, show_alarm
, NULL
, 9),
509 SENSOR_ATTR(in6_alarm
, S_IRUGO
, show_alarm
, NULL
, 10),
510 SENSOR_ATTR(in7_alarm
, S_IRUGO
, show_alarm
, NULL
, 19),
511 SENSOR_ATTR(in8_alarm
, S_IRUGO
, show_alarm
, NULL
, 20),
512 SENSOR_ATTR(in9_alarm
, S_IRUGO
, show_alarm
, NULL
, 14),
515 #define show_fan_reg(reg) \
516 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
519 struct sensor_device_attribute *sensor_attr = \
520 to_sensor_dev_attr(attr); \
521 struct w83791d_data *data = w83791d_update_device(dev); \
522 int nr = sensor_attr->index; \
523 return sprintf(buf, "%d\n", \
524 FAN_FROM_REG(data->reg[nr], DIV_FROM_REG(data->fan_div[nr]))); \
528 show_fan_reg(fan_min
);
530 static ssize_t
store_fan_min(struct device
*dev
, struct device_attribute
*attr
,
531 const char *buf
, size_t count
)
533 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
534 struct i2c_client
*client
= to_i2c_client(dev
);
535 struct w83791d_data
*data
= i2c_get_clientdata(client
);
536 int nr
= sensor_attr
->index
;
540 err
= kstrtoul(buf
, 10, &val
);
544 mutex_lock(&data
->update_lock
);
545 data
->fan_min
[nr
] = fan_to_reg(val
, DIV_FROM_REG(data
->fan_div
[nr
]));
546 w83791d_write(client
, W83791D_REG_FAN_MIN
[nr
], data
->fan_min
[nr
]);
547 mutex_unlock(&data
->update_lock
);
552 static ssize_t
show_fan_div(struct device
*dev
, struct device_attribute
*attr
,
555 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
556 int nr
= sensor_attr
->index
;
557 struct w83791d_data
*data
= w83791d_update_device(dev
);
558 return sprintf(buf
, "%u\n", DIV_FROM_REG(data
->fan_div
[nr
]));
562 * Note: we save and restore the fan minimum here, because its value is
563 * determined in part by the fan divisor. This follows the principle of
564 * least surprise; the user doesn't expect the fan minimum to change just
565 * because the divisor changed.
567 static ssize_t
store_fan_div(struct device
*dev
, struct device_attribute
*attr
,
568 const char *buf
, size_t count
)
570 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
571 struct i2c_client
*client
= to_i2c_client(dev
);
572 struct w83791d_data
*data
= i2c_get_clientdata(client
);
573 int nr
= sensor_attr
->index
;
584 err
= kstrtoul(buf
, 10, &val
);
589 min
= FAN_FROM_REG(data
->fan_min
[nr
], DIV_FROM_REG(data
->fan_div
[nr
]));
591 mutex_lock(&data
->update_lock
);
592 data
->fan_div
[nr
] = div_to_reg(nr
, val
);
622 dev_warn(dev
, "store_fan_div: Unexpected nr seen: %d\n", nr
);
628 fan_div_reg
= w83791d_read(client
, W83791D_REG_FAN_DIV
[indx
])
630 tmp_fan_div
= (data
->fan_div
[nr
] << new_shift
) & ~keep_mask
;
632 w83791d_write(client
, W83791D_REG_FAN_DIV
[indx
],
633 fan_div_reg
| tmp_fan_div
);
635 /* Bit 2 of fans 0-2 is stored in the vbat register (bits 5-7) */
637 keep_mask
= ~(1 << (nr
+ 5));
638 vbat_reg
= w83791d_read(client
, W83791D_REG_VBAT
)
640 tmp_fan_div
= (data
->fan_div
[nr
] << (3 + nr
)) & ~keep_mask
;
641 w83791d_write(client
, W83791D_REG_VBAT
,
642 vbat_reg
| tmp_fan_div
);
645 /* Restore fan_min */
646 data
->fan_min
[nr
] = fan_to_reg(min
, DIV_FROM_REG(data
->fan_div
[nr
]));
647 w83791d_write(client
, W83791D_REG_FAN_MIN
[nr
], data
->fan_min
[nr
]);
652 mutex_unlock(&data
->update_lock
);
657 static struct sensor_device_attribute sda_fan_input
[] = {
658 SENSOR_ATTR(fan1_input
, S_IRUGO
, show_fan
, NULL
, 0),
659 SENSOR_ATTR(fan2_input
, S_IRUGO
, show_fan
, NULL
, 1),
660 SENSOR_ATTR(fan3_input
, S_IRUGO
, show_fan
, NULL
, 2),
661 SENSOR_ATTR(fan4_input
, S_IRUGO
, show_fan
, NULL
, 3),
662 SENSOR_ATTR(fan5_input
, S_IRUGO
, show_fan
, NULL
, 4),
665 static struct sensor_device_attribute sda_fan_min
[] = {
666 SENSOR_ATTR(fan1_min
, S_IWUSR
| S_IRUGO
,
667 show_fan_min
, store_fan_min
, 0),
668 SENSOR_ATTR(fan2_min
, S_IWUSR
| S_IRUGO
,
669 show_fan_min
, store_fan_min
, 1),
670 SENSOR_ATTR(fan3_min
, S_IWUSR
| S_IRUGO
,
671 show_fan_min
, store_fan_min
, 2),
672 SENSOR_ATTR(fan4_min
, S_IWUSR
| S_IRUGO
,
673 show_fan_min
, store_fan_min
, 3),
674 SENSOR_ATTR(fan5_min
, S_IWUSR
| S_IRUGO
,
675 show_fan_min
, store_fan_min
, 4),
678 static struct sensor_device_attribute sda_fan_div
[] = {
679 SENSOR_ATTR(fan1_div
, S_IWUSR
| S_IRUGO
,
680 show_fan_div
, store_fan_div
, 0),
681 SENSOR_ATTR(fan2_div
, S_IWUSR
| S_IRUGO
,
682 show_fan_div
, store_fan_div
, 1),
683 SENSOR_ATTR(fan3_div
, S_IWUSR
| S_IRUGO
,
684 show_fan_div
, store_fan_div
, 2),
685 SENSOR_ATTR(fan4_div
, S_IWUSR
| S_IRUGO
,
686 show_fan_div
, store_fan_div
, 3),
687 SENSOR_ATTR(fan5_div
, S_IWUSR
| S_IRUGO
,
688 show_fan_div
, store_fan_div
, 4),
691 static struct sensor_device_attribute sda_fan_beep
[] = {
692 SENSOR_ATTR(fan1_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 6),
693 SENSOR_ATTR(fan2_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 7),
694 SENSOR_ATTR(fan3_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 11),
695 SENSOR_ATTR(fan4_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 21),
696 SENSOR_ATTR(fan5_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 22),
699 static struct sensor_device_attribute sda_fan_alarm
[] = {
700 SENSOR_ATTR(fan1_alarm
, S_IRUGO
, show_alarm
, NULL
, 6),
701 SENSOR_ATTR(fan2_alarm
, S_IRUGO
, show_alarm
, NULL
, 7),
702 SENSOR_ATTR(fan3_alarm
, S_IRUGO
, show_alarm
, NULL
, 11),
703 SENSOR_ATTR(fan4_alarm
, S_IRUGO
, show_alarm
, NULL
, 21),
704 SENSOR_ATTR(fan5_alarm
, S_IRUGO
, show_alarm
, NULL
, 22),
707 /* read/write PWMs */
708 static ssize_t
show_pwm(struct device
*dev
, struct device_attribute
*attr
,
711 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
712 int nr
= sensor_attr
->index
;
713 struct w83791d_data
*data
= w83791d_update_device(dev
);
714 return sprintf(buf
, "%u\n", data
->pwm
[nr
]);
717 static ssize_t
store_pwm(struct device
*dev
, struct device_attribute
*attr
,
718 const char *buf
, size_t count
)
720 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
721 struct i2c_client
*client
= to_i2c_client(dev
);
722 struct w83791d_data
*data
= i2c_get_clientdata(client
);
723 int nr
= sensor_attr
->index
;
726 if (kstrtoul(buf
, 10, &val
))
729 mutex_lock(&data
->update_lock
);
730 data
->pwm
[nr
] = clamp_val(val
, 0, 255);
731 w83791d_write(client
, W83791D_REG_PWM
[nr
], data
->pwm
[nr
]);
732 mutex_unlock(&data
->update_lock
);
736 static struct sensor_device_attribute sda_pwm
[] = {
737 SENSOR_ATTR(pwm1
, S_IWUSR
| S_IRUGO
,
738 show_pwm
, store_pwm
, 0),
739 SENSOR_ATTR(pwm2
, S_IWUSR
| S_IRUGO
,
740 show_pwm
, store_pwm
, 1),
741 SENSOR_ATTR(pwm3
, S_IWUSR
| S_IRUGO
,
742 show_pwm
, store_pwm
, 2),
743 SENSOR_ATTR(pwm4
, S_IWUSR
| S_IRUGO
,
744 show_pwm
, store_pwm
, 3),
745 SENSOR_ATTR(pwm5
, S_IWUSR
| S_IRUGO
,
746 show_pwm
, store_pwm
, 4),
749 static ssize_t
show_pwmenable(struct device
*dev
, struct device_attribute
*attr
,
752 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
753 int nr
= sensor_attr
->index
;
754 struct w83791d_data
*data
= w83791d_update_device(dev
);
755 return sprintf(buf
, "%u\n", data
->pwm_enable
[nr
] + 1);
758 static ssize_t
store_pwmenable(struct device
*dev
,
759 struct device_attribute
*attr
, const char *buf
, size_t count
)
761 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
762 struct i2c_client
*client
= to_i2c_client(dev
);
763 struct w83791d_data
*data
= i2c_get_clientdata(client
);
764 int nr
= sensor_attr
->index
;
771 int ret
= kstrtoul(buf
, 10, &val
);
773 if (ret
|| val
< 1 || val
> 3)
776 mutex_lock(&data
->update_lock
);
777 data
->pwm_enable
[nr
] = val
- 1;
796 reg_cfg_tmp
= w83791d_read(client
, W83791D_REG_FAN_CFG
[reg_idx
]);
797 reg_cfg_tmp
= (reg_cfg_tmp
& keep_mask
) |
798 data
->pwm_enable
[nr
] << val_shift
;
800 w83791d_write(client
, W83791D_REG_FAN_CFG
[reg_idx
], reg_cfg_tmp
);
801 mutex_unlock(&data
->update_lock
);
805 static struct sensor_device_attribute sda_pwmenable
[] = {
806 SENSOR_ATTR(pwm1_enable
, S_IWUSR
| S_IRUGO
,
807 show_pwmenable
, store_pwmenable
, 0),
808 SENSOR_ATTR(pwm2_enable
, S_IWUSR
| S_IRUGO
,
809 show_pwmenable
, store_pwmenable
, 1),
810 SENSOR_ATTR(pwm3_enable
, S_IWUSR
| S_IRUGO
,
811 show_pwmenable
, store_pwmenable
, 2),
814 /* For Smart Fan I / Thermal Cruise */
815 static ssize_t
show_temp_target(struct device
*dev
,
816 struct device_attribute
*attr
, char *buf
)
818 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
819 struct w83791d_data
*data
= w83791d_update_device(dev
);
820 int nr
= sensor_attr
->index
;
821 return sprintf(buf
, "%d\n", TEMP1_FROM_REG(data
->temp_target
[nr
]));
824 static ssize_t
store_temp_target(struct device
*dev
,
825 struct device_attribute
*attr
, const char *buf
, size_t count
)
827 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
828 struct i2c_client
*client
= to_i2c_client(dev
);
829 struct w83791d_data
*data
= i2c_get_clientdata(client
);
830 int nr
= sensor_attr
->index
;
834 if (kstrtol(buf
, 10, &val
))
837 mutex_lock(&data
->update_lock
);
838 data
->temp_target
[nr
] = TARGET_TEMP_TO_REG(val
);
839 target_mask
= w83791d_read(client
,
840 W83791D_REG_TEMP_TARGET
[nr
]) & 0x80;
841 w83791d_write(client
, W83791D_REG_TEMP_TARGET
[nr
],
842 data
->temp_target
[nr
] | target_mask
);
843 mutex_unlock(&data
->update_lock
);
847 static struct sensor_device_attribute sda_temp_target
[] = {
848 SENSOR_ATTR(temp1_target
, S_IWUSR
| S_IRUGO
,
849 show_temp_target
, store_temp_target
, 0),
850 SENSOR_ATTR(temp2_target
, S_IWUSR
| S_IRUGO
,
851 show_temp_target
, store_temp_target
, 1),
852 SENSOR_ATTR(temp3_target
, S_IWUSR
| S_IRUGO
,
853 show_temp_target
, store_temp_target
, 2),
856 static ssize_t
show_temp_tolerance(struct device
*dev
,
857 struct device_attribute
*attr
, char *buf
)
859 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
860 struct w83791d_data
*data
= w83791d_update_device(dev
);
861 int nr
= sensor_attr
->index
;
862 return sprintf(buf
, "%d\n", TEMP1_FROM_REG(data
->temp_tolerance
[nr
]));
865 static ssize_t
store_temp_tolerance(struct device
*dev
,
866 struct device_attribute
*attr
, const char *buf
, size_t count
)
868 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
869 struct i2c_client
*client
= to_i2c_client(dev
);
870 struct w83791d_data
*data
= i2c_get_clientdata(client
);
871 int nr
= sensor_attr
->index
;
878 if (kstrtoul(buf
, 10, &val
))
899 mutex_lock(&data
->update_lock
);
900 data
->temp_tolerance
[nr
] = TOL_TEMP_TO_REG(val
);
901 target_mask
= w83791d_read(client
,
902 W83791D_REG_TEMP_TOL
[reg_idx
]) & keep_mask
;
903 w83791d_write(client
, W83791D_REG_TEMP_TOL
[reg_idx
],
904 (data
->temp_tolerance
[nr
] << val_shift
) | target_mask
);
905 mutex_unlock(&data
->update_lock
);
909 static struct sensor_device_attribute sda_temp_tolerance
[] = {
910 SENSOR_ATTR(temp1_tolerance
, S_IWUSR
| S_IRUGO
,
911 show_temp_tolerance
, store_temp_tolerance
, 0),
912 SENSOR_ATTR(temp2_tolerance
, S_IWUSR
| S_IRUGO
,
913 show_temp_tolerance
, store_temp_tolerance
, 1),
914 SENSOR_ATTR(temp3_tolerance
, S_IWUSR
| S_IRUGO
,
915 show_temp_tolerance
, store_temp_tolerance
, 2),
918 /* read/write the temperature1, includes measured value and limits */
919 static ssize_t
show_temp1(struct device
*dev
, struct device_attribute
*devattr
,
922 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
923 struct w83791d_data
*data
= w83791d_update_device(dev
);
924 return sprintf(buf
, "%d\n", TEMP1_FROM_REG(data
->temp1
[attr
->index
]));
927 static ssize_t
store_temp1(struct device
*dev
, struct device_attribute
*devattr
,
928 const char *buf
, size_t count
)
930 struct sensor_device_attribute
*attr
= to_sensor_dev_attr(devattr
);
931 struct i2c_client
*client
= to_i2c_client(dev
);
932 struct w83791d_data
*data
= i2c_get_clientdata(client
);
933 int nr
= attr
->index
;
937 err
= kstrtol(buf
, 10, &val
);
941 mutex_lock(&data
->update_lock
);
942 data
->temp1
[nr
] = TEMP1_TO_REG(val
);
943 w83791d_write(client
, W83791D_REG_TEMP1
[nr
], data
->temp1
[nr
]);
944 mutex_unlock(&data
->update_lock
);
948 /* read/write temperature2-3, includes measured value and limits */
949 static ssize_t
show_temp23(struct device
*dev
, struct device_attribute
*devattr
,
952 struct sensor_device_attribute_2
*attr
= to_sensor_dev_attr_2(devattr
);
953 struct w83791d_data
*data
= w83791d_update_device(dev
);
955 int index
= attr
->index
;
956 return sprintf(buf
, "%d\n", TEMP23_FROM_REG(data
->temp_add
[nr
][index
]));
959 static ssize_t
store_temp23(struct device
*dev
,
960 struct device_attribute
*devattr
,
961 const char *buf
, size_t count
)
963 struct sensor_device_attribute_2
*attr
= to_sensor_dev_attr_2(devattr
);
964 struct i2c_client
*client
= to_i2c_client(dev
);
965 struct w83791d_data
*data
= i2c_get_clientdata(client
);
969 int index
= attr
->index
;
971 err
= kstrtol(buf
, 10, &val
);
975 mutex_lock(&data
->update_lock
);
976 data
->temp_add
[nr
][index
] = TEMP23_TO_REG(val
);
977 w83791d_write(client
, W83791D_REG_TEMP_ADD
[nr
][index
* 2],
978 data
->temp_add
[nr
][index
] >> 8);
979 w83791d_write(client
, W83791D_REG_TEMP_ADD
[nr
][index
* 2 + 1],
980 data
->temp_add
[nr
][index
] & 0x80);
981 mutex_unlock(&data
->update_lock
);
986 static struct sensor_device_attribute_2 sda_temp_input
[] = {
987 SENSOR_ATTR_2(temp1_input
, S_IRUGO
, show_temp1
, NULL
, 0, 0),
988 SENSOR_ATTR_2(temp2_input
, S_IRUGO
, show_temp23
, NULL
, 0, 0),
989 SENSOR_ATTR_2(temp3_input
, S_IRUGO
, show_temp23
, NULL
, 1, 0),
992 static struct sensor_device_attribute_2 sda_temp_max
[] = {
993 SENSOR_ATTR_2(temp1_max
, S_IRUGO
| S_IWUSR
,
994 show_temp1
, store_temp1
, 0, 1),
995 SENSOR_ATTR_2(temp2_max
, S_IRUGO
| S_IWUSR
,
996 show_temp23
, store_temp23
, 0, 1),
997 SENSOR_ATTR_2(temp3_max
, S_IRUGO
| S_IWUSR
,
998 show_temp23
, store_temp23
, 1, 1),
1001 static struct sensor_device_attribute_2 sda_temp_max_hyst
[] = {
1002 SENSOR_ATTR_2(temp1_max_hyst
, S_IRUGO
| S_IWUSR
,
1003 show_temp1
, store_temp1
, 0, 2),
1004 SENSOR_ATTR_2(temp2_max_hyst
, S_IRUGO
| S_IWUSR
,
1005 show_temp23
, store_temp23
, 0, 2),
1006 SENSOR_ATTR_2(temp3_max_hyst
, S_IRUGO
| S_IWUSR
,
1007 show_temp23
, store_temp23
, 1, 2),
1011 * Note: The bitmask for the beep enable/disable is different than
1012 * the bitmask for the alarm.
1014 static struct sensor_device_attribute sda_temp_beep
[] = {
1015 SENSOR_ATTR(temp1_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 4),
1016 SENSOR_ATTR(temp2_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 5),
1017 SENSOR_ATTR(temp3_beep
, S_IWUSR
| S_IRUGO
, show_beep
, store_beep
, 1),
1020 static struct sensor_device_attribute sda_temp_alarm
[] = {
1021 SENSOR_ATTR(temp1_alarm
, S_IRUGO
, show_alarm
, NULL
, 4),
1022 SENSOR_ATTR(temp2_alarm
, S_IRUGO
, show_alarm
, NULL
, 5),
1023 SENSOR_ATTR(temp3_alarm
, S_IRUGO
, show_alarm
, NULL
, 13),
1026 /* get realtime status of all sensors items: voltage, temp, fan */
1027 static ssize_t
alarms_show(struct device
*dev
, struct device_attribute
*attr
,
1030 struct w83791d_data
*data
= w83791d_update_device(dev
);
1031 return sprintf(buf
, "%u\n", data
->alarms
);
1034 static DEVICE_ATTR_RO(alarms
);
1038 #define GLOBAL_BEEP_ENABLE_SHIFT 15
1039 #define GLOBAL_BEEP_ENABLE_MASK (1 << GLOBAL_BEEP_ENABLE_SHIFT)
1041 static ssize_t
show_beep_enable(struct device
*dev
,
1042 struct device_attribute
*attr
, char *buf
)
1044 struct w83791d_data
*data
= w83791d_update_device(dev
);
1045 return sprintf(buf
, "%d\n", data
->beep_enable
);
1048 static ssize_t
show_beep_mask(struct device
*dev
,
1049 struct device_attribute
*attr
, char *buf
)
1051 struct w83791d_data
*data
= w83791d_update_device(dev
);
1052 return sprintf(buf
, "%d\n", BEEP_MASK_FROM_REG(data
->beep_mask
));
1056 static ssize_t
store_beep_mask(struct device
*dev
,
1057 struct device_attribute
*attr
,
1058 const char *buf
, size_t count
)
1060 struct i2c_client
*client
= to_i2c_client(dev
);
1061 struct w83791d_data
*data
= i2c_get_clientdata(client
);
1066 err
= kstrtol(buf
, 10, &val
);
1070 mutex_lock(&data
->update_lock
);
1073 * The beep_enable state overrides any enabling request from
1076 data
->beep_mask
= BEEP_MASK_TO_REG(val
) & ~GLOBAL_BEEP_ENABLE_MASK
;
1077 data
->beep_mask
|= (data
->beep_enable
<< GLOBAL_BEEP_ENABLE_SHIFT
);
1079 val
= data
->beep_mask
;
1081 for (i
= 0; i
< 3; i
++) {
1082 w83791d_write(client
, W83791D_REG_BEEP_CTRL
[i
], (val
& 0xff));
1086 mutex_unlock(&data
->update_lock
);
1091 static ssize_t
store_beep_enable(struct device
*dev
,
1092 struct device_attribute
*attr
,
1093 const char *buf
, size_t count
)
1095 struct i2c_client
*client
= to_i2c_client(dev
);
1096 struct w83791d_data
*data
= i2c_get_clientdata(client
);
1100 err
= kstrtol(buf
, 10, &val
);
1104 mutex_lock(&data
->update_lock
);
1106 data
->beep_enable
= val
? 1 : 0;
1108 /* Keep the full mask value in sync with the current enable */
1109 data
->beep_mask
&= ~GLOBAL_BEEP_ENABLE_MASK
;
1110 data
->beep_mask
|= (data
->beep_enable
<< GLOBAL_BEEP_ENABLE_SHIFT
);
1113 * The global control is in the second beep control register
1114 * so only need to update that register
1116 val
= (data
->beep_mask
>> 8) & 0xff;
1118 w83791d_write(client
, W83791D_REG_BEEP_CTRL
[1], val
);
1120 mutex_unlock(&data
->update_lock
);
1125 static struct sensor_device_attribute sda_beep_ctrl
[] = {
1126 SENSOR_ATTR(beep_enable
, S_IRUGO
| S_IWUSR
,
1127 show_beep_enable
, store_beep_enable
, 0),
1128 SENSOR_ATTR(beep_mask
, S_IRUGO
| S_IWUSR
,
1129 show_beep_mask
, store_beep_mask
, 1)
1132 /* cpu voltage regulation information */
1133 static ssize_t
cpu0_vid_show(struct device
*dev
,
1134 struct device_attribute
*attr
, char *buf
)
1136 struct w83791d_data
*data
= w83791d_update_device(dev
);
1137 return sprintf(buf
, "%d\n", vid_from_reg(data
->vid
, data
->vrm
));
1140 static DEVICE_ATTR_RO(cpu0_vid
);
1142 static ssize_t
vrm_show(struct device
*dev
, struct device_attribute
*attr
,
1145 struct w83791d_data
*data
= dev_get_drvdata(dev
);
1146 return sprintf(buf
, "%d\n", data
->vrm
);
1149 static ssize_t
vrm_store(struct device
*dev
, struct device_attribute
*attr
,
1150 const char *buf
, size_t count
)
1152 struct w83791d_data
*data
= dev_get_drvdata(dev
);
1157 * No lock needed as vrm is internal to the driver
1158 * (not read from a chip register) and so is not
1159 * updated in w83791d_update_device()
1162 err
= kstrtoul(buf
, 10, &val
);
1173 static DEVICE_ATTR_RW(vrm
);
1175 #define IN_UNIT_ATTRS(X) \
1176 &sda_in_input[X].dev_attr.attr, \
1177 &sda_in_min[X].dev_attr.attr, \
1178 &sda_in_max[X].dev_attr.attr, \
1179 &sda_in_beep[X].dev_attr.attr, \
1180 &sda_in_alarm[X].dev_attr.attr
1182 #define FAN_UNIT_ATTRS(X) \
1183 &sda_fan_input[X].dev_attr.attr, \
1184 &sda_fan_min[X].dev_attr.attr, \
1185 &sda_fan_div[X].dev_attr.attr, \
1186 &sda_fan_beep[X].dev_attr.attr, \
1187 &sda_fan_alarm[X].dev_attr.attr
1189 #define TEMP_UNIT_ATTRS(X) \
1190 &sda_temp_input[X].dev_attr.attr, \
1191 &sda_temp_max[X].dev_attr.attr, \
1192 &sda_temp_max_hyst[X].dev_attr.attr, \
1193 &sda_temp_beep[X].dev_attr.attr, \
1194 &sda_temp_alarm[X].dev_attr.attr
1196 static struct attribute
*w83791d_attributes
[] = {
1213 &dev_attr_alarms
.attr
,
1214 &sda_beep_ctrl
[0].dev_attr
.attr
,
1215 &sda_beep_ctrl
[1].dev_attr
.attr
,
1216 &dev_attr_cpu0_vid
.attr
,
1218 &sda_pwm
[0].dev_attr
.attr
,
1219 &sda_pwm
[1].dev_attr
.attr
,
1220 &sda_pwm
[2].dev_attr
.attr
,
1221 &sda_pwmenable
[0].dev_attr
.attr
,
1222 &sda_pwmenable
[1].dev_attr
.attr
,
1223 &sda_pwmenable
[2].dev_attr
.attr
,
1224 &sda_temp_target
[0].dev_attr
.attr
,
1225 &sda_temp_target
[1].dev_attr
.attr
,
1226 &sda_temp_target
[2].dev_attr
.attr
,
1227 &sda_temp_tolerance
[0].dev_attr
.attr
,
1228 &sda_temp_tolerance
[1].dev_attr
.attr
,
1229 &sda_temp_tolerance
[2].dev_attr
.attr
,
1233 static const struct attribute_group w83791d_group
= {
1234 .attrs
= w83791d_attributes
,
1238 * Separate group of attributes for fan/pwm 4-5. Their pins can also be
1239 * in use for GPIO in which case their sysfs-interface should not be made
1242 static struct attribute
*w83791d_attributes_fanpwm45
[] = {
1245 &sda_pwm
[3].dev_attr
.attr
,
1246 &sda_pwm
[4].dev_attr
.attr
,
1250 static const struct attribute_group w83791d_group_fanpwm45
= {
1251 .attrs
= w83791d_attributes_fanpwm45
,
1254 static int w83791d_detect_subclients(struct i2c_client
*client
)
1256 struct i2c_adapter
*adapter
= client
->adapter
;
1257 int address
= client
->addr
;
1261 id
= i2c_adapter_id(adapter
);
1262 if (force_subclients
[0] == id
&& force_subclients
[1] == address
) {
1263 for (i
= 2; i
<= 3; i
++) {
1264 if (force_subclients
[i
] < 0x48 ||
1265 force_subclients
[i
] > 0x4f) {
1266 dev_err(&client
->dev
,
1267 "invalid subclient "
1268 "address %d; must be 0x48-0x4f\n",
1269 force_subclients
[i
]);
1273 w83791d_write(client
, W83791D_REG_I2C_SUBADDR
,
1274 (force_subclients
[2] & 0x07) |
1275 ((force_subclients
[3] & 0x07) << 4));
1278 val
= w83791d_read(client
, W83791D_REG_I2C_SUBADDR
);
1280 if (!(val
& 0x88) && (val
& 0x7) == ((val
>> 4) & 0x7)) {
1281 dev_err(&client
->dev
,
1282 "duplicate addresses 0x%x, use force_subclient\n", 0x48 + (val
& 0x7));
1287 devm_i2c_new_dummy_device(&client
->dev
, adapter
, 0x48 + (val
& 0x7));
1290 devm_i2c_new_dummy_device(&client
->dev
, adapter
, 0x48 + ((val
>> 4) & 0x7));
1296 /* Return 0 if detection is successful, -ENODEV otherwise */
1297 static int w83791d_detect(struct i2c_client
*client
,
1298 struct i2c_board_info
*info
)
1300 struct i2c_adapter
*adapter
= client
->adapter
;
1302 unsigned short address
= client
->addr
;
1304 if (!i2c_check_functionality(adapter
, I2C_FUNC_SMBUS_BYTE_DATA
))
1307 if (w83791d_read(client
, W83791D_REG_CONFIG
) & 0x80)
1310 val1
= w83791d_read(client
, W83791D_REG_BANK
);
1311 val2
= w83791d_read(client
, W83791D_REG_CHIPMAN
);
1312 /* Check for Winbond ID if in bank 0 */
1313 if (!(val1
& 0x07)) {
1314 if ((!(val1
& 0x80) && val2
!= 0xa3) ||
1315 ((val1
& 0x80) && val2
!= 0x5c)) {
1320 * If Winbond chip, address of chip and W83791D_REG_I2C_ADDR
1323 if (w83791d_read(client
, W83791D_REG_I2C_ADDR
) != address
)
1326 /* We want bank 0 and Vendor ID high byte */
1327 val1
= w83791d_read(client
, W83791D_REG_BANK
) & 0x78;
1328 w83791d_write(client
, W83791D_REG_BANK
, val1
| 0x80);
1330 /* Verify it is a Winbond w83791d */
1331 val1
= w83791d_read(client
, W83791D_REG_WCHIPID
);
1332 val2
= w83791d_read(client
, W83791D_REG_CHIPMAN
);
1333 if (val1
!= 0x71 || val2
!= 0x5c)
1336 strscpy(info
->type
, "w83791d", I2C_NAME_SIZE
);
1341 static int w83791d_probe(struct i2c_client
*client
)
1343 struct w83791d_data
*data
;
1344 struct device
*dev
= &client
->dev
;
1350 val1
= w83791d_read(client
, W83791D_REG_DID_VID4
);
1351 dev_dbg(dev
, "Device ID version: %d.%d (0x%02x)\n",
1352 (val1
>> 5) & 0x07, (val1
>> 1) & 0x0f, val1
);
1355 data
= devm_kzalloc(&client
->dev
, sizeof(struct w83791d_data
),
1360 i2c_set_clientdata(client
, data
);
1361 mutex_init(&data
->update_lock
);
1363 err
= w83791d_detect_subclients(client
);
1367 /* Initialize the chip */
1368 w83791d_init_client(client
);
1371 * If the fan_div is changed, make sure there is a rational
1374 for (i
= 0; i
< NUMBER_OF_FANIN
; i
++)
1375 data
->fan_min
[i
] = w83791d_read(client
, W83791D_REG_FAN_MIN
[i
]);
1377 /* Register sysfs hooks */
1378 err
= sysfs_create_group(&client
->dev
.kobj
, &w83791d_group
);
1382 /* Check if pins of fan/pwm 4-5 are in use as GPIO */
1383 has_fanpwm45
= w83791d_read(client
, W83791D_REG_GPIO
) & 0x10;
1385 err
= sysfs_create_group(&client
->dev
.kobj
,
1386 &w83791d_group_fanpwm45
);
1391 /* Everything is ready, now register the working device */
1392 data
->hwmon_dev
= hwmon_device_register(dev
);
1393 if (IS_ERR(data
->hwmon_dev
)) {
1394 err
= PTR_ERR(data
->hwmon_dev
);
1402 sysfs_remove_group(&client
->dev
.kobj
, &w83791d_group_fanpwm45
);
1404 sysfs_remove_group(&client
->dev
.kobj
, &w83791d_group
);
1408 static void w83791d_remove(struct i2c_client
*client
)
1410 struct w83791d_data
*data
= i2c_get_clientdata(client
);
1412 hwmon_device_unregister(data
->hwmon_dev
);
1413 sysfs_remove_group(&client
->dev
.kobj
, &w83791d_group
);
1416 static void w83791d_init_client(struct i2c_client
*client
)
1418 struct w83791d_data
*data
= i2c_get_clientdata(client
);
1423 * The difference between reset and init is that reset
1424 * does a hard reset of the chip via index 0x40, bit 7,
1425 * but init simply forces certain registers to have "sane"
1426 * values. The hope is that the BIOS has done the right
1427 * thing (which is why the default is reset=0, init=0),
1428 * but if not, reset is the hard hammer and init
1429 * is the soft mallet both of which are trying to whack
1430 * things into place...
1431 * NOTE: The data sheet makes a distinction between
1432 * "power on defaults" and "reset by MR". As far as I can tell,
1433 * the hard reset puts everything into a power-on state so I'm
1434 * not sure what "reset by MR" means or how it can happen.
1436 if (reset
|| init
) {
1437 /* keep some BIOS settings when we... */
1438 old_beep
= w83791d_read(client
, W83791D_REG_BEEP_CONFIG
);
1441 /* ... reset the chip and ... */
1442 w83791d_write(client
, W83791D_REG_CONFIG
, 0x80);
1445 /* ... disable power-on abnormal beep */
1446 w83791d_write(client
, W83791D_REG_BEEP_CONFIG
, old_beep
| 0x80);
1448 /* disable the global beep (not done by hard reset) */
1449 tmp
= w83791d_read(client
, W83791D_REG_BEEP_CTRL
[1]);
1450 w83791d_write(client
, W83791D_REG_BEEP_CTRL
[1], tmp
& 0xef);
1453 /* Make sure monitoring is turned on for add-ons */
1454 tmp
= w83791d_read(client
, W83791D_REG_TEMP2_CONFIG
);
1456 w83791d_write(client
, W83791D_REG_TEMP2_CONFIG
,
1460 tmp
= w83791d_read(client
, W83791D_REG_TEMP3_CONFIG
);
1462 w83791d_write(client
, W83791D_REG_TEMP3_CONFIG
,
1466 /* Start monitoring */
1467 tmp
= w83791d_read(client
, W83791D_REG_CONFIG
) & 0xf7;
1468 w83791d_write(client
, W83791D_REG_CONFIG
, tmp
| 0x01);
1472 data
->vrm
= vid_which_vrm();
1475 static struct w83791d_data
*w83791d_update_device(struct device
*dev
)
1477 struct i2c_client
*client
= to_i2c_client(dev
);
1478 struct w83791d_data
*data
= i2c_get_clientdata(client
);
1480 u8 reg_array_tmp
[3];
1483 mutex_lock(&data
->update_lock
);
1485 if (time_after(jiffies
, data
->last_updated
+ (HZ
* 3))
1487 dev_dbg(dev
, "Starting w83791d device update\n");
1489 /* Update the voltages measured value and limits */
1490 for (i
= 0; i
< NUMBER_OF_VIN
; i
++) {
1491 data
->in
[i
] = w83791d_read(client
,
1493 data
->in_max
[i
] = w83791d_read(client
,
1494 W83791D_REG_IN_MAX
[i
]);
1495 data
->in_min
[i
] = w83791d_read(client
,
1496 W83791D_REG_IN_MIN
[i
]);
1499 /* Update the fan counts and limits */
1500 for (i
= 0; i
< NUMBER_OF_FANIN
; i
++) {
1501 /* Update the Fan measured value and limits */
1502 data
->fan
[i
] = w83791d_read(client
,
1503 W83791D_REG_FAN
[i
]);
1504 data
->fan_min
[i
] = w83791d_read(client
,
1505 W83791D_REG_FAN_MIN
[i
]);
1508 /* Update the fan divisor */
1509 for (i
= 0; i
< 3; i
++) {
1510 reg_array_tmp
[i
] = w83791d_read(client
,
1511 W83791D_REG_FAN_DIV
[i
]);
1513 data
->fan_div
[0] = (reg_array_tmp
[0] >> 4) & 0x03;
1514 data
->fan_div
[1] = (reg_array_tmp
[0] >> 6) & 0x03;
1515 data
->fan_div
[2] = (reg_array_tmp
[1] >> 6) & 0x03;
1516 data
->fan_div
[3] = reg_array_tmp
[2] & 0x07;
1517 data
->fan_div
[4] = (reg_array_tmp
[2] >> 4) & 0x07;
1520 * The fan divisor for fans 0-2 get bit 2 from
1521 * bits 5-7 respectively of vbat register
1523 vbat_reg
= w83791d_read(client
, W83791D_REG_VBAT
);
1524 for (i
= 0; i
< 3; i
++)
1525 data
->fan_div
[i
] |= (vbat_reg
>> (3 + i
)) & 0x04;
1527 /* Update PWM duty cycle */
1528 for (i
= 0; i
< NUMBER_OF_PWM
; i
++) {
1529 data
->pwm
[i
] = w83791d_read(client
,
1530 W83791D_REG_PWM
[i
]);
1533 /* Update PWM enable status */
1534 for (i
= 0; i
< 2; i
++) {
1535 reg_array_tmp
[i
] = w83791d_read(client
,
1536 W83791D_REG_FAN_CFG
[i
]);
1538 data
->pwm_enable
[0] = (reg_array_tmp
[0] >> 2) & 0x03;
1539 data
->pwm_enable
[1] = (reg_array_tmp
[0] >> 4) & 0x03;
1540 data
->pwm_enable
[2] = (reg_array_tmp
[1] >> 2) & 0x03;
1542 /* Update PWM target temperature */
1543 for (i
= 0; i
< 3; i
++) {
1544 data
->temp_target
[i
] = w83791d_read(client
,
1545 W83791D_REG_TEMP_TARGET
[i
]) & 0x7f;
1548 /* Update PWM temperature tolerance */
1549 for (i
= 0; i
< 2; i
++) {
1550 reg_array_tmp
[i
] = w83791d_read(client
,
1551 W83791D_REG_TEMP_TOL
[i
]);
1553 data
->temp_tolerance
[0] = reg_array_tmp
[0] & 0x0f;
1554 data
->temp_tolerance
[1] = (reg_array_tmp
[0] >> 4) & 0x0f;
1555 data
->temp_tolerance
[2] = reg_array_tmp
[1] & 0x0f;
1557 /* Update the first temperature sensor */
1558 for (i
= 0; i
< 3; i
++) {
1559 data
->temp1
[i
] = w83791d_read(client
,
1560 W83791D_REG_TEMP1
[i
]);
1563 /* Update the rest of the temperature sensors */
1564 for (i
= 0; i
< 2; i
++) {
1565 for (j
= 0; j
< 3; j
++) {
1566 data
->temp_add
[i
][j
] =
1567 (w83791d_read(client
,
1568 W83791D_REG_TEMP_ADD
[i
][j
* 2]) << 8) |
1569 w83791d_read(client
,
1570 W83791D_REG_TEMP_ADD
[i
][j
* 2 + 1]);
1574 /* Update the realtime status */
1576 w83791d_read(client
, W83791D_REG_ALARM1
) +
1577 (w83791d_read(client
, W83791D_REG_ALARM2
) << 8) +
1578 (w83791d_read(client
, W83791D_REG_ALARM3
) << 16);
1580 /* Update the beep configuration information */
1582 w83791d_read(client
, W83791D_REG_BEEP_CTRL
[0]) +
1583 (w83791d_read(client
, W83791D_REG_BEEP_CTRL
[1]) << 8) +
1584 (w83791d_read(client
, W83791D_REG_BEEP_CTRL
[2]) << 16);
1586 /* Extract global beep enable flag */
1588 (data
->beep_mask
>> GLOBAL_BEEP_ENABLE_SHIFT
) & 0x01;
1590 /* Update the cpu voltage information */
1591 i
= w83791d_read(client
, W83791D_REG_VID_FANDIV
);
1592 data
->vid
= i
& 0x0f;
1593 data
->vid
|= (w83791d_read(client
, W83791D_REG_DID_VID4
) & 0x01)
1596 data
->last_updated
= jiffies
;
1600 mutex_unlock(&data
->update_lock
);
1603 w83791d_print_debug(data
, dev
);
1610 static void w83791d_print_debug(struct w83791d_data
*data
, struct device
*dev
)
1614 dev_dbg(dev
, "======Start of w83791d debug values======\n");
1615 dev_dbg(dev
, "%d set of Voltages: ===>\n", NUMBER_OF_VIN
);
1616 for (i
= 0; i
< NUMBER_OF_VIN
; i
++) {
1617 dev_dbg(dev
, "vin[%d] is: 0x%02x\n", i
, data
->in
[i
]);
1618 dev_dbg(dev
, "vin[%d] min is: 0x%02x\n", i
, data
->in_min
[i
]);
1619 dev_dbg(dev
, "vin[%d] max is: 0x%02x\n", i
, data
->in_max
[i
]);
1621 dev_dbg(dev
, "%d set of Fan Counts/Divisors: ===>\n", NUMBER_OF_FANIN
);
1622 for (i
= 0; i
< NUMBER_OF_FANIN
; i
++) {
1623 dev_dbg(dev
, "fan[%d] is: 0x%02x\n", i
, data
->fan
[i
]);
1624 dev_dbg(dev
, "fan[%d] min is: 0x%02x\n", i
, data
->fan_min
[i
]);
1625 dev_dbg(dev
, "fan_div[%d] is: 0x%02x\n", i
, data
->fan_div
[i
]);
1629 * temperature math is signed, but only print out the
1632 dev_dbg(dev
, "%d set of Temperatures: ===>\n", NUMBER_OF_TEMPIN
);
1633 for (i
= 0; i
< 3; i
++)
1634 dev_dbg(dev
, "temp1[%d] is: 0x%02x\n", i
, (u8
) data
->temp1
[i
]);
1635 for (i
= 0; i
< 2; i
++) {
1636 for (j
= 0; j
< 3; j
++) {
1637 dev_dbg(dev
, "temp_add[%d][%d] is: 0x%04x\n", i
, j
,
1638 (u16
) data
->temp_add
[i
][j
]);
1642 dev_dbg(dev
, "Misc Information: ===>\n");
1643 dev_dbg(dev
, "alarm is: 0x%08x\n", data
->alarms
);
1644 dev_dbg(dev
, "beep_mask is: 0x%08x\n", data
->beep_mask
);
1645 dev_dbg(dev
, "beep_enable is: %d\n", data
->beep_enable
);
1646 dev_dbg(dev
, "vid is: 0x%02x\n", data
->vid
);
1647 dev_dbg(dev
, "vrm is: 0x%02x\n", data
->vrm
);
1648 dev_dbg(dev
, "=======End of w83791d debug values========\n");
1653 module_i2c_driver(w83791d_driver
);
1655 MODULE_AUTHOR("Charles Spirakis <bezaur@gmail.com>");
1656 MODULE_DESCRIPTION("W83791D driver");
1657 MODULE_LICENSE("GPL");