Linux Audio

Check our new training course

Embedded Linux training

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