1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * w83627ehf - Driver for the hardware monitoring functionality of
4 * the Winbond W83627EHF Super-I/O chip
5 * Copyright (C) 2005-2012 Jean Delvare <jdelvare@suse.de>
6 * Copyright (C) 2006 Yuan Mu (Winbond),
7 * Rudolf Marek <r.marek@assembler.cz>
8 * David Hubbard <david.c.hubbard@gmail.com>
9 * Daniel J Blueman <daniel.blueman@gmail.com>
10 * Copyright (C) 2010 Sheng-Yuan Huang (Nuvoton) (PS00)
12 * Shamelessly ripped from the w83627hf driver
13 * Copyright (C) 2003 Mark Studebaker
15 * Thanks to Leon Moonen, Steve Cliffe and Grant Coady for their help
16 * in testing and debugging this driver.
18 * This driver also supports the W83627EHG, which is the lead-free
19 * version of the W83627EHF.
21 * Supports the following chips:
23 * Chip #vin #fan #pwm #temp chip IDs man ID
24 * w83627ehf 10 5 4 3 0x8850 0x88 0x5ca3
26 * w83627dhg 9 5 4 3 0xa020 0xc1 0x5ca3
27 * w83627dhg-p 9 5 4 3 0xb070 0xc1 0x5ca3
28 * w83627uhg 8 2 2 3 0xa230 0xc1 0x5ca3
29 * w83667hg 9 5 3 3 0xa510 0xc1 0x5ca3
30 * w83667hg-b 9 5 3 4 0xb350 0xc1 0x5ca3
33 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
35 #include <linux/module.h>
36 #include <linux/init.h>
37 #include <linux/slab.h>
38 #include <linux/jiffies.h>
39 #include <linux/platform_device.h>
40 #include <linux/hwmon.h>
41 #include <linux/hwmon-sysfs.h>
42 #include <linux/hwmon-vid.h>
43 #include <linux/err.h>
44 #include <linux/mutex.h>
45 #include <linux/acpi.h>
50 w83627ehf
, w83627dhg
, w83627dhg_p
, w83627uhg
,
54 /* used to set data->name = w83627ehf_device_names[data->sio_kind] */
55 static const char * const w83627ehf_device_names
[] = {
64 static unsigned short force_id
;
65 module_param(force_id
, ushort
, 0);
66 MODULE_PARM_DESC(force_id
, "Override the detected device ID");
68 #define DRVNAME "w83627ehf"
71 * Super-I/O constants and functions
74 #define W83627EHF_LD_HWM 0x0b
75 #define W83667HG_LD_VID 0x0d
77 #define SIO_REG_LDSEL 0x07 /* Logical device select */
78 #define SIO_REG_DEVID 0x20 /* Device ID (2 bytes) */
79 #define SIO_REG_EN_VRM10 0x2C /* GPIO3, GPIO4 selection */
80 #define SIO_REG_ENABLE 0x30 /* Logical device enable */
81 #define SIO_REG_ADDR 0x60 /* Logical device address (2 bytes) */
82 #define SIO_REG_VID_CTRL 0xF0 /* VID control */
83 #define SIO_REG_VID_DATA 0xF1 /* VID data */
85 #define SIO_W83627EHF_ID 0x8850
86 #define SIO_W83627EHG_ID 0x8860
87 #define SIO_W83627DHG_ID 0xa020
88 #define SIO_W83627DHG_P_ID 0xb070
89 #define SIO_W83627UHG_ID 0xa230
90 #define SIO_W83667HG_ID 0xa510
91 #define SIO_W83667HG_B_ID 0xb350
92 #define SIO_ID_MASK 0xFFF0
95 superio_outb(int ioreg
, int reg
, int val
)
102 superio_inb(int ioreg
, int reg
)
105 return inb(ioreg
+ 1);
109 superio_select(int ioreg
, int ld
)
111 outb(SIO_REG_LDSEL
, ioreg
);
116 superio_enter(int ioreg
)
118 if (!request_muxed_region(ioreg
, 2, DRVNAME
))
128 superio_exit(int ioreg
)
132 outb(0x02, ioreg
+ 1);
133 release_region(ioreg
, 2);
140 #define IOREGION_ALIGNMENT (~7)
141 #define IOREGION_OFFSET 5
142 #define IOREGION_LENGTH 2
143 #define ADDR_REG_OFFSET 0
144 #define DATA_REG_OFFSET 1
146 #define W83627EHF_REG_BANK 0x4E
147 #define W83627EHF_REG_CONFIG 0x40
150 * Not currently used:
151 * REG_MAN_ID has the value 0x5ca3 for all supported chips.
152 * REG_CHIP_ID == 0x88/0xa1/0xc1 depending on chip model.
153 * REG_MAN_ID is at port 0x4f
154 * REG_CHIP_ID is at port 0x58
157 static const u16 W83627EHF_REG_FAN
[] = { 0x28, 0x29, 0x2a, 0x3f, 0x553 };
158 static const u16 W83627EHF_REG_FAN_MIN
[] = { 0x3b, 0x3c, 0x3d, 0x3e, 0x55c };
160 /* The W83627EHF registers for nr=7,8,9 are in bank 5 */
161 #define W83627EHF_REG_IN_MAX(nr) ((nr < 7) ? (0x2b + (nr) * 2) : \
162 (0x554 + (((nr) - 7) * 2)))
163 #define W83627EHF_REG_IN_MIN(nr) ((nr < 7) ? (0x2c + (nr) * 2) : \
164 (0x555 + (((nr) - 7) * 2)))
165 #define W83627EHF_REG_IN(nr) ((nr < 7) ? (0x20 + (nr)) : \
168 static const u16 W83627EHF_REG_TEMP
[] = { 0x27, 0x150, 0x250, 0x7e };
169 static const u16 W83627EHF_REG_TEMP_HYST
[] = { 0x3a, 0x153, 0x253, 0 };
170 static const u16 W83627EHF_REG_TEMP_OVER
[] = { 0x39, 0x155, 0x255, 0 };
171 static const u16 W83627EHF_REG_TEMP_CONFIG
[] = { 0, 0x152, 0x252, 0 };
173 /* Fan clock dividers are spread over the following five registers */
174 #define W83627EHF_REG_FANDIV1 0x47
175 #define W83627EHF_REG_FANDIV2 0x4B
176 #define W83627EHF_REG_VBAT 0x5D
177 #define W83627EHF_REG_DIODE 0x59
178 #define W83627EHF_REG_SMI_OVT 0x4C
180 #define W83627EHF_REG_ALARM1 0x459
181 #define W83627EHF_REG_ALARM2 0x45A
182 #define W83627EHF_REG_ALARM3 0x45B
184 #define W83627EHF_REG_CASEOPEN_DET 0x42 /* SMI STATUS #2 */
185 #define W83627EHF_REG_CASEOPEN_CLR 0x46 /* SMI MASK #3 */
187 /* SmartFan registers */
188 #define W83627EHF_REG_FAN_STEPUP_TIME 0x0f
189 #define W83627EHF_REG_FAN_STEPDOWN_TIME 0x0e
191 /* DC or PWM output fan configuration */
192 static const u8 W83627EHF_REG_PWM_ENABLE
[] = {
193 0x04, /* SYS FAN0 output mode and PWM mode */
194 0x04, /* CPU FAN0 output mode and PWM mode */
195 0x12, /* AUX FAN mode */
196 0x62, /* CPU FAN1 mode */
199 static const u8 W83627EHF_PWM_MODE_SHIFT
[] = { 0, 1, 0, 6 };
200 static const u8 W83627EHF_PWM_ENABLE_SHIFT
[] = { 2, 4, 1, 4 };
202 /* FAN Duty Cycle, be used to control */
203 static const u16 W83627EHF_REG_PWM
[] = { 0x01, 0x03, 0x11, 0x61 };
204 static const u16 W83627EHF_REG_TARGET
[] = { 0x05, 0x06, 0x13, 0x63 };
205 static const u8 W83627EHF_REG_TOLERANCE
[] = { 0x07, 0x07, 0x14, 0x62 };
207 /* Advanced Fan control, some values are common for all fans */
208 static const u16 W83627EHF_REG_FAN_START_OUTPUT
[] = { 0x0a, 0x0b, 0x16, 0x65 };
209 static const u16 W83627EHF_REG_FAN_STOP_OUTPUT
[] = { 0x08, 0x09, 0x15, 0x64 };
210 static const u16 W83627EHF_REG_FAN_STOP_TIME
[] = { 0x0c, 0x0d, 0x17, 0x66 };
212 static const u16 W83627EHF_REG_FAN_MAX_OUTPUT_COMMON
[]
213 = { 0xff, 0x67, 0xff, 0x69 };
214 static const u16 W83627EHF_REG_FAN_STEP_OUTPUT_COMMON
[]
215 = { 0xff, 0x68, 0xff, 0x6a };
217 static const u16 W83627EHF_REG_FAN_MAX_OUTPUT_W83667_B
[] = { 0x67, 0x69, 0x6b };
218 static const u16 W83627EHF_REG_FAN_STEP_OUTPUT_W83667_B
[]
219 = { 0x68, 0x6a, 0x6c };
221 static const u16 W83627EHF_REG_TEMP_OFFSET
[] = { 0x454, 0x455, 0x456 };
223 static const char *const w83667hg_b_temp_label
[] = {
234 #define NUM_REG_TEMP ARRAY_SIZE(W83627EHF_REG_TEMP)
236 static int is_word_sized(u16 reg
)
238 return ((((reg
& 0xff00) == 0x100
239 || (reg
& 0xff00) == 0x200)
240 && ((reg
& 0x00ff) == 0x50
241 || (reg
& 0x00ff) == 0x53
242 || (reg
& 0x00ff) == 0x55))
243 || (reg
& 0xfff0) == 0x630
244 || reg
== 0x640 || reg
== 0x642
245 || ((reg
& 0xfff0) == 0x650
246 && (reg
& 0x000f) >= 0x06)
247 || reg
== 0x73 || reg
== 0x75 || reg
== 0x77
255 /* 1 is PWM mode, output in ms */
256 static inline unsigned int step_time_from_reg(u8 reg
, u8 mode
)
258 return mode
? 100 * reg
: 400 * reg
;
261 static inline u8
step_time_to_reg(unsigned int msec
, u8 mode
)
263 return clamp_val((mode
? (msec
+ 50) / 100 : (msec
+ 200) / 400),
267 static unsigned int fan_from_reg8(u16 reg
, unsigned int divreg
)
269 if (reg
== 0 || reg
== 255)
271 return 1350000U / (reg
<< divreg
);
274 static inline unsigned int
281 * Some of the voltage inputs have internal scaling, the tables below
282 * contain 8 (the ADC LSB in mV) * scaling factor * 100
284 static const u16 scale_in_common
[10] = {
285 800, 800, 1600, 1600, 800, 800, 800, 1600, 1600, 800
287 static const u16 scale_in_w83627uhg
[9] = {
288 800, 800, 3328, 3424, 800, 800, 0, 3328, 3400
291 static inline long in_from_reg(u8 reg
, u8 nr
, const u16
*scale_in
)
293 return DIV_ROUND_CLOSEST(reg
* scale_in
[nr
], 100);
296 static inline u8
in_to_reg(u32 val
, u8 nr
, const u16
*scale_in
)
298 return clamp_val(DIV_ROUND_CLOSEST(val
* 100, scale_in
[nr
]), 0, 255);
302 * Data structures and manipulation thereof
305 struct w83627ehf_data
{
306 int addr
; /* IO base of hw monitor block */
311 u16 reg_temp
[NUM_REG_TEMP
];
312 u16 reg_temp_over
[NUM_REG_TEMP
];
313 u16 reg_temp_hyst
[NUM_REG_TEMP
];
314 u16 reg_temp_config
[NUM_REG_TEMP
];
315 u8 temp_src
[NUM_REG_TEMP
];
316 const char * const *temp_label
;
318 const u16
*REG_FAN_MAX_OUTPUT
;
319 const u16
*REG_FAN_STEP_OUTPUT
;
322 struct mutex update_lock
;
323 bool valid
; /* true if following fields are valid */
324 unsigned long last_updated
; /* In jiffies */
326 /* Register values */
327 u8 bank
; /* current register bank */
328 u8 in_num
; /* number of in inputs we have */
329 u8 in
[10]; /* Register value */
330 u8 in_max
[10]; /* Register value */
331 u8 in_min
[10]; /* Register value */
335 u8 has_fan
; /* some fan inputs can be disabled */
336 u8 has_fan_min
; /* some fans don't have min register */
341 s16 temp_max_hyst
[9];
345 u8 pwm_mode
[4]; /* 0->DC variable voltage, 1->PWM variable duty cycle */
346 u8 pwm_enable
[4]; /* 1->manual
347 * 2->thermal cruise mode (also called SmartFan I)
348 * 3->fan speed cruise mode
349 * 4->variable thermal cruise (also called
351 * 5->enhanced variable thermal cruise (also called
354 u8 pwm_enable_orig
[4]; /* original value of pwm_enable */
355 u8 pwm_num
; /* number of pwm */
360 u8 fan_start_output
[4]; /* minimum fan speed when spinning up */
361 u8 fan_stop_output
[4]; /* minimum fan speed when spinning down */
362 u8 fan_stop_time
[4]; /* time at minimum before disabling fan */
363 u8 fan_max_output
[4]; /* maximum fan speed */
364 u8 fan_step_output
[4]; /* rate of change output value */
370 u16 have_temp_offset
;
375 /* Remember extra register values over suspend/resume */
381 struct w83627ehf_sio_data
{
387 * On older chips, only registers 0x50-0x5f are banked.
388 * On more recent chips, all registers are banked.
389 * Assume that is the case and set the bank number for each access.
390 * Cache the bank number so it only needs to be set if it changes.
392 static inline void w83627ehf_set_bank(struct w83627ehf_data
*data
, u16 reg
)
395 if (data
->bank
!= bank
) {
396 outb_p(W83627EHF_REG_BANK
, data
->addr
+ ADDR_REG_OFFSET
);
397 outb_p(bank
, data
->addr
+ DATA_REG_OFFSET
);
402 static u16
w83627ehf_read_value(struct w83627ehf_data
*data
, u16 reg
)
404 int res
, word_sized
= is_word_sized(reg
);
406 mutex_lock(&data
->lock
);
408 w83627ehf_set_bank(data
, reg
);
409 outb_p(reg
& 0xff, data
->addr
+ ADDR_REG_OFFSET
);
410 res
= inb_p(data
->addr
+ DATA_REG_OFFSET
);
412 outb_p((reg
& 0xff) + 1,
413 data
->addr
+ ADDR_REG_OFFSET
);
414 res
= (res
<< 8) + inb_p(data
->addr
+ DATA_REG_OFFSET
);
417 mutex_unlock(&data
->lock
);
421 static int w83627ehf_write_value(struct w83627ehf_data
*data
, u16 reg
,
424 int word_sized
= is_word_sized(reg
);
426 mutex_lock(&data
->lock
);
428 w83627ehf_set_bank(data
, reg
);
429 outb_p(reg
& 0xff, data
->addr
+ ADDR_REG_OFFSET
);
431 outb_p(value
>> 8, data
->addr
+ DATA_REG_OFFSET
);
432 outb_p((reg
& 0xff) + 1,
433 data
->addr
+ ADDR_REG_OFFSET
);
435 outb_p(value
& 0xff, data
->addr
+ DATA_REG_OFFSET
);
437 mutex_unlock(&data
->lock
);
441 /* We left-align 8-bit temperature values to make the code simpler */
442 static u16
w83627ehf_read_temp(struct w83627ehf_data
*data
, u16 reg
)
446 res
= w83627ehf_read_value(data
, reg
);
447 if (!is_word_sized(reg
))
453 static int w83627ehf_write_temp(struct w83627ehf_data
*data
, u16 reg
,
456 if (!is_word_sized(reg
))
458 return w83627ehf_write_value(data
, reg
, value
);
461 /* This function assumes that the caller holds data->update_lock */
462 static void w83627ehf_write_fan_div(struct w83627ehf_data
*data
, int nr
)
468 reg
= (w83627ehf_read_value(data
, W83627EHF_REG_FANDIV1
) & 0xcf)
469 | ((data
->fan_div
[0] & 0x03) << 4);
470 /* fan5 input control bit is write only, compute the value */
471 reg
|= (data
->has_fan
& (1 << 4)) ? 1 : 0;
472 w83627ehf_write_value(data
, W83627EHF_REG_FANDIV1
, reg
);
473 reg
= (w83627ehf_read_value(data
, W83627EHF_REG_VBAT
) & 0xdf)
474 | ((data
->fan_div
[0] & 0x04) << 3);
475 w83627ehf_write_value(data
, W83627EHF_REG_VBAT
, reg
);
478 reg
= (w83627ehf_read_value(data
, W83627EHF_REG_FANDIV1
) & 0x3f)
479 | ((data
->fan_div
[1] & 0x03) << 6);
480 /* fan5 input control bit is write only, compute the value */
481 reg
|= (data
->has_fan
& (1 << 4)) ? 1 : 0;
482 w83627ehf_write_value(data
, W83627EHF_REG_FANDIV1
, reg
);
483 reg
= (w83627ehf_read_value(data
, W83627EHF_REG_VBAT
) & 0xbf)
484 | ((data
->fan_div
[1] & 0x04) << 4);
485 w83627ehf_write_value(data
, W83627EHF_REG_VBAT
, reg
);
488 reg
= (w83627ehf_read_value(data
, W83627EHF_REG_FANDIV2
) & 0x3f)
489 | ((data
->fan_div
[2] & 0x03) << 6);
490 w83627ehf_write_value(data
, W83627EHF_REG_FANDIV2
, reg
);
491 reg
= (w83627ehf_read_value(data
, W83627EHF_REG_VBAT
) & 0x7f)
492 | ((data
->fan_div
[2] & 0x04) << 5);
493 w83627ehf_write_value(data
, W83627EHF_REG_VBAT
, reg
);
496 reg
= (w83627ehf_read_value(data
, W83627EHF_REG_DIODE
) & 0xfc)
497 | (data
->fan_div
[3] & 0x03);
498 w83627ehf_write_value(data
, W83627EHF_REG_DIODE
, reg
);
499 reg
= (w83627ehf_read_value(data
, W83627EHF_REG_SMI_OVT
) & 0x7f)
500 | ((data
->fan_div
[3] & 0x04) << 5);
501 w83627ehf_write_value(data
, W83627EHF_REG_SMI_OVT
, reg
);
504 reg
= (w83627ehf_read_value(data
, W83627EHF_REG_DIODE
) & 0x73)
505 | ((data
->fan_div
[4] & 0x03) << 2)
506 | ((data
->fan_div
[4] & 0x04) << 5);
507 w83627ehf_write_value(data
, W83627EHF_REG_DIODE
, reg
);
512 static void w83627ehf_update_fan_div(struct w83627ehf_data
*data
)
516 i
= w83627ehf_read_value(data
, W83627EHF_REG_FANDIV1
);
517 data
->fan_div
[0] = (i
>> 4) & 0x03;
518 data
->fan_div
[1] = (i
>> 6) & 0x03;
519 i
= w83627ehf_read_value(data
, W83627EHF_REG_FANDIV2
);
520 data
->fan_div
[2] = (i
>> 6) & 0x03;
521 i
= w83627ehf_read_value(data
, W83627EHF_REG_VBAT
);
522 data
->fan_div
[0] |= (i
>> 3) & 0x04;
523 data
->fan_div
[1] |= (i
>> 4) & 0x04;
524 data
->fan_div
[2] |= (i
>> 5) & 0x04;
525 if (data
->has_fan
& ((1 << 3) | (1 << 4))) {
526 i
= w83627ehf_read_value(data
, W83627EHF_REG_DIODE
);
527 data
->fan_div
[3] = i
& 0x03;
528 data
->fan_div
[4] = ((i
>> 2) & 0x03)
531 if (data
->has_fan
& (1 << 3)) {
532 i
= w83627ehf_read_value(data
, W83627EHF_REG_SMI_OVT
);
533 data
->fan_div
[3] |= (i
>> 5) & 0x04;
537 static void w83627ehf_update_pwm(struct w83627ehf_data
*data
)
540 int pwmcfg
= 0, tolerance
= 0; /* shut up the compiler */
542 for (i
= 0; i
< data
->pwm_num
; i
++) {
543 if (!(data
->has_fan
& (1 << i
)))
546 /* pwmcfg, tolerance mapped for i=0, i=1 to same reg */
548 pwmcfg
= w83627ehf_read_value(data
,
549 W83627EHF_REG_PWM_ENABLE
[i
]);
550 tolerance
= w83627ehf_read_value(data
,
551 W83627EHF_REG_TOLERANCE
[i
]);
554 ((pwmcfg
>> W83627EHF_PWM_MODE_SHIFT
[i
]) & 1) ? 0 : 1;
555 data
->pwm_enable
[i
] = ((pwmcfg
>> W83627EHF_PWM_ENABLE_SHIFT
[i
])
557 data
->pwm
[i
] = w83627ehf_read_value(data
, W83627EHF_REG_PWM
[i
]);
559 data
->tolerance
[i
] = (tolerance
>> (i
== 1 ? 4 : 0)) & 0x0f;
563 static struct w83627ehf_data
*w83627ehf_update_device(struct device
*dev
)
565 struct w83627ehf_data
*data
= dev_get_drvdata(dev
);
568 mutex_lock(&data
->update_lock
);
570 if (time_after(jiffies
, data
->last_updated
+ HZ
+ HZ
/2)
572 /* Fan clock dividers */
573 w83627ehf_update_fan_div(data
);
575 /* Measured voltages and limits */
576 for (i
= 0; i
< data
->in_num
; i
++) {
577 if ((i
== 6) && data
->in6_skip
)
580 data
->in
[i
] = w83627ehf_read_value(data
,
581 W83627EHF_REG_IN(i
));
582 data
->in_min
[i
] = w83627ehf_read_value(data
,
583 W83627EHF_REG_IN_MIN(i
));
584 data
->in_max
[i
] = w83627ehf_read_value(data
,
585 W83627EHF_REG_IN_MAX(i
));
588 /* Measured fan speeds and limits */
589 for (i
= 0; i
< 5; i
++) {
592 if (!(data
->has_fan
& (1 << i
)))
595 reg
= w83627ehf_read_value(data
, W83627EHF_REG_FAN
[i
]);
596 data
->rpm
[i
] = fan_from_reg8(reg
, data
->fan_div
[i
]);
598 if (data
->has_fan_min
& (1 << i
))
599 data
->fan_min
[i
] = w83627ehf_read_value(data
,
600 W83627EHF_REG_FAN_MIN
[i
]);
603 * If we failed to measure the fan speed and clock
604 * divider can be increased, let's try that for next
607 if (reg
>= 0xff && data
->fan_div
[i
] < 0x07) {
609 "Increasing fan%d clock divider from %u to %u\n",
610 i
+ 1, div_from_reg(data
->fan_div
[i
]),
611 div_from_reg(data
->fan_div
[i
] + 1));
613 w83627ehf_write_fan_div(data
, i
);
614 /* Preserve min limit if possible */
615 if ((data
->has_fan_min
& (1 << i
))
616 && data
->fan_min
[i
] >= 2
617 && data
->fan_min
[i
] != 255)
618 w83627ehf_write_value(data
,
619 W83627EHF_REG_FAN_MIN
[i
],
620 (data
->fan_min
[i
] /= 2));
624 w83627ehf_update_pwm(data
);
626 for (i
= 0; i
< data
->pwm_num
; i
++) {
627 if (!(data
->has_fan
& (1 << i
)))
630 data
->fan_start_output
[i
] =
631 w83627ehf_read_value(data
,
632 W83627EHF_REG_FAN_START_OUTPUT
[i
]);
633 data
->fan_stop_output
[i
] =
634 w83627ehf_read_value(data
,
635 W83627EHF_REG_FAN_STOP_OUTPUT
[i
]);
636 data
->fan_stop_time
[i
] =
637 w83627ehf_read_value(data
,
638 W83627EHF_REG_FAN_STOP_TIME
[i
]);
640 if (data
->REG_FAN_MAX_OUTPUT
&&
641 data
->REG_FAN_MAX_OUTPUT
[i
] != 0xff)
642 data
->fan_max_output
[i
] =
643 w83627ehf_read_value(data
,
644 data
->REG_FAN_MAX_OUTPUT
[i
]);
646 if (data
->REG_FAN_STEP_OUTPUT
&&
647 data
->REG_FAN_STEP_OUTPUT
[i
] != 0xff)
648 data
->fan_step_output
[i
] =
649 w83627ehf_read_value(data
,
650 data
->REG_FAN_STEP_OUTPUT
[i
]);
652 data
->target_temp
[i
] =
653 w83627ehf_read_value(data
,
654 W83627EHF_REG_TARGET
[i
]) &
655 (data
->pwm_mode
[i
] == 1 ? 0x7f : 0xff);
658 /* Measured temperatures and limits */
659 for (i
= 0; i
< NUM_REG_TEMP
; i
++) {
660 if (!(data
->have_temp
& (1 << i
)))
662 data
->temp
[i
] = w83627ehf_read_temp(data
,
664 if (data
->reg_temp_over
[i
])
666 = w83627ehf_read_temp(data
,
667 data
->reg_temp_over
[i
]);
668 if (data
->reg_temp_hyst
[i
])
669 data
->temp_max_hyst
[i
]
670 = w83627ehf_read_temp(data
,
671 data
->reg_temp_hyst
[i
]);
674 if (data
->have_temp_offset
& (1 << i
))
676 = w83627ehf_read_value(data
,
677 W83627EHF_REG_TEMP_OFFSET
[i
]);
680 data
->alarms
= w83627ehf_read_value(data
,
681 W83627EHF_REG_ALARM1
) |
682 (w83627ehf_read_value(data
,
683 W83627EHF_REG_ALARM2
) << 8) |
684 (w83627ehf_read_value(data
,
685 W83627EHF_REG_ALARM3
) << 16);
687 data
->caseopen
= w83627ehf_read_value(data
,
688 W83627EHF_REG_CASEOPEN_DET
);
690 data
->last_updated
= jiffies
;
694 mutex_unlock(&data
->update_lock
);
698 #define store_in_reg(REG, reg) \
700 store_in_##reg(struct device *dev, struct w83627ehf_data *data, int channel, \
705 mutex_lock(&data->update_lock); \
706 data->in_##reg[channel] = in_to_reg(val, channel, data->scale_in); \
707 w83627ehf_write_value(data, W83627EHF_REG_IN_##REG(channel), \
708 data->in_##reg[channel]); \
709 mutex_unlock(&data->update_lock); \
713 store_in_reg(MIN
, min
)
714 store_in_reg(MAX
, max
)
717 store_fan_min(struct device
*dev
, struct w83627ehf_data
*data
, int channel
,
726 mutex_lock(&data
->update_lock
);
728 /* No min limit, alarm disabled */
729 data
->fan_min
[channel
] = 255;
730 new_div
= data
->fan_div
[channel
]; /* No change */
731 dev_info(dev
, "fan%u low limit and alarm disabled\n",
733 } else if ((reg
= 1350000U / val
) >= 128 * 255) {
735 * Speed below this value cannot possibly be represented,
736 * even with the highest divider (128)
738 data
->fan_min
[channel
] = 254;
739 new_div
= 7; /* 128 == (1 << 7) */
741 "fan%u low limit %lu below minimum %u, set to minimum\n",
742 channel
+ 1, val
, fan_from_reg8(254, 7));
745 * Speed above this value cannot possibly be represented,
746 * even with the lowest divider (1)
748 data
->fan_min
[channel
] = 1;
749 new_div
= 0; /* 1 == (1 << 0) */
751 "fan%u low limit %lu above maximum %u, set to maximum\n",
752 channel
+ 1, val
, fan_from_reg8(1, 0));
755 * Automatically pick the best divider, i.e. the one such
756 * that the min limit will correspond to a register value
757 * in the 96..192 range
760 while (reg
> 192 && new_div
< 7) {
764 data
->fan_min
[channel
] = reg
;
768 * Write both the fan clock divider (if it changed) and the new
769 * fan min (unconditionally)
771 if (new_div
!= data
->fan_div
[channel
]) {
772 dev_dbg(dev
, "fan%u clock divider changed from %u to %u\n",
773 channel
+ 1, div_from_reg(data
->fan_div
[channel
]),
774 div_from_reg(new_div
));
775 data
->fan_div
[channel
] = new_div
;
776 w83627ehf_write_fan_div(data
, channel
);
777 /* Give the chip time to sample a new speed value */
778 data
->last_updated
= jiffies
;
781 w83627ehf_write_value(data
, W83627EHF_REG_FAN_MIN
[channel
],
782 data
->fan_min
[channel
]);
783 mutex_unlock(&data
->update_lock
);
788 #define store_temp_reg(addr, reg) \
790 store_##reg(struct device *dev, struct w83627ehf_data *data, int channel, \
793 mutex_lock(&data->update_lock); \
794 data->reg[channel] = LM75_TEMP_TO_REG(val); \
795 w83627ehf_write_temp(data, data->addr[channel], data->reg[channel]); \
796 mutex_unlock(&data->update_lock); \
799 store_temp_reg(reg_temp_over
, temp_max
);
800 store_temp_reg(reg_temp_hyst
, temp_max_hyst
);
803 store_temp_offset(struct device
*dev
, struct w83627ehf_data
*data
, int channel
,
806 val
= clamp_val(DIV_ROUND_CLOSEST(val
, 1000), -128, 127);
808 mutex_lock(&data
->update_lock
);
809 data
->temp_offset
[channel
] = val
;
810 w83627ehf_write_value(data
, W83627EHF_REG_TEMP_OFFSET
[channel
], val
);
811 mutex_unlock(&data
->update_lock
);
816 store_pwm_mode(struct device
*dev
, struct w83627ehf_data
*data
, int channel
,
821 if (val
< 0 || val
> 1)
824 mutex_lock(&data
->update_lock
);
825 reg
= w83627ehf_read_value(data
, W83627EHF_REG_PWM_ENABLE
[channel
]);
826 data
->pwm_mode
[channel
] = val
;
827 reg
&= ~(1 << W83627EHF_PWM_MODE_SHIFT
[channel
]);
829 reg
|= 1 << W83627EHF_PWM_MODE_SHIFT
[channel
];
830 w83627ehf_write_value(data
, W83627EHF_REG_PWM_ENABLE
[channel
], reg
);
831 mutex_unlock(&data
->update_lock
);
836 store_pwm(struct device
*dev
, struct w83627ehf_data
*data
, int channel
,
839 val
= clamp_val(val
, 0, 255);
841 mutex_lock(&data
->update_lock
);
842 data
->pwm
[channel
] = val
;
843 w83627ehf_write_value(data
, W83627EHF_REG_PWM
[channel
], val
);
844 mutex_unlock(&data
->update_lock
);
849 store_pwm_enable(struct device
*dev
, struct w83627ehf_data
*data
, int channel
,
854 if (!val
|| val
< 0 ||
855 (val
> 4 && val
!= data
->pwm_enable_orig
[channel
]))
858 mutex_lock(&data
->update_lock
);
859 data
->pwm_enable
[channel
] = val
;
860 reg
= w83627ehf_read_value(data
,
861 W83627EHF_REG_PWM_ENABLE
[channel
]);
862 reg
&= ~(0x03 << W83627EHF_PWM_ENABLE_SHIFT
[channel
]);
863 reg
|= (val
- 1) << W83627EHF_PWM_ENABLE_SHIFT
[channel
];
864 w83627ehf_write_value(data
, W83627EHF_REG_PWM_ENABLE
[channel
],
866 mutex_unlock(&data
->update_lock
);
870 #define show_tol_temp(reg) \
871 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
874 struct w83627ehf_data *data = w83627ehf_update_device(dev->parent); \
875 struct sensor_device_attribute *sensor_attr = \
876 to_sensor_dev_attr(attr); \
877 int nr = sensor_attr->index; \
878 return sprintf(buf, "%d\n", data->reg[nr] * 1000); \
881 show_tol_temp(tolerance
)
882 show_tol_temp(target_temp
)
885 store_target_temp(struct device
*dev
, struct device_attribute
*attr
,
886 const char *buf
, size_t count
)
888 struct w83627ehf_data
*data
= dev_get_drvdata(dev
);
889 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
890 int nr
= sensor_attr
->index
;
894 err
= kstrtol(buf
, 10, &val
);
898 val
= DIV_ROUND_CLOSEST(clamp_val(val
, 0, 127000), 1000);
900 mutex_lock(&data
->update_lock
);
901 data
->target_temp
[nr
] = val
;
902 w83627ehf_write_value(data
, W83627EHF_REG_TARGET
[nr
], val
);
903 mutex_unlock(&data
->update_lock
);
908 store_tolerance(struct device
*dev
, struct device_attribute
*attr
,
909 const char *buf
, size_t count
)
911 struct w83627ehf_data
*data
= dev_get_drvdata(dev
);
912 struct sensor_device_attribute
*sensor_attr
= to_sensor_dev_attr(attr
);
913 int nr
= sensor_attr
->index
;
918 err
= kstrtol(buf
, 10, &val
);
922 /* Limit the temp to 0C - 15C */
923 val
= DIV_ROUND_CLOSEST(clamp_val(val
, 0, 15000), 1000);
925 mutex_lock(&data
->update_lock
);
926 reg
= w83627ehf_read_value(data
, W83627EHF_REG_TOLERANCE
[nr
]);
928 reg
= (reg
& 0x0f) | (val
<< 4);
930 reg
= (reg
& 0xf0) | val
;
931 w83627ehf_write_value(data
, W83627EHF_REG_TOLERANCE
[nr
], reg
);
932 data
->tolerance
[nr
] = val
;
933 mutex_unlock(&data
->update_lock
);
937 static SENSOR_DEVICE_ATTR(pwm1_target
, 0644, show_target_temp
,
938 store_target_temp
, 0);
939 static SENSOR_DEVICE_ATTR(pwm2_target
, 0644, show_target_temp
,
940 store_target_temp
, 1);
941 static SENSOR_DEVICE_ATTR(pwm3_target
, 0644, show_target_temp
,
942 store_target_temp
, 2);
943 static SENSOR_DEVICE_ATTR(pwm4_target
, 0644, show_target_temp
,
944 store_target_temp
, 3);
946 static SENSOR_DEVICE_ATTR(pwm1_tolerance
, 0644, show_tolerance
,
948 static SENSOR_DEVICE_ATTR(pwm2_tolerance
, 0644, show_tolerance
,
950 static SENSOR_DEVICE_ATTR(pwm3_tolerance
, 0644, show_tolerance
,
952 static SENSOR_DEVICE_ATTR(pwm4_tolerance
, 0644, show_tolerance
,
955 /* Smart Fan registers */
957 #define fan_functions(reg, REG) \
958 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
961 struct w83627ehf_data *data = w83627ehf_update_device(dev->parent); \
962 struct sensor_device_attribute *sensor_attr = \
963 to_sensor_dev_attr(attr); \
964 int nr = sensor_attr->index; \
965 return sprintf(buf, "%d\n", data->reg[nr]); \
968 store_##reg(struct device *dev, struct device_attribute *attr, \
969 const char *buf, size_t count) \
971 struct w83627ehf_data *data = dev_get_drvdata(dev); \
972 struct sensor_device_attribute *sensor_attr = \
973 to_sensor_dev_attr(attr); \
974 int nr = sensor_attr->index; \
977 err = kstrtoul(buf, 10, &val); \
980 val = clamp_val(val, 1, 255); \
981 mutex_lock(&data->update_lock); \
982 data->reg[nr] = val; \
983 w83627ehf_write_value(data, REG[nr], val); \
984 mutex_unlock(&data->update_lock); \
988 fan_functions(fan_start_output
, W83627EHF_REG_FAN_START_OUTPUT
)
989 fan_functions(fan_stop_output
, W83627EHF_REG_FAN_STOP_OUTPUT
)
990 fan_functions(fan_max_output
, data
->REG_FAN_MAX_OUTPUT
)
991 fan_functions(fan_step_output
, data
->REG_FAN_STEP_OUTPUT
)
993 #define fan_time_functions(reg, REG) \
994 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
997 struct w83627ehf_data *data = w83627ehf_update_device(dev->parent); \
998 struct sensor_device_attribute *sensor_attr = \
999 to_sensor_dev_attr(attr); \
1000 int nr = sensor_attr->index; \
1001 return sprintf(buf, "%d\n", \
1002 step_time_from_reg(data->reg[nr], \
1003 data->pwm_mode[nr])); \
1007 store_##reg(struct device *dev, struct device_attribute *attr, \
1008 const char *buf, size_t count) \
1010 struct w83627ehf_data *data = dev_get_drvdata(dev); \
1011 struct sensor_device_attribute *sensor_attr = \
1012 to_sensor_dev_attr(attr); \
1013 int nr = sensor_attr->index; \
1014 unsigned long val; \
1016 err = kstrtoul(buf, 10, &val); \
1019 val = step_time_to_reg(val, data->pwm_mode[nr]); \
1020 mutex_lock(&data->update_lock); \
1021 data->reg[nr] = val; \
1022 w83627ehf_write_value(data, REG[nr], val); \
1023 mutex_unlock(&data->update_lock); \
1027 fan_time_functions(fan_stop_time, W83627EHF_REG_FAN_STOP_TIME)
1029 static SENSOR_DEVICE_ATTR(pwm4_stop_time
, 0644, show_fan_stop_time
,
1030 store_fan_stop_time
, 3);
1031 static SENSOR_DEVICE_ATTR(pwm4_start_output
, 0644, show_fan_start_output
,
1032 store_fan_start_output
, 3);
1033 static SENSOR_DEVICE_ATTR(pwm4_stop_output
, 0644, show_fan_stop_output
,
1034 store_fan_stop_output
, 3);
1035 static SENSOR_DEVICE_ATTR(pwm4_max_output
, 0644, show_fan_max_output
,
1036 store_fan_max_output
, 3);
1037 static SENSOR_DEVICE_ATTR(pwm4_step_output
, 0644, show_fan_step_output
,
1038 store_fan_step_output
, 3);
1040 static SENSOR_DEVICE_ATTR(pwm3_stop_time
, 0644, show_fan_stop_time
,
1041 store_fan_stop_time
, 2);
1042 static SENSOR_DEVICE_ATTR(pwm3_start_output
, 0644, show_fan_start_output
,
1043 store_fan_start_output
, 2);
1044 static SENSOR_DEVICE_ATTR(pwm3_stop_output
, 0644, show_fan_stop_output
,
1045 store_fan_stop_output
, 2);
1047 static SENSOR_DEVICE_ATTR(pwm1_stop_time
, 0644, show_fan_stop_time
,
1048 store_fan_stop_time
, 0);
1049 static SENSOR_DEVICE_ATTR(pwm2_stop_time
, 0644, show_fan_stop_time
,
1050 store_fan_stop_time
, 1);
1051 static SENSOR_DEVICE_ATTR(pwm1_start_output
, 0644, show_fan_start_output
,
1052 store_fan_start_output
, 0);
1053 static SENSOR_DEVICE_ATTR(pwm2_start_output
, 0644, show_fan_start_output
,
1054 store_fan_start_output
, 1);
1055 static SENSOR_DEVICE_ATTR(pwm1_stop_output
, 0644, show_fan_stop_output
,
1056 store_fan_stop_output
, 0);
1057 static SENSOR_DEVICE_ATTR(pwm2_stop_output
, 0644, show_fan_stop_output
,
1058 store_fan_stop_output
, 1);
1062 * pwm1 and pwm3 don't support max and step settings on all chips.
1063 * Need to check support while generating/removing attribute files.
1065 static SENSOR_DEVICE_ATTR(pwm1_max_output
, 0644, show_fan_max_output
,
1066 store_fan_max_output
, 0);
1067 static SENSOR_DEVICE_ATTR(pwm1_step_output
, 0644, show_fan_step_output
,
1068 store_fan_step_output
, 0);
1069 static SENSOR_DEVICE_ATTR(pwm2_max_output
, 0644, show_fan_max_output
,
1070 store_fan_max_output
, 1);
1071 static SENSOR_DEVICE_ATTR(pwm2_step_output
, 0644, show_fan_step_output
,
1072 store_fan_step_output
, 1);
1073 static SENSOR_DEVICE_ATTR(pwm3_max_output
, 0644, show_fan_max_output
,
1074 store_fan_max_output
, 2);
1075 static SENSOR_DEVICE_ATTR(pwm3_step_output
, 0644, show_fan_step_output
,
1076 store_fan_step_output
, 2);
1079 cpu0_vid_show(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
1081 struct w83627ehf_data
*data
= dev_get_drvdata(dev
);
1082 return sprintf(buf
, "%d\n", vid_from_reg(data
->vid
, data
->vrm
));
1084 static DEVICE_ATTR_RO(cpu0_vid
);
1087 /* Case open detection */
1089 clear_caseopen(struct device
*dev
, struct w83627ehf_data
*data
, int channel
,
1092 const u16 mask
= 0x80;
1095 if (val
!= 0 || channel
!= 0)
1098 mutex_lock(&data
->update_lock
);
1099 reg
= w83627ehf_read_value(data
, W83627EHF_REG_CASEOPEN_CLR
);
1100 w83627ehf_write_value(data
, W83627EHF_REG_CASEOPEN_CLR
, reg
| mask
);
1101 w83627ehf_write_value(data
, W83627EHF_REG_CASEOPEN_CLR
, reg
& ~mask
);
1102 data
->valid
= false; /* Force cache refresh */
1103 mutex_unlock(&data
->update_lock
);
1108 static umode_t
w83627ehf_attrs_visible(struct kobject
*kobj
,
1109 struct attribute
*a
, int n
)
1111 struct device
*dev
= kobj_to_dev(kobj
);
1112 struct w83627ehf_data
*data
= dev_get_drvdata(dev
);
1113 struct device_attribute
*devattr
;
1114 struct sensor_device_attribute
*sda
;
1116 devattr
= container_of(a
, struct device_attribute
, attr
);
1119 if (devattr
->show
== cpu0_vid_show
&& data
->have_vid
)
1122 sda
= (struct sensor_device_attribute
*)devattr
;
1124 if (sda
->index
< 2 &&
1125 (devattr
->show
== show_fan_stop_time
||
1126 devattr
->show
== show_fan_start_output
||
1127 devattr
->show
== show_fan_stop_output
))
1130 if (sda
->index
< 3 &&
1131 (devattr
->show
== show_fan_max_output
||
1132 devattr
->show
== show_fan_step_output
) &&
1133 data
->REG_FAN_STEP_OUTPUT
&&
1134 data
->REG_FAN_STEP_OUTPUT
[sda
->index
] != 0xff)
1137 /* if fan3 and fan4 are enabled create the files for them */
1138 if (sda
->index
== 2 &&
1139 (data
->has_fan
& (1 << 2)) && data
->pwm_num
>= 3 &&
1140 (devattr
->show
== show_fan_stop_time
||
1141 devattr
->show
== show_fan_start_output
||
1142 devattr
->show
== show_fan_stop_output
))
1145 if (sda
->index
== 3 &&
1146 (data
->has_fan
& (1 << 3)) && data
->pwm_num
>= 4 &&
1147 (devattr
->show
== show_fan_stop_time
||
1148 devattr
->show
== show_fan_start_output
||
1149 devattr
->show
== show_fan_stop_output
||
1150 devattr
->show
== show_fan_max_output
||
1151 devattr
->show
== show_fan_step_output
))
1154 if ((devattr
->show
== show_target_temp
||
1155 devattr
->show
== show_tolerance
) &&
1156 (data
->has_fan
& (1 << sda
->index
)) &&
1157 sda
->index
< data
->pwm_num
)
1163 /* These groups handle non-standard attributes used in this device */
1164 static struct attribute
*w83627ehf_attrs
[] = {
1166 &sensor_dev_attr_pwm1_stop_time
.dev_attr
.attr
,
1167 &sensor_dev_attr_pwm1_start_output
.dev_attr
.attr
,
1168 &sensor_dev_attr_pwm1_stop_output
.dev_attr
.attr
,
1169 &sensor_dev_attr_pwm1_max_output
.dev_attr
.attr
,
1170 &sensor_dev_attr_pwm1_step_output
.dev_attr
.attr
,
1171 &sensor_dev_attr_pwm1_target
.dev_attr
.attr
,
1172 &sensor_dev_attr_pwm1_tolerance
.dev_attr
.attr
,
1174 &sensor_dev_attr_pwm2_stop_time
.dev_attr
.attr
,
1175 &sensor_dev_attr_pwm2_start_output
.dev_attr
.attr
,
1176 &sensor_dev_attr_pwm2_stop_output
.dev_attr
.attr
,
1177 &sensor_dev_attr_pwm2_max_output
.dev_attr
.attr
,
1178 &sensor_dev_attr_pwm2_step_output
.dev_attr
.attr
,
1179 &sensor_dev_attr_pwm2_target
.dev_attr
.attr
,
1180 &sensor_dev_attr_pwm2_tolerance
.dev_attr
.attr
,
1182 &sensor_dev_attr_pwm3_stop_time
.dev_attr
.attr
,
1183 &sensor_dev_attr_pwm3_start_output
.dev_attr
.attr
,
1184 &sensor_dev_attr_pwm3_stop_output
.dev_attr
.attr
,
1185 &sensor_dev_attr_pwm3_max_output
.dev_attr
.attr
,
1186 &sensor_dev_attr_pwm3_step_output
.dev_attr
.attr
,
1187 &sensor_dev_attr_pwm3_target
.dev_attr
.attr
,
1188 &sensor_dev_attr_pwm3_tolerance
.dev_attr
.attr
,
1190 &sensor_dev_attr_pwm4_stop_time
.dev_attr
.attr
,
1191 &sensor_dev_attr_pwm4_start_output
.dev_attr
.attr
,
1192 &sensor_dev_attr_pwm4_stop_output
.dev_attr
.attr
,
1193 &sensor_dev_attr_pwm4_max_output
.dev_attr
.attr
,
1194 &sensor_dev_attr_pwm4_step_output
.dev_attr
.attr
,
1195 &sensor_dev_attr_pwm4_target
.dev_attr
.attr
,
1196 &sensor_dev_attr_pwm4_tolerance
.dev_attr
.attr
,
1198 &dev_attr_cpu0_vid
.attr
,
1202 static const struct attribute_group w83627ehf_group
= {
1203 .attrs
= w83627ehf_attrs
,
1204 .is_visible
= w83627ehf_attrs_visible
,
1207 static const struct attribute_group
*w83627ehf_groups
[] = {
1213 * Driver and device management
1216 /* Get the monitoring functions started */
1217 static inline void w83627ehf_init_device(struct w83627ehf_data
*data
,
1223 /* Start monitoring is needed */
1224 tmp
= w83627ehf_read_value(data
, W83627EHF_REG_CONFIG
);
1226 w83627ehf_write_value(data
, W83627EHF_REG_CONFIG
,
1229 /* Enable temperature sensors if needed */
1230 for (i
= 0; i
< NUM_REG_TEMP
; i
++) {
1231 if (!(data
->have_temp
& (1 << i
)))
1233 if (!data
->reg_temp_config
[i
])
1235 tmp
= w83627ehf_read_value(data
,
1236 data
->reg_temp_config
[i
]);
1238 w83627ehf_write_value(data
,
1239 data
->reg_temp_config
[i
],
1243 /* Enable VBAT monitoring if needed */
1244 tmp
= w83627ehf_read_value(data
, W83627EHF_REG_VBAT
);
1246 w83627ehf_write_value(data
, W83627EHF_REG_VBAT
, tmp
| 0x01);
1248 /* Get thermal sensor types */
1251 diode
= w83627ehf_read_value(data
, W83627EHF_REG_DIODE
);
1259 for (i
= 0; i
< 3; i
++) {
1260 const char *label
= NULL
;
1262 if (data
->temp_label
)
1263 label
= data
->temp_label
[data
->temp_src
[i
]];
1265 /* Digital source overrides analog type */
1266 if (label
&& strncmp(label
, "PECI", 4) == 0)
1267 data
->temp_type
[i
] = 6;
1268 else if (label
&& strncmp(label
, "AMD", 3) == 0)
1269 data
->temp_type
[i
] = 5;
1270 else if ((tmp
& (0x02 << i
)))
1271 data
->temp_type
[i
] = (diode
& (0x10 << i
)) ? 1 : 3;
1273 data
->temp_type
[i
] = 4; /* thermistor */
1278 w83627ehf_set_temp_reg_ehf(struct w83627ehf_data
*data
, int n_temp
)
1282 for (i
= 0; i
< n_temp
; i
++) {
1283 data
->reg_temp
[i
] = W83627EHF_REG_TEMP
[i
];
1284 data
->reg_temp_over
[i
] = W83627EHF_REG_TEMP_OVER
[i
];
1285 data
->reg_temp_hyst
[i
] = W83627EHF_REG_TEMP_HYST
[i
];
1286 data
->reg_temp_config
[i
] = W83627EHF_REG_TEMP_CONFIG
[i
];
1291 w83627ehf_check_fan_inputs(const struct w83627ehf_sio_data
*sio_data
,
1292 struct w83627ehf_data
*data
)
1294 int fan3pin
, fan4pin
, fan5pin
, regval
;
1296 /* The W83627UHG is simple, only two fan inputs, no config */
1297 if (sio_data
->kind
== w83627uhg
) {
1298 data
->has_fan
= 0x03; /* fan1 and fan2 */
1299 data
->has_fan_min
= 0x03;
1303 /* fan4 and fan5 share some pins with the GPIO and serial flash */
1304 if (sio_data
->kind
== w83667hg
|| sio_data
->kind
== w83667hg_b
) {
1306 fan4pin
= superio_inb(sio_data
->sioreg
, 0x27) & 0x40;
1307 fan5pin
= superio_inb(sio_data
->sioreg
, 0x27) & 0x20;
1310 fan4pin
= !(superio_inb(sio_data
->sioreg
, 0x29) & 0x06);
1311 fan5pin
= !(superio_inb(sio_data
->sioreg
, 0x24) & 0x02);
1314 data
->has_fan
= data
->has_fan_min
= 0x03; /* fan1 and fan2 */
1315 data
->has_fan
|= (fan3pin
<< 2);
1316 data
->has_fan_min
|= (fan3pin
<< 2);
1319 * It looks like fan4 and fan5 pins can be alternatively used
1320 * as fan on/off switches, but fan5 control is write only :/
1321 * We assume that if the serial interface is disabled, designers
1322 * connected fan5 as input unless they are emitting log 1, which
1323 * is not the default.
1325 regval
= w83627ehf_read_value(data
, W83627EHF_REG_FANDIV1
);
1326 if ((regval
& (1 << 2)) && fan4pin
) {
1327 data
->has_fan
|= (1 << 3);
1328 data
->has_fan_min
|= (1 << 3);
1330 if (!(regval
& (1 << 1)) && fan5pin
) {
1331 data
->has_fan
|= (1 << 4);
1332 data
->has_fan_min
|= (1 << 4);
1337 w83627ehf_is_visible(const void *drvdata
, enum hwmon_sensor_types type
,
1338 u32 attr
, int channel
)
1340 const struct w83627ehf_data
*data
= drvdata
;
1344 /* channel 0.., name 1.. */
1345 if (!(data
->have_temp
& (1 << channel
)))
1347 if (attr
== hwmon_temp_input
)
1349 if (attr
== hwmon_temp_label
) {
1350 if (data
->temp_label
)
1354 if (channel
== 2 && data
->temp3_val_only
)
1356 if (attr
== hwmon_temp_max
) {
1357 if (data
->reg_temp_over
[channel
])
1362 if (attr
== hwmon_temp_max_hyst
) {
1363 if (data
->reg_temp_hyst
[channel
])
1370 if (attr
== hwmon_temp_alarm
|| attr
== hwmon_temp_type
)
1372 if (attr
== hwmon_temp_offset
) {
1373 if (data
->have_temp_offset
& (1 << channel
))
1381 /* channel 0.., name 1.. */
1382 if (!(data
->has_fan
& (1 << channel
)))
1384 if (attr
== hwmon_fan_input
|| attr
== hwmon_fan_alarm
)
1386 if (attr
== hwmon_fan_div
) {
1389 if (attr
== hwmon_fan_min
) {
1390 if (data
->has_fan_min
& (1 << channel
))
1398 /* channel 0.., name 0.. */
1399 if (channel
>= data
->in_num
)
1401 if (channel
== 6 && data
->in6_skip
)
1403 if (attr
== hwmon_in_alarm
|| attr
== hwmon_in_input
)
1405 if (attr
== hwmon_in_min
|| attr
== hwmon_in_max
)
1410 /* channel 0.., name 1.. */
1411 if (!(data
->has_fan
& (1 << channel
)) ||
1412 channel
>= data
->pwm_num
)
1414 if (attr
== hwmon_pwm_mode
|| attr
== hwmon_pwm_enable
||
1415 attr
== hwmon_pwm_input
)
1419 case hwmon_intrusion
:
1422 default: /* Shouldn't happen */
1426 return 0; /* Shouldn't happen */
1430 w83627ehf_do_read_temp(struct w83627ehf_data
*data
, u32 attr
,
1431 int channel
, long *val
)
1434 case hwmon_temp_input
:
1435 *val
= LM75_TEMP_FROM_REG(data
->temp
[channel
]);
1437 case hwmon_temp_max
:
1438 *val
= LM75_TEMP_FROM_REG(data
->temp_max
[channel
]);
1440 case hwmon_temp_max_hyst
:
1441 *val
= LM75_TEMP_FROM_REG(data
->temp_max_hyst
[channel
]);
1443 case hwmon_temp_offset
:
1444 *val
= data
->temp_offset
[channel
] * 1000;
1446 case hwmon_temp_type
:
1447 *val
= (int)data
->temp_type
[channel
];
1449 case hwmon_temp_alarm
:
1451 int bit
[] = { 4, 5, 13 };
1452 *val
= (data
->alarms
>> bit
[channel
]) & 1;
1465 w83627ehf_do_read_in(struct w83627ehf_data
*data
, u32 attr
,
1466 int channel
, long *val
)
1469 case hwmon_in_input
:
1470 *val
= in_from_reg(data
->in
[channel
], channel
, data
->scale_in
);
1473 *val
= in_from_reg(data
->in_min
[channel
], channel
,
1477 *val
= in_from_reg(data
->in_max
[channel
], channel
,
1480 case hwmon_in_alarm
:
1482 int bit
[] = { 0, 1, 2, 3, 8, 21, 20, 16, 17, 19 };
1483 *val
= (data
->alarms
>> bit
[channel
]) & 1;
1494 w83627ehf_do_read_fan(struct w83627ehf_data
*data
, u32 attr
,
1495 int channel
, long *val
)
1498 case hwmon_fan_input
:
1499 *val
= data
->rpm
[channel
];
1502 *val
= fan_from_reg8(data
->fan_min
[channel
],
1503 data
->fan_div
[channel
]);
1506 *val
= div_from_reg(data
->fan_div
[channel
]);
1508 case hwmon_fan_alarm
:
1510 int bit
[] = { 6, 7, 11, 10, 23 };
1511 *val
= (data
->alarms
>> bit
[channel
]) & 1;
1522 w83627ehf_do_read_pwm(struct w83627ehf_data
*data
, u32 attr
,
1523 int channel
, long *val
)
1526 case hwmon_pwm_input
:
1527 *val
= data
->pwm
[channel
];
1529 case hwmon_pwm_enable
:
1530 *val
= data
->pwm_enable
[channel
];
1532 case hwmon_pwm_mode
:
1533 *val
= data
->pwm_enable
[channel
];
1542 w83627ehf_do_read_intrusion(struct w83627ehf_data
*data
, u32 attr
,
1543 int channel
, long *val
)
1545 if (attr
!= hwmon_intrusion_alarm
|| channel
!= 0)
1546 return -EOPNOTSUPP
; /* shouldn't happen */
1548 *val
= !!(data
->caseopen
& 0x10);
1553 w83627ehf_read(struct device
*dev
, enum hwmon_sensor_types type
,
1554 u32 attr
, int channel
, long *val
)
1556 struct w83627ehf_data
*data
= w83627ehf_update_device(dev
->parent
);
1560 return w83627ehf_do_read_fan(data
, attr
, channel
, val
);
1563 return w83627ehf_do_read_in(data
, attr
, channel
, val
);
1566 return w83627ehf_do_read_pwm(data
, attr
, channel
, val
);
1569 return w83627ehf_do_read_temp(data
, attr
, channel
, val
);
1571 case hwmon_intrusion
:
1572 return w83627ehf_do_read_intrusion(data
, attr
, channel
, val
);
1582 w83627ehf_read_string(struct device
*dev
, enum hwmon_sensor_types type
,
1583 u32 attr
, int channel
, const char **str
)
1585 struct w83627ehf_data
*data
= dev_get_drvdata(dev
);
1589 if (attr
== hwmon_temp_label
) {
1590 *str
= data
->temp_label
[data
->temp_src
[channel
]];
1598 /* Nothing else should be read as a string */
1603 w83627ehf_write(struct device
*dev
, enum hwmon_sensor_types type
,
1604 u32 attr
, int channel
, long val
)
1606 struct w83627ehf_data
*data
= dev_get_drvdata(dev
);
1608 if (type
== hwmon_in
&& attr
== hwmon_in_min
)
1609 return store_in_min(dev
, data
, channel
, val
);
1610 if (type
== hwmon_in
&& attr
== hwmon_in_max
)
1611 return store_in_max(dev
, data
, channel
, val
);
1613 if (type
== hwmon_fan
&& attr
== hwmon_fan_min
)
1614 return store_fan_min(dev
, data
, channel
, val
);
1616 if (type
== hwmon_temp
&& attr
== hwmon_temp_max
)
1617 return store_temp_max(dev
, data
, channel
, val
);
1618 if (type
== hwmon_temp
&& attr
== hwmon_temp_max_hyst
)
1619 return store_temp_max_hyst(dev
, data
, channel
, val
);
1620 if (type
== hwmon_temp
&& attr
== hwmon_temp_offset
)
1621 return store_temp_offset(dev
, data
, channel
, val
);
1623 if (type
== hwmon_pwm
&& attr
== hwmon_pwm_mode
)
1624 return store_pwm_mode(dev
, data
, channel
, val
);
1625 if (type
== hwmon_pwm
&& attr
== hwmon_pwm_enable
)
1626 return store_pwm_enable(dev
, data
, channel
, val
);
1627 if (type
== hwmon_pwm
&& attr
== hwmon_pwm_input
)
1628 return store_pwm(dev
, data
, channel
, val
);
1630 if (type
== hwmon_intrusion
&& attr
== hwmon_intrusion_alarm
)
1631 return clear_caseopen(dev
, data
, channel
, val
);
1636 static const struct hwmon_ops w83627ehf_ops
= {
1637 .is_visible
= w83627ehf_is_visible
,
1638 .read
= w83627ehf_read
,
1639 .read_string
= w83627ehf_read_string
,
1640 .write
= w83627ehf_write
,
1643 static const struct hwmon_channel_info
* const w83627ehf_info
[] = {
1644 HWMON_CHANNEL_INFO(fan
,
1645 HWMON_F_ALARM
| HWMON_F_DIV
| HWMON_F_INPUT
| HWMON_F_MIN
,
1646 HWMON_F_ALARM
| HWMON_F_DIV
| HWMON_F_INPUT
| HWMON_F_MIN
,
1647 HWMON_F_ALARM
| HWMON_F_DIV
| HWMON_F_INPUT
| HWMON_F_MIN
,
1648 HWMON_F_ALARM
| HWMON_F_DIV
| HWMON_F_INPUT
| HWMON_F_MIN
,
1649 HWMON_F_ALARM
| HWMON_F_DIV
| HWMON_F_INPUT
| HWMON_F_MIN
),
1650 HWMON_CHANNEL_INFO(in
,
1651 HWMON_I_ALARM
| HWMON_I_INPUT
| HWMON_I_MAX
| HWMON_I_MIN
,
1652 HWMON_I_ALARM
| HWMON_I_INPUT
| HWMON_I_MAX
| HWMON_I_MIN
,
1653 HWMON_I_ALARM
| HWMON_I_INPUT
| HWMON_I_MAX
| HWMON_I_MIN
,
1654 HWMON_I_ALARM
| HWMON_I_INPUT
| HWMON_I_MAX
| HWMON_I_MIN
,
1655 HWMON_I_ALARM
| HWMON_I_INPUT
| HWMON_I_MAX
| HWMON_I_MIN
,
1656 HWMON_I_ALARM
| HWMON_I_INPUT
| HWMON_I_MAX
| HWMON_I_MIN
,
1657 HWMON_I_ALARM
| HWMON_I_INPUT
| HWMON_I_MAX
| HWMON_I_MIN
,
1658 HWMON_I_ALARM
| HWMON_I_INPUT
| HWMON_I_MAX
| HWMON_I_MIN
,
1659 HWMON_I_ALARM
| HWMON_I_INPUT
| HWMON_I_MAX
| HWMON_I_MIN
,
1660 HWMON_I_ALARM
| HWMON_I_INPUT
| HWMON_I_MAX
| HWMON_I_MIN
),
1661 HWMON_CHANNEL_INFO(pwm
,
1662 HWMON_PWM_ENABLE
| HWMON_PWM_INPUT
| HWMON_PWM_MODE
,
1663 HWMON_PWM_ENABLE
| HWMON_PWM_INPUT
| HWMON_PWM_MODE
,
1664 HWMON_PWM_ENABLE
| HWMON_PWM_INPUT
| HWMON_PWM_MODE
,
1665 HWMON_PWM_ENABLE
| HWMON_PWM_INPUT
| HWMON_PWM_MODE
),
1666 HWMON_CHANNEL_INFO(temp
,
1667 HWMON_T_ALARM
| HWMON_T_INPUT
| HWMON_T_LABEL
| HWMON_T_MAX
|
1668 HWMON_T_MAX_HYST
| HWMON_T_OFFSET
| HWMON_T_TYPE
,
1669 HWMON_T_ALARM
| HWMON_T_INPUT
| HWMON_T_LABEL
| HWMON_T_MAX
|
1670 HWMON_T_MAX_HYST
| HWMON_T_OFFSET
| HWMON_T_TYPE
,
1671 HWMON_T_ALARM
| HWMON_T_INPUT
| HWMON_T_LABEL
| HWMON_T_MAX
|
1672 HWMON_T_MAX_HYST
| HWMON_T_OFFSET
| HWMON_T_TYPE
,
1673 HWMON_T_ALARM
| HWMON_T_INPUT
| HWMON_T_LABEL
| HWMON_T_MAX
|
1674 HWMON_T_MAX_HYST
| HWMON_T_OFFSET
| HWMON_T_TYPE
,
1675 HWMON_T_ALARM
| HWMON_T_INPUT
| HWMON_T_LABEL
| HWMON_T_MAX
|
1676 HWMON_T_MAX_HYST
| HWMON_T_OFFSET
| HWMON_T_TYPE
,
1677 HWMON_T_ALARM
| HWMON_T_INPUT
| HWMON_T_LABEL
| HWMON_T_MAX
|
1678 HWMON_T_MAX_HYST
| HWMON_T_OFFSET
| HWMON_T_TYPE
,
1679 HWMON_T_ALARM
| HWMON_T_INPUT
| HWMON_T_LABEL
| HWMON_T_MAX
|
1680 HWMON_T_MAX_HYST
| HWMON_T_OFFSET
| HWMON_T_TYPE
,
1681 HWMON_T_ALARM
| HWMON_T_INPUT
| HWMON_T_LABEL
| HWMON_T_MAX
|
1682 HWMON_T_MAX_HYST
| HWMON_T_OFFSET
| HWMON_T_TYPE
,
1683 HWMON_T_ALARM
| HWMON_T_INPUT
| HWMON_T_LABEL
| HWMON_T_MAX
|
1684 HWMON_T_MAX_HYST
| HWMON_T_OFFSET
| HWMON_T_TYPE
),
1685 HWMON_CHANNEL_INFO(intrusion
,
1686 HWMON_INTRUSION_ALARM
),
1690 static const struct hwmon_chip_info w83627ehf_chip_info
= {
1691 .ops
= &w83627ehf_ops
,
1692 .info
= w83627ehf_info
,
1695 static int __init
w83627ehf_probe(struct platform_device
*pdev
)
1697 struct device
*dev
= &pdev
->dev
;
1698 struct w83627ehf_sio_data
*sio_data
= dev_get_platdata(dev
);
1699 struct w83627ehf_data
*data
;
1700 struct resource
*res
;
1703 struct device
*hwmon_dev
;
1705 res
= platform_get_resource(pdev
, IORESOURCE_IO
, 0);
1706 if (!devm_request_region(dev
, res
->start
, IOREGION_LENGTH
, DRVNAME
))
1709 data
= devm_kzalloc(dev
, sizeof(*data
), GFP_KERNEL
);
1713 data
->addr
= res
->start
;
1714 mutex_init(&data
->lock
);
1715 mutex_init(&data
->update_lock
);
1716 data
->name
= w83627ehf_device_names
[sio_data
->kind
];
1717 data
->bank
= 0xff; /* Force initial bank selection */
1718 platform_set_drvdata(pdev
, data
);
1720 /* 627EHG and 627EHF have 10 voltage inputs; 627DHG and 667HG have 9 */
1721 data
->in_num
= (sio_data
->kind
== w83627ehf
) ? 10 : 9;
1722 /* 667HG has 3 pwms, and 627UHG has only 2 */
1723 switch (sio_data
->kind
) {
1736 /* Default to 3 temperature inputs, code below will adjust as needed */
1737 data
->have_temp
= 0x07;
1739 /* Deal with temperature register setup first. */
1740 if (sio_data
->kind
== w83667hg_b
) {
1743 w83627ehf_set_temp_reg_ehf(data
, 4);
1746 * Temperature sources are selected with bank 0, registers 0x49
1749 reg
= w83627ehf_read_value(data
, 0x4a);
1750 data
->temp_src
[0] = reg
>> 5;
1751 reg
= w83627ehf_read_value(data
, 0x49);
1752 data
->temp_src
[1] = reg
& 0x07;
1753 data
->temp_src
[2] = (reg
>> 4) & 0x07;
1756 * W83667HG-B has another temperature register at 0x7e.
1757 * The temperature source is selected with register 0x7d.
1758 * Support it if the source differs from already reported
1761 reg
= w83627ehf_read_value(data
, 0x7d);
1763 if (reg
!= data
->temp_src
[0] && reg
!= data
->temp_src
[1]
1764 && reg
!= data
->temp_src
[2]) {
1765 data
->temp_src
[3] = reg
;
1766 data
->have_temp
|= 1 << 3;
1770 * Chip supports either AUXTIN or VIN3. Try to find out which
1773 reg
= w83627ehf_read_value(data
, W83627EHF_REG_TEMP_CONFIG
[2]);
1774 if (data
->temp_src
[2] == 2 && (reg
& 0x01))
1775 data
->have_temp
&= ~(1 << 2);
1777 if ((data
->temp_src
[2] == 2 && (data
->have_temp
& (1 << 2)))
1778 || (data
->temp_src
[3] == 2 && (data
->have_temp
& (1 << 3))))
1781 data
->temp_label
= w83667hg_b_temp_label
;
1782 data
->have_temp_offset
= data
->have_temp
& 0x07;
1783 for (i
= 0; i
< 3; i
++) {
1784 if (data
->temp_src
[i
] > 2)
1785 data
->have_temp_offset
&= ~(1 << i
);
1787 } else if (sio_data
->kind
== w83627uhg
) {
1790 w83627ehf_set_temp_reg_ehf(data
, 3);
1793 * Temperature sources for temp2 and temp3 are selected with
1794 * bank 0, registers 0x49 and 0x4a.
1796 data
->temp_src
[0] = 0; /* SYSTIN */
1797 reg
= w83627ehf_read_value(data
, 0x49) & 0x07;
1798 /* Adjust to have the same mapping as other source registers */
1800 data
->temp_src
[1] = 1;
1801 else if (reg
>= 2 && reg
<= 5)
1802 data
->temp_src
[1] = reg
+ 2;
1803 else /* should never happen */
1804 data
->have_temp
&= ~(1 << 1);
1805 reg
= w83627ehf_read_value(data
, 0x4a);
1806 data
->temp_src
[2] = reg
>> 5;
1809 * Skip temp3 if source is invalid or the same as temp1
1812 if (data
->temp_src
[2] == 2 || data
->temp_src
[2] == 3 ||
1813 data
->temp_src
[2] == data
->temp_src
[0] ||
1814 ((data
->have_temp
& (1 << 1)) &&
1815 data
->temp_src
[2] == data
->temp_src
[1]))
1816 data
->have_temp
&= ~(1 << 2);
1818 data
->temp3_val_only
= 1; /* No limit regs */
1820 data
->in6_skip
= 1; /* No VIN3 */
1822 data
->temp_label
= w83667hg_b_temp_label
;
1823 data
->have_temp_offset
= data
->have_temp
& 0x03;
1824 for (i
= 0; i
< 3; i
++) {
1825 if (data
->temp_src
[i
] > 1)
1826 data
->have_temp_offset
&= ~(1 << i
);
1829 w83627ehf_set_temp_reg_ehf(data
, 3);
1831 /* Temperature sources are fixed */
1833 if (sio_data
->kind
== w83667hg
) {
1837 * Chip supports either AUXTIN or VIN3. Try to find
1840 reg
= w83627ehf_read_value(data
,
1841 W83627EHF_REG_TEMP_CONFIG
[2]);
1843 data
->have_temp
&= ~(1 << 2);
1847 data
->have_temp_offset
= data
->have_temp
& 0x07;
1850 if (sio_data
->kind
== w83667hg_b
) {
1851 data
->REG_FAN_MAX_OUTPUT
=
1852 W83627EHF_REG_FAN_MAX_OUTPUT_W83667_B
;
1853 data
->REG_FAN_STEP_OUTPUT
=
1854 W83627EHF_REG_FAN_STEP_OUTPUT_W83667_B
;
1856 data
->REG_FAN_MAX_OUTPUT
=
1857 W83627EHF_REG_FAN_MAX_OUTPUT_COMMON
;
1858 data
->REG_FAN_STEP_OUTPUT
=
1859 W83627EHF_REG_FAN_STEP_OUTPUT_COMMON
;
1862 /* Setup input voltage scaling factors */
1863 if (sio_data
->kind
== w83627uhg
)
1864 data
->scale_in
= scale_in_w83627uhg
;
1866 data
->scale_in
= scale_in_common
;
1868 /* Initialize the chip */
1869 w83627ehf_init_device(data
, sio_data
->kind
);
1871 data
->vrm
= vid_which_vrm();
1873 err
= superio_enter(sio_data
->sioreg
);
1877 /* Read VID value */
1878 if (sio_data
->kind
== w83667hg
|| sio_data
->kind
== w83667hg_b
) {
1880 * W83667HG has different pins for VID input and output, so
1881 * we can get the VID input values directly at logical device D
1884 superio_select(sio_data
->sioreg
, W83667HG_LD_VID
);
1885 data
->vid
= superio_inb(sio_data
->sioreg
, 0xe3);
1886 data
->have_vid
= true;
1887 } else if (sio_data
->kind
!= w83627uhg
) {
1888 superio_select(sio_data
->sioreg
, W83627EHF_LD_HWM
);
1889 if (superio_inb(sio_data
->sioreg
, SIO_REG_VID_CTRL
) & 0x80) {
1891 * Set VID input sensibility if needed. In theory the
1892 * BIOS should have set it, but in practice it's not
1893 * always the case. We only do it for the W83627EHF/EHG
1894 * because the W83627DHG is more complex in this
1897 if (sio_data
->kind
== w83627ehf
) {
1898 en_vrm10
= superio_inb(sio_data
->sioreg
,
1900 if ((en_vrm10
& 0x08) && data
->vrm
== 90) {
1902 "Setting VID input voltage to TTL\n");
1903 superio_outb(sio_data
->sioreg
,
1906 } else if (!(en_vrm10
& 0x08)
1907 && data
->vrm
== 100) {
1909 "Setting VID input voltage to VRM10\n");
1910 superio_outb(sio_data
->sioreg
,
1916 data
->vid
= superio_inb(sio_data
->sioreg
,
1918 if (sio_data
->kind
== w83627ehf
) /* 6 VID pins only */
1920 data
->have_vid
= true;
1923 "VID pins in output mode, CPU VID not available\n");
1927 w83627ehf_check_fan_inputs(sio_data
, data
);
1929 superio_exit(sio_data
->sioreg
);
1931 /* Read fan clock dividers immediately */
1932 w83627ehf_update_fan_div(data
);
1934 /* Read pwm data to save original values */
1935 w83627ehf_update_pwm(data
);
1936 for (i
= 0; i
< data
->pwm_num
; i
++)
1937 data
->pwm_enable_orig
[i
] = data
->pwm_enable
[i
];
1939 hwmon_dev
= devm_hwmon_device_register_with_info(&pdev
->dev
,
1942 &w83627ehf_chip_info
,
1944 return PTR_ERR_OR_ZERO(hwmon_dev
);
1947 static int w83627ehf_suspend(struct device
*dev
)
1949 struct w83627ehf_data
*data
= w83627ehf_update_device(dev
);
1951 mutex_lock(&data
->update_lock
);
1952 data
->vbat
= w83627ehf_read_value(data
, W83627EHF_REG_VBAT
);
1953 mutex_unlock(&data
->update_lock
);
1958 static int w83627ehf_resume(struct device
*dev
)
1960 struct w83627ehf_data
*data
= dev_get_drvdata(dev
);
1963 mutex_lock(&data
->update_lock
);
1964 data
->bank
= 0xff; /* Force initial bank selection */
1966 /* Restore limits */
1967 for (i
= 0; i
< data
->in_num
; i
++) {
1968 if ((i
== 6) && data
->in6_skip
)
1971 w83627ehf_write_value(data
, W83627EHF_REG_IN_MIN(i
),
1973 w83627ehf_write_value(data
, W83627EHF_REG_IN_MAX(i
),
1977 for (i
= 0; i
< 5; i
++) {
1978 if (!(data
->has_fan_min
& (1 << i
)))
1981 w83627ehf_write_value(data
, W83627EHF_REG_FAN_MIN
[i
],
1985 for (i
= 0; i
< NUM_REG_TEMP
; i
++) {
1986 if (!(data
->have_temp
& (1 << i
)))
1989 if (data
->reg_temp_over
[i
])
1990 w83627ehf_write_temp(data
, data
->reg_temp_over
[i
],
1992 if (data
->reg_temp_hyst
[i
])
1993 w83627ehf_write_temp(data
, data
->reg_temp_hyst
[i
],
1994 data
->temp_max_hyst
[i
]);
1997 if (data
->have_temp_offset
& (1 << i
))
1998 w83627ehf_write_value(data
,
1999 W83627EHF_REG_TEMP_OFFSET
[i
],
2000 data
->temp_offset
[i
]);
2003 /* Restore other settings */
2004 w83627ehf_write_value(data
, W83627EHF_REG_VBAT
, data
->vbat
);
2006 /* Force re-reading all values */
2007 data
->valid
= false;
2008 mutex_unlock(&data
->update_lock
);
2013 static DEFINE_SIMPLE_DEV_PM_OPS(w83627ehf_dev_pm_ops
, w83627ehf_suspend
, w83627ehf_resume
);
2015 static struct platform_driver w83627ehf_driver
= {
2018 .pm
= pm_sleep_ptr(&w83627ehf_dev_pm_ops
),
2022 /* w83627ehf_find() looks for a '627 in the Super-I/O config space */
2023 static int __init
w83627ehf_find(int sioaddr
, unsigned short *addr
,
2024 struct w83627ehf_sio_data
*sio_data
)
2026 static const char sio_name_W83627EHF
[] __initconst
= "W83627EHF";
2027 static const char sio_name_W83627EHG
[] __initconst
= "W83627EHG";
2028 static const char sio_name_W83627DHG
[] __initconst
= "W83627DHG";
2029 static const char sio_name_W83627DHG_P
[] __initconst
= "W83627DHG-P";
2030 static const char sio_name_W83627UHG
[] __initconst
= "W83627UHG";
2031 static const char sio_name_W83667HG
[] __initconst
= "W83667HG";
2032 static const char sio_name_W83667HG_B
[] __initconst
= "W83667HG-B";
2035 const char *sio_name
;
2038 err
= superio_enter(sioaddr
);
2045 val
= (superio_inb(sioaddr
, SIO_REG_DEVID
) << 8)
2046 | superio_inb(sioaddr
, SIO_REG_DEVID
+ 1);
2047 switch (val
& SIO_ID_MASK
) {
2048 case SIO_W83627EHF_ID
:
2049 sio_data
->kind
= w83627ehf
;
2050 sio_name
= sio_name_W83627EHF
;
2052 case SIO_W83627EHG_ID
:
2053 sio_data
->kind
= w83627ehf
;
2054 sio_name
= sio_name_W83627EHG
;
2056 case SIO_W83627DHG_ID
:
2057 sio_data
->kind
= w83627dhg
;
2058 sio_name
= sio_name_W83627DHG
;
2060 case SIO_W83627DHG_P_ID
:
2061 sio_data
->kind
= w83627dhg_p
;
2062 sio_name
= sio_name_W83627DHG_P
;
2064 case SIO_W83627UHG_ID
:
2065 sio_data
->kind
= w83627uhg
;
2066 sio_name
= sio_name_W83627UHG
;
2068 case SIO_W83667HG_ID
:
2069 sio_data
->kind
= w83667hg
;
2070 sio_name
= sio_name_W83667HG
;
2072 case SIO_W83667HG_B_ID
:
2073 sio_data
->kind
= w83667hg_b
;
2074 sio_name
= sio_name_W83667HG_B
;
2078 pr_debug("unsupported chip ID: 0x%04x\n", val
);
2079 superio_exit(sioaddr
);
2083 /* We have a known chip, find the HWM I/O address */
2084 superio_select(sioaddr
, W83627EHF_LD_HWM
);
2085 val
= (superio_inb(sioaddr
, SIO_REG_ADDR
) << 8)
2086 | superio_inb(sioaddr
, SIO_REG_ADDR
+ 1);
2087 *addr
= val
& IOREGION_ALIGNMENT
;
2089 pr_err("Refusing to enable a Super-I/O device with a base I/O port 0\n");
2090 superio_exit(sioaddr
);
2094 /* Activate logical device if needed */
2095 val
= superio_inb(sioaddr
, SIO_REG_ENABLE
);
2096 if (!(val
& 0x01)) {
2097 pr_warn("Forcibly enabling Super-I/O. Sensor is probably unusable.\n");
2098 superio_outb(sioaddr
, SIO_REG_ENABLE
, val
| 0x01);
2101 superio_exit(sioaddr
);
2102 pr_info("Found %s chip at %#x\n", sio_name
, *addr
);
2103 sio_data
->sioreg
= sioaddr
;
2109 * when Super-I/O functions move to a separate file, the Super-I/O
2110 * bus will manage the lifetime of the device and this module will only keep
2111 * track of the w83627ehf driver.
2113 static struct platform_device
*pdev
;
2115 static int __init
sensors_w83627ehf_init(void)
2118 unsigned short address
;
2119 struct resource res
= {
2121 .flags
= IORESOURCE_IO
,
2123 struct w83627ehf_sio_data sio_data
;
2126 * initialize sio_data->kind and sio_data->sioreg.
2128 * when Super-I/O functions move to a separate file, the Super-I/O
2129 * driver will probe 0x2e and 0x4e and auto-detect the presence of a
2130 * w83627ehf hardware monitor, and call probe()
2132 if (w83627ehf_find(0x2e, &address
, &sio_data
) &&
2133 w83627ehf_find(0x4e, &address
, &sio_data
))
2136 res
.start
= address
+ IOREGION_OFFSET
;
2137 res
.end
= address
+ IOREGION_OFFSET
+ IOREGION_LENGTH
- 1;
2139 err
= acpi_check_resource_conflict(&res
);
2143 pdev
= platform_create_bundle(&w83627ehf_driver
, w83627ehf_probe
, &res
, 1, &sio_data
,
2144 sizeof(struct w83627ehf_sio_data
));
2146 return PTR_ERR_OR_ZERO(pdev
);
2149 static void __exit
sensors_w83627ehf_exit(void)
2151 platform_device_unregister(pdev
);
2152 platform_driver_unregister(&w83627ehf_driver
);
2155 MODULE_AUTHOR("Jean Delvare <jdelvare@suse.de>");
2156 MODULE_DESCRIPTION("W83627EHF driver");
2157 MODULE_LICENSE("GPL");
2159 module_init(sensors_w83627ehf_init
);
2160 module_exit(sensors_w83627ehf_exit
);