Linux Audio

Check our new training course

Yocto / OpenEmbedded training

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