cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

w83627ehf.c (61446B)


      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 *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 __maybe_unused 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 __maybe_unused 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 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	= &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);