Linux Audio

Check our new training course

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