Loading...
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
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)
11 *
12 * Shamelessly ripped from the w83627hf driver
13 * Copyright (C) 2003 Mark Studebaker
14 *
15 * Thanks to Leon Moonen, Steve Cliffe and Grant Coady for their help
16 * in testing and debugging this driver.
17 *
18 * This driver also supports the W83627EHG, which is the lead-free
19 * version of the W83627EHF.
20 *
21 * Supports the following chips:
22 *
23 * Chip #vin #fan #pwm #temp chip IDs man ID
24 * w83627ehf 10 5 4 3 0x8850 0x88 0x5ca3
25 * 0x8860 0xa1
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
31 */
32
33#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
34
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>
46#include <linux/io.h>
47#include "lm75.h"
48
49enum kinds {
50 w83627ehf, w83627dhg, w83627dhg_p, w83627uhg,
51 w83667hg, w83667hg_b,
52};
53
54/* used to set data->name = w83627ehf_device_names[data->sio_kind] */
55static const char * const w83627ehf_device_names[] = {
56 "w83627ehf",
57 "w83627dhg",
58 "w83627dhg",
59 "w83627uhg",
60 "w83667hg",
61 "w83667hg",
62};
63
64static unsigned short force_id;
65module_param(force_id, ushort, 0);
66MODULE_PARM_DESC(force_id, "Override the detected device ID");
67
68#define DRVNAME "w83627ehf"
69
70/*
71 * Super-I/O constants and functions
72 */
73
74#define W83627EHF_LD_HWM 0x0b
75#define W83667HG_LD_VID 0x0d
76
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 */
84
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
93
94static inline void
95superio_outb(int ioreg, int reg, int val)
96{
97 outb(reg, ioreg);
98 outb(val, ioreg + 1);
99}
100
101static inline int
102superio_inb(int ioreg, int reg)
103{
104 outb(reg, ioreg);
105 return inb(ioreg + 1);
106}
107
108static inline void
109superio_select(int ioreg, int ld)
110{
111 outb(SIO_REG_LDSEL, ioreg);
112 outb(ld, ioreg + 1);
113}
114
115static inline int
116superio_enter(int ioreg)
117{
118 if (!request_muxed_region(ioreg, 2, DRVNAME))
119 return -EBUSY;
120
121 outb(0x87, ioreg);
122 outb(0x87, ioreg);
123
124 return 0;
125}
126
127static inline void
128superio_exit(int ioreg)
129{
130 outb(0xaa, ioreg);
131 outb(0x02, ioreg);
132 outb(0x02, ioreg + 1);
133 release_region(ioreg, 2);
134}
135
136/*
137 * ISA constants
138 */
139
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
145
146#define W83627EHF_REG_BANK 0x4E
147#define W83627EHF_REG_CONFIG 0x40
148
149/*
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
155 */
156
157static const u16 W83627EHF_REG_FAN[] = { 0x28, 0x29, 0x2a, 0x3f, 0x553 };
158static const u16 W83627EHF_REG_FAN_MIN[] = { 0x3b, 0x3c, 0x3d, 0x3e, 0x55c };
159
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)) : \
166 (0x550 + (nr) - 7))
167
168static const u16 W83627EHF_REG_TEMP[] = { 0x27, 0x150, 0x250, 0x7e };
169static const u16 W83627EHF_REG_TEMP_HYST[] = { 0x3a, 0x153, 0x253, 0 };
170static const u16 W83627EHF_REG_TEMP_OVER[] = { 0x39, 0x155, 0x255, 0 };
171static const u16 W83627EHF_REG_TEMP_CONFIG[] = { 0, 0x152, 0x252, 0 };
172
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
179
180#define W83627EHF_REG_ALARM1 0x459
181#define W83627EHF_REG_ALARM2 0x45A
182#define W83627EHF_REG_ALARM3 0x45B
183
184#define W83627EHF_REG_CASEOPEN_DET 0x42 /* SMI STATUS #2 */
185#define W83627EHF_REG_CASEOPEN_CLR 0x46 /* SMI MASK #3 */
186
187/* SmartFan registers */
188#define W83627EHF_REG_FAN_STEPUP_TIME 0x0f
189#define W83627EHF_REG_FAN_STEPDOWN_TIME 0x0e
190
191/* DC or PWM output fan configuration */
192static 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 */
197};
198
199static const u8 W83627EHF_PWM_MODE_SHIFT[] = { 0, 1, 0, 6 };
200static const u8 W83627EHF_PWM_ENABLE_SHIFT[] = { 2, 4, 1, 4 };
201
202/* FAN Duty Cycle, be used to control */
203static const u16 W83627EHF_REG_PWM[] = { 0x01, 0x03, 0x11, 0x61 };
204static const u16 W83627EHF_REG_TARGET[] = { 0x05, 0x06, 0x13, 0x63 };
205static const u8 W83627EHF_REG_TOLERANCE[] = { 0x07, 0x07, 0x14, 0x62 };
206
207/* Advanced Fan control, some values are common for all fans */
208static const u16 W83627EHF_REG_FAN_START_OUTPUT[] = { 0x0a, 0x0b, 0x16, 0x65 };
209static const u16 W83627EHF_REG_FAN_STOP_OUTPUT[] = { 0x08, 0x09, 0x15, 0x64 };
210static const u16 W83627EHF_REG_FAN_STOP_TIME[] = { 0x0c, 0x0d, 0x17, 0x66 };
211
212static const u16 W83627EHF_REG_FAN_MAX_OUTPUT_COMMON[]
213 = { 0xff, 0x67, 0xff, 0x69 };
214static const u16 W83627EHF_REG_FAN_STEP_OUTPUT_COMMON[]
215 = { 0xff, 0x68, 0xff, 0x6a };
216
217static const u16 W83627EHF_REG_FAN_MAX_OUTPUT_W83667_B[] = { 0x67, 0x69, 0x6b };
218static const u16 W83627EHF_REG_FAN_STEP_OUTPUT_W83667_B[]
219 = { 0x68, 0x6a, 0x6c };
220
221static const u16 W83627EHF_REG_TEMP_OFFSET[] = { 0x454, 0x455, 0x456 };
222
223static const char *const w83667hg_b_temp_label[] = {
224 "SYSTIN",
225 "CPUTIN",
226 "AUXTIN",
227 "AMDTSI",
228 "PECI Agent 1",
229 "PECI Agent 2",
230 "PECI Agent 3",
231 "PECI Agent 4"
232};
233
234#define NUM_REG_TEMP ARRAY_SIZE(W83627EHF_REG_TEMP)
235
236static int is_word_sized(u16 reg)
237{
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
248 );
249}
250
251/*
252 * Conversions
253 */
254
255/* 1 is PWM mode, output in ms */
256static inline unsigned int step_time_from_reg(u8 reg, u8 mode)
257{
258 return mode ? 100 * reg : 400 * reg;
259}
260
261static inline u8 step_time_to_reg(unsigned int msec, u8 mode)
262{
263 return clamp_val((mode ? (msec + 50) / 100 : (msec + 200) / 400),
264 1, 255);
265}
266
267static unsigned int fan_from_reg8(u16 reg, unsigned int divreg)
268{
269 if (reg == 0 || reg == 255)
270 return 0;
271 return 1350000U / (reg << divreg);
272}
273
274static inline unsigned int
275div_from_reg(u8 reg)
276{
277 return 1 << reg;
278}
279
280/*
281 * Some of the voltage inputs have internal scaling, the tables below
282 * contain 8 (the ADC LSB in mV) * scaling factor * 100
283 */
284static const u16 scale_in_common[10] = {
285 800, 800, 1600, 1600, 800, 800, 800, 1600, 1600, 800
286};
287static const u16 scale_in_w83627uhg[9] = {
288 800, 800, 3328, 3424, 800, 800, 0, 3328, 3400
289};
290
291static inline long in_from_reg(u8 reg, u8 nr, const u16 *scale_in)
292{
293 return DIV_ROUND_CLOSEST(reg * scale_in[nr], 100);
294}
295
296static inline u8 in_to_reg(u32 val, u8 nr, const u16 *scale_in)
297{
298 return clamp_val(DIV_ROUND_CLOSEST(val * 100, scale_in[nr]), 0, 255);
299}
300
301/*
302 * Data structures and manipulation thereof
303 */
304
305struct w83627ehf_data {
306 int addr; /* IO base of hw monitor block */
307 const char *name;
308
309 struct mutex lock;
310
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;
317
318 const u16 *REG_FAN_MAX_OUTPUT;
319 const u16 *REG_FAN_STEP_OUTPUT;
320 const u16 *scale_in;
321
322 struct mutex update_lock;
323 bool valid; /* true if following fields are valid */
324 unsigned long last_updated; /* In jiffies */
325
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 */
332 unsigned int rpm[5];
333 u16 fan_min[5];
334 u8 fan_div[5];
335 u8 has_fan; /* some fan inputs can be disabled */
336 u8 has_fan_min; /* some fans don't have min register */
337 u8 temp_type[3];
338 s8 temp_offset[3];
339 s16 temp[9];
340 s16 temp_max[9];
341 s16 temp_max_hyst[9];
342 u32 alarms;
343 u8 caseopen;
344
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
350 * SmartFan III)
351 * 5->enhanced variable thermal cruise (also called
352 * SmartFan IV)
353 */
354 u8 pwm_enable_orig[4]; /* original value of pwm_enable */
355 u8 pwm_num; /* number of pwm */
356 u8 pwm[4];
357 u8 target_temp[4];
358 u8 tolerance[4];
359
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 */
365
366 u8 vid;
367 u8 vrm;
368
369 u16 have_temp;
370 u16 have_temp_offset;
371 u8 in6_skip:1;
372 u8 temp3_val_only:1;
373 u8 have_vid:1;
374
375 /* Remember extra register values over suspend/resume */
376 u8 vbat;
377 u8 fandiv1;
378 u8 fandiv2;
379};
380
381struct w83627ehf_sio_data {
382 int sioreg;
383 enum kinds kind;
384};
385
386/*
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.
391 */
392static inline void w83627ehf_set_bank(struct w83627ehf_data *data, u16 reg)
393{
394 u8 bank = reg >> 8;
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);
398 data->bank = bank;
399 }
400}
401
402static u16 w83627ehf_read_value(struct w83627ehf_data *data, u16 reg)
403{
404 int res, word_sized = is_word_sized(reg);
405
406 mutex_lock(&data->lock);
407
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);
411 if (word_sized) {
412 outb_p((reg & 0xff) + 1,
413 data->addr + ADDR_REG_OFFSET);
414 res = (res << 8) + inb_p(data->addr + DATA_REG_OFFSET);
415 }
416
417 mutex_unlock(&data->lock);
418 return res;
419}
420
421static int w83627ehf_write_value(struct w83627ehf_data *data, u16 reg,
422 u16 value)
423{
424 int word_sized = is_word_sized(reg);
425
426 mutex_lock(&data->lock);
427
428 w83627ehf_set_bank(data, reg);
429 outb_p(reg & 0xff, data->addr + ADDR_REG_OFFSET);
430 if (word_sized) {
431 outb_p(value >> 8, data->addr + DATA_REG_OFFSET);
432 outb_p((reg & 0xff) + 1,
433 data->addr + ADDR_REG_OFFSET);
434 }
435 outb_p(value & 0xff, data->addr + DATA_REG_OFFSET);
436
437 mutex_unlock(&data->lock);
438 return 0;
439}
440
441/* We left-align 8-bit temperature values to make the code simpler */
442static u16 w83627ehf_read_temp(struct w83627ehf_data *data, u16 reg)
443{
444 u16 res;
445
446 res = w83627ehf_read_value(data, reg);
447 if (!is_word_sized(reg))
448 res <<= 8;
449
450 return res;
451}
452
453static int w83627ehf_write_temp(struct w83627ehf_data *data, u16 reg,
454 u16 value)
455{
456 if (!is_word_sized(reg))
457 value >>= 8;
458 return w83627ehf_write_value(data, reg, value);
459}
460
461/* This function assumes that the caller holds data->update_lock */
462static void w83627ehf_write_fan_div(struct w83627ehf_data *data, int nr)
463{
464 u8 reg;
465
466 switch (nr) {
467 case 0:
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);
476 break;
477 case 1:
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);
486 break;
487 case 2:
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);
494 break;
495 case 3:
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);
502 break;
503 case 4:
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);
508 break;
509 }
510}
511
512static void w83627ehf_update_fan_div(struct w83627ehf_data *data)
513{
514 int i;
515
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)
529 | ((i >> 5) & 0x04);
530 }
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;
534 }
535}
536
537static void w83627ehf_update_pwm(struct w83627ehf_data *data)
538{
539 int i;
540 int pwmcfg = 0, tolerance = 0; /* shut up the compiler */
541
542 for (i = 0; i < data->pwm_num; i++) {
543 if (!(data->has_fan & (1 << i)))
544 continue;
545
546 /* pwmcfg, tolerance mapped for i=0, i=1 to same reg */
547 if (i != 1) {
548 pwmcfg = w83627ehf_read_value(data,
549 W83627EHF_REG_PWM_ENABLE[i]);
550 tolerance = w83627ehf_read_value(data,
551 W83627EHF_REG_TOLERANCE[i]);
552 }
553 data->pwm_mode[i] =
554 ((pwmcfg >> W83627EHF_PWM_MODE_SHIFT[i]) & 1) ? 0 : 1;
555 data->pwm_enable[i] = ((pwmcfg >> W83627EHF_PWM_ENABLE_SHIFT[i])
556 & 3) + 1;
557 data->pwm[i] = w83627ehf_read_value(data, W83627EHF_REG_PWM[i]);
558
559 data->tolerance[i] = (tolerance >> (i == 1 ? 4 : 0)) & 0x0f;
560 }
561}
562
563static struct w83627ehf_data *w83627ehf_update_device(struct device *dev)
564{
565 struct w83627ehf_data *data = dev_get_drvdata(dev);
566 int i;
567
568 mutex_lock(&data->update_lock);
569
570 if (time_after(jiffies, data->last_updated + HZ + HZ/2)
571 || !data->valid) {
572 /* Fan clock dividers */
573 w83627ehf_update_fan_div(data);
574
575 /* Measured voltages and limits */
576 for (i = 0; i < data->in_num; i++) {
577 if ((i == 6) && data->in6_skip)
578 continue;
579
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));
586 }
587
588 /* Measured fan speeds and limits */
589 for (i = 0; i < 5; i++) {
590 u16 reg;
591
592 if (!(data->has_fan & (1 << i)))
593 continue;
594
595 reg = w83627ehf_read_value(data, W83627EHF_REG_FAN[i]);
596 data->rpm[i] = fan_from_reg8(reg, data->fan_div[i]);
597
598 if (data->has_fan_min & (1 << i))
599 data->fan_min[i] = w83627ehf_read_value(data,
600 W83627EHF_REG_FAN_MIN[i]);
601
602 /*
603 * If we failed to measure the fan speed and clock
604 * divider can be increased, let's try that for next
605 * time
606 */
607 if (reg >= 0xff && data->fan_div[i] < 0x07) {
608 dev_dbg(dev,
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));
612 data->fan_div[i]++;
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));
621 }
622 }
623
624 w83627ehf_update_pwm(data);
625
626 for (i = 0; i < data->pwm_num; i++) {
627 if (!(data->has_fan & (1 << i)))
628 continue;
629
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]);
639
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]);
645
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]);
651
652 data->target_temp[i] =
653 w83627ehf_read_value(data,
654 W83627EHF_REG_TARGET[i]) &
655 (data->pwm_mode[i] == 1 ? 0x7f : 0xff);
656 }
657
658 /* Measured temperatures and limits */
659 for (i = 0; i < NUM_REG_TEMP; i++) {
660 if (!(data->have_temp & (1 << i)))
661 continue;
662 data->temp[i] = w83627ehf_read_temp(data,
663 data->reg_temp[i]);
664 if (data->reg_temp_over[i])
665 data->temp_max[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]);
672 if (i > 2)
673 continue;
674 if (data->have_temp_offset & (1 << i))
675 data->temp_offset[i]
676 = w83627ehf_read_value(data,
677 W83627EHF_REG_TEMP_OFFSET[i]);
678 }
679
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);
686
687 data->caseopen = w83627ehf_read_value(data,
688 W83627EHF_REG_CASEOPEN_DET);
689
690 data->last_updated = jiffies;
691 data->valid = true;
692 }
693
694 mutex_unlock(&data->update_lock);
695 return data;
696}
697
698#define store_in_reg(REG, reg) \
699static int \
700store_in_##reg(struct device *dev, struct w83627ehf_data *data, int channel, \
701 long val) \
702{ \
703 if (val < 0) \
704 return -EINVAL; \
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); \
710 return 0; \
711}
712
713store_in_reg(MIN, min)
714store_in_reg(MAX, max)
715
716static int
717store_fan_min(struct device *dev, struct w83627ehf_data *data, int channel,
718 long val)
719{
720 unsigned int reg;
721 u8 new_div;
722
723 if (val < 0)
724 return -EINVAL;
725
726 mutex_lock(&data->update_lock);
727 if (!val) {
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",
732 channel + 1);
733 } else if ((reg = 1350000U / val) >= 128 * 255) {
734 /*
735 * Speed below this value cannot possibly be represented,
736 * even with the highest divider (128)
737 */
738 data->fan_min[channel] = 254;
739 new_div = 7; /* 128 == (1 << 7) */
740 dev_warn(dev,
741 "fan%u low limit %lu below minimum %u, set to minimum\n",
742 channel + 1, val, fan_from_reg8(254, 7));
743 } else if (!reg) {
744 /*
745 * Speed above this value cannot possibly be represented,
746 * even with the lowest divider (1)
747 */
748 data->fan_min[channel] = 1;
749 new_div = 0; /* 1 == (1 << 0) */
750 dev_warn(dev,
751 "fan%u low limit %lu above maximum %u, set to maximum\n",
752 channel + 1, val, fan_from_reg8(1, 0));
753 } else {
754 /*
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
758 */
759 new_div = 0;
760 while (reg > 192 && new_div < 7) {
761 reg >>= 1;
762 new_div++;
763 }
764 data->fan_min[channel] = reg;
765 }
766
767 /*
768 * Write both the fan clock divider (if it changed) and the new
769 * fan min (unconditionally)
770 */
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;
779 }
780
781 w83627ehf_write_value(data, W83627EHF_REG_FAN_MIN[channel],
782 data->fan_min[channel]);
783 mutex_unlock(&data->update_lock);
784
785 return 0;
786}
787
788#define store_temp_reg(addr, reg) \
789static int \
790store_##reg(struct device *dev, struct w83627ehf_data *data, int channel, \
791 long val) \
792{ \
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); \
797 return 0; \
798}
799store_temp_reg(reg_temp_over, temp_max);
800store_temp_reg(reg_temp_hyst, temp_max_hyst);
801
802static int
803store_temp_offset(struct device *dev, struct w83627ehf_data *data, int channel,
804 long val)
805{
806 val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), -128, 127);
807
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);
812 return 0;
813}
814
815static int
816store_pwm_mode(struct device *dev, struct w83627ehf_data *data, int channel,
817 long val)
818{
819 u16 reg;
820
821 if (val < 0 || val > 1)
822 return -EINVAL;
823
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]);
828 if (!val)
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);
832 return 0;
833}
834
835static int
836store_pwm(struct device *dev, struct w83627ehf_data *data, int channel,
837 long val)
838{
839 val = clamp_val(val, 0, 255);
840
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);
845 return 0;
846}
847
848static int
849store_pwm_enable(struct device *dev, struct w83627ehf_data *data, int channel,
850 long val)
851{
852 u16 reg;
853
854 if (!val || val < 0 ||
855 (val > 4 && val != data->pwm_enable_orig[channel]))
856 return -EINVAL;
857
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],
865 reg);
866 mutex_unlock(&data->update_lock);
867 return 0;
868}
869
870#define show_tol_temp(reg) \
871static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
872 char *buf) \
873{ \
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); \
879}
880
881show_tol_temp(tolerance)
882show_tol_temp(target_temp)
883
884static ssize_t
885store_target_temp(struct device *dev, struct device_attribute *attr,
886 const char *buf, size_t count)
887{
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;
891 long val;
892 int err;
893
894 err = kstrtol(buf, 10, &val);
895 if (err < 0)
896 return err;
897
898 val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), 0, 127);
899
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);
904 return count;
905}
906
907static ssize_t
908store_tolerance(struct device *dev, struct device_attribute *attr,
909 const char *buf, size_t count)
910{
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;
914 u16 reg;
915 long val;
916 int err;
917
918 err = kstrtol(buf, 10, &val);
919 if (err < 0)
920 return err;
921
922 /* Limit the temp to 0C - 15C */
923 val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), 0, 15);
924
925 mutex_lock(&data->update_lock);
926 reg = w83627ehf_read_value(data, W83627EHF_REG_TOLERANCE[nr]);
927 if (nr == 1)
928 reg = (reg & 0x0f) | (val << 4);
929 else
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);
934 return count;
935}
936
937static SENSOR_DEVICE_ATTR(pwm1_target, 0644, show_target_temp,
938 store_target_temp, 0);
939static SENSOR_DEVICE_ATTR(pwm2_target, 0644, show_target_temp,
940 store_target_temp, 1);
941static SENSOR_DEVICE_ATTR(pwm3_target, 0644, show_target_temp,
942 store_target_temp, 2);
943static SENSOR_DEVICE_ATTR(pwm4_target, 0644, show_target_temp,
944 store_target_temp, 3);
945
946static SENSOR_DEVICE_ATTR(pwm1_tolerance, 0644, show_tolerance,
947 store_tolerance, 0);
948static SENSOR_DEVICE_ATTR(pwm2_tolerance, 0644, show_tolerance,
949 store_tolerance, 1);
950static SENSOR_DEVICE_ATTR(pwm3_tolerance, 0644, show_tolerance,
951 store_tolerance, 2);
952static SENSOR_DEVICE_ATTR(pwm4_tolerance, 0644, show_tolerance,
953 store_tolerance, 3);
954
955/* Smart Fan registers */
956
957#define fan_functions(reg, REG) \
958static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
959 char *buf) \
960{ \
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]); \
966} \
967static ssize_t \
968store_##reg(struct device *dev, struct device_attribute *attr, \
969 const char *buf, size_t count) \
970{ \
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; \
975 unsigned long val; \
976 int err; \
977 err = kstrtoul(buf, 10, &val); \
978 if (err < 0) \
979 return err; \
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); \
985 return count; \
986}
987
988fan_functions(fan_start_output, W83627EHF_REG_FAN_START_OUTPUT)
989fan_functions(fan_stop_output, W83627EHF_REG_FAN_STOP_OUTPUT)
990fan_functions(fan_max_output, data->REG_FAN_MAX_OUTPUT)
991fan_functions(fan_step_output, data->REG_FAN_STEP_OUTPUT)
992
993#define fan_time_functions(reg, REG) \
994static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
995 char *buf) \
996{ \
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])); \
1004} \
1005\
1006static ssize_t \
1007store_##reg(struct device *dev, struct device_attribute *attr, \
1008 const char *buf, size_t count) \
1009{ \
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; \
1015 int err; \
1016 err = kstrtoul(buf, 10, &val); \
1017 if (err < 0) \
1018 return err; \
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); \
1024 return count; \
1025} \
1026
1027fan_time_functions(fan_stop_time, W83627EHF_REG_FAN_STOP_TIME)
1028
1029static SENSOR_DEVICE_ATTR(pwm4_stop_time, 0644, show_fan_stop_time,
1030 store_fan_stop_time, 3);
1031static SENSOR_DEVICE_ATTR(pwm4_start_output, 0644, show_fan_start_output,
1032 store_fan_start_output, 3);
1033static SENSOR_DEVICE_ATTR(pwm4_stop_output, 0644, show_fan_stop_output,
1034 store_fan_stop_output, 3);
1035static SENSOR_DEVICE_ATTR(pwm4_max_output, 0644, show_fan_max_output,
1036 store_fan_max_output, 3);
1037static SENSOR_DEVICE_ATTR(pwm4_step_output, 0644, show_fan_step_output,
1038 store_fan_step_output, 3);
1039
1040static SENSOR_DEVICE_ATTR(pwm3_stop_time, 0644, show_fan_stop_time,
1041 store_fan_stop_time, 2);
1042static SENSOR_DEVICE_ATTR(pwm3_start_output, 0644, show_fan_start_output,
1043 store_fan_start_output, 2);
1044static SENSOR_DEVICE_ATTR(pwm3_stop_output, 0644, show_fan_stop_output,
1045 store_fan_stop_output, 2);
1046
1047static SENSOR_DEVICE_ATTR(pwm1_stop_time, 0644, show_fan_stop_time,
1048 store_fan_stop_time, 0);
1049static SENSOR_DEVICE_ATTR(pwm2_stop_time, 0644, show_fan_stop_time,
1050 store_fan_stop_time, 1);
1051static SENSOR_DEVICE_ATTR(pwm1_start_output, 0644, show_fan_start_output,
1052 store_fan_start_output, 0);
1053static SENSOR_DEVICE_ATTR(pwm2_start_output, 0644, show_fan_start_output,
1054 store_fan_start_output, 1);
1055static SENSOR_DEVICE_ATTR(pwm1_stop_output, 0644, show_fan_stop_output,
1056 store_fan_stop_output, 0);
1057static SENSOR_DEVICE_ATTR(pwm2_stop_output, 0644, show_fan_stop_output,
1058 store_fan_stop_output, 1);
1059
1060
1061/*
1062 * pwm1 and pwm3 don't support max and step settings on all chips.
1063 * Need to check support while generating/removing attribute files.
1064 */
1065static SENSOR_DEVICE_ATTR(pwm1_max_output, 0644, show_fan_max_output,
1066 store_fan_max_output, 0);
1067static SENSOR_DEVICE_ATTR(pwm1_step_output, 0644, show_fan_step_output,
1068 store_fan_step_output, 0);
1069static SENSOR_DEVICE_ATTR(pwm2_max_output, 0644, show_fan_max_output,
1070 store_fan_max_output, 1);
1071static SENSOR_DEVICE_ATTR(pwm2_step_output, 0644, show_fan_step_output,
1072 store_fan_step_output, 1);
1073static SENSOR_DEVICE_ATTR(pwm3_max_output, 0644, show_fan_max_output,
1074 store_fan_max_output, 2);
1075static SENSOR_DEVICE_ATTR(pwm3_step_output, 0644, show_fan_step_output,
1076 store_fan_step_output, 2);
1077
1078static ssize_t
1079cpu0_vid_show(struct device *dev, struct device_attribute *attr, char *buf)
1080{
1081 struct w83627ehf_data *data = dev_get_drvdata(dev);
1082 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
1083}
1084static DEVICE_ATTR_RO(cpu0_vid);
1085
1086
1087/* Case open detection */
1088static int
1089clear_caseopen(struct device *dev, struct w83627ehf_data *data, int channel,
1090 long val)
1091{
1092 const u16 mask = 0x80;
1093 u16 reg;
1094
1095 if (val != 0 || channel != 0)
1096 return -EINVAL;
1097
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);
1104
1105 return 0;
1106}
1107
1108static umode_t w83627ehf_attrs_visible(struct kobject *kobj,
1109 struct attribute *a, int n)
1110{
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;
1115
1116 devattr = container_of(a, struct device_attribute, attr);
1117
1118 /* Not sensor */
1119 if (devattr->show == cpu0_vid_show && data->have_vid)
1120 return a->mode;
1121
1122 sda = (struct sensor_device_attribute *)devattr;
1123
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))
1128 return a->mode;
1129
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)
1135 return a->mode;
1136
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))
1143 return a->mode;
1144
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))
1152 return a->mode;
1153
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)
1158 return a->mode;
1159
1160 return 0;
1161}
1162
1163/* These groups handle non-standard attributes used in this device */
1164static struct attribute *w83627ehf_attrs[] = {
1165
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,
1173
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,
1181
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,
1189
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,
1197
1198 &dev_attr_cpu0_vid.attr,
1199 NULL
1200};
1201
1202static const struct attribute_group w83627ehf_group = {
1203 .attrs = w83627ehf_attrs,
1204 .is_visible = w83627ehf_attrs_visible,
1205};
1206
1207static const struct attribute_group *w83627ehf_groups[] = {
1208 &w83627ehf_group,
1209 NULL
1210};
1211
1212/*
1213 * Driver and device management
1214 */
1215
1216/* Get the monitoring functions started */
1217static inline void w83627ehf_init_device(struct w83627ehf_data *data,
1218 enum kinds kind)
1219{
1220 int i;
1221 u8 tmp, diode;
1222
1223 /* Start monitoring is needed */
1224 tmp = w83627ehf_read_value(data, W83627EHF_REG_CONFIG);
1225 if (!(tmp & 0x01))
1226 w83627ehf_write_value(data, W83627EHF_REG_CONFIG,
1227 tmp | 0x01);
1228
1229 /* Enable temperature sensors if needed */
1230 for (i = 0; i < NUM_REG_TEMP; i++) {
1231 if (!(data->have_temp & (1 << i)))
1232 continue;
1233 if (!data->reg_temp_config[i])
1234 continue;
1235 tmp = w83627ehf_read_value(data,
1236 data->reg_temp_config[i]);
1237 if (tmp & 0x01)
1238 w83627ehf_write_value(data,
1239 data->reg_temp_config[i],
1240 tmp & 0xfe);
1241 }
1242
1243 /* Enable VBAT monitoring if needed */
1244 tmp = w83627ehf_read_value(data, W83627EHF_REG_VBAT);
1245 if (!(tmp & 0x01))
1246 w83627ehf_write_value(data, W83627EHF_REG_VBAT, tmp | 0x01);
1247
1248 /* Get thermal sensor types */
1249 switch (kind) {
1250 case w83627ehf:
1251 diode = w83627ehf_read_value(data, W83627EHF_REG_DIODE);
1252 break;
1253 case w83627uhg:
1254 diode = 0x00;
1255 break;
1256 default:
1257 diode = 0x70;
1258 }
1259 for (i = 0; i < 3; i++) {
1260 const char *label = NULL;
1261
1262 if (data->temp_label)
1263 label = data->temp_label[data->temp_src[i]];
1264
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;
1272 else
1273 data->temp_type[i] = 4; /* thermistor */
1274 }
1275}
1276
1277static void
1278w83627ehf_set_temp_reg_ehf(struct w83627ehf_data *data, int n_temp)
1279{
1280 int i;
1281
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];
1287 }
1288}
1289
1290static void
1291w83627ehf_check_fan_inputs(const struct w83627ehf_sio_data *sio_data,
1292 struct w83627ehf_data *data)
1293{
1294 int fan3pin, fan4pin, fan5pin, regval;
1295
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;
1300 return;
1301 }
1302
1303 /* fan4 and fan5 share some pins with the GPIO and serial flash */
1304 if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b) {
1305 fan3pin = 1;
1306 fan4pin = superio_inb(sio_data->sioreg, 0x27) & 0x40;
1307 fan5pin = superio_inb(sio_data->sioreg, 0x27) & 0x20;
1308 } else {
1309 fan3pin = 1;
1310 fan4pin = !(superio_inb(sio_data->sioreg, 0x29) & 0x06);
1311 fan5pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x02);
1312 }
1313
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);
1317
1318 /*
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.
1324 */
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);
1329 }
1330 if (!(regval & (1 << 1)) && fan5pin) {
1331 data->has_fan |= (1 << 4);
1332 data->has_fan_min |= (1 << 4);
1333 }
1334}
1335
1336static umode_t
1337w83627ehf_is_visible(const void *drvdata, enum hwmon_sensor_types type,
1338 u32 attr, int channel)
1339{
1340 const struct w83627ehf_data *data = drvdata;
1341
1342 switch (type) {
1343 case hwmon_temp:
1344 /* channel 0.., name 1.. */
1345 if (!(data->have_temp & (1 << channel)))
1346 return 0;
1347 if (attr == hwmon_temp_input)
1348 return 0444;
1349 if (attr == hwmon_temp_label) {
1350 if (data->temp_label)
1351 return 0444;
1352 return 0;
1353 }
1354 if (channel == 2 && data->temp3_val_only)
1355 return 0;
1356 if (attr == hwmon_temp_max) {
1357 if (data->reg_temp_over[channel])
1358 return 0644;
1359 else
1360 return 0;
1361 }
1362 if (attr == hwmon_temp_max_hyst) {
1363 if (data->reg_temp_hyst[channel])
1364 return 0644;
1365 else
1366 return 0;
1367 }
1368 if (channel > 2)
1369 return 0;
1370 if (attr == hwmon_temp_alarm || attr == hwmon_temp_type)
1371 return 0444;
1372 if (attr == hwmon_temp_offset) {
1373 if (data->have_temp_offset & (1 << channel))
1374 return 0644;
1375 else
1376 return 0;
1377 }
1378 break;
1379
1380 case hwmon_fan:
1381 /* channel 0.., name 1.. */
1382 if (!(data->has_fan & (1 << channel)))
1383 return 0;
1384 if (attr == hwmon_fan_input || attr == hwmon_fan_alarm)
1385 return 0444;
1386 if (attr == hwmon_fan_div) {
1387 return 0444;
1388 }
1389 if (attr == hwmon_fan_min) {
1390 if (data->has_fan_min & (1 << channel))
1391 return 0644;
1392 else
1393 return 0;
1394 }
1395 break;
1396
1397 case hwmon_in:
1398 /* channel 0.., name 0.. */
1399 if (channel >= data->in_num)
1400 return 0;
1401 if (channel == 6 && data->in6_skip)
1402 return 0;
1403 if (attr == hwmon_in_alarm || attr == hwmon_in_input)
1404 return 0444;
1405 if (attr == hwmon_in_min || attr == hwmon_in_max)
1406 return 0644;
1407 break;
1408
1409 case hwmon_pwm:
1410 /* channel 0.., name 1.. */
1411 if (!(data->has_fan & (1 << channel)) ||
1412 channel >= data->pwm_num)
1413 return 0;
1414 if (attr == hwmon_pwm_mode || attr == hwmon_pwm_enable ||
1415 attr == hwmon_pwm_input)
1416 return 0644;
1417 break;
1418
1419 case hwmon_intrusion:
1420 return 0644;
1421
1422 default: /* Shouldn't happen */
1423 return 0;
1424 }
1425
1426 return 0; /* Shouldn't happen */
1427}
1428
1429static int
1430w83627ehf_do_read_temp(struct w83627ehf_data *data, u32 attr,
1431 int channel, long *val)
1432{
1433 switch (attr) {
1434 case hwmon_temp_input:
1435 *val = LM75_TEMP_FROM_REG(data->temp[channel]);
1436 return 0;
1437 case hwmon_temp_max:
1438 *val = LM75_TEMP_FROM_REG(data->temp_max[channel]);
1439 return 0;
1440 case hwmon_temp_max_hyst:
1441 *val = LM75_TEMP_FROM_REG(data->temp_max_hyst[channel]);
1442 return 0;
1443 case hwmon_temp_offset:
1444 *val = data->temp_offset[channel] * 1000;
1445 return 0;
1446 case hwmon_temp_type:
1447 *val = (int)data->temp_type[channel];
1448 return 0;
1449 case hwmon_temp_alarm:
1450 if (channel < 3) {
1451 int bit[] = { 4, 5, 13 };
1452 *val = (data->alarms >> bit[channel]) & 1;
1453 return 0;
1454 }
1455 break;
1456
1457 default:
1458 break;
1459 }
1460
1461 return -EOPNOTSUPP;
1462}
1463
1464static int
1465w83627ehf_do_read_in(struct w83627ehf_data *data, u32 attr,
1466 int channel, long *val)
1467{
1468 switch (attr) {
1469 case hwmon_in_input:
1470 *val = in_from_reg(data->in[channel], channel, data->scale_in);
1471 return 0;
1472 case hwmon_in_min:
1473 *val = in_from_reg(data->in_min[channel], channel,
1474 data->scale_in);
1475 return 0;
1476 case hwmon_in_max:
1477 *val = in_from_reg(data->in_max[channel], channel,
1478 data->scale_in);
1479 return 0;
1480 case hwmon_in_alarm:
1481 if (channel < 10) {
1482 int bit[] = { 0, 1, 2, 3, 8, 21, 20, 16, 17, 19 };
1483 *val = (data->alarms >> bit[channel]) & 1;
1484 return 0;
1485 }
1486 break;
1487 default:
1488 break;
1489 }
1490 return -EOPNOTSUPP;
1491}
1492
1493static int
1494w83627ehf_do_read_fan(struct w83627ehf_data *data, u32 attr,
1495 int channel, long *val)
1496{
1497 switch (attr) {
1498 case hwmon_fan_input:
1499 *val = data->rpm[channel];
1500 return 0;
1501 case hwmon_fan_min:
1502 *val = fan_from_reg8(data->fan_min[channel],
1503 data->fan_div[channel]);
1504 return 0;
1505 case hwmon_fan_div:
1506 *val = div_from_reg(data->fan_div[channel]);
1507 return 0;
1508 case hwmon_fan_alarm:
1509 if (channel < 5) {
1510 int bit[] = { 6, 7, 11, 10, 23 };
1511 *val = (data->alarms >> bit[channel]) & 1;
1512 return 0;
1513 }
1514 break;
1515 default:
1516 break;
1517 }
1518 return -EOPNOTSUPP;
1519}
1520
1521static int
1522w83627ehf_do_read_pwm(struct w83627ehf_data *data, u32 attr,
1523 int channel, long *val)
1524{
1525 switch (attr) {
1526 case hwmon_pwm_input:
1527 *val = data->pwm[channel];
1528 return 0;
1529 case hwmon_pwm_enable:
1530 *val = data->pwm_enable[channel];
1531 return 0;
1532 case hwmon_pwm_mode:
1533 *val = data->pwm_enable[channel];
1534 return 0;
1535 default:
1536 break;
1537 }
1538 return -EOPNOTSUPP;
1539}
1540
1541static int
1542w83627ehf_do_read_intrusion(struct w83627ehf_data *data, u32 attr,
1543 int channel, long *val)
1544{
1545 if (attr != hwmon_intrusion_alarm || channel != 0)
1546 return -EOPNOTSUPP; /* shouldn't happen */
1547
1548 *val = !!(data->caseopen & 0x10);
1549 return 0;
1550}
1551
1552static int
1553w83627ehf_read(struct device *dev, enum hwmon_sensor_types type,
1554 u32 attr, int channel, long *val)
1555{
1556 struct w83627ehf_data *data = w83627ehf_update_device(dev->parent);
1557
1558 switch (type) {
1559 case hwmon_fan:
1560 return w83627ehf_do_read_fan(data, attr, channel, val);
1561
1562 case hwmon_in:
1563 return w83627ehf_do_read_in(data, attr, channel, val);
1564
1565 case hwmon_pwm:
1566 return w83627ehf_do_read_pwm(data, attr, channel, val);
1567
1568 case hwmon_temp:
1569 return w83627ehf_do_read_temp(data, attr, channel, val);
1570
1571 case hwmon_intrusion:
1572 return w83627ehf_do_read_intrusion(data, attr, channel, val);
1573
1574 default:
1575 break;
1576 }
1577
1578 return -EOPNOTSUPP;
1579}
1580
1581static int
1582w83627ehf_read_string(struct device *dev, enum hwmon_sensor_types type,
1583 u32 attr, int channel, const char **str)
1584{
1585 struct w83627ehf_data *data = dev_get_drvdata(dev);
1586
1587 switch (type) {
1588 case hwmon_temp:
1589 if (attr == hwmon_temp_label) {
1590 *str = data->temp_label[data->temp_src[channel]];
1591 return 0;
1592 }
1593 break;
1594
1595 default:
1596 break;
1597 }
1598 /* Nothing else should be read as a string */
1599 return -EOPNOTSUPP;
1600}
1601
1602static int
1603w83627ehf_write(struct device *dev, enum hwmon_sensor_types type,
1604 u32 attr, int channel, long val)
1605{
1606 struct w83627ehf_data *data = dev_get_drvdata(dev);
1607
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);
1612
1613 if (type == hwmon_fan && attr == hwmon_fan_min)
1614 return store_fan_min(dev, data, channel, val);
1615
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);
1622
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);
1629
1630 if (type == hwmon_intrusion && attr == hwmon_intrusion_alarm)
1631 return clear_caseopen(dev, data, channel, val);
1632
1633 return -EOPNOTSUPP;
1634}
1635
1636static 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,
1641};
1642
1643static 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),
1687 NULL
1688};
1689
1690static const struct hwmon_chip_info w83627ehf_chip_info = {
1691 .ops = &w83627ehf_ops,
1692 .info = w83627ehf_info,
1693};
1694
1695static int __init w83627ehf_probe(struct platform_device *pdev)
1696{
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;
1701 u8 en_vrm10;
1702 int i, err = 0;
1703 struct device *hwmon_dev;
1704
1705 res = platform_get_resource(pdev, IORESOURCE_IO, 0);
1706 if (!devm_request_region(dev, res->start, IOREGION_LENGTH, DRVNAME))
1707 return -EBUSY;
1708
1709 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
1710 if (!data)
1711 return -ENOMEM;
1712
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);
1719
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) {
1724 default:
1725 data->pwm_num = 4;
1726 break;
1727 case w83667hg:
1728 case w83667hg_b:
1729 data->pwm_num = 3;
1730 break;
1731 case w83627uhg:
1732 data->pwm_num = 2;
1733 break;
1734 }
1735
1736 /* Default to 3 temperature inputs, code below will adjust as needed */
1737 data->have_temp = 0x07;
1738
1739 /* Deal with temperature register setup first. */
1740 if (sio_data->kind == w83667hg_b) {
1741 u8 reg;
1742
1743 w83627ehf_set_temp_reg_ehf(data, 4);
1744
1745 /*
1746 * Temperature sources are selected with bank 0, registers 0x49
1747 * and 0x4a.
1748 */
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;
1754
1755 /*
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
1759 * sources.
1760 */
1761 reg = w83627ehf_read_value(data, 0x7d);
1762 reg &= 0x07;
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;
1767 }
1768
1769 /*
1770 * Chip supports either AUXTIN or VIN3. Try to find out which
1771 * one.
1772 */
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);
1776
1777 if ((data->temp_src[2] == 2 && (data->have_temp & (1 << 2)))
1778 || (data->temp_src[3] == 2 && (data->have_temp & (1 << 3))))
1779 data->in6_skip = 1;
1780
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);
1786 }
1787 } else if (sio_data->kind == w83627uhg) {
1788 u8 reg;
1789
1790 w83627ehf_set_temp_reg_ehf(data, 3);
1791
1792 /*
1793 * Temperature sources for temp2 and temp3 are selected with
1794 * bank 0, registers 0x49 and 0x4a.
1795 */
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 */
1799 if (reg == 0)
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;
1807
1808 /*
1809 * Skip temp3 if source is invalid or the same as temp1
1810 * or temp2.
1811 */
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);
1817 else
1818 data->temp3_val_only = 1; /* No limit regs */
1819
1820 data->in6_skip = 1; /* No VIN3 */
1821
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);
1827 }
1828 } else {
1829 w83627ehf_set_temp_reg_ehf(data, 3);
1830
1831 /* Temperature sources are fixed */
1832
1833 if (sio_data->kind == w83667hg) {
1834 u8 reg;
1835
1836 /*
1837 * Chip supports either AUXTIN or VIN3. Try to find
1838 * out which one.
1839 */
1840 reg = w83627ehf_read_value(data,
1841 W83627EHF_REG_TEMP_CONFIG[2]);
1842 if (reg & 0x01)
1843 data->have_temp &= ~(1 << 2);
1844 else
1845 data->in6_skip = 1;
1846 }
1847 data->have_temp_offset = data->have_temp & 0x07;
1848 }
1849
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;
1855 } else {
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;
1860 }
1861
1862 /* Setup input voltage scaling factors */
1863 if (sio_data->kind == w83627uhg)
1864 data->scale_in = scale_in_w83627uhg;
1865 else
1866 data->scale_in = scale_in_common;
1867
1868 /* Initialize the chip */
1869 w83627ehf_init_device(data, sio_data->kind);
1870
1871 data->vrm = vid_which_vrm();
1872
1873 err = superio_enter(sio_data->sioreg);
1874 if (err)
1875 return err;
1876
1877 /* Read VID value */
1878 if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b) {
1879 /*
1880 * W83667HG has different pins for VID input and output, so
1881 * we can get the VID input values directly at logical device D
1882 * 0xe3.
1883 */
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) {
1890 /*
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
1895 * respect.
1896 */
1897 if (sio_data->kind == w83627ehf) {
1898 en_vrm10 = superio_inb(sio_data->sioreg,
1899 SIO_REG_EN_VRM10);
1900 if ((en_vrm10 & 0x08) && data->vrm == 90) {
1901 dev_warn(dev,
1902 "Setting VID input voltage to TTL\n");
1903 superio_outb(sio_data->sioreg,
1904 SIO_REG_EN_VRM10,
1905 en_vrm10 & ~0x08);
1906 } else if (!(en_vrm10 & 0x08)
1907 && data->vrm == 100) {
1908 dev_warn(dev,
1909 "Setting VID input voltage to VRM10\n");
1910 superio_outb(sio_data->sioreg,
1911 SIO_REG_EN_VRM10,
1912 en_vrm10 | 0x08);
1913 }
1914 }
1915
1916 data->vid = superio_inb(sio_data->sioreg,
1917 SIO_REG_VID_DATA);
1918 if (sio_data->kind == w83627ehf) /* 6 VID pins only */
1919 data->vid &= 0x3f;
1920 data->have_vid = true;
1921 } else {
1922 dev_info(dev,
1923 "VID pins in output mode, CPU VID not available\n");
1924 }
1925 }
1926
1927 w83627ehf_check_fan_inputs(sio_data, data);
1928
1929 superio_exit(sio_data->sioreg);
1930
1931 /* Read fan clock dividers immediately */
1932 w83627ehf_update_fan_div(data);
1933
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];
1938
1939 hwmon_dev = devm_hwmon_device_register_with_info(&pdev->dev,
1940 data->name,
1941 data,
1942 &w83627ehf_chip_info,
1943 w83627ehf_groups);
1944 return PTR_ERR_OR_ZERO(hwmon_dev);
1945}
1946
1947static int w83627ehf_suspend(struct device *dev)
1948{
1949 struct w83627ehf_data *data = w83627ehf_update_device(dev);
1950
1951 mutex_lock(&data->update_lock);
1952 data->vbat = w83627ehf_read_value(data, W83627EHF_REG_VBAT);
1953 mutex_unlock(&data->update_lock);
1954
1955 return 0;
1956}
1957
1958static int w83627ehf_resume(struct device *dev)
1959{
1960 struct w83627ehf_data *data = dev_get_drvdata(dev);
1961 int i;
1962
1963 mutex_lock(&data->update_lock);
1964 data->bank = 0xff; /* Force initial bank selection */
1965
1966 /* Restore limits */
1967 for (i = 0; i < data->in_num; i++) {
1968 if ((i == 6) && data->in6_skip)
1969 continue;
1970
1971 w83627ehf_write_value(data, W83627EHF_REG_IN_MIN(i),
1972 data->in_min[i]);
1973 w83627ehf_write_value(data, W83627EHF_REG_IN_MAX(i),
1974 data->in_max[i]);
1975 }
1976
1977 for (i = 0; i < 5; i++) {
1978 if (!(data->has_fan_min & (1 << i)))
1979 continue;
1980
1981 w83627ehf_write_value(data, W83627EHF_REG_FAN_MIN[i],
1982 data->fan_min[i]);
1983 }
1984
1985 for (i = 0; i < NUM_REG_TEMP; i++) {
1986 if (!(data->have_temp & (1 << i)))
1987 continue;
1988
1989 if (data->reg_temp_over[i])
1990 w83627ehf_write_temp(data, data->reg_temp_over[i],
1991 data->temp_max[i]);
1992 if (data->reg_temp_hyst[i])
1993 w83627ehf_write_temp(data, data->reg_temp_hyst[i],
1994 data->temp_max_hyst[i]);
1995 if (i > 2)
1996 continue;
1997 if (data->have_temp_offset & (1 << i))
1998 w83627ehf_write_value(data,
1999 W83627EHF_REG_TEMP_OFFSET[i],
2000 data->temp_offset[i]);
2001 }
2002
2003 /* Restore other settings */
2004 w83627ehf_write_value(data, W83627EHF_REG_VBAT, data->vbat);
2005
2006 /* Force re-reading all values */
2007 data->valid = false;
2008 mutex_unlock(&data->update_lock);
2009
2010 return 0;
2011}
2012
2013static DEFINE_SIMPLE_DEV_PM_OPS(w83627ehf_dev_pm_ops, w83627ehf_suspend, w83627ehf_resume);
2014
2015static struct platform_driver w83627ehf_driver = {
2016 .driver = {
2017 .name = DRVNAME,
2018 .pm = pm_sleep_ptr(&w83627ehf_dev_pm_ops),
2019 },
2020};
2021
2022/* w83627ehf_find() looks for a '627 in the Super-I/O config space */
2023static int __init w83627ehf_find(int sioaddr, unsigned short *addr,
2024 struct w83627ehf_sio_data *sio_data)
2025{
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";
2033
2034 u16 val;
2035 const char *sio_name;
2036 int err;
2037
2038 err = superio_enter(sioaddr);
2039 if (err)
2040 return err;
2041
2042 if (force_id)
2043 val = force_id;
2044 else
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;
2051 break;
2052 case SIO_W83627EHG_ID:
2053 sio_data->kind = w83627ehf;
2054 sio_name = sio_name_W83627EHG;
2055 break;
2056 case SIO_W83627DHG_ID:
2057 sio_data->kind = w83627dhg;
2058 sio_name = sio_name_W83627DHG;
2059 break;
2060 case SIO_W83627DHG_P_ID:
2061 sio_data->kind = w83627dhg_p;
2062 sio_name = sio_name_W83627DHG_P;
2063 break;
2064 case SIO_W83627UHG_ID:
2065 sio_data->kind = w83627uhg;
2066 sio_name = sio_name_W83627UHG;
2067 break;
2068 case SIO_W83667HG_ID:
2069 sio_data->kind = w83667hg;
2070 sio_name = sio_name_W83667HG;
2071 break;
2072 case SIO_W83667HG_B_ID:
2073 sio_data->kind = w83667hg_b;
2074 sio_name = sio_name_W83667HG_B;
2075 break;
2076 default:
2077 if (val != 0xffff)
2078 pr_debug("unsupported chip ID: 0x%04x\n", val);
2079 superio_exit(sioaddr);
2080 return -ENODEV;
2081 }
2082
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;
2088 if (*addr == 0) {
2089 pr_err("Refusing to enable a Super-I/O device with a base I/O port 0\n");
2090 superio_exit(sioaddr);
2091 return -ENODEV;
2092 }
2093
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);
2099 }
2100
2101 superio_exit(sioaddr);
2102 pr_info("Found %s chip at %#x\n", sio_name, *addr);
2103 sio_data->sioreg = sioaddr;
2104
2105 return 0;
2106}
2107
2108/*
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.
2112 */
2113static struct platform_device *pdev;
2114
2115static int __init sensors_w83627ehf_init(void)
2116{
2117 int err;
2118 unsigned short address;
2119 struct resource res = {
2120 .name = DRVNAME,
2121 .flags = IORESOURCE_IO,
2122 };
2123 struct w83627ehf_sio_data sio_data;
2124
2125 /*
2126 * initialize sio_data->kind and sio_data->sioreg.
2127 *
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()
2131 */
2132 if (w83627ehf_find(0x2e, &address, &sio_data) &&
2133 w83627ehf_find(0x4e, &address, &sio_data))
2134 return -ENODEV;
2135
2136 res.start = address + IOREGION_OFFSET;
2137 res.end = address + IOREGION_OFFSET + IOREGION_LENGTH - 1;
2138
2139 err = acpi_check_resource_conflict(&res);
2140 if (err)
2141 return err;
2142
2143 pdev = platform_create_bundle(&w83627ehf_driver, w83627ehf_probe, &res, 1, &sio_data,
2144 sizeof(struct w83627ehf_sio_data));
2145
2146 return PTR_ERR_OR_ZERO(pdev);
2147}
2148
2149static void __exit sensors_w83627ehf_exit(void)
2150{
2151 platform_device_unregister(pdev);
2152 platform_driver_unregister(&w83627ehf_driver);
2153}
2154
2155MODULE_AUTHOR("Jean Delvare <jdelvare@suse.de>");
2156MODULE_DESCRIPTION("W83627EHF driver");
2157MODULE_LICENSE("GPL");
2158
2159module_init(sensors_w83627ehf_init);
2160module_exit(sensors_w83627ehf_exit);
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
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)
11 *
12 * Shamelessly ripped from the w83627hf driver
13 * Copyright (C) 2003 Mark Studebaker
14 *
15 * Thanks to Leon Moonen, Steve Cliffe and Grant Coady for their help
16 * in testing and debugging this driver.
17 *
18 * This driver also supports the W83627EHG, which is the lead-free
19 * version of the W83627EHF.
20 *
21 * Supports the following chips:
22 *
23 * Chip #vin #fan #pwm #temp chip IDs man ID
24 * w83627ehf 10 5 4 3 0x8850 0x88 0x5ca3
25 * 0x8860 0xa1
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
31 * nct6775f 9 4 3 9 0xb470 0xc1 0x5ca3
32 * nct6776f 9 5 3 9 0xC330 0xc1 0x5ca3
33 */
34
35#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
36
37#include <linux/module.h>
38#include <linux/init.h>
39#include <linux/slab.h>
40#include <linux/jiffies.h>
41#include <linux/platform_device.h>
42#include <linux/hwmon.h>
43#include <linux/hwmon-sysfs.h>
44#include <linux/hwmon-vid.h>
45#include <linux/err.h>
46#include <linux/mutex.h>
47#include <linux/acpi.h>
48#include <linux/io.h>
49#include "lm75.h"
50
51enum kinds {
52 w83627ehf, w83627dhg, w83627dhg_p, w83627uhg,
53 w83667hg, w83667hg_b, nct6775, nct6776,
54};
55
56/* used to set data->name = w83627ehf_device_names[data->sio_kind] */
57static const char * const w83627ehf_device_names[] = {
58 "w83627ehf",
59 "w83627dhg",
60 "w83627dhg",
61 "w83627uhg",
62 "w83667hg",
63 "w83667hg",
64 "nct6775",
65 "nct6776",
66};
67
68static unsigned short force_id;
69module_param(force_id, ushort, 0);
70MODULE_PARM_DESC(force_id, "Override the detected device ID");
71
72static unsigned short fan_debounce;
73module_param(fan_debounce, ushort, 0);
74MODULE_PARM_DESC(fan_debounce, "Enable debouncing for fan RPM signal");
75
76#define DRVNAME "w83627ehf"
77
78/*
79 * Super-I/O constants and functions
80 */
81
82#define W83627EHF_LD_HWM 0x0b
83#define W83667HG_LD_VID 0x0d
84
85#define SIO_REG_LDSEL 0x07 /* Logical device select */
86#define SIO_REG_DEVID 0x20 /* Device ID (2 bytes) */
87#define SIO_REG_EN_VRM10 0x2C /* GPIO3, GPIO4 selection */
88#define SIO_REG_ENABLE 0x30 /* Logical device enable */
89#define SIO_REG_ADDR 0x60 /* Logical device address (2 bytes) */
90#define SIO_REG_VID_CTRL 0xF0 /* VID control */
91#define SIO_REG_VID_DATA 0xF1 /* VID data */
92
93#define SIO_W83627EHF_ID 0x8850
94#define SIO_W83627EHG_ID 0x8860
95#define SIO_W83627DHG_ID 0xa020
96#define SIO_W83627DHG_P_ID 0xb070
97#define SIO_W83627UHG_ID 0xa230
98#define SIO_W83667HG_ID 0xa510
99#define SIO_W83667HG_B_ID 0xb350
100#define SIO_NCT6775_ID 0xb470
101#define SIO_NCT6776_ID 0xc330
102#define SIO_ID_MASK 0xFFF0
103
104static inline void
105superio_outb(int ioreg, int reg, int val)
106{
107 outb(reg, ioreg);
108 outb(val, ioreg + 1);
109}
110
111static inline int
112superio_inb(int ioreg, int reg)
113{
114 outb(reg, ioreg);
115 return inb(ioreg + 1);
116}
117
118static inline void
119superio_select(int ioreg, int ld)
120{
121 outb(SIO_REG_LDSEL, ioreg);
122 outb(ld, ioreg + 1);
123}
124
125static inline int
126superio_enter(int ioreg)
127{
128 if (!request_muxed_region(ioreg, 2, DRVNAME))
129 return -EBUSY;
130
131 outb(0x87, ioreg);
132 outb(0x87, ioreg);
133
134 return 0;
135}
136
137static inline void
138superio_exit(int ioreg)
139{
140 outb(0xaa, ioreg);
141 outb(0x02, ioreg);
142 outb(0x02, ioreg + 1);
143 release_region(ioreg, 2);
144}
145
146/*
147 * ISA constants
148 */
149
150#define IOREGION_ALIGNMENT (~7)
151#define IOREGION_OFFSET 5
152#define IOREGION_LENGTH 2
153#define ADDR_REG_OFFSET 0
154#define DATA_REG_OFFSET 1
155
156#define W83627EHF_REG_BANK 0x4E
157#define W83627EHF_REG_CONFIG 0x40
158
159/*
160 * Not currently used:
161 * REG_MAN_ID has the value 0x5ca3 for all supported chips.
162 * REG_CHIP_ID == 0x88/0xa1/0xc1 depending on chip model.
163 * REG_MAN_ID is at port 0x4f
164 * REG_CHIP_ID is at port 0x58
165 */
166
167static const u16 W83627EHF_REG_FAN[] = { 0x28, 0x29, 0x2a, 0x3f, 0x553 };
168static const u16 W83627EHF_REG_FAN_MIN[] = { 0x3b, 0x3c, 0x3d, 0x3e, 0x55c };
169
170/* The W83627EHF registers for nr=7,8,9 are in bank 5 */
171#define W83627EHF_REG_IN_MAX(nr) ((nr < 7) ? (0x2b + (nr) * 2) : \
172 (0x554 + (((nr) - 7) * 2)))
173#define W83627EHF_REG_IN_MIN(nr) ((nr < 7) ? (0x2c + (nr) * 2) : \
174 (0x555 + (((nr) - 7) * 2)))
175#define W83627EHF_REG_IN(nr) ((nr < 7) ? (0x20 + (nr)) : \
176 (0x550 + (nr) - 7))
177
178static const u16 W83627EHF_REG_TEMP[] = { 0x27, 0x150, 0x250, 0x7e };
179static const u16 W83627EHF_REG_TEMP_HYST[] = { 0x3a, 0x153, 0x253, 0 };
180static const u16 W83627EHF_REG_TEMP_OVER[] = { 0x39, 0x155, 0x255, 0 };
181static const u16 W83627EHF_REG_TEMP_CONFIG[] = { 0, 0x152, 0x252, 0 };
182
183/* Fan clock dividers are spread over the following five registers */
184#define W83627EHF_REG_FANDIV1 0x47
185#define W83627EHF_REG_FANDIV2 0x4B
186#define W83627EHF_REG_VBAT 0x5D
187#define W83627EHF_REG_DIODE 0x59
188#define W83627EHF_REG_SMI_OVT 0x4C
189
190/* NCT6775F has its own fan divider registers */
191#define NCT6775_REG_FANDIV1 0x506
192#define NCT6775_REG_FANDIV2 0x507
193#define NCT6775_REG_FAN_DEBOUNCE 0xf0
194
195#define W83627EHF_REG_ALARM1 0x459
196#define W83627EHF_REG_ALARM2 0x45A
197#define W83627EHF_REG_ALARM3 0x45B
198
199#define W83627EHF_REG_CASEOPEN_DET 0x42 /* SMI STATUS #2 */
200#define W83627EHF_REG_CASEOPEN_CLR 0x46 /* SMI MASK #3 */
201
202/* SmartFan registers */
203#define W83627EHF_REG_FAN_STEPUP_TIME 0x0f
204#define W83627EHF_REG_FAN_STEPDOWN_TIME 0x0e
205
206/* DC or PWM output fan configuration */
207static const u8 W83627EHF_REG_PWM_ENABLE[] = {
208 0x04, /* SYS FAN0 output mode and PWM mode */
209 0x04, /* CPU FAN0 output mode and PWM mode */
210 0x12, /* AUX FAN mode */
211 0x62, /* CPU FAN1 mode */
212};
213
214static const u8 W83627EHF_PWM_MODE_SHIFT[] = { 0, 1, 0, 6 };
215static const u8 W83627EHF_PWM_ENABLE_SHIFT[] = { 2, 4, 1, 4 };
216
217/* FAN Duty Cycle, be used to control */
218static const u16 W83627EHF_REG_PWM[] = { 0x01, 0x03, 0x11, 0x61 };
219static const u16 W83627EHF_REG_TARGET[] = { 0x05, 0x06, 0x13, 0x63 };
220static const u8 W83627EHF_REG_TOLERANCE[] = { 0x07, 0x07, 0x14, 0x62 };
221
222/* Advanced Fan control, some values are common for all fans */
223static const u16 W83627EHF_REG_FAN_START_OUTPUT[] = { 0x0a, 0x0b, 0x16, 0x65 };
224static const u16 W83627EHF_REG_FAN_STOP_OUTPUT[] = { 0x08, 0x09, 0x15, 0x64 };
225static const u16 W83627EHF_REG_FAN_STOP_TIME[] = { 0x0c, 0x0d, 0x17, 0x66 };
226
227static const u16 W83627EHF_REG_FAN_MAX_OUTPUT_COMMON[]
228 = { 0xff, 0x67, 0xff, 0x69 };
229static const u16 W83627EHF_REG_FAN_STEP_OUTPUT_COMMON[]
230 = { 0xff, 0x68, 0xff, 0x6a };
231
232static const u16 W83627EHF_REG_FAN_MAX_OUTPUT_W83667_B[] = { 0x67, 0x69, 0x6b };
233static const u16 W83627EHF_REG_FAN_STEP_OUTPUT_W83667_B[]
234 = { 0x68, 0x6a, 0x6c };
235
236static const u16 W83627EHF_REG_TEMP_OFFSET[] = { 0x454, 0x455, 0x456 };
237
238static const u16 NCT6775_REG_TARGET[] = { 0x101, 0x201, 0x301 };
239static const u16 NCT6775_REG_FAN_MODE[] = { 0x102, 0x202, 0x302 };
240static const u16 NCT6775_REG_FAN_STOP_OUTPUT[] = { 0x105, 0x205, 0x305 };
241static const u16 NCT6775_REG_FAN_START_OUTPUT[] = { 0x106, 0x206, 0x306 };
242static const u16 NCT6775_REG_FAN_STOP_TIME[] = { 0x107, 0x207, 0x307 };
243static const u16 NCT6775_REG_PWM[] = { 0x109, 0x209, 0x309 };
244static const u16 NCT6775_REG_FAN_MAX_OUTPUT[] = { 0x10a, 0x20a, 0x30a };
245static const u16 NCT6775_REG_FAN_STEP_OUTPUT[] = { 0x10b, 0x20b, 0x30b };
246static const u16 NCT6775_REG_FAN[] = { 0x630, 0x632, 0x634, 0x636, 0x638 };
247static const u16 NCT6776_REG_FAN_MIN[] = { 0x63a, 0x63c, 0x63e, 0x640, 0x642};
248
249static const u16 NCT6775_REG_TEMP[]
250 = { 0x27, 0x150, 0x250, 0x73, 0x75, 0x77, 0x62b, 0x62c, 0x62d };
251static const u16 NCT6775_REG_TEMP_CONFIG[]
252 = { 0, 0x152, 0x252, 0, 0, 0, 0x628, 0x629, 0x62A };
253static const u16 NCT6775_REG_TEMP_HYST[]
254 = { 0x3a, 0x153, 0x253, 0, 0, 0, 0x673, 0x678, 0x67D };
255static const u16 NCT6775_REG_TEMP_OVER[]
256 = { 0x39, 0x155, 0x255, 0, 0, 0, 0x672, 0x677, 0x67C };
257static const u16 NCT6775_REG_TEMP_SOURCE[]
258 = { 0x621, 0x622, 0x623, 0x100, 0x200, 0x300, 0x624, 0x625, 0x626 };
259
260static const char *const w83667hg_b_temp_label[] = {
261 "SYSTIN",
262 "CPUTIN",
263 "AUXTIN",
264 "AMDTSI",
265 "PECI Agent 1",
266 "PECI Agent 2",
267 "PECI Agent 3",
268 "PECI Agent 4"
269};
270
271static const char *const nct6775_temp_label[] = {
272 "",
273 "SYSTIN",
274 "CPUTIN",
275 "AUXTIN",
276 "AMD SB-TSI",
277 "PECI Agent 0",
278 "PECI Agent 1",
279 "PECI Agent 2",
280 "PECI Agent 3",
281 "PECI Agent 4",
282 "PECI Agent 5",
283 "PECI Agent 6",
284 "PECI Agent 7",
285 "PCH_CHIP_CPU_MAX_TEMP",
286 "PCH_CHIP_TEMP",
287 "PCH_CPU_TEMP",
288 "PCH_MCH_TEMP",
289 "PCH_DIM0_TEMP",
290 "PCH_DIM1_TEMP",
291 "PCH_DIM2_TEMP",
292 "PCH_DIM3_TEMP"
293};
294
295static const char *const nct6776_temp_label[] = {
296 "",
297 "SYSTIN",
298 "CPUTIN",
299 "AUXTIN",
300 "SMBUSMASTER 0",
301 "SMBUSMASTER 1",
302 "SMBUSMASTER 2",
303 "SMBUSMASTER 3",
304 "SMBUSMASTER 4",
305 "SMBUSMASTER 5",
306 "SMBUSMASTER 6",
307 "SMBUSMASTER 7",
308 "PECI Agent 0",
309 "PECI Agent 1",
310 "PCH_CHIP_CPU_MAX_TEMP",
311 "PCH_CHIP_TEMP",
312 "PCH_CPU_TEMP",
313 "PCH_MCH_TEMP",
314 "PCH_DIM0_TEMP",
315 "PCH_DIM1_TEMP",
316 "PCH_DIM2_TEMP",
317 "PCH_DIM3_TEMP",
318 "BYTE_TEMP"
319};
320
321#define NUM_REG_TEMP ARRAY_SIZE(NCT6775_REG_TEMP)
322
323static int is_word_sized(u16 reg)
324{
325 return ((((reg & 0xff00) == 0x100
326 || (reg & 0xff00) == 0x200)
327 && ((reg & 0x00ff) == 0x50
328 || (reg & 0x00ff) == 0x53
329 || (reg & 0x00ff) == 0x55))
330 || (reg & 0xfff0) == 0x630
331 || reg == 0x640 || reg == 0x642
332 || ((reg & 0xfff0) == 0x650
333 && (reg & 0x000f) >= 0x06)
334 || reg == 0x73 || reg == 0x75 || reg == 0x77
335 );
336}
337
338/*
339 * Conversions
340 */
341
342/* 1 is PWM mode, output in ms */
343static inline unsigned int step_time_from_reg(u8 reg, u8 mode)
344{
345 return mode ? 100 * reg : 400 * reg;
346}
347
348static inline u8 step_time_to_reg(unsigned int msec, u8 mode)
349{
350 return clamp_val((mode ? (msec + 50) / 100 : (msec + 200) / 400),
351 1, 255);
352}
353
354static unsigned int fan_from_reg8(u16 reg, unsigned int divreg)
355{
356 if (reg == 0 || reg == 255)
357 return 0;
358 return 1350000U / (reg << divreg);
359}
360
361static unsigned int fan_from_reg13(u16 reg, unsigned int divreg)
362{
363 if ((reg & 0xff1f) == 0xff1f)
364 return 0;
365
366 reg = (reg & 0x1f) | ((reg & 0xff00) >> 3);
367
368 if (reg == 0)
369 return 0;
370
371 return 1350000U / reg;
372}
373
374static unsigned int fan_from_reg16(u16 reg, unsigned int divreg)
375{
376 if (reg == 0 || reg == 0xffff)
377 return 0;
378
379 /*
380 * Even though the registers are 16 bit wide, the fan divisor
381 * still applies.
382 */
383 return 1350000U / (reg << divreg);
384}
385
386static inline unsigned int
387div_from_reg(u8 reg)
388{
389 return 1 << reg;
390}
391
392/*
393 * Some of the voltage inputs have internal scaling, the tables below
394 * contain 8 (the ADC LSB in mV) * scaling factor * 100
395 */
396static const u16 scale_in_common[10] = {
397 800, 800, 1600, 1600, 800, 800, 800, 1600, 1600, 800
398};
399static const u16 scale_in_w83627uhg[9] = {
400 800, 800, 3328, 3424, 800, 800, 0, 3328, 3400
401};
402
403static inline long in_from_reg(u8 reg, u8 nr, const u16 *scale_in)
404{
405 return DIV_ROUND_CLOSEST(reg * scale_in[nr], 100);
406}
407
408static inline u8 in_to_reg(u32 val, u8 nr, const u16 *scale_in)
409{
410 return clamp_val(DIV_ROUND_CLOSEST(val * 100, scale_in[nr]), 0, 255);
411}
412
413/*
414 * Data structures and manipulation thereof
415 */
416
417struct w83627ehf_data {
418 int addr; /* IO base of hw monitor block */
419 const char *name;
420
421 struct device *hwmon_dev;
422 struct mutex lock;
423
424 u16 reg_temp[NUM_REG_TEMP];
425 u16 reg_temp_over[NUM_REG_TEMP];
426 u16 reg_temp_hyst[NUM_REG_TEMP];
427 u16 reg_temp_config[NUM_REG_TEMP];
428 u8 temp_src[NUM_REG_TEMP];
429 const char * const *temp_label;
430
431 const u16 *REG_PWM;
432 const u16 *REG_TARGET;
433 const u16 *REG_FAN;
434 const u16 *REG_FAN_MIN;
435 const u16 *REG_FAN_START_OUTPUT;
436 const u16 *REG_FAN_STOP_OUTPUT;
437 const u16 *REG_FAN_STOP_TIME;
438 const u16 *REG_FAN_MAX_OUTPUT;
439 const u16 *REG_FAN_STEP_OUTPUT;
440 const u16 *scale_in;
441
442 unsigned int (*fan_from_reg)(u16 reg, unsigned int divreg);
443 unsigned int (*fan_from_reg_min)(u16 reg, unsigned int divreg);
444
445 struct mutex update_lock;
446 char valid; /* !=0 if following fields are valid */
447 unsigned long last_updated; /* In jiffies */
448
449 /* Register values */
450 u8 bank; /* current register bank */
451 u8 in_num; /* number of in inputs we have */
452 u8 in[10]; /* Register value */
453 u8 in_max[10]; /* Register value */
454 u8 in_min[10]; /* Register value */
455 unsigned int rpm[5];
456 u16 fan_min[5];
457 u8 fan_div[5];
458 u8 has_fan; /* some fan inputs can be disabled */
459 u8 has_fan_min; /* some fans don't have min register */
460 bool has_fan_div;
461 u8 temp_type[3];
462 s8 temp_offset[3];
463 s16 temp[9];
464 s16 temp_max[9];
465 s16 temp_max_hyst[9];
466 u32 alarms;
467 u8 caseopen;
468
469 u8 pwm_mode[4]; /* 0->DC variable voltage, 1->PWM variable duty cycle */
470 u8 pwm_enable[4]; /* 1->manual
471 * 2->thermal cruise mode (also called SmartFan I)
472 * 3->fan speed cruise mode
473 * 4->variable thermal cruise (also called
474 * SmartFan III)
475 * 5->enhanced variable thermal cruise (also called
476 * SmartFan IV)
477 */
478 u8 pwm_enable_orig[4]; /* original value of pwm_enable */
479 u8 pwm_num; /* number of pwm */
480 u8 pwm[4];
481 u8 target_temp[4];
482 u8 tolerance[4];
483
484 u8 fan_start_output[4]; /* minimum fan speed when spinning up */
485 u8 fan_stop_output[4]; /* minimum fan speed when spinning down */
486 u8 fan_stop_time[4]; /* time at minimum before disabling fan */
487 u8 fan_max_output[4]; /* maximum fan speed */
488 u8 fan_step_output[4]; /* rate of change output value */
489
490 u8 vid;
491 u8 vrm;
492
493 u16 have_temp;
494 u16 have_temp_offset;
495 u8 in6_skip:1;
496 u8 temp3_val_only:1;
497
498#ifdef CONFIG_PM
499 /* Remember extra register values over suspend/resume */
500 u8 vbat;
501 u8 fandiv1;
502 u8 fandiv2;
503#endif
504};
505
506struct w83627ehf_sio_data {
507 int sioreg;
508 enum kinds kind;
509};
510
511/*
512 * On older chips, only registers 0x50-0x5f are banked.
513 * On more recent chips, all registers are banked.
514 * Assume that is the case and set the bank number for each access.
515 * Cache the bank number so it only needs to be set if it changes.
516 */
517static inline void w83627ehf_set_bank(struct w83627ehf_data *data, u16 reg)
518{
519 u8 bank = reg >> 8;
520 if (data->bank != bank) {
521 outb_p(W83627EHF_REG_BANK, data->addr + ADDR_REG_OFFSET);
522 outb_p(bank, data->addr + DATA_REG_OFFSET);
523 data->bank = bank;
524 }
525}
526
527static u16 w83627ehf_read_value(struct w83627ehf_data *data, u16 reg)
528{
529 int res, word_sized = is_word_sized(reg);
530
531 mutex_lock(&data->lock);
532
533 w83627ehf_set_bank(data, reg);
534 outb_p(reg & 0xff, data->addr + ADDR_REG_OFFSET);
535 res = inb_p(data->addr + DATA_REG_OFFSET);
536 if (word_sized) {
537 outb_p((reg & 0xff) + 1,
538 data->addr + ADDR_REG_OFFSET);
539 res = (res << 8) + inb_p(data->addr + DATA_REG_OFFSET);
540 }
541
542 mutex_unlock(&data->lock);
543 return res;
544}
545
546static int w83627ehf_write_value(struct w83627ehf_data *data, u16 reg,
547 u16 value)
548{
549 int word_sized = is_word_sized(reg);
550
551 mutex_lock(&data->lock);
552
553 w83627ehf_set_bank(data, reg);
554 outb_p(reg & 0xff, data->addr + ADDR_REG_OFFSET);
555 if (word_sized) {
556 outb_p(value >> 8, data->addr + DATA_REG_OFFSET);
557 outb_p((reg & 0xff) + 1,
558 data->addr + ADDR_REG_OFFSET);
559 }
560 outb_p(value & 0xff, data->addr + DATA_REG_OFFSET);
561
562 mutex_unlock(&data->lock);
563 return 0;
564}
565
566/* We left-align 8-bit temperature values to make the code simpler */
567static u16 w83627ehf_read_temp(struct w83627ehf_data *data, u16 reg)
568{
569 u16 res;
570
571 res = w83627ehf_read_value(data, reg);
572 if (!is_word_sized(reg))
573 res <<= 8;
574
575 return res;
576}
577
578static int w83627ehf_write_temp(struct w83627ehf_data *data, u16 reg,
579 u16 value)
580{
581 if (!is_word_sized(reg))
582 value >>= 8;
583 return w83627ehf_write_value(data, reg, value);
584}
585
586/* This function assumes that the caller holds data->update_lock */
587static void nct6775_write_fan_div(struct w83627ehf_data *data, int nr)
588{
589 u8 reg;
590
591 switch (nr) {
592 case 0:
593 reg = (w83627ehf_read_value(data, NCT6775_REG_FANDIV1) & 0x70)
594 | (data->fan_div[0] & 0x7);
595 w83627ehf_write_value(data, NCT6775_REG_FANDIV1, reg);
596 break;
597 case 1:
598 reg = (w83627ehf_read_value(data, NCT6775_REG_FANDIV1) & 0x7)
599 | ((data->fan_div[1] << 4) & 0x70);
600 w83627ehf_write_value(data, NCT6775_REG_FANDIV1, reg);
601 break;
602 case 2:
603 reg = (w83627ehf_read_value(data, NCT6775_REG_FANDIV2) & 0x70)
604 | (data->fan_div[2] & 0x7);
605 w83627ehf_write_value(data, NCT6775_REG_FANDIV2, reg);
606 break;
607 case 3:
608 reg = (w83627ehf_read_value(data, NCT6775_REG_FANDIV2) & 0x7)
609 | ((data->fan_div[3] << 4) & 0x70);
610 w83627ehf_write_value(data, NCT6775_REG_FANDIV2, reg);
611 break;
612 }
613}
614
615/* This function assumes that the caller holds data->update_lock */
616static void w83627ehf_write_fan_div(struct w83627ehf_data *data, int nr)
617{
618 u8 reg;
619
620 switch (nr) {
621 case 0:
622 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV1) & 0xcf)
623 | ((data->fan_div[0] & 0x03) << 4);
624 /* fan5 input control bit is write only, compute the value */
625 reg |= (data->has_fan & (1 << 4)) ? 1 : 0;
626 w83627ehf_write_value(data, W83627EHF_REG_FANDIV1, reg);
627 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0xdf)
628 | ((data->fan_div[0] & 0x04) << 3);
629 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg);
630 break;
631 case 1:
632 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV1) & 0x3f)
633 | ((data->fan_div[1] & 0x03) << 6);
634 /* fan5 input control bit is write only, compute the value */
635 reg |= (data->has_fan & (1 << 4)) ? 1 : 0;
636 w83627ehf_write_value(data, W83627EHF_REG_FANDIV1, reg);
637 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0xbf)
638 | ((data->fan_div[1] & 0x04) << 4);
639 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg);
640 break;
641 case 2:
642 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV2) & 0x3f)
643 | ((data->fan_div[2] & 0x03) << 6);
644 w83627ehf_write_value(data, W83627EHF_REG_FANDIV2, reg);
645 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0x7f)
646 | ((data->fan_div[2] & 0x04) << 5);
647 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg);
648 break;
649 case 3:
650 reg = (w83627ehf_read_value(data, W83627EHF_REG_DIODE) & 0xfc)
651 | (data->fan_div[3] & 0x03);
652 w83627ehf_write_value(data, W83627EHF_REG_DIODE, reg);
653 reg = (w83627ehf_read_value(data, W83627EHF_REG_SMI_OVT) & 0x7f)
654 | ((data->fan_div[3] & 0x04) << 5);
655 w83627ehf_write_value(data, W83627EHF_REG_SMI_OVT, reg);
656 break;
657 case 4:
658 reg = (w83627ehf_read_value(data, W83627EHF_REG_DIODE) & 0x73)
659 | ((data->fan_div[4] & 0x03) << 2)
660 | ((data->fan_div[4] & 0x04) << 5);
661 w83627ehf_write_value(data, W83627EHF_REG_DIODE, reg);
662 break;
663 }
664}
665
666static void w83627ehf_write_fan_div_common(struct device *dev,
667 struct w83627ehf_data *data, int nr)
668{
669 struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
670
671 if (sio_data->kind == nct6776)
672 ; /* no dividers, do nothing */
673 else if (sio_data->kind == nct6775)
674 nct6775_write_fan_div(data, nr);
675 else
676 w83627ehf_write_fan_div(data, nr);
677}
678
679static void nct6775_update_fan_div(struct w83627ehf_data *data)
680{
681 u8 i;
682
683 i = w83627ehf_read_value(data, NCT6775_REG_FANDIV1);
684 data->fan_div[0] = i & 0x7;
685 data->fan_div[1] = (i & 0x70) >> 4;
686 i = w83627ehf_read_value(data, NCT6775_REG_FANDIV2);
687 data->fan_div[2] = i & 0x7;
688 if (data->has_fan & (1<<3))
689 data->fan_div[3] = (i & 0x70) >> 4;
690}
691
692static void w83627ehf_update_fan_div(struct w83627ehf_data *data)
693{
694 int i;
695
696 i = w83627ehf_read_value(data, W83627EHF_REG_FANDIV1);
697 data->fan_div[0] = (i >> 4) & 0x03;
698 data->fan_div[1] = (i >> 6) & 0x03;
699 i = w83627ehf_read_value(data, W83627EHF_REG_FANDIV2);
700 data->fan_div[2] = (i >> 6) & 0x03;
701 i = w83627ehf_read_value(data, W83627EHF_REG_VBAT);
702 data->fan_div[0] |= (i >> 3) & 0x04;
703 data->fan_div[1] |= (i >> 4) & 0x04;
704 data->fan_div[2] |= (i >> 5) & 0x04;
705 if (data->has_fan & ((1 << 3) | (1 << 4))) {
706 i = w83627ehf_read_value(data, W83627EHF_REG_DIODE);
707 data->fan_div[3] = i & 0x03;
708 data->fan_div[4] = ((i >> 2) & 0x03)
709 | ((i >> 5) & 0x04);
710 }
711 if (data->has_fan & (1 << 3)) {
712 i = w83627ehf_read_value(data, W83627EHF_REG_SMI_OVT);
713 data->fan_div[3] |= (i >> 5) & 0x04;
714 }
715}
716
717static void w83627ehf_update_fan_div_common(struct device *dev,
718 struct w83627ehf_data *data)
719{
720 struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
721
722 if (sio_data->kind == nct6776)
723 ; /* no dividers, do nothing */
724 else if (sio_data->kind == nct6775)
725 nct6775_update_fan_div(data);
726 else
727 w83627ehf_update_fan_div(data);
728}
729
730static void nct6775_update_pwm(struct w83627ehf_data *data)
731{
732 int i;
733 int pwmcfg, fanmodecfg;
734
735 for (i = 0; i < data->pwm_num; i++) {
736 pwmcfg = w83627ehf_read_value(data,
737 W83627EHF_REG_PWM_ENABLE[i]);
738 fanmodecfg = w83627ehf_read_value(data,
739 NCT6775_REG_FAN_MODE[i]);
740 data->pwm_mode[i] =
741 ((pwmcfg >> W83627EHF_PWM_MODE_SHIFT[i]) & 1) ? 0 : 1;
742 data->pwm_enable[i] = ((fanmodecfg >> 4) & 7) + 1;
743 data->tolerance[i] = fanmodecfg & 0x0f;
744 data->pwm[i] = w83627ehf_read_value(data, data->REG_PWM[i]);
745 }
746}
747
748static void w83627ehf_update_pwm(struct w83627ehf_data *data)
749{
750 int i;
751 int pwmcfg = 0, tolerance = 0; /* shut up the compiler */
752
753 for (i = 0; i < data->pwm_num; i++) {
754 if (!(data->has_fan & (1 << i)))
755 continue;
756
757 /* pwmcfg, tolerance mapped for i=0, i=1 to same reg */
758 if (i != 1) {
759 pwmcfg = w83627ehf_read_value(data,
760 W83627EHF_REG_PWM_ENABLE[i]);
761 tolerance = w83627ehf_read_value(data,
762 W83627EHF_REG_TOLERANCE[i]);
763 }
764 data->pwm_mode[i] =
765 ((pwmcfg >> W83627EHF_PWM_MODE_SHIFT[i]) & 1) ? 0 : 1;
766 data->pwm_enable[i] = ((pwmcfg >> W83627EHF_PWM_ENABLE_SHIFT[i])
767 & 3) + 1;
768 data->pwm[i] = w83627ehf_read_value(data, data->REG_PWM[i]);
769
770 data->tolerance[i] = (tolerance >> (i == 1 ? 4 : 0)) & 0x0f;
771 }
772}
773
774static void w83627ehf_update_pwm_common(struct device *dev,
775 struct w83627ehf_data *data)
776{
777 struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
778
779 if (sio_data->kind == nct6775 || sio_data->kind == nct6776)
780 nct6775_update_pwm(data);
781 else
782 w83627ehf_update_pwm(data);
783}
784
785static struct w83627ehf_data *w83627ehf_update_device(struct device *dev)
786{
787 struct w83627ehf_data *data = dev_get_drvdata(dev);
788 struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
789
790 int i;
791
792 mutex_lock(&data->update_lock);
793
794 if (time_after(jiffies, data->last_updated + HZ + HZ/2)
795 || !data->valid) {
796 /* Fan clock dividers */
797 w83627ehf_update_fan_div_common(dev, data);
798
799 /* Measured voltages and limits */
800 for (i = 0; i < data->in_num; i++) {
801 if ((i == 6) && data->in6_skip)
802 continue;
803
804 data->in[i] = w83627ehf_read_value(data,
805 W83627EHF_REG_IN(i));
806 data->in_min[i] = w83627ehf_read_value(data,
807 W83627EHF_REG_IN_MIN(i));
808 data->in_max[i] = w83627ehf_read_value(data,
809 W83627EHF_REG_IN_MAX(i));
810 }
811
812 /* Measured fan speeds and limits */
813 for (i = 0; i < 5; i++) {
814 u16 reg;
815
816 if (!(data->has_fan & (1 << i)))
817 continue;
818
819 reg = w83627ehf_read_value(data, data->REG_FAN[i]);
820 data->rpm[i] = data->fan_from_reg(reg,
821 data->fan_div[i]);
822
823 if (data->has_fan_min & (1 << i))
824 data->fan_min[i] = w83627ehf_read_value(data,
825 data->REG_FAN_MIN[i]);
826
827 /*
828 * If we failed to measure the fan speed and clock
829 * divider can be increased, let's try that for next
830 * time
831 */
832 if (data->has_fan_div
833 && (reg >= 0xff || (sio_data->kind == nct6775
834 && reg == 0x00))
835 && data->fan_div[i] < 0x07) {
836 dev_dbg(dev,
837 "Increasing fan%d clock divider from %u to %u\n",
838 i + 1, div_from_reg(data->fan_div[i]),
839 div_from_reg(data->fan_div[i] + 1));
840 data->fan_div[i]++;
841 w83627ehf_write_fan_div_common(dev, data, i);
842 /* Preserve min limit if possible */
843 if ((data->has_fan_min & (1 << i))
844 && data->fan_min[i] >= 2
845 && data->fan_min[i] != 255)
846 w83627ehf_write_value(data,
847 data->REG_FAN_MIN[i],
848 (data->fan_min[i] /= 2));
849 }
850 }
851
852 w83627ehf_update_pwm_common(dev, data);
853
854 for (i = 0; i < data->pwm_num; i++) {
855 if (!(data->has_fan & (1 << i)))
856 continue;
857
858 data->fan_start_output[i] =
859 w83627ehf_read_value(data,
860 data->REG_FAN_START_OUTPUT[i]);
861 data->fan_stop_output[i] =
862 w83627ehf_read_value(data,
863 data->REG_FAN_STOP_OUTPUT[i]);
864 data->fan_stop_time[i] =
865 w83627ehf_read_value(data,
866 data->REG_FAN_STOP_TIME[i]);
867
868 if (data->REG_FAN_MAX_OUTPUT &&
869 data->REG_FAN_MAX_OUTPUT[i] != 0xff)
870 data->fan_max_output[i] =
871 w83627ehf_read_value(data,
872 data->REG_FAN_MAX_OUTPUT[i]);
873
874 if (data->REG_FAN_STEP_OUTPUT &&
875 data->REG_FAN_STEP_OUTPUT[i] != 0xff)
876 data->fan_step_output[i] =
877 w83627ehf_read_value(data,
878 data->REG_FAN_STEP_OUTPUT[i]);
879
880 data->target_temp[i] =
881 w83627ehf_read_value(data,
882 data->REG_TARGET[i]) &
883 (data->pwm_mode[i] == 1 ? 0x7f : 0xff);
884 }
885
886 /* Measured temperatures and limits */
887 for (i = 0; i < NUM_REG_TEMP; i++) {
888 if (!(data->have_temp & (1 << i)))
889 continue;
890 data->temp[i] = w83627ehf_read_temp(data,
891 data->reg_temp[i]);
892 if (data->reg_temp_over[i])
893 data->temp_max[i]
894 = w83627ehf_read_temp(data,
895 data->reg_temp_over[i]);
896 if (data->reg_temp_hyst[i])
897 data->temp_max_hyst[i]
898 = w83627ehf_read_temp(data,
899 data->reg_temp_hyst[i]);
900 if (i > 2)
901 continue;
902 if (data->have_temp_offset & (1 << i))
903 data->temp_offset[i]
904 = w83627ehf_read_value(data,
905 W83627EHF_REG_TEMP_OFFSET[i]);
906 }
907
908 data->alarms = w83627ehf_read_value(data,
909 W83627EHF_REG_ALARM1) |
910 (w83627ehf_read_value(data,
911 W83627EHF_REG_ALARM2) << 8) |
912 (w83627ehf_read_value(data,
913 W83627EHF_REG_ALARM3) << 16);
914
915 data->caseopen = w83627ehf_read_value(data,
916 W83627EHF_REG_CASEOPEN_DET);
917
918 data->last_updated = jiffies;
919 data->valid = 1;
920 }
921
922 mutex_unlock(&data->update_lock);
923 return data;
924}
925
926/*
927 * Sysfs callback functions
928 */
929#define show_in_reg(reg) \
930static ssize_t \
931show_##reg(struct device *dev, struct device_attribute *attr, \
932 char *buf) \
933{ \
934 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
935 struct sensor_device_attribute *sensor_attr = \
936 to_sensor_dev_attr(attr); \
937 int nr = sensor_attr->index; \
938 return sprintf(buf, "%ld\n", in_from_reg(data->reg[nr], nr, \
939 data->scale_in)); \
940}
941show_in_reg(in)
942show_in_reg(in_min)
943show_in_reg(in_max)
944
945#define store_in_reg(REG, reg) \
946static ssize_t \
947store_in_##reg(struct device *dev, struct device_attribute *attr, \
948 const char *buf, size_t count) \
949{ \
950 struct w83627ehf_data *data = dev_get_drvdata(dev); \
951 struct sensor_device_attribute *sensor_attr = \
952 to_sensor_dev_attr(attr); \
953 int nr = sensor_attr->index; \
954 unsigned long val; \
955 int err; \
956 err = kstrtoul(buf, 10, &val); \
957 if (err < 0) \
958 return err; \
959 mutex_lock(&data->update_lock); \
960 data->in_##reg[nr] = in_to_reg(val, nr, data->scale_in); \
961 w83627ehf_write_value(data, W83627EHF_REG_IN_##REG(nr), \
962 data->in_##reg[nr]); \
963 mutex_unlock(&data->update_lock); \
964 return count; \
965}
966
967store_in_reg(MIN, min)
968store_in_reg(MAX, max)
969
970static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
971 char *buf)
972{
973 struct w83627ehf_data *data = w83627ehf_update_device(dev);
974 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
975 int nr = sensor_attr->index;
976 return sprintf(buf, "%u\n", (data->alarms >> nr) & 0x01);
977}
978
979static struct sensor_device_attribute sda_in_input[] = {
980 SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
981 SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
982 SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
983 SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
984 SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
985 SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
986 SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
987 SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
988 SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
989 SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
990};
991
992static struct sensor_device_attribute sda_in_alarm[] = {
993 SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
994 SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
995 SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
996 SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
997 SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8),
998 SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 21),
999 SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 20),
1000 SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 16),
1001 SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 17),
1002 SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 19),
1003};
1004
1005static struct sensor_device_attribute sda_in_min[] = {
1006 SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
1007 SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
1008 SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
1009 SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
1010 SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
1011 SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
1012 SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
1013 SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
1014 SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
1015 SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
1016};
1017
1018static struct sensor_device_attribute sda_in_max[] = {
1019 SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
1020 SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
1021 SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
1022 SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
1023 SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
1024 SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
1025 SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
1026 SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
1027 SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
1028 SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
1029};
1030
1031static ssize_t
1032show_fan(struct device *dev, struct device_attribute *attr, char *buf)
1033{
1034 struct w83627ehf_data *data = w83627ehf_update_device(dev);
1035 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1036 int nr = sensor_attr->index;
1037 return sprintf(buf, "%d\n", data->rpm[nr]);
1038}
1039
1040static ssize_t
1041show_fan_min(struct device *dev, struct device_attribute *attr, char *buf)
1042{
1043 struct w83627ehf_data *data = w83627ehf_update_device(dev);
1044 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1045 int nr = sensor_attr->index;
1046 return sprintf(buf, "%d\n",
1047 data->fan_from_reg_min(data->fan_min[nr],
1048 data->fan_div[nr]));
1049}
1050
1051static ssize_t
1052show_fan_div(struct device *dev, struct device_attribute *attr,
1053 char *buf)
1054{
1055 struct w83627ehf_data *data = w83627ehf_update_device(dev);
1056 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1057 int nr = sensor_attr->index;
1058 return sprintf(buf, "%u\n", div_from_reg(data->fan_div[nr]));
1059}
1060
1061static ssize_t
1062store_fan_min(struct device *dev, struct device_attribute *attr,
1063 const char *buf, size_t count)
1064{
1065 struct w83627ehf_data *data = dev_get_drvdata(dev);
1066 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1067 int nr = sensor_attr->index;
1068 unsigned long val;
1069 int err;
1070 unsigned int reg;
1071 u8 new_div;
1072
1073 err = kstrtoul(buf, 10, &val);
1074 if (err < 0)
1075 return err;
1076
1077 mutex_lock(&data->update_lock);
1078 if (!data->has_fan_div) {
1079 /*
1080 * Only NCT6776F for now, so we know that this is a 13 bit
1081 * register
1082 */
1083 if (!val) {
1084 val = 0xff1f;
1085 } else {
1086 if (val > 1350000U)
1087 val = 135000U;
1088 val = 1350000U / val;
1089 val = (val & 0x1f) | ((val << 3) & 0xff00);
1090 }
1091 data->fan_min[nr] = val;
1092 goto done; /* Leave fan divider alone */
1093 }
1094 if (!val) {
1095 /* No min limit, alarm disabled */
1096 data->fan_min[nr] = 255;
1097 new_div = data->fan_div[nr]; /* No change */
1098 dev_info(dev, "fan%u low limit and alarm disabled\n", nr + 1);
1099 } else if ((reg = 1350000U / val) >= 128 * 255) {
1100 /*
1101 * Speed below this value cannot possibly be represented,
1102 * even with the highest divider (128)
1103 */
1104 data->fan_min[nr] = 254;
1105 new_div = 7; /* 128 == (1 << 7) */
1106 dev_warn(dev,
1107 "fan%u low limit %lu below minimum %u, set to minimum\n",
1108 nr + 1, val, data->fan_from_reg_min(254, 7));
1109 } else if (!reg) {
1110 /*
1111 * Speed above this value cannot possibly be represented,
1112 * even with the lowest divider (1)
1113 */
1114 data->fan_min[nr] = 1;
1115 new_div = 0; /* 1 == (1 << 0) */
1116 dev_warn(dev,
1117 "fan%u low limit %lu above maximum %u, set to maximum\n",
1118 nr + 1, val, data->fan_from_reg_min(1, 0));
1119 } else {
1120 /*
1121 * Automatically pick the best divider, i.e. the one such
1122 * that the min limit will correspond to a register value
1123 * in the 96..192 range
1124 */
1125 new_div = 0;
1126 while (reg > 192 && new_div < 7) {
1127 reg >>= 1;
1128 new_div++;
1129 }
1130 data->fan_min[nr] = reg;
1131 }
1132
1133 /*
1134 * Write both the fan clock divider (if it changed) and the new
1135 * fan min (unconditionally)
1136 */
1137 if (new_div != data->fan_div[nr]) {
1138 dev_dbg(dev, "fan%u clock divider changed from %u to %u\n",
1139 nr + 1, div_from_reg(data->fan_div[nr]),
1140 div_from_reg(new_div));
1141 data->fan_div[nr] = new_div;
1142 w83627ehf_write_fan_div_common(dev, data, nr);
1143 /* Give the chip time to sample a new speed value */
1144 data->last_updated = jiffies;
1145 }
1146done:
1147 w83627ehf_write_value(data, data->REG_FAN_MIN[nr],
1148 data->fan_min[nr]);
1149 mutex_unlock(&data->update_lock);
1150
1151 return count;
1152}
1153
1154static struct sensor_device_attribute sda_fan_input[] = {
1155 SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
1156 SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
1157 SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
1158 SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
1159 SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
1160};
1161
1162static struct sensor_device_attribute sda_fan_alarm[] = {
1163 SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6),
1164 SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7),
1165 SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11),
1166 SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 10),
1167 SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 23),
1168};
1169
1170static struct sensor_device_attribute sda_fan_min[] = {
1171 SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
1172 store_fan_min, 0),
1173 SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
1174 store_fan_min, 1),
1175 SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
1176 store_fan_min, 2),
1177 SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
1178 store_fan_min, 3),
1179 SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min,
1180 store_fan_min, 4),
1181};
1182
1183static struct sensor_device_attribute sda_fan_div[] = {
1184 SENSOR_ATTR(fan1_div, S_IRUGO, show_fan_div, NULL, 0),
1185 SENSOR_ATTR(fan2_div, S_IRUGO, show_fan_div, NULL, 1),
1186 SENSOR_ATTR(fan3_div, S_IRUGO, show_fan_div, NULL, 2),
1187 SENSOR_ATTR(fan4_div, S_IRUGO, show_fan_div, NULL, 3),
1188 SENSOR_ATTR(fan5_div, S_IRUGO, show_fan_div, NULL, 4),
1189};
1190
1191static ssize_t
1192show_temp_label(struct device *dev, struct device_attribute *attr, char *buf)
1193{
1194 struct w83627ehf_data *data = w83627ehf_update_device(dev);
1195 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1196 int nr = sensor_attr->index;
1197 return sprintf(buf, "%s\n", data->temp_label[data->temp_src[nr]]);
1198}
1199
1200#define show_temp_reg(addr, reg) \
1201static ssize_t \
1202show_##reg(struct device *dev, struct device_attribute *attr, \
1203 char *buf) \
1204{ \
1205 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1206 struct sensor_device_attribute *sensor_attr = \
1207 to_sensor_dev_attr(attr); \
1208 int nr = sensor_attr->index; \
1209 return sprintf(buf, "%d\n", LM75_TEMP_FROM_REG(data->reg[nr])); \
1210}
1211show_temp_reg(reg_temp, temp);
1212show_temp_reg(reg_temp_over, temp_max);
1213show_temp_reg(reg_temp_hyst, temp_max_hyst);
1214
1215#define store_temp_reg(addr, reg) \
1216static ssize_t \
1217store_##reg(struct device *dev, struct device_attribute *attr, \
1218 const char *buf, size_t count) \
1219{ \
1220 struct w83627ehf_data *data = dev_get_drvdata(dev); \
1221 struct sensor_device_attribute *sensor_attr = \
1222 to_sensor_dev_attr(attr); \
1223 int nr = sensor_attr->index; \
1224 int err; \
1225 long val; \
1226 err = kstrtol(buf, 10, &val); \
1227 if (err < 0) \
1228 return err; \
1229 mutex_lock(&data->update_lock); \
1230 data->reg[nr] = LM75_TEMP_TO_REG(val); \
1231 w83627ehf_write_temp(data, data->addr[nr], data->reg[nr]); \
1232 mutex_unlock(&data->update_lock); \
1233 return count; \
1234}
1235store_temp_reg(reg_temp_over, temp_max);
1236store_temp_reg(reg_temp_hyst, temp_max_hyst);
1237
1238static ssize_t
1239show_temp_offset(struct device *dev, struct device_attribute *attr, char *buf)
1240{
1241 struct w83627ehf_data *data = w83627ehf_update_device(dev);
1242 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1243
1244 return sprintf(buf, "%d\n",
1245 data->temp_offset[sensor_attr->index] * 1000);
1246}
1247
1248static ssize_t
1249store_temp_offset(struct device *dev, struct device_attribute *attr,
1250 const char *buf, size_t count)
1251{
1252 struct w83627ehf_data *data = dev_get_drvdata(dev);
1253 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1254 int nr = sensor_attr->index;
1255 long val;
1256 int err;
1257
1258 err = kstrtol(buf, 10, &val);
1259 if (err < 0)
1260 return err;
1261
1262 val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), -128, 127);
1263
1264 mutex_lock(&data->update_lock);
1265 data->temp_offset[nr] = val;
1266 w83627ehf_write_value(data, W83627EHF_REG_TEMP_OFFSET[nr], val);
1267 mutex_unlock(&data->update_lock);
1268 return count;
1269}
1270
1271static ssize_t
1272show_temp_type(struct device *dev, struct device_attribute *attr, char *buf)
1273{
1274 struct w83627ehf_data *data = w83627ehf_update_device(dev);
1275 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1276 int nr = sensor_attr->index;
1277 return sprintf(buf, "%d\n", (int)data->temp_type[nr]);
1278}
1279
1280static struct sensor_device_attribute sda_temp_input[] = {
1281 SENSOR_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0),
1282 SENSOR_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1),
1283 SENSOR_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2),
1284 SENSOR_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3),
1285 SENSOR_ATTR(temp5_input, S_IRUGO, show_temp, NULL, 4),
1286 SENSOR_ATTR(temp6_input, S_IRUGO, show_temp, NULL, 5),
1287 SENSOR_ATTR(temp7_input, S_IRUGO, show_temp, NULL, 6),
1288 SENSOR_ATTR(temp8_input, S_IRUGO, show_temp, NULL, 7),
1289 SENSOR_ATTR(temp9_input, S_IRUGO, show_temp, NULL, 8),
1290};
1291
1292static struct sensor_device_attribute sda_temp_label[] = {
1293 SENSOR_ATTR(temp1_label, S_IRUGO, show_temp_label, NULL, 0),
1294 SENSOR_ATTR(temp2_label, S_IRUGO, show_temp_label, NULL, 1),
1295 SENSOR_ATTR(temp3_label, S_IRUGO, show_temp_label, NULL, 2),
1296 SENSOR_ATTR(temp4_label, S_IRUGO, show_temp_label, NULL, 3),
1297 SENSOR_ATTR(temp5_label, S_IRUGO, show_temp_label, NULL, 4),
1298 SENSOR_ATTR(temp6_label, S_IRUGO, show_temp_label, NULL, 5),
1299 SENSOR_ATTR(temp7_label, S_IRUGO, show_temp_label, NULL, 6),
1300 SENSOR_ATTR(temp8_label, S_IRUGO, show_temp_label, NULL, 7),
1301 SENSOR_ATTR(temp9_label, S_IRUGO, show_temp_label, NULL, 8),
1302};
1303
1304static struct sensor_device_attribute sda_temp_max[] = {
1305 SENSOR_ATTR(temp1_max, S_IRUGO | S_IWUSR, show_temp_max,
1306 store_temp_max, 0),
1307 SENSOR_ATTR(temp2_max, S_IRUGO | S_IWUSR, show_temp_max,
1308 store_temp_max, 1),
1309 SENSOR_ATTR(temp3_max, S_IRUGO | S_IWUSR, show_temp_max,
1310 store_temp_max, 2),
1311 SENSOR_ATTR(temp4_max, S_IRUGO | S_IWUSR, show_temp_max,
1312 store_temp_max, 3),
1313 SENSOR_ATTR(temp5_max, S_IRUGO | S_IWUSR, show_temp_max,
1314 store_temp_max, 4),
1315 SENSOR_ATTR(temp6_max, S_IRUGO | S_IWUSR, show_temp_max,
1316 store_temp_max, 5),
1317 SENSOR_ATTR(temp7_max, S_IRUGO | S_IWUSR, show_temp_max,
1318 store_temp_max, 6),
1319 SENSOR_ATTR(temp8_max, S_IRUGO | S_IWUSR, show_temp_max,
1320 store_temp_max, 7),
1321 SENSOR_ATTR(temp9_max, S_IRUGO | S_IWUSR, show_temp_max,
1322 store_temp_max, 8),
1323};
1324
1325static struct sensor_device_attribute sda_temp_max_hyst[] = {
1326 SENSOR_ATTR(temp1_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1327 store_temp_max_hyst, 0),
1328 SENSOR_ATTR(temp2_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1329 store_temp_max_hyst, 1),
1330 SENSOR_ATTR(temp3_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1331 store_temp_max_hyst, 2),
1332 SENSOR_ATTR(temp4_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1333 store_temp_max_hyst, 3),
1334 SENSOR_ATTR(temp5_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1335 store_temp_max_hyst, 4),
1336 SENSOR_ATTR(temp6_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1337 store_temp_max_hyst, 5),
1338 SENSOR_ATTR(temp7_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1339 store_temp_max_hyst, 6),
1340 SENSOR_ATTR(temp8_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1341 store_temp_max_hyst, 7),
1342 SENSOR_ATTR(temp9_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1343 store_temp_max_hyst, 8),
1344};
1345
1346static struct sensor_device_attribute sda_temp_alarm[] = {
1347 SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4),
1348 SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5),
1349 SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
1350};
1351
1352static struct sensor_device_attribute sda_temp_type[] = {
1353 SENSOR_ATTR(temp1_type, S_IRUGO, show_temp_type, NULL, 0),
1354 SENSOR_ATTR(temp2_type, S_IRUGO, show_temp_type, NULL, 1),
1355 SENSOR_ATTR(temp3_type, S_IRUGO, show_temp_type, NULL, 2),
1356};
1357
1358static struct sensor_device_attribute sda_temp_offset[] = {
1359 SENSOR_ATTR(temp1_offset, S_IRUGO | S_IWUSR, show_temp_offset,
1360 store_temp_offset, 0),
1361 SENSOR_ATTR(temp2_offset, S_IRUGO | S_IWUSR, show_temp_offset,
1362 store_temp_offset, 1),
1363 SENSOR_ATTR(temp3_offset, S_IRUGO | S_IWUSR, show_temp_offset,
1364 store_temp_offset, 2),
1365};
1366
1367#define show_pwm_reg(reg) \
1368static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1369 char *buf) \
1370{ \
1371 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1372 struct sensor_device_attribute *sensor_attr = \
1373 to_sensor_dev_attr(attr); \
1374 int nr = sensor_attr->index; \
1375 return sprintf(buf, "%d\n", data->reg[nr]); \
1376}
1377
1378show_pwm_reg(pwm_mode)
1379show_pwm_reg(pwm_enable)
1380show_pwm_reg(pwm)
1381
1382static ssize_t
1383store_pwm_mode(struct device *dev, struct device_attribute *attr,
1384 const char *buf, size_t count)
1385{
1386 struct w83627ehf_data *data = dev_get_drvdata(dev);
1387 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1388 struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
1389 int nr = sensor_attr->index;
1390 unsigned long val;
1391 int err;
1392 u16 reg;
1393
1394 err = kstrtoul(buf, 10, &val);
1395 if (err < 0)
1396 return err;
1397
1398 if (val > 1)
1399 return -EINVAL;
1400
1401 /* On NCT67766F, DC mode is only supported for pwm1 */
1402 if (sio_data->kind == nct6776 && nr && val != 1)
1403 return -EINVAL;
1404
1405 mutex_lock(&data->update_lock);
1406 reg = w83627ehf_read_value(data, W83627EHF_REG_PWM_ENABLE[nr]);
1407 data->pwm_mode[nr] = val;
1408 reg &= ~(1 << W83627EHF_PWM_MODE_SHIFT[nr]);
1409 if (!val)
1410 reg |= 1 << W83627EHF_PWM_MODE_SHIFT[nr];
1411 w83627ehf_write_value(data, W83627EHF_REG_PWM_ENABLE[nr], reg);
1412 mutex_unlock(&data->update_lock);
1413 return count;
1414}
1415
1416static ssize_t
1417store_pwm(struct device *dev, struct device_attribute *attr,
1418 const char *buf, size_t count)
1419{
1420 struct w83627ehf_data *data = dev_get_drvdata(dev);
1421 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1422 int nr = sensor_attr->index;
1423 unsigned long val;
1424 int err;
1425
1426 err = kstrtoul(buf, 10, &val);
1427 if (err < 0)
1428 return err;
1429
1430 val = clamp_val(val, 0, 255);
1431
1432 mutex_lock(&data->update_lock);
1433 data->pwm[nr] = val;
1434 w83627ehf_write_value(data, data->REG_PWM[nr], val);
1435 mutex_unlock(&data->update_lock);
1436 return count;
1437}
1438
1439static ssize_t
1440store_pwm_enable(struct device *dev, struct device_attribute *attr,
1441 const char *buf, size_t count)
1442{
1443 struct w83627ehf_data *data = dev_get_drvdata(dev);
1444 struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
1445 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1446 int nr = sensor_attr->index;
1447 unsigned long val;
1448 int err;
1449 u16 reg;
1450
1451 err = kstrtoul(buf, 10, &val);
1452 if (err < 0)
1453 return err;
1454
1455 if (!val || (val > 4 && val != data->pwm_enable_orig[nr]))
1456 return -EINVAL;
1457 /* SmartFan III mode is not supported on NCT6776F */
1458 if (sio_data->kind == nct6776 && val == 4)
1459 return -EINVAL;
1460
1461 mutex_lock(&data->update_lock);
1462 data->pwm_enable[nr] = val;
1463 if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
1464 reg = w83627ehf_read_value(data,
1465 NCT6775_REG_FAN_MODE[nr]);
1466 reg &= 0x0f;
1467 reg |= (val - 1) << 4;
1468 w83627ehf_write_value(data,
1469 NCT6775_REG_FAN_MODE[nr], reg);
1470 } else {
1471 reg = w83627ehf_read_value(data, W83627EHF_REG_PWM_ENABLE[nr]);
1472 reg &= ~(0x03 << W83627EHF_PWM_ENABLE_SHIFT[nr]);
1473 reg |= (val - 1) << W83627EHF_PWM_ENABLE_SHIFT[nr];
1474 w83627ehf_write_value(data, W83627EHF_REG_PWM_ENABLE[nr], reg);
1475 }
1476 mutex_unlock(&data->update_lock);
1477 return count;
1478}
1479
1480
1481#define show_tol_temp(reg) \
1482static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1483 char *buf) \
1484{ \
1485 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1486 struct sensor_device_attribute *sensor_attr = \
1487 to_sensor_dev_attr(attr); \
1488 int nr = sensor_attr->index; \
1489 return sprintf(buf, "%d\n", data->reg[nr] * 1000); \
1490}
1491
1492show_tol_temp(tolerance)
1493show_tol_temp(target_temp)
1494
1495static ssize_t
1496store_target_temp(struct device *dev, struct device_attribute *attr,
1497 const char *buf, size_t count)
1498{
1499 struct w83627ehf_data *data = dev_get_drvdata(dev);
1500 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1501 int nr = sensor_attr->index;
1502 long val;
1503 int err;
1504
1505 err = kstrtol(buf, 10, &val);
1506 if (err < 0)
1507 return err;
1508
1509 val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), 0, 127);
1510
1511 mutex_lock(&data->update_lock);
1512 data->target_temp[nr] = val;
1513 w83627ehf_write_value(data, data->REG_TARGET[nr], val);
1514 mutex_unlock(&data->update_lock);
1515 return count;
1516}
1517
1518static ssize_t
1519store_tolerance(struct device *dev, struct device_attribute *attr,
1520 const char *buf, size_t count)
1521{
1522 struct w83627ehf_data *data = dev_get_drvdata(dev);
1523 struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
1524 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1525 int nr = sensor_attr->index;
1526 u16 reg;
1527 long val;
1528 int err;
1529
1530 err = kstrtol(buf, 10, &val);
1531 if (err < 0)
1532 return err;
1533
1534 /* Limit the temp to 0C - 15C */
1535 val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), 0, 15);
1536
1537 mutex_lock(&data->update_lock);
1538 if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
1539 /* Limit tolerance further for NCT6776F */
1540 if (sio_data->kind == nct6776 && val > 7)
1541 val = 7;
1542 reg = w83627ehf_read_value(data, NCT6775_REG_FAN_MODE[nr]);
1543 reg = (reg & 0xf0) | val;
1544 w83627ehf_write_value(data, NCT6775_REG_FAN_MODE[nr], reg);
1545 } else {
1546 reg = w83627ehf_read_value(data, W83627EHF_REG_TOLERANCE[nr]);
1547 if (nr == 1)
1548 reg = (reg & 0x0f) | (val << 4);
1549 else
1550 reg = (reg & 0xf0) | val;
1551 w83627ehf_write_value(data, W83627EHF_REG_TOLERANCE[nr], reg);
1552 }
1553 data->tolerance[nr] = val;
1554 mutex_unlock(&data->update_lock);
1555 return count;
1556}
1557
1558static struct sensor_device_attribute sda_pwm[] = {
1559 SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 0),
1560 SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 1),
1561 SENSOR_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 2),
1562 SENSOR_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 3),
1563};
1564
1565static struct sensor_device_attribute sda_pwm_mode[] = {
1566 SENSOR_ATTR(pwm1_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1567 store_pwm_mode, 0),
1568 SENSOR_ATTR(pwm2_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1569 store_pwm_mode, 1),
1570 SENSOR_ATTR(pwm3_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1571 store_pwm_mode, 2),
1572 SENSOR_ATTR(pwm4_mode, S_IWUSR | S_IRUGO, show_pwm_mode,
1573 store_pwm_mode, 3),
1574};
1575
1576static struct sensor_device_attribute sda_pwm_enable[] = {
1577 SENSOR_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1578 store_pwm_enable, 0),
1579 SENSOR_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1580 store_pwm_enable, 1),
1581 SENSOR_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1582 store_pwm_enable, 2),
1583 SENSOR_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
1584 store_pwm_enable, 3),
1585};
1586
1587static struct sensor_device_attribute sda_target_temp[] = {
1588 SENSOR_ATTR(pwm1_target, S_IWUSR | S_IRUGO, show_target_temp,
1589 store_target_temp, 0),
1590 SENSOR_ATTR(pwm2_target, S_IWUSR | S_IRUGO, show_target_temp,
1591 store_target_temp, 1),
1592 SENSOR_ATTR(pwm3_target, S_IWUSR | S_IRUGO, show_target_temp,
1593 store_target_temp, 2),
1594 SENSOR_ATTR(pwm4_target, S_IWUSR | S_IRUGO, show_target_temp,
1595 store_target_temp, 3),
1596};
1597
1598static struct sensor_device_attribute sda_tolerance[] = {
1599 SENSOR_ATTR(pwm1_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1600 store_tolerance, 0),
1601 SENSOR_ATTR(pwm2_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1602 store_tolerance, 1),
1603 SENSOR_ATTR(pwm3_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1604 store_tolerance, 2),
1605 SENSOR_ATTR(pwm4_tolerance, S_IWUSR | S_IRUGO, show_tolerance,
1606 store_tolerance, 3),
1607};
1608
1609/* Smart Fan registers */
1610
1611#define fan_functions(reg, REG) \
1612static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1613 char *buf) \
1614{ \
1615 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1616 struct sensor_device_attribute *sensor_attr = \
1617 to_sensor_dev_attr(attr); \
1618 int nr = sensor_attr->index; \
1619 return sprintf(buf, "%d\n", data->reg[nr]); \
1620} \
1621static ssize_t \
1622store_##reg(struct device *dev, struct device_attribute *attr, \
1623 const char *buf, size_t count) \
1624{ \
1625 struct w83627ehf_data *data = dev_get_drvdata(dev); \
1626 struct sensor_device_attribute *sensor_attr = \
1627 to_sensor_dev_attr(attr); \
1628 int nr = sensor_attr->index; \
1629 unsigned long val; \
1630 int err; \
1631 err = kstrtoul(buf, 10, &val); \
1632 if (err < 0) \
1633 return err; \
1634 val = clamp_val(val, 1, 255); \
1635 mutex_lock(&data->update_lock); \
1636 data->reg[nr] = val; \
1637 w83627ehf_write_value(data, data->REG_##REG[nr], val); \
1638 mutex_unlock(&data->update_lock); \
1639 return count; \
1640}
1641
1642fan_functions(fan_start_output, FAN_START_OUTPUT)
1643fan_functions(fan_stop_output, FAN_STOP_OUTPUT)
1644fan_functions(fan_max_output, FAN_MAX_OUTPUT)
1645fan_functions(fan_step_output, FAN_STEP_OUTPUT)
1646
1647#define fan_time_functions(reg, REG) \
1648static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
1649 char *buf) \
1650{ \
1651 struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1652 struct sensor_device_attribute *sensor_attr = \
1653 to_sensor_dev_attr(attr); \
1654 int nr = sensor_attr->index; \
1655 return sprintf(buf, "%d\n", \
1656 step_time_from_reg(data->reg[nr], \
1657 data->pwm_mode[nr])); \
1658} \
1659\
1660static ssize_t \
1661store_##reg(struct device *dev, struct device_attribute *attr, \
1662 const char *buf, size_t count) \
1663{ \
1664 struct w83627ehf_data *data = dev_get_drvdata(dev); \
1665 struct sensor_device_attribute *sensor_attr = \
1666 to_sensor_dev_attr(attr); \
1667 int nr = sensor_attr->index; \
1668 unsigned long val; \
1669 int err; \
1670 err = kstrtoul(buf, 10, &val); \
1671 if (err < 0) \
1672 return err; \
1673 val = step_time_to_reg(val, data->pwm_mode[nr]); \
1674 mutex_lock(&data->update_lock); \
1675 data->reg[nr] = val; \
1676 w83627ehf_write_value(data, data->REG_##REG[nr], val); \
1677 mutex_unlock(&data->update_lock); \
1678 return count; \
1679} \
1680
1681fan_time_functions(fan_stop_time, FAN_STOP_TIME)
1682
1683static ssize_t name_show(struct device *dev, struct device_attribute *attr,
1684 char *buf)
1685{
1686 struct w83627ehf_data *data = dev_get_drvdata(dev);
1687
1688 return sprintf(buf, "%s\n", data->name);
1689}
1690static DEVICE_ATTR_RO(name);
1691
1692static struct sensor_device_attribute sda_sf3_arrays_fan4[] = {
1693 SENSOR_ATTR(pwm4_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1694 store_fan_stop_time, 3),
1695 SENSOR_ATTR(pwm4_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1696 store_fan_start_output, 3),
1697 SENSOR_ATTR(pwm4_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1698 store_fan_stop_output, 3),
1699 SENSOR_ATTR(pwm4_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1700 store_fan_max_output, 3),
1701 SENSOR_ATTR(pwm4_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1702 store_fan_step_output, 3),
1703};
1704
1705static struct sensor_device_attribute sda_sf3_arrays_fan3[] = {
1706 SENSOR_ATTR(pwm3_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1707 store_fan_stop_time, 2),
1708 SENSOR_ATTR(pwm3_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1709 store_fan_start_output, 2),
1710 SENSOR_ATTR(pwm3_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1711 store_fan_stop_output, 2),
1712};
1713
1714static struct sensor_device_attribute sda_sf3_arrays[] = {
1715 SENSOR_ATTR(pwm1_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1716 store_fan_stop_time, 0),
1717 SENSOR_ATTR(pwm2_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time,
1718 store_fan_stop_time, 1),
1719 SENSOR_ATTR(pwm1_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1720 store_fan_start_output, 0),
1721 SENSOR_ATTR(pwm2_start_output, S_IWUSR | S_IRUGO, show_fan_start_output,
1722 store_fan_start_output, 1),
1723 SENSOR_ATTR(pwm1_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1724 store_fan_stop_output, 0),
1725 SENSOR_ATTR(pwm2_stop_output, S_IWUSR | S_IRUGO, show_fan_stop_output,
1726 store_fan_stop_output, 1),
1727};
1728
1729
1730/*
1731 * pwm1 and pwm3 don't support max and step settings on all chips.
1732 * Need to check support while generating/removing attribute files.
1733 */
1734static struct sensor_device_attribute sda_sf3_max_step_arrays[] = {
1735 SENSOR_ATTR(pwm1_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1736 store_fan_max_output, 0),
1737 SENSOR_ATTR(pwm1_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1738 store_fan_step_output, 0),
1739 SENSOR_ATTR(pwm2_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1740 store_fan_max_output, 1),
1741 SENSOR_ATTR(pwm2_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1742 store_fan_step_output, 1),
1743 SENSOR_ATTR(pwm3_max_output, S_IWUSR | S_IRUGO, show_fan_max_output,
1744 store_fan_max_output, 2),
1745 SENSOR_ATTR(pwm3_step_output, S_IWUSR | S_IRUGO, show_fan_step_output,
1746 store_fan_step_output, 2),
1747};
1748
1749static ssize_t
1750cpu0_vid_show(struct device *dev, struct device_attribute *attr, char *buf)
1751{
1752 struct w83627ehf_data *data = dev_get_drvdata(dev);
1753 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
1754}
1755static DEVICE_ATTR_RO(cpu0_vid);
1756
1757
1758/* Case open detection */
1759
1760static ssize_t
1761show_caseopen(struct device *dev, struct device_attribute *attr, char *buf)
1762{
1763 struct w83627ehf_data *data = w83627ehf_update_device(dev);
1764
1765 return sprintf(buf, "%d\n",
1766 !!(data->caseopen & to_sensor_dev_attr_2(attr)->index));
1767}
1768
1769static ssize_t
1770clear_caseopen(struct device *dev, struct device_attribute *attr,
1771 const char *buf, size_t count)
1772{
1773 struct w83627ehf_data *data = dev_get_drvdata(dev);
1774 unsigned long val;
1775 u16 reg, mask;
1776
1777 if (kstrtoul(buf, 10, &val) || val != 0)
1778 return -EINVAL;
1779
1780 mask = to_sensor_dev_attr_2(attr)->nr;
1781
1782 mutex_lock(&data->update_lock);
1783 reg = w83627ehf_read_value(data, W83627EHF_REG_CASEOPEN_CLR);
1784 w83627ehf_write_value(data, W83627EHF_REG_CASEOPEN_CLR, reg | mask);
1785 w83627ehf_write_value(data, W83627EHF_REG_CASEOPEN_CLR, reg & ~mask);
1786 data->valid = 0; /* Force cache refresh */
1787 mutex_unlock(&data->update_lock);
1788
1789 return count;
1790}
1791
1792static struct sensor_device_attribute_2 sda_caseopen[] = {
1793 SENSOR_ATTR_2(intrusion0_alarm, S_IWUSR | S_IRUGO, show_caseopen,
1794 clear_caseopen, 0x80, 0x10),
1795 SENSOR_ATTR_2(intrusion1_alarm, S_IWUSR | S_IRUGO, show_caseopen,
1796 clear_caseopen, 0x40, 0x40),
1797};
1798
1799/*
1800 * Driver and device management
1801 */
1802
1803static void w83627ehf_device_remove_files(struct device *dev)
1804{
1805 /*
1806 * some entries in the following arrays may not have been used in
1807 * device_create_file(), but device_remove_file() will ignore them
1808 */
1809 int i;
1810 struct w83627ehf_data *data = dev_get_drvdata(dev);
1811
1812 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++)
1813 device_remove_file(dev, &sda_sf3_arrays[i].dev_attr);
1814 for (i = 0; i < ARRAY_SIZE(sda_sf3_max_step_arrays); i++) {
1815 struct sensor_device_attribute *attr =
1816 &sda_sf3_max_step_arrays[i];
1817 if (data->REG_FAN_STEP_OUTPUT &&
1818 data->REG_FAN_STEP_OUTPUT[attr->index] != 0xff)
1819 device_remove_file(dev, &attr->dev_attr);
1820 }
1821 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan3); i++)
1822 device_remove_file(dev, &sda_sf3_arrays_fan3[i].dev_attr);
1823 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan4); i++)
1824 device_remove_file(dev, &sda_sf3_arrays_fan4[i].dev_attr);
1825 for (i = 0; i < data->in_num; i++) {
1826 if ((i == 6) && data->in6_skip)
1827 continue;
1828 device_remove_file(dev, &sda_in_input[i].dev_attr);
1829 device_remove_file(dev, &sda_in_alarm[i].dev_attr);
1830 device_remove_file(dev, &sda_in_min[i].dev_attr);
1831 device_remove_file(dev, &sda_in_max[i].dev_attr);
1832 }
1833 for (i = 0; i < 5; i++) {
1834 device_remove_file(dev, &sda_fan_input[i].dev_attr);
1835 device_remove_file(dev, &sda_fan_alarm[i].dev_attr);
1836 device_remove_file(dev, &sda_fan_div[i].dev_attr);
1837 device_remove_file(dev, &sda_fan_min[i].dev_attr);
1838 }
1839 for (i = 0; i < data->pwm_num; i++) {
1840 device_remove_file(dev, &sda_pwm[i].dev_attr);
1841 device_remove_file(dev, &sda_pwm_mode[i].dev_attr);
1842 device_remove_file(dev, &sda_pwm_enable[i].dev_attr);
1843 device_remove_file(dev, &sda_target_temp[i].dev_attr);
1844 device_remove_file(dev, &sda_tolerance[i].dev_attr);
1845 }
1846 for (i = 0; i < NUM_REG_TEMP; i++) {
1847 if (!(data->have_temp & (1 << i)))
1848 continue;
1849 device_remove_file(dev, &sda_temp_input[i].dev_attr);
1850 device_remove_file(dev, &sda_temp_label[i].dev_attr);
1851 if (i == 2 && data->temp3_val_only)
1852 continue;
1853 device_remove_file(dev, &sda_temp_max[i].dev_attr);
1854 device_remove_file(dev, &sda_temp_max_hyst[i].dev_attr);
1855 if (i > 2)
1856 continue;
1857 device_remove_file(dev, &sda_temp_alarm[i].dev_attr);
1858 device_remove_file(dev, &sda_temp_type[i].dev_attr);
1859 device_remove_file(dev, &sda_temp_offset[i].dev_attr);
1860 }
1861
1862 device_remove_file(dev, &sda_caseopen[0].dev_attr);
1863 device_remove_file(dev, &sda_caseopen[1].dev_attr);
1864
1865 device_remove_file(dev, &dev_attr_name);
1866 device_remove_file(dev, &dev_attr_cpu0_vid);
1867}
1868
1869/* Get the monitoring functions started */
1870static inline void w83627ehf_init_device(struct w83627ehf_data *data,
1871 enum kinds kind)
1872{
1873 int i;
1874 u8 tmp, diode;
1875
1876 /* Start monitoring is needed */
1877 tmp = w83627ehf_read_value(data, W83627EHF_REG_CONFIG);
1878 if (!(tmp & 0x01))
1879 w83627ehf_write_value(data, W83627EHF_REG_CONFIG,
1880 tmp | 0x01);
1881
1882 /* Enable temperature sensors if needed */
1883 for (i = 0; i < NUM_REG_TEMP; i++) {
1884 if (!(data->have_temp & (1 << i)))
1885 continue;
1886 if (!data->reg_temp_config[i])
1887 continue;
1888 tmp = w83627ehf_read_value(data,
1889 data->reg_temp_config[i]);
1890 if (tmp & 0x01)
1891 w83627ehf_write_value(data,
1892 data->reg_temp_config[i],
1893 tmp & 0xfe);
1894 }
1895
1896 /* Enable VBAT monitoring if needed */
1897 tmp = w83627ehf_read_value(data, W83627EHF_REG_VBAT);
1898 if (!(tmp & 0x01))
1899 w83627ehf_write_value(data, W83627EHF_REG_VBAT, tmp | 0x01);
1900
1901 /* Get thermal sensor types */
1902 switch (kind) {
1903 case w83627ehf:
1904 diode = w83627ehf_read_value(data, W83627EHF_REG_DIODE);
1905 break;
1906 case w83627uhg:
1907 diode = 0x00;
1908 break;
1909 default:
1910 diode = 0x70;
1911 }
1912 for (i = 0; i < 3; i++) {
1913 const char *label = NULL;
1914
1915 if (data->temp_label)
1916 label = data->temp_label[data->temp_src[i]];
1917
1918 /* Digital source overrides analog type */
1919 if (label && strncmp(label, "PECI", 4) == 0)
1920 data->temp_type[i] = 6;
1921 else if (label && strncmp(label, "AMD", 3) == 0)
1922 data->temp_type[i] = 5;
1923 else if ((tmp & (0x02 << i)))
1924 data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 3;
1925 else
1926 data->temp_type[i] = 4; /* thermistor */
1927 }
1928}
1929
1930static void w82627ehf_swap_tempreg(struct w83627ehf_data *data,
1931 int r1, int r2)
1932{
1933 swap(data->temp_src[r1], data->temp_src[r2]);
1934 swap(data->reg_temp[r1], data->reg_temp[r2]);
1935 swap(data->reg_temp_over[r1], data->reg_temp_over[r2]);
1936 swap(data->reg_temp_hyst[r1], data->reg_temp_hyst[r2]);
1937 swap(data->reg_temp_config[r1], data->reg_temp_config[r2]);
1938}
1939
1940static void
1941w83627ehf_set_temp_reg_ehf(struct w83627ehf_data *data, int n_temp)
1942{
1943 int i;
1944
1945 for (i = 0; i < n_temp; i++) {
1946 data->reg_temp[i] = W83627EHF_REG_TEMP[i];
1947 data->reg_temp_over[i] = W83627EHF_REG_TEMP_OVER[i];
1948 data->reg_temp_hyst[i] = W83627EHF_REG_TEMP_HYST[i];
1949 data->reg_temp_config[i] = W83627EHF_REG_TEMP_CONFIG[i];
1950 }
1951}
1952
1953static void
1954w83627ehf_check_fan_inputs(const struct w83627ehf_sio_data *sio_data,
1955 struct w83627ehf_data *data)
1956{
1957 int fan3pin, fan4pin, fan4min, fan5pin, regval;
1958
1959 /* The W83627UHG is simple, only two fan inputs, no config */
1960 if (sio_data->kind == w83627uhg) {
1961 data->has_fan = 0x03; /* fan1 and fan2 */
1962 data->has_fan_min = 0x03;
1963 return;
1964 }
1965
1966 /* fan4 and fan5 share some pins with the GPIO and serial flash */
1967 if (sio_data->kind == nct6775) {
1968 /* On NCT6775, fan4 shares pins with the fdc interface */
1969 fan3pin = 1;
1970 fan4pin = !(superio_inb(sio_data->sioreg, 0x2A) & 0x80);
1971 fan4min = 0;
1972 fan5pin = 0;
1973 } else if (sio_data->kind == nct6776) {
1974 bool gpok = superio_inb(sio_data->sioreg, 0x27) & 0x80;
1975
1976 superio_select(sio_data->sioreg, W83627EHF_LD_HWM);
1977 regval = superio_inb(sio_data->sioreg, SIO_REG_ENABLE);
1978
1979 if (regval & 0x80)
1980 fan3pin = gpok;
1981 else
1982 fan3pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x40);
1983
1984 if (regval & 0x40)
1985 fan4pin = gpok;
1986 else
1987 fan4pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x01);
1988
1989 if (regval & 0x20)
1990 fan5pin = gpok;
1991 else
1992 fan5pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x02);
1993
1994 fan4min = fan4pin;
1995 } else if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b) {
1996 fan3pin = 1;
1997 fan4pin = superio_inb(sio_data->sioreg, 0x27) & 0x40;
1998 fan5pin = superio_inb(sio_data->sioreg, 0x27) & 0x20;
1999 fan4min = fan4pin;
2000 } else {
2001 fan3pin = 1;
2002 fan4pin = !(superio_inb(sio_data->sioreg, 0x29) & 0x06);
2003 fan5pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x02);
2004 fan4min = fan4pin;
2005 }
2006
2007 data->has_fan = data->has_fan_min = 0x03; /* fan1 and fan2 */
2008 data->has_fan |= (fan3pin << 2);
2009 data->has_fan_min |= (fan3pin << 2);
2010
2011 if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
2012 /*
2013 * NCT6775F and NCT6776F don't have the W83627EHF_REG_FANDIV1
2014 * register
2015 */
2016 data->has_fan |= (fan4pin << 3) | (fan5pin << 4);
2017 data->has_fan_min |= (fan4min << 3) | (fan5pin << 4);
2018 } else {
2019 /*
2020 * It looks like fan4 and fan5 pins can be alternatively used
2021 * as fan on/off switches, but fan5 control is write only :/
2022 * We assume that if the serial interface is disabled, designers
2023 * connected fan5 as input unless they are emitting log 1, which
2024 * is not the default.
2025 */
2026 regval = w83627ehf_read_value(data, W83627EHF_REG_FANDIV1);
2027 if ((regval & (1 << 2)) && fan4pin) {
2028 data->has_fan |= (1 << 3);
2029 data->has_fan_min |= (1 << 3);
2030 }
2031 if (!(regval & (1 << 1)) && fan5pin) {
2032 data->has_fan |= (1 << 4);
2033 data->has_fan_min |= (1 << 4);
2034 }
2035 }
2036}
2037
2038static int w83627ehf_probe(struct platform_device *pdev)
2039{
2040 struct device *dev = &pdev->dev;
2041 struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
2042 struct w83627ehf_data *data;
2043 struct resource *res;
2044 u8 en_vrm10;
2045 int i, err = 0;
2046
2047 res = platform_get_resource(pdev, IORESOURCE_IO, 0);
2048 if (!request_region(res->start, IOREGION_LENGTH, DRVNAME)) {
2049 err = -EBUSY;
2050 dev_err(dev, "Failed to request region 0x%lx-0x%lx\n",
2051 (unsigned long)res->start,
2052 (unsigned long)res->start + IOREGION_LENGTH - 1);
2053 goto exit;
2054 }
2055
2056 data = devm_kzalloc(&pdev->dev, sizeof(struct w83627ehf_data),
2057 GFP_KERNEL);
2058 if (!data) {
2059 err = -ENOMEM;
2060 goto exit_release;
2061 }
2062
2063 data->addr = res->start;
2064 mutex_init(&data->lock);
2065 mutex_init(&data->update_lock);
2066 data->name = w83627ehf_device_names[sio_data->kind];
2067 data->bank = 0xff; /* Force initial bank selection */
2068 platform_set_drvdata(pdev, data);
2069
2070 /* 627EHG and 627EHF have 10 voltage inputs; 627DHG and 667HG have 9 */
2071 data->in_num = (sio_data->kind == w83627ehf) ? 10 : 9;
2072 /* 667HG, NCT6775F, and NCT6776F have 3 pwms, and 627UHG has only 2 */
2073 switch (sio_data->kind) {
2074 default:
2075 data->pwm_num = 4;
2076 break;
2077 case w83667hg:
2078 case w83667hg_b:
2079 case nct6775:
2080 case nct6776:
2081 data->pwm_num = 3;
2082 break;
2083 case w83627uhg:
2084 data->pwm_num = 2;
2085 break;
2086 }
2087
2088 /* Default to 3 temperature inputs, code below will adjust as needed */
2089 data->have_temp = 0x07;
2090
2091 /* Deal with temperature register setup first. */
2092 if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
2093 int mask = 0;
2094
2095 /*
2096 * Display temperature sensor output only if it monitors
2097 * a source other than one already reported. Always display
2098 * first three temperature registers, though.
2099 */
2100 for (i = 0; i < NUM_REG_TEMP; i++) {
2101 u8 src;
2102
2103 data->reg_temp[i] = NCT6775_REG_TEMP[i];
2104 data->reg_temp_over[i] = NCT6775_REG_TEMP_OVER[i];
2105 data->reg_temp_hyst[i] = NCT6775_REG_TEMP_HYST[i];
2106 data->reg_temp_config[i] = NCT6775_REG_TEMP_CONFIG[i];
2107
2108 src = w83627ehf_read_value(data,
2109 NCT6775_REG_TEMP_SOURCE[i]);
2110 src &= 0x1f;
2111 if (src && !(mask & (1 << src))) {
2112 data->have_temp |= 1 << i;
2113 mask |= 1 << src;
2114 }
2115
2116 data->temp_src[i] = src;
2117
2118 /*
2119 * Now do some register swapping if index 0..2 don't
2120 * point to SYSTIN(1), CPUIN(2), and AUXIN(3).
2121 * Idea is to have the first three attributes
2122 * report SYSTIN, CPUIN, and AUXIN if possible
2123 * without overriding the basic system configuration.
2124 */
2125 if (i > 0 && data->temp_src[0] != 1
2126 && data->temp_src[i] == 1)
2127 w82627ehf_swap_tempreg(data, 0, i);
2128 if (i > 1 && data->temp_src[1] != 2
2129 && data->temp_src[i] == 2)
2130 w82627ehf_swap_tempreg(data, 1, i);
2131 if (i > 2 && data->temp_src[2] != 3
2132 && data->temp_src[i] == 3)
2133 w82627ehf_swap_tempreg(data, 2, i);
2134 }
2135 if (sio_data->kind == nct6776) {
2136 /*
2137 * On NCT6776, AUXTIN and VIN3 pins are shared.
2138 * Only way to detect it is to check if AUXTIN is used
2139 * as a temperature source, and if that source is
2140 * enabled.
2141 *
2142 * If that is the case, disable in6, which reports VIN3.
2143 * Otherwise disable temp3.
2144 */
2145 if (data->temp_src[2] == 3) {
2146 u8 reg;
2147
2148 if (data->reg_temp_config[2])
2149 reg = w83627ehf_read_value(data,
2150 data->reg_temp_config[2]);
2151 else
2152 reg = 0; /* Assume AUXTIN is used */
2153
2154 if (reg & 0x01)
2155 data->have_temp &= ~(1 << 2);
2156 else
2157 data->in6_skip = 1;
2158 }
2159 data->temp_label = nct6776_temp_label;
2160 } else {
2161 data->temp_label = nct6775_temp_label;
2162 }
2163 data->have_temp_offset = data->have_temp & 0x07;
2164 for (i = 0; i < 3; i++) {
2165 if (data->temp_src[i] > 3)
2166 data->have_temp_offset &= ~(1 << i);
2167 }
2168 } else if (sio_data->kind == w83667hg_b) {
2169 u8 reg;
2170
2171 w83627ehf_set_temp_reg_ehf(data, 4);
2172
2173 /*
2174 * Temperature sources are selected with bank 0, registers 0x49
2175 * and 0x4a.
2176 */
2177 reg = w83627ehf_read_value(data, 0x4a);
2178 data->temp_src[0] = reg >> 5;
2179 reg = w83627ehf_read_value(data, 0x49);
2180 data->temp_src[1] = reg & 0x07;
2181 data->temp_src[2] = (reg >> 4) & 0x07;
2182
2183 /*
2184 * W83667HG-B has another temperature register at 0x7e.
2185 * The temperature source is selected with register 0x7d.
2186 * Support it if the source differs from already reported
2187 * sources.
2188 */
2189 reg = w83627ehf_read_value(data, 0x7d);
2190 reg &= 0x07;
2191 if (reg != data->temp_src[0] && reg != data->temp_src[1]
2192 && reg != data->temp_src[2]) {
2193 data->temp_src[3] = reg;
2194 data->have_temp |= 1 << 3;
2195 }
2196
2197 /*
2198 * Chip supports either AUXTIN or VIN3. Try to find out which
2199 * one.
2200 */
2201 reg = w83627ehf_read_value(data, W83627EHF_REG_TEMP_CONFIG[2]);
2202 if (data->temp_src[2] == 2 && (reg & 0x01))
2203 data->have_temp &= ~(1 << 2);
2204
2205 if ((data->temp_src[2] == 2 && (data->have_temp & (1 << 2)))
2206 || (data->temp_src[3] == 2 && (data->have_temp & (1 << 3))))
2207 data->in6_skip = 1;
2208
2209 data->temp_label = w83667hg_b_temp_label;
2210 data->have_temp_offset = data->have_temp & 0x07;
2211 for (i = 0; i < 3; i++) {
2212 if (data->temp_src[i] > 2)
2213 data->have_temp_offset &= ~(1 << i);
2214 }
2215 } else if (sio_data->kind == w83627uhg) {
2216 u8 reg;
2217
2218 w83627ehf_set_temp_reg_ehf(data, 3);
2219
2220 /*
2221 * Temperature sources for temp2 and temp3 are selected with
2222 * bank 0, registers 0x49 and 0x4a.
2223 */
2224 data->temp_src[0] = 0; /* SYSTIN */
2225 reg = w83627ehf_read_value(data, 0x49) & 0x07;
2226 /* Adjust to have the same mapping as other source registers */
2227 if (reg == 0)
2228 data->temp_src[1] = 1;
2229 else if (reg >= 2 && reg <= 5)
2230 data->temp_src[1] = reg + 2;
2231 else /* should never happen */
2232 data->have_temp &= ~(1 << 1);
2233 reg = w83627ehf_read_value(data, 0x4a);
2234 data->temp_src[2] = reg >> 5;
2235
2236 /*
2237 * Skip temp3 if source is invalid or the same as temp1
2238 * or temp2.
2239 */
2240 if (data->temp_src[2] == 2 || data->temp_src[2] == 3 ||
2241 data->temp_src[2] == data->temp_src[0] ||
2242 ((data->have_temp & (1 << 1)) &&
2243 data->temp_src[2] == data->temp_src[1]))
2244 data->have_temp &= ~(1 << 2);
2245 else
2246 data->temp3_val_only = 1; /* No limit regs */
2247
2248 data->in6_skip = 1; /* No VIN3 */
2249
2250 data->temp_label = w83667hg_b_temp_label;
2251 data->have_temp_offset = data->have_temp & 0x03;
2252 for (i = 0; i < 3; i++) {
2253 if (data->temp_src[i] > 1)
2254 data->have_temp_offset &= ~(1 << i);
2255 }
2256 } else {
2257 w83627ehf_set_temp_reg_ehf(data, 3);
2258
2259 /* Temperature sources are fixed */
2260
2261 if (sio_data->kind == w83667hg) {
2262 u8 reg;
2263
2264 /*
2265 * Chip supports either AUXTIN or VIN3. Try to find
2266 * out which one.
2267 */
2268 reg = w83627ehf_read_value(data,
2269 W83627EHF_REG_TEMP_CONFIG[2]);
2270 if (reg & 0x01)
2271 data->have_temp &= ~(1 << 2);
2272 else
2273 data->in6_skip = 1;
2274 }
2275 data->have_temp_offset = data->have_temp & 0x07;
2276 }
2277
2278 if (sio_data->kind == nct6775) {
2279 data->has_fan_div = true;
2280 data->fan_from_reg = fan_from_reg16;
2281 data->fan_from_reg_min = fan_from_reg8;
2282 data->REG_PWM = NCT6775_REG_PWM;
2283 data->REG_TARGET = NCT6775_REG_TARGET;
2284 data->REG_FAN = NCT6775_REG_FAN;
2285 data->REG_FAN_MIN = W83627EHF_REG_FAN_MIN;
2286 data->REG_FAN_START_OUTPUT = NCT6775_REG_FAN_START_OUTPUT;
2287 data->REG_FAN_STOP_OUTPUT = NCT6775_REG_FAN_STOP_OUTPUT;
2288 data->REG_FAN_STOP_TIME = NCT6775_REG_FAN_STOP_TIME;
2289 data->REG_FAN_MAX_OUTPUT = NCT6775_REG_FAN_MAX_OUTPUT;
2290 data->REG_FAN_STEP_OUTPUT = NCT6775_REG_FAN_STEP_OUTPUT;
2291 } else if (sio_data->kind == nct6776) {
2292 data->has_fan_div = false;
2293 data->fan_from_reg = fan_from_reg13;
2294 data->fan_from_reg_min = fan_from_reg13;
2295 data->REG_PWM = NCT6775_REG_PWM;
2296 data->REG_TARGET = NCT6775_REG_TARGET;
2297 data->REG_FAN = NCT6775_REG_FAN;
2298 data->REG_FAN_MIN = NCT6776_REG_FAN_MIN;
2299 data->REG_FAN_START_OUTPUT = NCT6775_REG_FAN_START_OUTPUT;
2300 data->REG_FAN_STOP_OUTPUT = NCT6775_REG_FAN_STOP_OUTPUT;
2301 data->REG_FAN_STOP_TIME = NCT6775_REG_FAN_STOP_TIME;
2302 } else if (sio_data->kind == w83667hg_b) {
2303 data->has_fan_div = true;
2304 data->fan_from_reg = fan_from_reg8;
2305 data->fan_from_reg_min = fan_from_reg8;
2306 data->REG_PWM = W83627EHF_REG_PWM;
2307 data->REG_TARGET = W83627EHF_REG_TARGET;
2308 data->REG_FAN = W83627EHF_REG_FAN;
2309 data->REG_FAN_MIN = W83627EHF_REG_FAN_MIN;
2310 data->REG_FAN_START_OUTPUT = W83627EHF_REG_FAN_START_OUTPUT;
2311 data->REG_FAN_STOP_OUTPUT = W83627EHF_REG_FAN_STOP_OUTPUT;
2312 data->REG_FAN_STOP_TIME = W83627EHF_REG_FAN_STOP_TIME;
2313 data->REG_FAN_MAX_OUTPUT =
2314 W83627EHF_REG_FAN_MAX_OUTPUT_W83667_B;
2315 data->REG_FAN_STEP_OUTPUT =
2316 W83627EHF_REG_FAN_STEP_OUTPUT_W83667_B;
2317 } else {
2318 data->has_fan_div = true;
2319 data->fan_from_reg = fan_from_reg8;
2320 data->fan_from_reg_min = fan_from_reg8;
2321 data->REG_PWM = W83627EHF_REG_PWM;
2322 data->REG_TARGET = W83627EHF_REG_TARGET;
2323 data->REG_FAN = W83627EHF_REG_FAN;
2324 data->REG_FAN_MIN = W83627EHF_REG_FAN_MIN;
2325 data->REG_FAN_START_OUTPUT = W83627EHF_REG_FAN_START_OUTPUT;
2326 data->REG_FAN_STOP_OUTPUT = W83627EHF_REG_FAN_STOP_OUTPUT;
2327 data->REG_FAN_STOP_TIME = W83627EHF_REG_FAN_STOP_TIME;
2328 data->REG_FAN_MAX_OUTPUT =
2329 W83627EHF_REG_FAN_MAX_OUTPUT_COMMON;
2330 data->REG_FAN_STEP_OUTPUT =
2331 W83627EHF_REG_FAN_STEP_OUTPUT_COMMON;
2332 }
2333
2334 /* Setup input voltage scaling factors */
2335 if (sio_data->kind == w83627uhg)
2336 data->scale_in = scale_in_w83627uhg;
2337 else
2338 data->scale_in = scale_in_common;
2339
2340 /* Initialize the chip */
2341 w83627ehf_init_device(data, sio_data->kind);
2342
2343 data->vrm = vid_which_vrm();
2344
2345 err = superio_enter(sio_data->sioreg);
2346 if (err)
2347 goto exit_release;
2348
2349 /* Read VID value */
2350 if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b ||
2351 sio_data->kind == nct6775 || sio_data->kind == nct6776) {
2352 /*
2353 * W83667HG has different pins for VID input and output, so
2354 * we can get the VID input values directly at logical device D
2355 * 0xe3.
2356 */
2357 superio_select(sio_data->sioreg, W83667HG_LD_VID);
2358 data->vid = superio_inb(sio_data->sioreg, 0xe3);
2359 err = device_create_file(dev, &dev_attr_cpu0_vid);
2360 if (err) {
2361 superio_exit(sio_data->sioreg);
2362 goto exit_release;
2363 }
2364 } else if (sio_data->kind != w83627uhg) {
2365 superio_select(sio_data->sioreg, W83627EHF_LD_HWM);
2366 if (superio_inb(sio_data->sioreg, SIO_REG_VID_CTRL) & 0x80) {
2367 /*
2368 * Set VID input sensibility if needed. In theory the
2369 * BIOS should have set it, but in practice it's not
2370 * always the case. We only do it for the W83627EHF/EHG
2371 * because the W83627DHG is more complex in this
2372 * respect.
2373 */
2374 if (sio_data->kind == w83627ehf) {
2375 en_vrm10 = superio_inb(sio_data->sioreg,
2376 SIO_REG_EN_VRM10);
2377 if ((en_vrm10 & 0x08) && data->vrm == 90) {
2378 dev_warn(dev,
2379 "Setting VID input voltage to TTL\n");
2380 superio_outb(sio_data->sioreg,
2381 SIO_REG_EN_VRM10,
2382 en_vrm10 & ~0x08);
2383 } else if (!(en_vrm10 & 0x08)
2384 && data->vrm == 100) {
2385 dev_warn(dev,
2386 "Setting VID input voltage to VRM10\n");
2387 superio_outb(sio_data->sioreg,
2388 SIO_REG_EN_VRM10,
2389 en_vrm10 | 0x08);
2390 }
2391 }
2392
2393 data->vid = superio_inb(sio_data->sioreg,
2394 SIO_REG_VID_DATA);
2395 if (sio_data->kind == w83627ehf) /* 6 VID pins only */
2396 data->vid &= 0x3f;
2397
2398 err = device_create_file(dev, &dev_attr_cpu0_vid);
2399 if (err) {
2400 superio_exit(sio_data->sioreg);
2401 goto exit_release;
2402 }
2403 } else {
2404 dev_info(dev,
2405 "VID pins in output mode, CPU VID not available\n");
2406 }
2407 }
2408
2409 if (fan_debounce &&
2410 (sio_data->kind == nct6775 || sio_data->kind == nct6776)) {
2411 u8 tmp;
2412
2413 superio_select(sio_data->sioreg, W83627EHF_LD_HWM);
2414 tmp = superio_inb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE);
2415 if (sio_data->kind == nct6776)
2416 superio_outb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE,
2417 0x3e | tmp);
2418 else
2419 superio_outb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE,
2420 0x1e | tmp);
2421 pr_info("Enabled fan debounce for chip %s\n", data->name);
2422 }
2423
2424 w83627ehf_check_fan_inputs(sio_data, data);
2425
2426 superio_exit(sio_data->sioreg);
2427
2428 /* Read fan clock dividers immediately */
2429 w83627ehf_update_fan_div_common(dev, data);
2430
2431 /* Read pwm data to save original values */
2432 w83627ehf_update_pwm_common(dev, data);
2433 for (i = 0; i < data->pwm_num; i++)
2434 data->pwm_enable_orig[i] = data->pwm_enable[i];
2435
2436 /* Register sysfs hooks */
2437 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++) {
2438 err = device_create_file(dev, &sda_sf3_arrays[i].dev_attr);
2439 if (err)
2440 goto exit_remove;
2441 }
2442
2443 for (i = 0; i < ARRAY_SIZE(sda_sf3_max_step_arrays); i++) {
2444 struct sensor_device_attribute *attr =
2445 &sda_sf3_max_step_arrays[i];
2446 if (data->REG_FAN_STEP_OUTPUT &&
2447 data->REG_FAN_STEP_OUTPUT[attr->index] != 0xff) {
2448 err = device_create_file(dev, &attr->dev_attr);
2449 if (err)
2450 goto exit_remove;
2451 }
2452 }
2453 /* if fan3 and fan4 are enabled create the sf3 files for them */
2454 if ((data->has_fan & (1 << 2)) && data->pwm_num >= 3)
2455 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan3); i++) {
2456 err = device_create_file(dev,
2457 &sda_sf3_arrays_fan3[i].dev_attr);
2458 if (err)
2459 goto exit_remove;
2460 }
2461 if ((data->has_fan & (1 << 3)) && data->pwm_num >= 4)
2462 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan4); i++) {
2463 err = device_create_file(dev,
2464 &sda_sf3_arrays_fan4[i].dev_attr);
2465 if (err)
2466 goto exit_remove;
2467 }
2468
2469 for (i = 0; i < data->in_num; i++) {
2470 if ((i == 6) && data->in6_skip)
2471 continue;
2472 if ((err = device_create_file(dev, &sda_in_input[i].dev_attr))
2473 || (err = device_create_file(dev,
2474 &sda_in_alarm[i].dev_attr))
2475 || (err = device_create_file(dev,
2476 &sda_in_min[i].dev_attr))
2477 || (err = device_create_file(dev,
2478 &sda_in_max[i].dev_attr)))
2479 goto exit_remove;
2480 }
2481
2482 for (i = 0; i < 5; i++) {
2483 if (data->has_fan & (1 << i)) {
2484 if ((err = device_create_file(dev,
2485 &sda_fan_input[i].dev_attr))
2486 || (err = device_create_file(dev,
2487 &sda_fan_alarm[i].dev_attr)))
2488 goto exit_remove;
2489 if (sio_data->kind != nct6776) {
2490 err = device_create_file(dev,
2491 &sda_fan_div[i].dev_attr);
2492 if (err)
2493 goto exit_remove;
2494 }
2495 if (data->has_fan_min & (1 << i)) {
2496 err = device_create_file(dev,
2497 &sda_fan_min[i].dev_attr);
2498 if (err)
2499 goto exit_remove;
2500 }
2501 if (i < data->pwm_num &&
2502 ((err = device_create_file(dev,
2503 &sda_pwm[i].dev_attr))
2504 || (err = device_create_file(dev,
2505 &sda_pwm_mode[i].dev_attr))
2506 || (err = device_create_file(dev,
2507 &sda_pwm_enable[i].dev_attr))
2508 || (err = device_create_file(dev,
2509 &sda_target_temp[i].dev_attr))
2510 || (err = device_create_file(dev,
2511 &sda_tolerance[i].dev_attr))))
2512 goto exit_remove;
2513 }
2514 }
2515
2516 for (i = 0; i < NUM_REG_TEMP; i++) {
2517 if (!(data->have_temp & (1 << i)))
2518 continue;
2519 err = device_create_file(dev, &sda_temp_input[i].dev_attr);
2520 if (err)
2521 goto exit_remove;
2522 if (data->temp_label) {
2523 err = device_create_file(dev,
2524 &sda_temp_label[i].dev_attr);
2525 if (err)
2526 goto exit_remove;
2527 }
2528 if (i == 2 && data->temp3_val_only)
2529 continue;
2530 if (data->reg_temp_over[i]) {
2531 err = device_create_file(dev,
2532 &sda_temp_max[i].dev_attr);
2533 if (err)
2534 goto exit_remove;
2535 }
2536 if (data->reg_temp_hyst[i]) {
2537 err = device_create_file(dev,
2538 &sda_temp_max_hyst[i].dev_attr);
2539 if (err)
2540 goto exit_remove;
2541 }
2542 if (i > 2)
2543 continue;
2544 if ((err = device_create_file(dev,
2545 &sda_temp_alarm[i].dev_attr))
2546 || (err = device_create_file(dev,
2547 &sda_temp_type[i].dev_attr)))
2548 goto exit_remove;
2549 if (data->have_temp_offset & (1 << i)) {
2550 err = device_create_file(dev,
2551 &sda_temp_offset[i].dev_attr);
2552 if (err)
2553 goto exit_remove;
2554 }
2555 }
2556
2557 err = device_create_file(dev, &sda_caseopen[0].dev_attr);
2558 if (err)
2559 goto exit_remove;
2560
2561 if (sio_data->kind == nct6776) {
2562 err = device_create_file(dev, &sda_caseopen[1].dev_attr);
2563 if (err)
2564 goto exit_remove;
2565 }
2566
2567 err = device_create_file(dev, &dev_attr_name);
2568 if (err)
2569 goto exit_remove;
2570
2571 data->hwmon_dev = hwmon_device_register(dev);
2572 if (IS_ERR(data->hwmon_dev)) {
2573 err = PTR_ERR(data->hwmon_dev);
2574 goto exit_remove;
2575 }
2576
2577 return 0;
2578
2579exit_remove:
2580 w83627ehf_device_remove_files(dev);
2581exit_release:
2582 release_region(res->start, IOREGION_LENGTH);
2583exit:
2584 return err;
2585}
2586
2587static int w83627ehf_remove(struct platform_device *pdev)
2588{
2589 struct w83627ehf_data *data = platform_get_drvdata(pdev);
2590
2591 hwmon_device_unregister(data->hwmon_dev);
2592 w83627ehf_device_remove_files(&pdev->dev);
2593 release_region(data->addr, IOREGION_LENGTH);
2594
2595 return 0;
2596}
2597
2598#ifdef CONFIG_PM
2599static int w83627ehf_suspend(struct device *dev)
2600{
2601 struct w83627ehf_data *data = w83627ehf_update_device(dev);
2602 struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
2603
2604 mutex_lock(&data->update_lock);
2605 data->vbat = w83627ehf_read_value(data, W83627EHF_REG_VBAT);
2606 if (sio_data->kind == nct6775) {
2607 data->fandiv1 = w83627ehf_read_value(data, NCT6775_REG_FANDIV1);
2608 data->fandiv2 = w83627ehf_read_value(data, NCT6775_REG_FANDIV2);
2609 }
2610 mutex_unlock(&data->update_lock);
2611
2612 return 0;
2613}
2614
2615static int w83627ehf_resume(struct device *dev)
2616{
2617 struct w83627ehf_data *data = dev_get_drvdata(dev);
2618 struct w83627ehf_sio_data *sio_data = dev_get_platdata(dev);
2619 int i;
2620
2621 mutex_lock(&data->update_lock);
2622 data->bank = 0xff; /* Force initial bank selection */
2623
2624 /* Restore limits */
2625 for (i = 0; i < data->in_num; i++) {
2626 if ((i == 6) && data->in6_skip)
2627 continue;
2628
2629 w83627ehf_write_value(data, W83627EHF_REG_IN_MIN(i),
2630 data->in_min[i]);
2631 w83627ehf_write_value(data, W83627EHF_REG_IN_MAX(i),
2632 data->in_max[i]);
2633 }
2634
2635 for (i = 0; i < 5; i++) {
2636 if (!(data->has_fan_min & (1 << i)))
2637 continue;
2638
2639 w83627ehf_write_value(data, data->REG_FAN_MIN[i],
2640 data->fan_min[i]);
2641 }
2642
2643 for (i = 0; i < NUM_REG_TEMP; i++) {
2644 if (!(data->have_temp & (1 << i)))
2645 continue;
2646
2647 if (data->reg_temp_over[i])
2648 w83627ehf_write_temp(data, data->reg_temp_over[i],
2649 data->temp_max[i]);
2650 if (data->reg_temp_hyst[i])
2651 w83627ehf_write_temp(data, data->reg_temp_hyst[i],
2652 data->temp_max_hyst[i]);
2653 if (i > 2)
2654 continue;
2655 if (data->have_temp_offset & (1 << i))
2656 w83627ehf_write_value(data,
2657 W83627EHF_REG_TEMP_OFFSET[i],
2658 data->temp_offset[i]);
2659 }
2660
2661 /* Restore other settings */
2662 w83627ehf_write_value(data, W83627EHF_REG_VBAT, data->vbat);
2663 if (sio_data->kind == nct6775) {
2664 w83627ehf_write_value(data, NCT6775_REG_FANDIV1, data->fandiv1);
2665 w83627ehf_write_value(data, NCT6775_REG_FANDIV2, data->fandiv2);
2666 }
2667
2668 /* Force re-reading all values */
2669 data->valid = 0;
2670 mutex_unlock(&data->update_lock);
2671
2672 return 0;
2673}
2674
2675static const struct dev_pm_ops w83627ehf_dev_pm_ops = {
2676 .suspend = w83627ehf_suspend,
2677 .resume = w83627ehf_resume,
2678 .freeze = w83627ehf_suspend,
2679 .restore = w83627ehf_resume,
2680};
2681
2682#define W83627EHF_DEV_PM_OPS (&w83627ehf_dev_pm_ops)
2683#else
2684#define W83627EHF_DEV_PM_OPS NULL
2685#endif /* CONFIG_PM */
2686
2687static struct platform_driver w83627ehf_driver = {
2688 .driver = {
2689 .name = DRVNAME,
2690 .pm = W83627EHF_DEV_PM_OPS,
2691 },
2692 .probe = w83627ehf_probe,
2693 .remove = w83627ehf_remove,
2694};
2695
2696/* w83627ehf_find() looks for a '627 in the Super-I/O config space */
2697static int __init w83627ehf_find(int sioaddr, unsigned short *addr,
2698 struct w83627ehf_sio_data *sio_data)
2699{
2700 static const char sio_name_W83627EHF[] __initconst = "W83627EHF";
2701 static const char sio_name_W83627EHG[] __initconst = "W83627EHG";
2702 static const char sio_name_W83627DHG[] __initconst = "W83627DHG";
2703 static const char sio_name_W83627DHG_P[] __initconst = "W83627DHG-P";
2704 static const char sio_name_W83627UHG[] __initconst = "W83627UHG";
2705 static const char sio_name_W83667HG[] __initconst = "W83667HG";
2706 static const char sio_name_W83667HG_B[] __initconst = "W83667HG-B";
2707 static const char sio_name_NCT6775[] __initconst = "NCT6775F";
2708 static const char sio_name_NCT6776[] __initconst = "NCT6776F";
2709
2710 u16 val;
2711 const char *sio_name;
2712 int err;
2713
2714 err = superio_enter(sioaddr);
2715 if (err)
2716 return err;
2717
2718 if (force_id)
2719 val = force_id;
2720 else
2721 val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8)
2722 | superio_inb(sioaddr, SIO_REG_DEVID + 1);
2723 switch (val & SIO_ID_MASK) {
2724 case SIO_W83627EHF_ID:
2725 sio_data->kind = w83627ehf;
2726 sio_name = sio_name_W83627EHF;
2727 break;
2728 case SIO_W83627EHG_ID:
2729 sio_data->kind = w83627ehf;
2730 sio_name = sio_name_W83627EHG;
2731 break;
2732 case SIO_W83627DHG_ID:
2733 sio_data->kind = w83627dhg;
2734 sio_name = sio_name_W83627DHG;
2735 break;
2736 case SIO_W83627DHG_P_ID:
2737 sio_data->kind = w83627dhg_p;
2738 sio_name = sio_name_W83627DHG_P;
2739 break;
2740 case SIO_W83627UHG_ID:
2741 sio_data->kind = w83627uhg;
2742 sio_name = sio_name_W83627UHG;
2743 break;
2744 case SIO_W83667HG_ID:
2745 sio_data->kind = w83667hg;
2746 sio_name = sio_name_W83667HG;
2747 break;
2748 case SIO_W83667HG_B_ID:
2749 sio_data->kind = w83667hg_b;
2750 sio_name = sio_name_W83667HG_B;
2751 break;
2752 case SIO_NCT6775_ID:
2753 sio_data->kind = nct6775;
2754 sio_name = sio_name_NCT6775;
2755 break;
2756 case SIO_NCT6776_ID:
2757 sio_data->kind = nct6776;
2758 sio_name = sio_name_NCT6776;
2759 break;
2760 default:
2761 if (val != 0xffff)
2762 pr_debug("unsupported chip ID: 0x%04x\n", val);
2763 superio_exit(sioaddr);
2764 return -ENODEV;
2765 }
2766
2767 /* We have a known chip, find the HWM I/O address */
2768 superio_select(sioaddr, W83627EHF_LD_HWM);
2769 val = (superio_inb(sioaddr, SIO_REG_ADDR) << 8)
2770 | superio_inb(sioaddr, SIO_REG_ADDR + 1);
2771 *addr = val & IOREGION_ALIGNMENT;
2772 if (*addr == 0) {
2773 pr_err("Refusing to enable a Super-I/O device with a base I/O port 0\n");
2774 superio_exit(sioaddr);
2775 return -ENODEV;
2776 }
2777
2778 /* Activate logical device if needed */
2779 val = superio_inb(sioaddr, SIO_REG_ENABLE);
2780 if (!(val & 0x01)) {
2781 pr_warn("Forcibly enabling Super-I/O. Sensor is probably unusable.\n");
2782 superio_outb(sioaddr, SIO_REG_ENABLE, val | 0x01);
2783 }
2784
2785 superio_exit(sioaddr);
2786 pr_info("Found %s chip at %#x\n", sio_name, *addr);
2787 sio_data->sioreg = sioaddr;
2788
2789 return 0;
2790}
2791
2792/*
2793 * when Super-I/O functions move to a separate file, the Super-I/O
2794 * bus will manage the lifetime of the device and this module will only keep
2795 * track of the w83627ehf driver. But since we platform_device_alloc(), we
2796 * must keep track of the device
2797 */
2798static struct platform_device *pdev;
2799
2800static int __init sensors_w83627ehf_init(void)
2801{
2802 int err;
2803 unsigned short address;
2804 struct resource res;
2805 struct w83627ehf_sio_data sio_data;
2806
2807 /*
2808 * initialize sio_data->kind and sio_data->sioreg.
2809 *
2810 * when Super-I/O functions move to a separate file, the Super-I/O
2811 * driver will probe 0x2e and 0x4e and auto-detect the presence of a
2812 * w83627ehf hardware monitor, and call probe()
2813 */
2814 if (w83627ehf_find(0x2e, &address, &sio_data) &&
2815 w83627ehf_find(0x4e, &address, &sio_data))
2816 return -ENODEV;
2817
2818 err = platform_driver_register(&w83627ehf_driver);
2819 if (err)
2820 goto exit;
2821
2822 pdev = platform_device_alloc(DRVNAME, address);
2823 if (!pdev) {
2824 err = -ENOMEM;
2825 pr_err("Device allocation failed\n");
2826 goto exit_unregister;
2827 }
2828
2829 err = platform_device_add_data(pdev, &sio_data,
2830 sizeof(struct w83627ehf_sio_data));
2831 if (err) {
2832 pr_err("Platform data allocation failed\n");
2833 goto exit_device_put;
2834 }
2835
2836 memset(&res, 0, sizeof(res));
2837 res.name = DRVNAME;
2838 res.start = address + IOREGION_OFFSET;
2839 res.end = address + IOREGION_OFFSET + IOREGION_LENGTH - 1;
2840 res.flags = IORESOURCE_IO;
2841
2842 err = acpi_check_resource_conflict(&res);
2843 if (err)
2844 goto exit_device_put;
2845
2846 err = platform_device_add_resources(pdev, &res, 1);
2847 if (err) {
2848 pr_err("Device resource addition failed (%d)\n", err);
2849 goto exit_device_put;
2850 }
2851
2852 /* platform_device_add calls probe() */
2853 err = platform_device_add(pdev);
2854 if (err) {
2855 pr_err("Device addition failed (%d)\n", err);
2856 goto exit_device_put;
2857 }
2858
2859 return 0;
2860
2861exit_device_put:
2862 platform_device_put(pdev);
2863exit_unregister:
2864 platform_driver_unregister(&w83627ehf_driver);
2865exit:
2866 return err;
2867}
2868
2869static void __exit sensors_w83627ehf_exit(void)
2870{
2871 platform_device_unregister(pdev);
2872 platform_driver_unregister(&w83627ehf_driver);
2873}
2874
2875MODULE_AUTHOR("Jean Delvare <jdelvare@suse.de>");
2876MODULE_DESCRIPTION("W83627EHF driver");
2877MODULE_LICENSE("GPL");
2878
2879module_init(sensors_w83627ehf_init);
2880module_exit(sensors_w83627ehf_exit);