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