Linux Audio

Check our new training course

Loading...
v3.1
   1/*
   2 * A hwmon driver for the Analog Devices ADT7462
   3 * Copyright (C) 2008 IBM
   4 *
   5 * Author: Darrick J. Wong <djwong@us.ibm.com>
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License as published by
   9 * the Free Software Foundation; either version 2 of the License, or
  10 * (at your option) any later version.
  11 *
  12 * This program is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 * GNU General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU General Public License
  18 * along with this program; if not, write to the Free Software
  19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  20 */
  21
  22#include <linux/module.h>
  23#include <linux/jiffies.h>
  24#include <linux/i2c.h>
  25#include <linux/hwmon.h>
  26#include <linux/hwmon-sysfs.h>
  27#include <linux/err.h>
  28#include <linux/mutex.h>
  29#include <linux/delay.h>
  30#include <linux/log2.h>
  31#include <linux/slab.h>
  32
  33/* Addresses to scan */
  34static const unsigned short normal_i2c[] = { 0x58, 0x5C, I2C_CLIENT_END };
  35
  36/* ADT7462 registers */
  37#define ADT7462_REG_DEVICE			0x3D
  38#define ADT7462_REG_VENDOR			0x3E
  39#define ADT7462_REG_REVISION			0x3F
  40
  41#define ADT7462_REG_MIN_TEMP_BASE_ADDR		0x44
  42#define ADT7462_REG_MIN_TEMP_MAX_ADDR		0x47
  43#define ADT7462_REG_MAX_TEMP_BASE_ADDR		0x48
  44#define ADT7462_REG_MAX_TEMP_MAX_ADDR		0x4B
  45#define ADT7462_REG_TEMP_BASE_ADDR		0x88
  46#define ADT7462_REG_TEMP_MAX_ADDR		0x8F
  47
  48#define ADT7462_REG_FAN_BASE_ADDR		0x98
  49#define ADT7462_REG_FAN_MAX_ADDR		0x9F
  50#define ADT7462_REG_FAN2_BASE_ADDR		0xA2
  51#define ADT7462_REG_FAN2_MAX_ADDR		0xA9
  52#define ADT7462_REG_FAN_ENABLE			0x07
  53#define ADT7462_REG_FAN_MIN_BASE_ADDR		0x78
  54#define ADT7462_REG_FAN_MIN_MAX_ADDR		0x7F
  55
  56#define ADT7462_REG_CFG2			0x02
  57#define		ADT7462_FSPD_MASK		0x20
  58
  59#define ADT7462_REG_PWM_BASE_ADDR		0xAA
  60#define ADT7462_REG_PWM_MAX_ADDR		0xAD
  61#define	ADT7462_REG_PWM_MIN_BASE_ADDR		0x28
  62#define ADT7462_REG_PWM_MIN_MAX_ADDR		0x2B
  63#define ADT7462_REG_PWM_MAX			0x2C
  64#define ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR	0x5C
  65#define ADT7462_REG_PWM_TEMP_MIN_MAX_ADDR	0x5F
  66#define ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR	0x60
  67#define ADT7462_REG_PWM_TEMP_RANGE_MAX_ADDR	0x63
  68#define 	ADT7462_PWM_HYST_MASK		0x0F
  69#define 	ADT7462_PWM_RANGE_MASK		0xF0
  70#define		ADT7462_PWM_RANGE_SHIFT		4
  71#define ADT7462_REG_PWM_CFG_BASE_ADDR		0x21
  72#define ADT7462_REG_PWM_CFG_MAX_ADDR		0x24
  73#define		ADT7462_PWM_CHANNEL_MASK	0xE0
  74#define		ADT7462_PWM_CHANNEL_SHIFT	5
  75
  76#define ADT7462_REG_PIN_CFG_BASE_ADDR		0x10
  77#define ADT7462_REG_PIN_CFG_MAX_ADDR		0x13
  78#define		ADT7462_PIN7_INPUT		0x01	/* cfg0 */
  79#define		ADT7462_DIODE3_INPUT		0x20
  80#define		ADT7462_DIODE1_INPUT		0x40
  81#define		ADT7462_VID_INPUT		0x80
  82#define		ADT7462_PIN22_INPUT		0x04	/* cfg1 */
  83#define		ADT7462_PIN21_INPUT		0x08
  84#define		ADT7462_PIN19_INPUT		0x10
  85#define		ADT7462_PIN15_INPUT		0x20
  86#define		ADT7462_PIN13_INPUT		0x40
  87#define		ADT7462_PIN8_INPUT		0x80
  88#define 	ADT7462_PIN23_MASK		0x03
  89#define		ADT7462_PIN23_SHIFT		0
  90#define		ADT7462_PIN26_MASK		0x0C	/* cfg2 */
  91#define		ADT7462_PIN26_SHIFT		2
  92#define		ADT7462_PIN25_MASK		0x30
  93#define		ADT7462_PIN25_SHIFT		4
  94#define		ADT7462_PIN24_MASK		0xC0
  95#define		ADT7462_PIN24_SHIFT		6
  96#define		ADT7462_PIN26_VOLT_INPUT	0x08
  97#define		ADT7462_PIN25_VOLT_INPUT	0x20
  98#define		ADT7462_PIN28_SHIFT		4	/* cfg3 */
  99#define		ADT7462_PIN28_VOLT		0x5
 100
 101#define ADT7462_REG_ALARM1			0xB8
 102#define 	ADT7462_LT_ALARM		0x02
 103#define		ADT7462_R1T_ALARM		0x04
 104#define		ADT7462_R2T_ALARM		0x08
 105#define		ADT7462_R3T_ALARM		0x10
 106#define ADT7462_REG_ALARM2			0xBB
 107#define		ADT7462_V0_ALARM		0x01
 108#define		ADT7462_V1_ALARM		0x02
 109#define		ADT7462_V2_ALARM		0x04
 110#define		ADT7462_V3_ALARM		0x08
 111#define		ADT7462_V4_ALARM		0x10
 112#define		ADT7462_V5_ALARM		0x20
 113#define		ADT7462_V6_ALARM		0x40
 114#define		ADT7462_V7_ALARM		0x80
 115#define ADT7462_REG_ALARM3			0xBC
 116#define		ADT7462_V8_ALARM		0x08
 117#define		ADT7462_V9_ALARM		0x10
 118#define		ADT7462_V10_ALARM		0x20
 119#define		ADT7462_V11_ALARM		0x40
 120#define		ADT7462_V12_ALARM		0x80
 121#define ADT7462_REG_ALARM4			0xBD
 122#define		ADT7462_F0_ALARM		0x01
 123#define		ADT7462_F1_ALARM		0x02
 124#define		ADT7462_F2_ALARM		0x04
 125#define		ADT7462_F3_ALARM		0x08
 126#define		ADT7462_F4_ALARM		0x10
 127#define		ADT7462_F5_ALARM		0x20
 128#define		ADT7462_F6_ALARM		0x40
 129#define		ADT7462_F7_ALARM		0x80
 130#define ADT7462_ALARM1				0x0000
 131#define ADT7462_ALARM2				0x0100
 132#define ADT7462_ALARM3				0x0200
 133#define ADT7462_ALARM4				0x0300
 134#define ADT7462_ALARM_REG_SHIFT			8
 135#define ADT7462_ALARM_FLAG_MASK			0x0F
 136
 137#define ADT7462_TEMP_COUNT		4
 138#define ADT7462_TEMP_REG(x)		(ADT7462_REG_TEMP_BASE_ADDR + (x * 2))
 139#define ADT7462_TEMP_MIN_REG(x) 	(ADT7462_REG_MIN_TEMP_BASE_ADDR + (x))
 140#define ADT7462_TEMP_MAX_REG(x) 	(ADT7462_REG_MAX_TEMP_BASE_ADDR + (x))
 141#define TEMP_FRAC_OFFSET		6
 142
 143#define ADT7462_FAN_COUNT		8
 144#define ADT7462_REG_FAN_MIN(x)		(ADT7462_REG_FAN_MIN_BASE_ADDR + (x))
 145
 146#define ADT7462_PWM_COUNT		4
 147#define ADT7462_REG_PWM(x)		(ADT7462_REG_PWM_BASE_ADDR + (x))
 148#define ADT7462_REG_PWM_MIN(x)		(ADT7462_REG_PWM_MIN_BASE_ADDR + (x))
 149#define ADT7462_REG_PWM_TMIN(x)		\
 150	(ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR + (x))
 151#define ADT7462_REG_PWM_TRANGE(x)	\
 152	(ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR + (x))
 153
 154#define ADT7462_PIN_CFG_REG_COUNT	4
 155#define ADT7462_REG_PIN_CFG(x)		(ADT7462_REG_PIN_CFG_BASE_ADDR + (x))
 156#define ADT7462_REG_PWM_CFG(x)		(ADT7462_REG_PWM_CFG_BASE_ADDR + (x))
 157
 158#define ADT7462_ALARM_REG_COUNT		4
 159
 160/*
 161 * The chip can measure 13 different voltage sources:
 162 *
 163 * 1. +12V1 (pin 7)
 164 * 2. Vccp1/+2.5V/+1.8V/+1.5V (pin 23)
 165 * 3. +12V3 (pin 22)
 166 * 4. +5V (pin 21)
 167 * 5. +1.25V/+0.9V (pin 19)
 168 * 6. +2.5V/+1.8V (pin 15)
 169 * 7. +3.3v (pin 13)
 170 * 8. +12V2 (pin 8)
 171 * 9. Vbatt/FSB_Vtt (pin 26)
 172 * A. +3.3V/+1.2V1 (pin 25)
 173 * B. Vccp2/+2.5V/+1.8V/+1.5V (pin 24)
 174 * C. +1.5V ICH (only if BOTH pin 28/29 are set to +1.5V)
 175 * D. +1.5V 3GPIO (only if BOTH pin 28/29 are set to +1.5V)
 176 *
 177 * Each of these 13 has a factor to convert raw to voltage.  Even better,
 178 * the pins can be connected to other sensors (tach/gpio/hot/etc), which
 179 * makes the bookkeeping tricky.
 180 *
 181 * Some, but not all, of these voltages have low/high limits.
 182 */
 183#define ADT7462_VOLT_COUNT	13
 184
 185#define ADT7462_VENDOR		0x41
 186#define ADT7462_DEVICE		0x62
 187/* datasheet only mentions a revision 4 */
 188#define ADT7462_REVISION	0x04
 189
 190/* How often do we reread sensors values? (In jiffies) */
 191#define SENSOR_REFRESH_INTERVAL	(2 * HZ)
 192
 193/* How often do we reread sensor limit values? (In jiffies) */
 194#define LIMIT_REFRESH_INTERVAL	(60 * HZ)
 195
 196/* datasheet says to divide this number by the fan reading to get fan rpm */
 197#define FAN_PERIOD_TO_RPM(x)	((90000 * 60) / (x))
 198#define FAN_RPM_TO_PERIOD	FAN_PERIOD_TO_RPM
 199#define FAN_PERIOD_INVALID	65535
 200#define FAN_DATA_VALID(x)	((x) && (x) != FAN_PERIOD_INVALID)
 201
 202#define MASK_AND_SHIFT(value, prefix)	\
 203	(((value) & prefix##_MASK) >> prefix##_SHIFT)
 204
 205struct adt7462_data {
 206	struct device		*hwmon_dev;
 207	struct attribute_group	attrs;
 208	struct mutex		lock;
 209	char			sensors_valid;
 210	char			limits_valid;
 211	unsigned long		sensors_last_updated;	/* In jiffies */
 212	unsigned long		limits_last_updated;	/* In jiffies */
 213
 214	u8			temp[ADT7462_TEMP_COUNT];
 215				/* bits 6-7 are quarter pieces of temp */
 216	u8			temp_frac[ADT7462_TEMP_COUNT];
 217	u8			temp_min[ADT7462_TEMP_COUNT];
 218	u8			temp_max[ADT7462_TEMP_COUNT];
 219	u16			fan[ADT7462_FAN_COUNT];
 220	u8			fan_enabled;
 221	u8			fan_min[ADT7462_FAN_COUNT];
 222	u8			cfg2;
 223	u8			pwm[ADT7462_PWM_COUNT];
 224	u8			pin_cfg[ADT7462_PIN_CFG_REG_COUNT];
 225	u8			voltages[ADT7462_VOLT_COUNT];
 226	u8			volt_max[ADT7462_VOLT_COUNT];
 227	u8			volt_min[ADT7462_VOLT_COUNT];
 228	u8			pwm_min[ADT7462_PWM_COUNT];
 229	u8			pwm_tmin[ADT7462_PWM_COUNT];
 230	u8			pwm_trange[ADT7462_PWM_COUNT];
 231	u8			pwm_max;	/* only one per chip */
 232	u8			pwm_cfg[ADT7462_PWM_COUNT];
 233	u8			alarms[ADT7462_ALARM_REG_COUNT];
 234};
 235
 236static int adt7462_probe(struct i2c_client *client,
 237			 const struct i2c_device_id *id);
 238static int adt7462_detect(struct i2c_client *client,
 239			  struct i2c_board_info *info);
 240static int adt7462_remove(struct i2c_client *client);
 241
 242static const struct i2c_device_id adt7462_id[] = {
 243	{ "adt7462", 0 },
 244	{ }
 245};
 246MODULE_DEVICE_TABLE(i2c, adt7462_id);
 247
 248static struct i2c_driver adt7462_driver = {
 249	.class		= I2C_CLASS_HWMON,
 250	.driver = {
 251		.name	= "adt7462",
 252	},
 253	.probe		= adt7462_probe,
 254	.remove		= adt7462_remove,
 255	.id_table	= adt7462_id,
 256	.detect		= adt7462_detect,
 257	.address_list	= normal_i2c,
 258};
 259
 260/*
 261 * 16-bit registers on the ADT7462 are low-byte first.  The data sheet says
 262 * that the low byte must be read before the high byte.
 263 */
 264static inline int adt7462_read_word_data(struct i2c_client *client, u8 reg)
 265{
 266	u16 foo;
 267	foo = i2c_smbus_read_byte_data(client, reg);
 268	foo |= ((u16)i2c_smbus_read_byte_data(client, reg + 1) << 8);
 269	return foo;
 270}
 271
 272/* For some reason these registers are not contiguous. */
 273static int ADT7462_REG_FAN(int fan)
 274{
 275	if (fan < 4)
 276		return ADT7462_REG_FAN_BASE_ADDR + (2 * fan);
 277	return ADT7462_REG_FAN2_BASE_ADDR + (2 * (fan - 4));
 278}
 279
 280/* Voltage registers are scattered everywhere */
 281static int ADT7462_REG_VOLT_MAX(struct adt7462_data *data, int which)
 282{
 283	switch (which) {
 284	case 0:
 285		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 286			return 0x7C;
 287		break;
 288	case 1:
 289		return 0x69;
 290	case 2:
 291		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 292			return 0x7F;
 293		break;
 294	case 3:
 295		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 296			return 0x7E;
 297		break;
 298	case 4:
 299		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
 300			return 0x4B;
 301		break;
 302	case 5:
 303		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
 304			return 0x49;
 305		break;
 306	case 6:
 307		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 308			return 0x68;
 309		break;
 310	case 7:
 311		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 312			return 0x7D;
 313		break;
 314	case 8:
 315		if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
 316			return 0x6C;
 317		break;
 318	case 9:
 319		if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
 320			return 0x6B;
 321		break;
 322	case 10:
 323		return 0x6A;
 324	case 11:
 325		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 326					ADT7462_PIN28_VOLT &&
 327		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 328			return 0x50;
 329		break;
 330	case 12:
 331		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 332					ADT7462_PIN28_VOLT &&
 333		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 334			return 0x4C;
 335		break;
 336	}
 337	return -ENODEV;
 338}
 339
 340static int ADT7462_REG_VOLT_MIN(struct adt7462_data *data, int which)
 341{
 342	switch (which) {
 343	case 0:
 344		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 345			return 0x6D;
 346		break;
 347	case 1:
 348		return 0x72;
 349	case 2:
 350		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 351			return 0x6F;
 352		break;
 353	case 3:
 354		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 355			return 0x71;
 356		break;
 357	case 4:
 358		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
 359			return 0x47;
 360		break;
 361	case 5:
 362		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
 363			return 0x45;
 364		break;
 365	case 6:
 366		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 367			return 0x70;
 368		break;
 369	case 7:
 370		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 371			return 0x6E;
 372		break;
 373	case 8:
 374		if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
 375			return 0x75;
 376		break;
 377	case 9:
 378		if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
 379			return 0x74;
 380		break;
 381	case 10:
 382		return 0x73;
 383	case 11:
 384		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 385					ADT7462_PIN28_VOLT &&
 386		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 387			return 0x76;
 388		break;
 389	case 12:
 390		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 391					ADT7462_PIN28_VOLT &&
 392		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 393			return 0x77;
 394		break;
 395	}
 396	return -ENODEV;
 397}
 398
 399static int ADT7462_REG_VOLT(struct adt7462_data *data, int which)
 400{
 401	switch (which) {
 402	case 0:
 403		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 404			return 0xA3;
 405		break;
 406	case 1:
 407		return 0x90;
 408	case 2:
 409		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 410			return 0xA9;
 411		break;
 412	case 3:
 413		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 414			return 0xA7;
 415		break;
 416	case 4:
 417		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
 418			return 0x8F;
 419		break;
 420	case 5:
 421		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
 422			return 0x8B;
 423		break;
 424	case 6:
 425		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 426			return 0x96;
 427		break;
 428	case 7:
 429		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 430			return 0xA5;
 431		break;
 432	case 8:
 433		if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
 434			return 0x93;
 435		break;
 436	case 9:
 437		if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
 438			return 0x92;
 439		break;
 440	case 10:
 441		return 0x91;
 442	case 11:
 443		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 444					ADT7462_PIN28_VOLT &&
 445		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 446			return 0x94;
 447		break;
 448	case 12:
 449		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 450					ADT7462_PIN28_VOLT &&
 451		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 452			return 0x95;
 453		break;
 454	}
 455	return -ENODEV;
 456}
 457
 458/* Provide labels for sysfs */
 459static const char *voltage_label(struct adt7462_data *data, int which)
 460{
 461	switch (which) {
 462	case 0:
 463		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 464			return "+12V1";
 465		break;
 466	case 1:
 467		switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) {
 468		case 0:
 469			return "Vccp1";
 470		case 1:
 471			return "+2.5V";
 472		case 2:
 473			return "+1.8V";
 474		case 3:
 475			return "+1.5V";
 476		}
 477	case 2:
 478		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 479			return "+12V3";
 480		break;
 481	case 3:
 482		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 483			return "+5V";
 484		break;
 485	case 4:
 486		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) {
 487			if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
 488				return "+0.9V";
 489			return "+1.25V";
 490		}
 491		break;
 492	case 5:
 493		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) {
 494			if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
 495				return "+1.8V";
 496			return "+2.5V";
 497		}
 498		break;
 499	case 6:
 500		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 501			return "+3.3V";
 502		break;
 503	case 7:
 504		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 505			return "+12V2";
 506		break;
 507	case 8:
 508		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) {
 509		case 0:
 510			return "Vbatt";
 511		case 1:
 512			return "FSB_Vtt";
 513		}
 514		break;
 515	case 9:
 516		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) {
 517		case 0:
 518			return "+3.3V";
 519		case 1:
 520			return "+1.2V1";
 521		}
 522		break;
 523	case 10:
 524		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) {
 525		case 0:
 526			return "Vccp2";
 527		case 1:
 528			return "+2.5V";
 529		case 2:
 530			return "+1.8V";
 531		case 3:
 532			return "+1.5";
 533		}
 534	case 11:
 535		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 536					ADT7462_PIN28_VOLT &&
 537		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 538			return "+1.5V ICH";
 539		break;
 540	case 12:
 541		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 542					ADT7462_PIN28_VOLT &&
 543		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 544			return "+1.5V 3GPIO";
 545		break;
 546	}
 547	return "N/A";
 548}
 549
 550/* Multipliers are actually in uV, not mV. */
 551static int voltage_multiplier(struct adt7462_data *data, int which)
 552{
 553	switch (which) {
 554	case 0:
 555		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 556			return 62500;
 557		break;
 558	case 1:
 559		switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) {
 560		case 0:
 561			if (data->pin_cfg[0] & ADT7462_VID_INPUT)
 562				return 12500;
 563			return 6250;
 564		case 1:
 565			return 13000;
 566		case 2:
 567			return 9400;
 568		case 3:
 569			return 7800;
 570		}
 571	case 2:
 572		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 573			return 62500;
 574		break;
 575	case 3:
 576		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 577			return 26000;
 578		break;
 579	case 4:
 580		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) {
 581			if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
 582				return 4690;
 583			return 6500;
 584		}
 585		break;
 586	case 5:
 587		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) {
 588			if (data->pin_cfg[1] & ADT7462_PIN15_INPUT)
 589				return 9400;
 590			return 13000;
 591		}
 592		break;
 593	case 6:
 594		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 595			return 17200;
 596		break;
 597	case 7:
 598		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 599			return 62500;
 600		break;
 601	case 8:
 602		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) {
 603		case 0:
 604			return 15600;
 605		case 1:
 606			return 6250;
 607		}
 608		break;
 609	case 9:
 610		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) {
 611		case 0:
 612			return 17200;
 613		case 1:
 614			return 6250;
 615		}
 616		break;
 617	case 10:
 618		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) {
 619		case 0:
 620			return 6250;
 621		case 1:
 622			return 13000;
 623		case 2:
 624			return 9400;
 625		case 3:
 626			return 7800;
 627		}
 628	case 11:
 629	case 12:
 630		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 631					ADT7462_PIN28_VOLT &&
 632		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 633			return 7800;
 634	}
 635	return 0;
 636}
 637
 638static int temp_enabled(struct adt7462_data *data, int which)
 639{
 640	switch (which) {
 641	case 0:
 642	case 2:
 643		return 1;
 644	case 1:
 645		if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT)
 646			return 1;
 647		break;
 648	case 3:
 649		if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT)
 650			return 1;
 651		break;
 652	}
 653	return 0;
 654}
 655
 656static const char *temp_label(struct adt7462_data *data, int which)
 657{
 658	switch (which) {
 659	case 0:
 660		return "local";
 661	case 1:
 662		if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT)
 663			return "remote1";
 664		break;
 665	case 2:
 666		return "remote2";
 667	case 3:
 668		if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT)
 669			return "remote3";
 670		break;
 671	}
 672	return "N/A";
 673}
 674
 675/* Map Trange register values to mC */
 676#define NUM_TRANGE_VALUES	16
 677static const int trange_values[NUM_TRANGE_VALUES] = {
 678	2000,
 679	2500,
 680	3300,
 681	4000,
 682	5000,
 683	6700,
 684	8000,
 685	10000,
 686	13300,
 687	16000,
 688	20000,
 689	26700,
 690	32000,
 691	40000,
 692	53300,
 693	80000
 694};
 695
 696static int find_trange_value(int trange)
 697{
 698	int i;
 699
 700	for (i = 0; i < NUM_TRANGE_VALUES; i++)
 701		if (trange_values[i] == trange)
 702			return i;
 703
 704	return -ENODEV;
 705}
 706
 707static struct adt7462_data *adt7462_update_device(struct device *dev)
 708{
 709	struct i2c_client *client = to_i2c_client(dev);
 710	struct adt7462_data *data = i2c_get_clientdata(client);
 711	unsigned long local_jiffies = jiffies;
 712	int i;
 713
 714	mutex_lock(&data->lock);
 715	if (time_before(local_jiffies, data->sensors_last_updated +
 716		SENSOR_REFRESH_INTERVAL)
 717		&& data->sensors_valid)
 718		goto no_sensor_update;
 719
 720	for (i = 0; i < ADT7462_TEMP_COUNT; i++) {
 721		/*
 722		 * Reading the fractional register locks the integral
 723		 * register until both have been read.
 724		 */
 725		data->temp_frac[i] = i2c_smbus_read_byte_data(client,
 726						ADT7462_TEMP_REG(i));
 727		data->temp[i] = i2c_smbus_read_byte_data(client,
 728						ADT7462_TEMP_REG(i) + 1);
 729	}
 730
 731	for (i = 0; i < ADT7462_FAN_COUNT; i++)
 732		data->fan[i] = adt7462_read_word_data(client,
 733						ADT7462_REG_FAN(i));
 734
 735	data->fan_enabled = i2c_smbus_read_byte_data(client,
 736					ADT7462_REG_FAN_ENABLE);
 737
 738	for (i = 0; i < ADT7462_PWM_COUNT; i++)
 739		data->pwm[i] = i2c_smbus_read_byte_data(client,
 740						ADT7462_REG_PWM(i));
 741
 742	for (i = 0; i < ADT7462_PIN_CFG_REG_COUNT; i++)
 743		data->pin_cfg[i] = i2c_smbus_read_byte_data(client,
 744				ADT7462_REG_PIN_CFG(i));
 745
 746	for (i = 0; i < ADT7462_VOLT_COUNT; i++) {
 747		int reg = ADT7462_REG_VOLT(data, i);
 748		if (!reg)
 749			data->voltages[i] = 0;
 750		else
 751			data->voltages[i] = i2c_smbus_read_byte_data(client,
 752								     reg);
 753	}
 754
 755	data->alarms[0] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM1);
 756	data->alarms[1] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM2);
 757	data->alarms[2] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM3);
 758	data->alarms[3] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM4);
 759
 760	data->sensors_last_updated = local_jiffies;
 761	data->sensors_valid = 1;
 762
 763no_sensor_update:
 764	if (time_before(local_jiffies, data->limits_last_updated +
 765		LIMIT_REFRESH_INTERVAL)
 766		&& data->limits_valid)
 767		goto out;
 768
 769	for (i = 0; i < ADT7462_TEMP_COUNT; i++) {
 770		data->temp_min[i] = i2c_smbus_read_byte_data(client,
 771						ADT7462_TEMP_MIN_REG(i));
 772		data->temp_max[i] = i2c_smbus_read_byte_data(client,
 773						ADT7462_TEMP_MAX_REG(i));
 774	}
 775
 776	for (i = 0; i < ADT7462_FAN_COUNT; i++)
 777		data->fan_min[i] = i2c_smbus_read_byte_data(client,
 778						ADT7462_REG_FAN_MIN(i));
 779
 780	for (i = 0; i < ADT7462_VOLT_COUNT; i++) {
 781		int reg = ADT7462_REG_VOLT_MAX(data, i);
 782		data->volt_max[i] =
 783			(reg ? i2c_smbus_read_byte_data(client, reg) : 0);
 784
 785		reg = ADT7462_REG_VOLT_MIN(data, i);
 786		data->volt_min[i] =
 787			(reg ? i2c_smbus_read_byte_data(client, reg) : 0);
 788	}
 789
 790	for (i = 0; i < ADT7462_PWM_COUNT; i++) {
 791		data->pwm_min[i] = i2c_smbus_read_byte_data(client,
 792						ADT7462_REG_PWM_MIN(i));
 793		data->pwm_tmin[i] = i2c_smbus_read_byte_data(client,
 794						ADT7462_REG_PWM_TMIN(i));
 795		data->pwm_trange[i] = i2c_smbus_read_byte_data(client,
 796						ADT7462_REG_PWM_TRANGE(i));
 797		data->pwm_cfg[i] = i2c_smbus_read_byte_data(client,
 798						ADT7462_REG_PWM_CFG(i));
 799	}
 800
 801	data->pwm_max = i2c_smbus_read_byte_data(client, ADT7462_REG_PWM_MAX);
 802
 803	data->cfg2 = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2);
 804
 805	data->limits_last_updated = local_jiffies;
 806	data->limits_valid = 1;
 807
 808out:
 809	mutex_unlock(&data->lock);
 810	return data;
 811}
 812
 813static ssize_t show_temp_min(struct device *dev,
 814			     struct device_attribute *devattr,
 815			     char *buf)
 816{
 817	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 818	struct adt7462_data *data = adt7462_update_device(dev);
 819
 820	if (!temp_enabled(data, attr->index))
 821		return sprintf(buf, "0\n");
 822
 823	return sprintf(buf, "%d\n", 1000 * (data->temp_min[attr->index] - 64));
 824}
 825
 826static ssize_t set_temp_min(struct device *dev,
 827			    struct device_attribute *devattr,
 828			    const char *buf,
 829			    size_t count)
 830{
 831	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 832	struct i2c_client *client = to_i2c_client(dev);
 833	struct adt7462_data *data = i2c_get_clientdata(client);
 834	long temp;
 835
 836	if (strict_strtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
 837		return -EINVAL;
 838
 839	temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
 840	temp = SENSORS_LIMIT(temp, 0, 255);
 841
 842	mutex_lock(&data->lock);
 843	data->temp_min[attr->index] = temp;
 844	i2c_smbus_write_byte_data(client, ADT7462_TEMP_MIN_REG(attr->index),
 845				  temp);
 846	mutex_unlock(&data->lock);
 847
 848	return count;
 849}
 850
 851static ssize_t show_temp_max(struct device *dev,
 852			     struct device_attribute *devattr,
 853			     char *buf)
 854{
 855	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 856	struct adt7462_data *data = adt7462_update_device(dev);
 857
 858	if (!temp_enabled(data, attr->index))
 859		return sprintf(buf, "0\n");
 860
 861	return sprintf(buf, "%d\n", 1000 * (data->temp_max[attr->index] - 64));
 862}
 863
 864static ssize_t set_temp_max(struct device *dev,
 865			    struct device_attribute *devattr,
 866			    const char *buf,
 867			    size_t count)
 868{
 869	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 870	struct i2c_client *client = to_i2c_client(dev);
 871	struct adt7462_data *data = i2c_get_clientdata(client);
 872	long temp;
 873
 874	if (strict_strtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
 875		return -EINVAL;
 876
 877	temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
 878	temp = SENSORS_LIMIT(temp, 0, 255);
 879
 880	mutex_lock(&data->lock);
 881	data->temp_max[attr->index] = temp;
 882	i2c_smbus_write_byte_data(client, ADT7462_TEMP_MAX_REG(attr->index),
 883				  temp);
 884	mutex_unlock(&data->lock);
 885
 886	return count;
 887}
 888
 889static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
 890			 char *buf)
 891{
 892	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 893	struct adt7462_data *data = adt7462_update_device(dev);
 894	u8 frac = data->temp_frac[attr->index] >> TEMP_FRAC_OFFSET;
 895
 896	if (!temp_enabled(data, attr->index))
 897		return sprintf(buf, "0\n");
 898
 899	return sprintf(buf, "%d\n", 1000 * (data->temp[attr->index] - 64) +
 900				     250 * frac);
 901}
 902
 903static ssize_t show_temp_label(struct device *dev,
 904			       struct device_attribute *devattr,
 905			       char *buf)
 906{
 907	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 908	struct adt7462_data *data = adt7462_update_device(dev);
 909
 910	return sprintf(buf, "%s\n", temp_label(data, attr->index));
 911}
 912
 913static ssize_t show_volt_max(struct device *dev,
 914			     struct device_attribute *devattr,
 915			     char *buf)
 916{
 917	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 918	struct adt7462_data *data = adt7462_update_device(dev);
 919	int x = voltage_multiplier(data, attr->index);
 920
 921	x *= data->volt_max[attr->index];
 922	x /= 1000; /* convert from uV to mV */
 923
 924	return sprintf(buf, "%d\n", x);
 925}
 926
 927static ssize_t set_volt_max(struct device *dev,
 928			    struct device_attribute *devattr,
 929			    const char *buf,
 930			    size_t count)
 931{
 932	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 933	struct i2c_client *client = to_i2c_client(dev);
 934	struct adt7462_data *data = i2c_get_clientdata(client);
 935	int x = voltage_multiplier(data, attr->index);
 936	long temp;
 937
 938	if (strict_strtol(buf, 10, &temp) || !x)
 939		return -EINVAL;
 940
 941	temp *= 1000; /* convert mV to uV */
 942	temp = DIV_ROUND_CLOSEST(temp, x);
 943	temp = SENSORS_LIMIT(temp, 0, 255);
 944
 945	mutex_lock(&data->lock);
 946	data->volt_max[attr->index] = temp;
 947	i2c_smbus_write_byte_data(client,
 948				  ADT7462_REG_VOLT_MAX(data, attr->index),
 949				  temp);
 950	mutex_unlock(&data->lock);
 951
 952	return count;
 953}
 954
 955static ssize_t show_volt_min(struct device *dev,
 956			     struct device_attribute *devattr,
 957			     char *buf)
 958{
 959	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 960	struct adt7462_data *data = adt7462_update_device(dev);
 961	int x = voltage_multiplier(data, attr->index);
 962
 963	x *= data->volt_min[attr->index];
 964	x /= 1000; /* convert from uV to mV */
 965
 966	return sprintf(buf, "%d\n", x);
 967}
 968
 969static ssize_t set_volt_min(struct device *dev,
 970			    struct device_attribute *devattr,
 971			    const char *buf,
 972			    size_t count)
 973{
 974	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 975	struct i2c_client *client = to_i2c_client(dev);
 976	struct adt7462_data *data = i2c_get_clientdata(client);
 977	int x = voltage_multiplier(data, attr->index);
 978	long temp;
 979
 980	if (strict_strtol(buf, 10, &temp) || !x)
 981		return -EINVAL;
 982
 983	temp *= 1000; /* convert mV to uV */
 984	temp = DIV_ROUND_CLOSEST(temp, x);
 985	temp = SENSORS_LIMIT(temp, 0, 255);
 986
 987	mutex_lock(&data->lock);
 988	data->volt_min[attr->index] = temp;
 989	i2c_smbus_write_byte_data(client,
 990				  ADT7462_REG_VOLT_MIN(data, attr->index),
 991				  temp);
 992	mutex_unlock(&data->lock);
 993
 994	return count;
 995}
 996
 997static ssize_t show_voltage(struct device *dev,
 998			    struct device_attribute *devattr,
 999			    char *buf)
1000{
1001	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1002	struct adt7462_data *data = adt7462_update_device(dev);
1003	int x = voltage_multiplier(data, attr->index);
1004
1005	x *= data->voltages[attr->index];
1006	x /= 1000; /* convert from uV to mV */
1007
1008	return sprintf(buf, "%d\n", x);
1009}
1010
1011static ssize_t show_voltage_label(struct device *dev,
1012				  struct device_attribute *devattr,
1013				  char *buf)
1014{
1015	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1016	struct adt7462_data *data = adt7462_update_device(dev);
1017
1018	return sprintf(buf, "%s\n", voltage_label(data, attr->index));
1019}
1020
1021static ssize_t show_alarm(struct device *dev,
1022			  struct device_attribute *devattr,
1023			  char *buf)
1024{
1025	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1026	struct adt7462_data *data = adt7462_update_device(dev);
1027	int reg = attr->index >> ADT7462_ALARM_REG_SHIFT;
1028	int mask = attr->index & ADT7462_ALARM_FLAG_MASK;
1029
1030	if (data->alarms[reg] & mask)
1031		return sprintf(buf, "1\n");
1032	else
1033		return sprintf(buf, "0\n");
1034}
1035
1036static int fan_enabled(struct adt7462_data *data, int fan)
1037{
1038	return data->fan_enabled & (1 << fan);
1039}
1040
1041static ssize_t show_fan_min(struct device *dev,
1042			    struct device_attribute *devattr,
1043			    char *buf)
1044{
1045	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1046	struct adt7462_data *data = adt7462_update_device(dev);
1047	u16 temp;
1048
1049	/* Only the MSB of the min fan period is stored... */
1050	temp = data->fan_min[attr->index];
1051	temp <<= 8;
1052
1053	if (!fan_enabled(data, attr->index) ||
1054	    !FAN_DATA_VALID(temp))
1055		return sprintf(buf, "0\n");
1056
1057	return sprintf(buf, "%d\n", FAN_PERIOD_TO_RPM(temp));
1058}
1059
1060static ssize_t set_fan_min(struct device *dev,
1061			   struct device_attribute *devattr,
1062			   const char *buf, size_t count)
1063{
1064	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1065	struct i2c_client *client = to_i2c_client(dev);
1066	struct adt7462_data *data = i2c_get_clientdata(client);
1067	long temp;
1068
1069	if (strict_strtol(buf, 10, &temp) || !temp ||
1070	    !fan_enabled(data, attr->index))
1071		return -EINVAL;
1072
1073	temp = FAN_RPM_TO_PERIOD(temp);
1074	temp >>= 8;
1075	temp = SENSORS_LIMIT(temp, 1, 255);
1076
1077	mutex_lock(&data->lock);
1078	data->fan_min[attr->index] = temp;
1079	i2c_smbus_write_byte_data(client, ADT7462_REG_FAN_MIN(attr->index),
1080				  temp);
1081	mutex_unlock(&data->lock);
1082
1083	return count;
1084}
1085
1086static ssize_t show_fan(struct device *dev, struct device_attribute *devattr,
1087			char *buf)
1088{
1089	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1090	struct adt7462_data *data = adt7462_update_device(dev);
1091
1092	if (!fan_enabled(data, attr->index) ||
1093	    !FAN_DATA_VALID(data->fan[attr->index]))
1094		return sprintf(buf, "0\n");
1095
1096	return sprintf(buf, "%d\n",
1097		       FAN_PERIOD_TO_RPM(data->fan[attr->index]));
1098}
1099
1100static ssize_t show_force_pwm_max(struct device *dev,
1101				  struct device_attribute *devattr,
1102				  char *buf)
1103{
1104	struct adt7462_data *data = adt7462_update_device(dev);
1105	return sprintf(buf, "%d\n", (data->cfg2 & ADT7462_FSPD_MASK ? 1 : 0));
1106}
1107
1108static ssize_t set_force_pwm_max(struct device *dev,
1109				 struct device_attribute *devattr,
1110				 const char *buf,
1111				 size_t count)
1112{
1113	struct i2c_client *client = to_i2c_client(dev);
1114	struct adt7462_data *data = i2c_get_clientdata(client);
1115	long temp;
1116	u8 reg;
1117
1118	if (strict_strtol(buf, 10, &temp))
1119		return -EINVAL;
1120
1121	mutex_lock(&data->lock);
1122	reg = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2);
1123	if (temp)
1124		reg |= ADT7462_FSPD_MASK;
1125	else
1126		reg &= ~ADT7462_FSPD_MASK;
1127	data->cfg2 = reg;
1128	i2c_smbus_write_byte_data(client, ADT7462_REG_CFG2, reg);
1129	mutex_unlock(&data->lock);
1130
1131	return count;
1132}
1133
1134static ssize_t show_pwm(struct device *dev, struct device_attribute *devattr,
1135			char *buf)
1136{
1137	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1138	struct adt7462_data *data = adt7462_update_device(dev);
1139	return sprintf(buf, "%d\n", data->pwm[attr->index]);
1140}
1141
1142static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr,
1143			const char *buf, size_t count)
1144{
1145	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1146	struct i2c_client *client = to_i2c_client(dev);
1147	struct adt7462_data *data = i2c_get_clientdata(client);
1148	long temp;
1149
1150	if (strict_strtol(buf, 10, &temp))
1151		return -EINVAL;
1152
1153	temp = SENSORS_LIMIT(temp, 0, 255);
1154
1155	mutex_lock(&data->lock);
1156	data->pwm[attr->index] = temp;
1157	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM(attr->index), temp);
1158	mutex_unlock(&data->lock);
1159
1160	return count;
1161}
1162
1163static ssize_t show_pwm_max(struct device *dev,
1164			    struct device_attribute *devattr,
1165			    char *buf)
1166{
1167	struct adt7462_data *data = adt7462_update_device(dev);
1168	return sprintf(buf, "%d\n", data->pwm_max);
1169}
1170
1171static ssize_t set_pwm_max(struct device *dev,
1172			   struct device_attribute *devattr,
1173			   const char *buf,
1174			   size_t count)
1175{
1176	struct i2c_client *client = to_i2c_client(dev);
1177	struct adt7462_data *data = i2c_get_clientdata(client);
1178	long temp;
1179
1180	if (strict_strtol(buf, 10, &temp))
1181		return -EINVAL;
1182
1183	temp = SENSORS_LIMIT(temp, 0, 255);
1184
1185	mutex_lock(&data->lock);
1186	data->pwm_max = temp;
1187	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MAX, temp);
1188	mutex_unlock(&data->lock);
1189
1190	return count;
1191}
1192
1193static ssize_t show_pwm_min(struct device *dev,
1194			    struct device_attribute *devattr,
1195			    char *buf)
1196{
1197	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1198	struct adt7462_data *data = adt7462_update_device(dev);
1199	return sprintf(buf, "%d\n", data->pwm_min[attr->index]);
1200}
1201
1202static ssize_t set_pwm_min(struct device *dev,
1203			   struct device_attribute *devattr,
1204			   const char *buf,
1205			   size_t count)
1206{
1207	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1208	struct i2c_client *client = to_i2c_client(dev);
1209	struct adt7462_data *data = i2c_get_clientdata(client);
1210	long temp;
1211
1212	if (strict_strtol(buf, 10, &temp))
1213		return -EINVAL;
1214
1215	temp = SENSORS_LIMIT(temp, 0, 255);
1216
1217	mutex_lock(&data->lock);
1218	data->pwm_min[attr->index] = temp;
1219	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MIN(attr->index),
1220				  temp);
1221	mutex_unlock(&data->lock);
1222
1223	return count;
1224}
1225
1226static ssize_t show_pwm_hyst(struct device *dev,
1227			     struct device_attribute *devattr,
1228			     char *buf)
1229{
1230	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1231	struct adt7462_data *data = adt7462_update_device(dev);
1232	return sprintf(buf, "%d\n", 1000 *
1233		      (data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK));
1234}
1235
1236static ssize_t set_pwm_hyst(struct device *dev,
1237			    struct device_attribute *devattr,
1238			    const char *buf,
1239			    size_t count)
1240{
1241	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1242	struct i2c_client *client = to_i2c_client(dev);
1243	struct adt7462_data *data = i2c_get_clientdata(client);
1244	long temp;
1245
1246	if (strict_strtol(buf, 10, &temp))
1247		return -EINVAL;
1248
1249	temp = DIV_ROUND_CLOSEST(temp, 1000);
1250	temp = SENSORS_LIMIT(temp, 0, 15);
1251
1252	/* package things up */
1253	temp &= ADT7462_PWM_HYST_MASK;
1254	temp |= data->pwm_trange[attr->index] & ADT7462_PWM_RANGE_MASK;
1255
1256	mutex_lock(&data->lock);
1257	data->pwm_trange[attr->index] = temp;
1258	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
1259				  temp);
1260	mutex_unlock(&data->lock);
1261
1262	return count;
1263}
1264
1265static ssize_t show_pwm_tmax(struct device *dev,
1266			     struct device_attribute *devattr,
1267			     char *buf)
1268{
1269	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1270	struct adt7462_data *data = adt7462_update_device(dev);
1271
1272	/* tmax = tmin + trange */
1273	int trange = trange_values[data->pwm_trange[attr->index] >>
1274				   ADT7462_PWM_RANGE_SHIFT];
1275	int tmin = (data->pwm_tmin[attr->index] - 64) * 1000;
1276
1277	return sprintf(buf, "%d\n", tmin + trange);
1278}
1279
1280static ssize_t set_pwm_tmax(struct device *dev,
1281			    struct device_attribute *devattr,
1282			    const char *buf,
1283			    size_t count)
1284{
1285	int temp;
1286	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1287	struct i2c_client *client = to_i2c_client(dev);
1288	struct adt7462_data *data = i2c_get_clientdata(client);
1289	int tmin, trange_value;
1290	long trange;
1291
1292	if (strict_strtol(buf, 10, &trange))
1293		return -EINVAL;
1294
1295	/* trange = tmax - tmin */
1296	tmin = (data->pwm_tmin[attr->index] - 64) * 1000;
1297	trange_value = find_trange_value(trange - tmin);
1298
1299	if (trange_value < 0)
1300		return -EINVAL;
1301
1302	temp = trange_value << ADT7462_PWM_RANGE_SHIFT;
1303	temp |= data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK;
1304
1305	mutex_lock(&data->lock);
1306	data->pwm_trange[attr->index] = temp;
1307	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
1308				  temp);
1309	mutex_unlock(&data->lock);
1310
1311	return count;
1312}
1313
1314static ssize_t show_pwm_tmin(struct device *dev,
1315			     struct device_attribute *devattr,
1316			     char *buf)
1317{
1318	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1319	struct adt7462_data *data = adt7462_update_device(dev);
1320	return sprintf(buf, "%d\n", 1000 * (data->pwm_tmin[attr->index] - 64));
1321}
1322
1323static ssize_t set_pwm_tmin(struct device *dev,
1324			    struct device_attribute *devattr,
1325			    const char *buf,
1326			    size_t count)
1327{
1328	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1329	struct i2c_client *client = to_i2c_client(dev);
1330	struct adt7462_data *data = i2c_get_clientdata(client);
1331	long temp;
1332
1333	if (strict_strtol(buf, 10, &temp))
1334		return -EINVAL;
1335
1336	temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
1337	temp = SENSORS_LIMIT(temp, 0, 255);
1338
1339	mutex_lock(&data->lock);
1340	data->pwm_tmin[attr->index] = temp;
1341	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TMIN(attr->index),
1342				  temp);
1343	mutex_unlock(&data->lock);
1344
1345	return count;
1346}
1347
1348static ssize_t show_pwm_auto(struct device *dev,
1349			     struct device_attribute *devattr,
1350			     char *buf)
1351{
1352	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1353	struct adt7462_data *data = adt7462_update_device(dev);
1354	int cfg = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
1355
1356	switch (cfg) {
1357	case 4: /* off */
1358		return sprintf(buf, "0\n");
1359	case 7: /* manual */
1360		return sprintf(buf, "1\n");
1361	default: /* automatic */
1362		return sprintf(buf, "2\n");
1363	}
1364}
1365
1366static void set_pwm_channel(struct i2c_client *client,
1367			    struct adt7462_data *data,
1368			    int which,
1369			    int value)
1370{
1371	int temp = data->pwm_cfg[which] & ~ADT7462_PWM_CHANNEL_MASK;
1372	temp |= value << ADT7462_PWM_CHANNEL_SHIFT;
1373
1374	mutex_lock(&data->lock);
1375	data->pwm_cfg[which] = temp;
1376	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_CFG(which), temp);
1377	mutex_unlock(&data->lock);
1378}
1379
1380static ssize_t set_pwm_auto(struct device *dev,
1381			    struct device_attribute *devattr,
1382			    const char *buf,
1383			    size_t count)
1384{
1385	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1386	struct i2c_client *client = to_i2c_client(dev);
1387	struct adt7462_data *data = i2c_get_clientdata(client);
1388	long temp;
1389
1390	if (strict_strtol(buf, 10, &temp))
1391		return -EINVAL;
1392
1393	switch (temp) {
1394	case 0: /* off */
1395		set_pwm_channel(client, data, attr->index, 4);
1396		return count;
1397	case 1: /* manual */
1398		set_pwm_channel(client, data, attr->index, 7);
1399		return count;
1400	default:
1401		return -EINVAL;
1402	}
1403}
1404
1405static ssize_t show_pwm_auto_temp(struct device *dev,
1406				  struct device_attribute *devattr,
1407				  char *buf)
1408{
1409	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1410	struct adt7462_data *data = adt7462_update_device(dev);
1411	int channel = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
1412
1413	switch (channel) {
1414	case 0: /* temp[1234] only */
1415	case 1:
1416	case 2:
1417	case 3:
1418		return sprintf(buf, "%d\n", (1 << channel));
1419	case 5: /* temp1 & temp4  */
1420		return sprintf(buf, "9\n");
1421	case 6:
1422		return sprintf(buf, "15\n");
1423	default:
1424		return sprintf(buf, "0\n");
1425	}
1426}
1427
1428static int cvt_auto_temp(int input)
1429{
1430	if (input == 0xF)
1431		return 6;
1432	if (input == 0x9)
1433		return 5;
1434	if (input < 1 || !is_power_of_2(input))
1435		return -EINVAL;
1436	return ilog2(input);
1437}
1438
1439static ssize_t set_pwm_auto_temp(struct device *dev,
1440				 struct device_attribute *devattr,
1441				 const char *buf,
1442				 size_t count)
1443{
1444	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1445	struct i2c_client *client = to_i2c_client(dev);
1446	struct adt7462_data *data = i2c_get_clientdata(client);
1447	long temp;
1448
1449	if (strict_strtol(buf, 10, &temp))
1450		return -EINVAL;
1451
1452	temp = cvt_auto_temp(temp);
1453	if (temp < 0)
1454		return temp;
1455
1456	set_pwm_channel(client, data, attr->index, temp);
1457
1458	return count;
1459}
1460
1461static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max,
1462		    set_temp_max, 0);
1463static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp_max,
1464		    set_temp_max, 1);
1465static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO, show_temp_max,
1466		    set_temp_max, 2);
1467static SENSOR_DEVICE_ATTR(temp4_max, S_IWUSR | S_IRUGO, show_temp_max,
1468		    set_temp_max, 3);
1469
1470static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp_min,
1471		    set_temp_min, 0);
1472static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp_min,
1473		    set_temp_min, 1);
1474static SENSOR_DEVICE_ATTR(temp3_min, S_IWUSR | S_IRUGO, show_temp_min,
1475		    set_temp_min, 2);
1476static SENSOR_DEVICE_ATTR(temp4_min, S_IWUSR | S_IRUGO, show_temp_min,
1477		    set_temp_min, 3);
1478
1479static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
1480static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1);
1481static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2);
1482static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3);
1483
1484static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_temp_label, NULL, 0);
1485static SENSOR_DEVICE_ATTR(temp2_label, S_IRUGO, show_temp_label, NULL, 1);
1486static SENSOR_DEVICE_ATTR(temp3_label, S_IRUGO, show_temp_label, NULL, 2);
1487static SENSOR_DEVICE_ATTR(temp4_label, S_IRUGO, show_temp_label, NULL, 3);
1488
1489static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL,
1490			  ADT7462_ALARM1 | ADT7462_LT_ALARM);
1491static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL,
1492			  ADT7462_ALARM1 | ADT7462_R1T_ALARM);
1493static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL,
1494			  ADT7462_ALARM1 | ADT7462_R2T_ALARM);
1495static SENSOR_DEVICE_ATTR(temp4_alarm, S_IRUGO, show_alarm, NULL,
1496			  ADT7462_ALARM1 | ADT7462_R3T_ALARM);
1497
1498static SENSOR_DEVICE_ATTR(in1_max, S_IWUSR | S_IRUGO, show_volt_max,
1499		    set_volt_max, 0);
1500static SENSOR_DEVICE_ATTR(in2_max, S_IWUSR | S_IRUGO, show_volt_max,
1501		    set_volt_max, 1);
1502static SENSOR_DEVICE_ATTR(in3_max, S_IWUSR | S_IRUGO, show_volt_max,
1503		    set_volt_max, 2);
1504static SENSOR_DEVICE_ATTR(in4_max, S_IWUSR | S_IRUGO, show_volt_max,
1505		    set_volt_max, 3);
1506static SENSOR_DEVICE_ATTR(in5_max, S_IWUSR | S_IRUGO, show_volt_max,
1507		    set_volt_max, 4);
1508static SENSOR_DEVICE_ATTR(in6_max, S_IWUSR | S_IRUGO, show_volt_max,
1509		    set_volt_max, 5);
1510static SENSOR_DEVICE_ATTR(in7_max, S_IWUSR | S_IRUGO, show_volt_max,
1511		    set_volt_max, 6);
1512static SENSOR_DEVICE_ATTR(in8_max, S_IWUSR | S_IRUGO, show_volt_max,
1513		    set_volt_max, 7);
1514static SENSOR_DEVICE_ATTR(in9_max, S_IWUSR | S_IRUGO, show_volt_max,
1515		    set_volt_max, 8);
1516static SENSOR_DEVICE_ATTR(in10_max, S_IWUSR | S_IRUGO, show_volt_max,
1517		    set_volt_max, 9);
1518static SENSOR_DEVICE_ATTR(in11_max, S_IWUSR | S_IRUGO, show_volt_max,
1519		    set_volt_max, 10);
1520static SENSOR_DEVICE_ATTR(in12_max, S_IWUSR | S_IRUGO, show_volt_max,
1521		    set_volt_max, 11);
1522static SENSOR_DEVICE_ATTR(in13_max, S_IWUSR | S_IRUGO, show_volt_max,
1523		    set_volt_max, 12);
1524
1525static SENSOR_DEVICE_ATTR(in1_min, S_IWUSR | S_IRUGO, show_volt_min,
1526		    set_volt_min, 0);
1527static SENSOR_DEVICE_ATTR(in2_min, S_IWUSR | S_IRUGO, show_volt_min,
1528		    set_volt_min, 1);
1529static SENSOR_DEVICE_ATTR(in3_min, S_IWUSR | S_IRUGO, show_volt_min,
1530		    set_volt_min, 2);
1531static SENSOR_DEVICE_ATTR(in4_min, S_IWUSR | S_IRUGO, show_volt_min,
1532		    set_volt_min, 3);
1533static SENSOR_DEVICE_ATTR(in5_min, S_IWUSR | S_IRUGO, show_volt_min,
1534		    set_volt_min, 4);
1535static SENSOR_DEVICE_ATTR(in6_min, S_IWUSR | S_IRUGO, show_volt_min,
1536		    set_volt_min, 5);
1537static SENSOR_DEVICE_ATTR(in7_min, S_IWUSR | S_IRUGO, show_volt_min,
1538		    set_volt_min, 6);
1539static SENSOR_DEVICE_ATTR(in8_min, S_IWUSR | S_IRUGO, show_volt_min,
1540		    set_volt_min, 7);
1541static SENSOR_DEVICE_ATTR(in9_min, S_IWUSR | S_IRUGO, show_volt_min,
1542		    set_volt_min, 8);
1543static SENSOR_DEVICE_ATTR(in10_min, S_IWUSR | S_IRUGO, show_volt_min,
1544		    set_volt_min, 9);
1545static SENSOR_DEVICE_ATTR(in11_min, S_IWUSR | S_IRUGO, show_volt_min,
1546		    set_volt_min, 10);
1547static SENSOR_DEVICE_ATTR(in12_min, S_IWUSR | S_IRUGO, show_volt_min,
1548		    set_volt_min, 11);
1549static SENSOR_DEVICE_ATTR(in13_min, S_IWUSR | S_IRUGO, show_volt_min,
1550		    set_volt_min, 12);
1551
1552static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_voltage, NULL, 0);
1553static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_voltage, NULL, 1);
1554static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_voltage, NULL, 2);
1555static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_voltage, NULL, 3);
1556static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, show_voltage, NULL, 4);
1557static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, show_voltage, NULL, 5);
1558static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, show_voltage, NULL, 6);
1559static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, show_voltage, NULL, 7);
1560static SENSOR_DEVICE_ATTR(in9_input, S_IRUGO, show_voltage, NULL, 8);
1561static SENSOR_DEVICE_ATTR(in10_input, S_IRUGO, show_voltage, NULL, 9);
1562static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, show_voltage, NULL, 10);
1563static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, show_voltage, NULL, 11);
1564static SENSOR_DEVICE_ATTR(in13_input, S_IRUGO, show_voltage, NULL, 12);
1565
1566static SENSOR_DEVICE_ATTR(in1_label, S_IRUGO, show_voltage_label, NULL, 0);
1567static SENSOR_DEVICE_ATTR(in2_label, S_IRUGO, show_voltage_label, NULL, 1);
1568static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, show_voltage_label, NULL, 2);
1569static SENSOR_DEVICE_ATTR(in4_label, S_IRUGO, show_voltage_label, NULL, 3);
1570static SENSOR_DEVICE_ATTR(in5_label, S_IRUGO, show_voltage_label, NULL, 4);
1571static SENSOR_DEVICE_ATTR(in6_label, S_IRUGO, show_voltage_label, NULL, 5);
1572static SENSOR_DEVICE_ATTR(in7_label, S_IRUGO, show_voltage_label, NULL, 6);
1573static SENSOR_DEVICE_ATTR(in8_label, S_IRUGO, show_voltage_label, NULL, 7);
1574static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, show_voltage_label, NULL, 8);
1575static SENSOR_DEVICE_ATTR(in10_label, S_IRUGO, show_voltage_label, NULL, 9);
1576static SENSOR_DEVICE_ATTR(in11_label, S_IRUGO, show_voltage_label, NULL, 10);
1577static SENSOR_DEVICE_ATTR(in12_label, S_IRUGO, show_voltage_label, NULL, 11);
1578static SENSOR_DEVICE_ATTR(in13_label, S_IRUGO, show_voltage_label, NULL, 12);
1579
1580static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL,
1581			  ADT7462_ALARM2 | ADT7462_V0_ALARM);
1582static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL,
1583			  ADT7462_ALARM2 | ADT7462_V7_ALARM);
1584static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL,
1585			  ADT7462_ALARM2 | ADT7462_V2_ALARM);
1586static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL,
1587			  ADT7462_ALARM2 | ADT7462_V6_ALARM);
1588static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL,
1589			  ADT7462_ALARM2 | ADT7462_V5_ALARM);
1590static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL,
1591			  ADT7462_ALARM2 | ADT7462_V4_ALARM);
1592static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL,
1593			  ADT7462_ALARM2 | ADT7462_V3_ALARM);
1594static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL,
1595			  ADT7462_ALARM2 | ADT7462_V1_ALARM);
1596static SENSOR_DEVICE_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL,
1597			  ADT7462_ALARM3 | ADT7462_V10_ALARM);
1598static SENSOR_DEVICE_ATTR(in10_alarm, S_IRUGO, show_alarm, NULL,
1599			  ADT7462_ALARM3 | ADT7462_V9_ALARM);
1600static SENSOR_DEVICE_ATTR(in11_alarm, S_IRUGO, show_alarm, NULL,
1601			  ADT7462_ALARM3 | ADT7462_V8_ALARM);
1602static SENSOR_DEVICE_ATTR(in12_alarm, S_IRUGO, show_alarm, NULL,
1603			  ADT7462_ALARM3 | ADT7462_V11_ALARM);
1604static SENSOR_DEVICE_ATTR(in13_alarm, S_IRUGO, show_alarm, NULL,
1605			  ADT7462_ALARM3 | ADT7462_V12_ALARM);
1606
1607static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
1608		    set_fan_min, 0);
1609static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
1610		    set_fan_min, 1);
1611static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
1612		    set_fan_min, 2);
1613static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
1614		    set_fan_min, 3);
1615static SENSOR_DEVICE_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min,
1616		    set_fan_min, 4);
1617static SENSOR_DEVICE_ATTR(fan6_min, S_IWUSR | S_IRUGO, show_fan_min,
1618		    set_fan_min, 5);
1619static SENSOR_DEVICE_ATTR(fan7_min, S_IWUSR | S_IRUGO, show_fan_min,
1620		    set_fan_min, 6);
1621static SENSOR_DEVICE_ATTR(fan8_min, S_IWUSR | S_IRUGO, show_fan_min,
1622		    set_fan_min, 7);
1623
1624static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0);
1625static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1);
1626static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2);
1627static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3);
1628static SENSOR_DEVICE_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4);
1629static SENSOR_DEVICE_ATTR(fan6_input, S_IRUGO, show_fan, NULL, 5);
1630static SENSOR_DEVICE_ATTR(fan7_input, S_IRUGO, show_fan, NULL, 6);
1631static SENSOR_DEVICE_ATTR(fan8_input, S_IRUGO, show_fan, NULL, 7);
1632
1633static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL,
1634			  ADT7462_ALARM4 | ADT7462_F0_ALARM);
1635static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL,
1636			  ADT7462_ALARM4 | ADT7462_F1_ALARM);
1637static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL,
1638			  ADT7462_ALARM4 | ADT7462_F2_ALARM);
1639static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL,
1640			  ADT7462_ALARM4 | ADT7462_F3_ALARM);
1641static SENSOR_DEVICE_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL,
1642			  ADT7462_ALARM4 | ADT7462_F4_ALARM);
1643static SENSOR_DEVICE_ATTR(fan6_alarm, S_IRUGO, show_alarm, NULL,
1644			  ADT7462_ALARM4 | ADT7462_F5_ALARM);
1645static SENSOR_DEVICE_ATTR(fan7_alarm, S_IRUGO, show_alarm, NULL,
1646			  ADT7462_ALARM4 | ADT7462_F6_ALARM);
1647static SENSOR_DEVICE_ATTR(fan8_alarm, S_IRUGO, show_alarm, NULL,
1648			  ADT7462_ALARM4 | ADT7462_F7_ALARM);
1649
1650static SENSOR_DEVICE_ATTR(force_pwm_max, S_IWUSR | S_IRUGO,
1651		    show_force_pwm_max, set_force_pwm_max, 0);
1652
1653static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 0);
1654static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 1);
1655static SENSOR_DEVICE_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 2);
1656static SENSOR_DEVICE_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 3);
1657
1658static SENSOR_DEVICE_ATTR(pwm1_auto_point1_pwm, S_IWUSR | S_IRUGO,
1659		    show_pwm_min, set_pwm_min, 0);
1660static SENSOR_DEVICE_ATTR(pwm2_auto_point1_pwm, S_IWUSR | S_IRUGO,
1661		    show_pwm_min, set_pwm_min, 1);
1662static SENSOR_DEVICE_ATTR(pwm3_auto_point1_pwm, S_IWUSR | S_IRUGO,
1663		    show_pwm_min, set_pwm_min, 2);
1664static SENSOR_DEVICE_ATTR(pwm4_auto_point1_pwm, S_IWUSR | S_IRUGO,
1665		    show_pwm_min, set_pwm_min, 3);
1666
1667static SENSOR_DEVICE_ATTR(pwm1_auto_point2_pwm, S_IWUSR | S_IRUGO,
1668		    show_pwm_max, set_pwm_max, 0);
1669static SENSOR_DEVICE_ATTR(pwm2_auto_point2_pwm, S_IWUSR | S_IRUGO,
1670		    show_pwm_max, set_pwm_max, 1);
1671static SENSOR_DEVICE_ATTR(pwm3_auto_point2_pwm, S_IWUSR | S_IRUGO,
1672		    show_pwm_max, set_pwm_max, 2);
1673static SENSOR_DEVICE_ATTR(pwm4_auto_point2_pwm, S_IWUSR | S_IRUGO,
1674		    show_pwm_max, set_pwm_max, 3);
1675
1676static SENSOR_DEVICE_ATTR(temp1_auto_point1_hyst, S_IWUSR | S_IRUGO,
1677		    show_pwm_hyst, set_pwm_hyst, 0);
1678static SENSOR_DEVICE_ATTR(temp2_auto_point1_hyst, S_IWUSR | S_IRUGO,
1679		    show_pwm_hyst, set_pwm_hyst, 1);
1680static SENSOR_DEVICE_ATTR(temp3_auto_point1_hyst, S_IWUSR | S_IRUGO,
1681		    show_pwm_hyst, set_pwm_hyst, 2);
1682static SENSOR_DEVICE_ATTR(temp4_auto_point1_hyst, S_IWUSR | S_IRUGO,
1683		    show_pwm_hyst, set_pwm_hyst, 3);
1684
1685static SENSOR_DEVICE_ATTR(temp1_auto_point2_hyst, S_IWUSR | S_IRUGO,
1686		    show_pwm_hyst, set_pwm_hyst, 0);
1687static SENSOR_DEVICE_ATTR(temp2_auto_point2_hyst, S_IWUSR | S_IRUGO,
1688		    show_pwm_hyst, set_pwm_hyst, 1);
1689static SENSOR_DEVICE_ATTR(temp3_auto_point2_hyst, S_IWUSR | S_IRUGO,
1690		    show_pwm_hyst, set_pwm_hyst, 2);
1691static SENSOR_DEVICE_ATTR(temp4_auto_point2_hyst, S_IWUSR | S_IRUGO,
1692		    show_pwm_hyst, set_pwm_hyst, 3);
1693
1694static SENSOR_DEVICE_ATTR(temp1_auto_point1_temp, S_IWUSR | S_IRUGO,
1695		    show_pwm_tmin, set_pwm_tmin, 0);
1696static SENSOR_DEVICE_ATTR(temp2_auto_point1_temp, S_IWUSR | S_IRUGO,
1697		    show_pwm_tmin, set_pwm_tmin, 1);
1698static SENSOR_DEVICE_ATTR(temp3_auto_point1_temp, S_IWUSR | S_IRUGO,
1699		    show_pwm_tmin, set_pwm_tmin, 2);
1700static SENSOR_DEVICE_ATTR(temp4_auto_point1_temp, S_IWUSR | S_IRUGO,
1701		    show_pwm_tmin, set_pwm_tmin, 3);
1702
1703static SENSOR_DEVICE_ATTR(temp1_auto_point2_temp, S_IWUSR | S_IRUGO,
1704		    show_pwm_tmax, set_pwm_tmax, 0);
1705static SENSOR_DEVICE_ATTR(temp2_auto_point2_temp, S_IWUSR | S_IRUGO,
1706		    show_pwm_tmax, set_pwm_tmax, 1);
1707static SENSOR_DEVICE_ATTR(temp3_auto_point2_temp, S_IWUSR | S_IRUGO,
1708		    show_pwm_tmax, set_pwm_tmax, 2);
1709static SENSOR_DEVICE_ATTR(temp4_auto_point2_temp, S_IWUSR | S_IRUGO,
1710		    show_pwm_tmax, set_pwm_tmax, 3);
1711
1712static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1713		    set_pwm_auto, 0);
1714static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1715		    set_pwm_auto, 1);
1716static SENSOR_DEVICE_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1717		    set_pwm_auto, 2);
1718static SENSOR_DEVICE_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1719		    set_pwm_auto, 3);
1720
1721static SENSOR_DEVICE_ATTR(pwm1_auto_channels_temp, S_IWUSR | S_IRUGO,
1722		    show_pwm_auto_temp, set_pwm_auto_temp, 0);
1723static SENSOR_DEVICE_ATTR(pwm2_auto_channels_temp, S_IWUSR | S_IRUGO,
1724		    show_pwm_auto_temp, set_pwm_auto_temp, 1);
1725static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO,
1726		    show_pwm_auto_temp, set_pwm_auto_temp, 2);
1727static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO,
1728		    show_pwm_auto_temp, set_pwm_auto_temp, 3);
1729
1730static struct attribute *adt7462_attr[] =
1731{
1732	&sensor_dev_attr_temp1_max.dev_attr.attr,
1733	&sensor_dev_attr_temp2_max.dev_attr.attr,
1734	&sensor_dev_attr_temp3_max.dev_attr.attr,
1735	&sensor_dev_attr_temp4_max.dev_attr.attr,
1736
1737	&sensor_dev_attr_temp1_min.dev_attr.attr,
1738	&sensor_dev_attr_temp2_min.dev_attr.attr,
1739	&sensor_dev_attr_temp3_min.dev_attr.attr,
1740	&sensor_dev_attr_temp4_min.dev_attr.attr,
1741
1742	&sensor_dev_attr_temp1_input.dev_attr.attr,
1743	&sensor_dev_attr_temp2_input.dev_attr.attr,
1744	&sensor_dev_attr_temp3_input.dev_attr.attr,
1745	&sensor_dev_attr_temp4_input.dev_attr.attr,
1746
1747	&sensor_dev_attr_temp1_label.dev_attr.attr,
1748	&sensor_dev_attr_temp2_label.dev_attr.attr,
1749	&sensor_dev_attr_temp3_label.dev_attr.attr,
1750	&sensor_dev_attr_temp4_label.dev_attr.attr,
1751
1752	&sensor_dev_attr_temp1_alarm.dev_attr.attr,
1753	&sensor_dev_attr_temp2_alarm.dev_attr.attr,
1754	&sensor_dev_attr_temp3_alarm.dev_attr.attr,
1755	&sensor_dev_attr_temp4_alarm.dev_attr.attr,
1756
1757	&sensor_dev_attr_in1_max.dev_attr.attr,
1758	&sensor_dev_attr_in2_max.dev_attr.attr,
1759	&sensor_dev_attr_in3_max.dev_attr.attr,
1760	&sensor_dev_attr_in4_max.dev_attr.attr,
1761	&sensor_dev_attr_in5_max.dev_attr.attr,
1762	&sensor_dev_attr_in6_max.dev_attr.attr,
1763	&sensor_dev_attr_in7_max.dev_attr.attr,
1764	&sensor_dev_attr_in8_max.dev_attr.attr,
1765	&sensor_dev_attr_in9_max.dev_attr.attr,
1766	&sensor_dev_attr_in10_max.dev_attr.attr,
1767	&sensor_dev_attr_in11_max.dev_attr.attr,
1768	&sensor_dev_attr_in12_max.dev_attr.attr,
1769	&sensor_dev_attr_in13_max.dev_attr.attr,
1770
1771	&sensor_dev_attr_in1_min.dev_attr.attr,
1772	&sensor_dev_attr_in2_min.dev_attr.attr,
1773	&sensor_dev_attr_in3_min.dev_attr.attr,
1774	&sensor_dev_attr_in4_min.dev_attr.attr,
1775	&sensor_dev_attr_in5_min.dev_attr.attr,
1776	&sensor_dev_attr_in6_min.dev_attr.attr,
1777	&sensor_dev_attr_in7_min.dev_attr.attr,
1778	&sensor_dev_attr_in8_min.dev_attr.attr,
1779	&sensor_dev_attr_in9_min.dev_attr.attr,
1780	&sensor_dev_attr_in10_min.dev_attr.attr,
1781	&sensor_dev_attr_in11_min.dev_attr.attr,
1782	&sensor_dev_attr_in12_min.dev_attr.attr,
1783	&sensor_dev_attr_in13_min.dev_attr.attr,
1784
1785	&sensor_dev_attr_in1_input.dev_attr.attr,
1786	&sensor_dev_attr_in2_input.dev_attr.attr,
1787	&sensor_dev_attr_in3_input.dev_attr.attr,
1788	&sensor_dev_attr_in4_input.dev_attr.attr,
1789	&sensor_dev_attr_in5_input.dev_attr.attr,
1790	&sensor_dev_attr_in6_input.dev_attr.attr,
1791	&sensor_dev_attr_in7_input.dev_attr.attr,
1792	&sensor_dev_attr_in8_input.dev_attr.attr,
1793	&sensor_dev_attr_in9_input.dev_attr.attr,
1794	&sensor_dev_attr_in10_input.dev_attr.attr,
1795	&sensor_dev_attr_in11_input.dev_attr.attr,
1796	&sensor_dev_attr_in12_input.dev_attr.attr,
1797	&sensor_dev_attr_in13_input.dev_attr.attr,
1798
1799	&sensor_dev_attr_in1_label.dev_attr.attr,
1800	&sensor_dev_attr_in2_label.dev_attr.attr,
1801	&sensor_dev_attr_in3_label.dev_attr.attr,
1802	&sensor_dev_attr_in4_label.dev_attr.attr,
1803	&sensor_dev_attr_in5_label.dev_attr.attr,
1804	&sensor_dev_attr_in6_label.dev_attr.attr,
1805	&sensor_dev_attr_in7_label.dev_attr.attr,
1806	&sensor_dev_attr_in8_label.dev_attr.attr,
1807	&sensor_dev_attr_in9_label.dev_attr.attr,
1808	&sensor_dev_attr_in10_label.dev_attr.attr,
1809	&sensor_dev_attr_in11_label.dev_attr.attr,
1810	&sensor_dev_attr_in12_label.dev_attr.attr,
1811	&sensor_dev_attr_in13_label.dev_attr.attr,
1812
1813	&sensor_dev_attr_in1_alarm.dev_attr.attr,
1814	&sensor_dev_attr_in2_alarm.dev_attr.attr,
1815	&sensor_dev_attr_in3_alarm.dev_attr.attr,
1816	&sensor_dev_attr_in4_alarm.dev_attr.attr,
1817	&sensor_dev_attr_in5_alarm.dev_attr.attr,
1818	&sensor_dev_attr_in6_alarm.dev_attr.attr,
1819	&sensor_dev_attr_in7_alarm.dev_attr.attr,
1820	&sensor_dev_attr_in8_alarm.dev_attr.attr,
1821	&sensor_dev_attr_in9_alarm.dev_attr.attr,
1822	&sensor_dev_attr_in10_alarm.dev_attr.attr,
1823	&sensor_dev_attr_in11_alarm.dev_attr.attr,
1824	&sensor_dev_attr_in12_alarm.dev_attr.attr,
1825	&sensor_dev_attr_in13_alarm.dev_attr.attr,
1826
1827	&sensor_dev_attr_fan1_min.dev_attr.attr,
1828	&sensor_dev_attr_fan2_min.dev_attr.attr,
1829	&sensor_dev_attr_fan3_min.dev_attr.attr,
1830	&sensor_dev_attr_fan4_min.dev_attr.attr,
1831	&sensor_dev_attr_fan5_min.dev_attr.attr,
1832	&sensor_dev_attr_fan6_min.dev_attr.attr,
1833	&sensor_dev_attr_fan7_min.dev_attr.attr,
1834	&sensor_dev_attr_fan8_min.dev_attr.attr,
1835
1836	&sensor_dev_attr_fan1_input.dev_attr.attr,
1837	&sensor_dev_attr_fan2_input.dev_attr.attr,
1838	&sensor_dev_attr_fan3_input.dev_attr.attr,
1839	&sensor_dev_attr_fan4_input.dev_attr.attr,
1840	&sensor_dev_attr_fan5_input.dev_attr.attr,
1841	&sensor_dev_attr_fan6_input.dev_attr.attr,
1842	&sensor_dev_attr_fan7_input.dev_attr.attr,
1843	&sensor_dev_attr_fan8_input.dev_attr.attr,
1844
1845	&sensor_dev_attr_fan1_alarm.dev_attr.attr,
1846	&sensor_dev_attr_fan2_alarm.dev_attr.attr,
1847	&sensor_dev_attr_fan3_alarm.dev_attr.attr,
1848	&sensor_dev_attr_fan4_alarm.dev_attr.attr,
1849	&sensor_dev_attr_fan5_alarm.dev_attr.attr,
1850	&sensor_dev_attr_fan6_alarm.dev_attr.attr,
1851	&sensor_dev_attr_fan7_alarm.dev_attr.attr,
1852	&sensor_dev_attr_fan8_alarm.dev_attr.attr,
1853
1854	&sensor_dev_attr_force_pwm_max.dev_attr.attr,
1855	&sensor_dev_attr_pwm1.dev_attr.attr,
1856	&sensor_dev_attr_pwm2.dev_attr.attr,
1857	&sensor_dev_attr_pwm3.dev_attr.attr,
1858	&sensor_dev_attr_pwm4.dev_attr.attr,
1859
1860	&sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1861	&sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
1862	&sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1863	&sensor_dev_attr_pwm4_auto_point1_pwm.dev_attr.attr,
1864
1865	&sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1866	&sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
1867	&sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1868	&sensor_dev_attr_pwm4_auto_point2_pwm.dev_attr.attr,
1869
1870	&sensor_dev_attr_temp1_auto_point1_hyst.dev_attr.attr,
1871	&sensor_dev_attr_temp2_auto_point1_hyst.dev_attr.attr,
1872	&sensor_dev_attr_temp3_auto_point1_hyst.dev_attr.attr,
1873	&sensor_dev_attr_temp4_auto_point1_hyst.dev_attr.attr,
1874
1875	&sensor_dev_attr_temp1_auto_point2_hyst.dev_attr.attr,
1876	&sensor_dev_attr_temp2_auto_point2_hyst.dev_attr.attr,
1877	&sensor_dev_attr_temp3_auto_point2_hyst.dev_attr.attr,
1878	&sensor_dev_attr_temp4_auto_point2_hyst.dev_attr.attr,
1879
1880	&sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr,
1881	&sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr,
1882	&sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr,
1883	&sensor_dev_attr_temp4_auto_point1_temp.dev_attr.attr,
1884
1885	&sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr,
1886	&sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr,
1887	&sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr,
1888	&sensor_dev_attr_temp4_auto_point2_temp.dev_attr.attr,
1889
1890	&sensor_dev_attr_pwm1_enable.dev_attr.attr,
1891	&sensor_dev_attr_pwm2_enable.dev_attr.attr,
1892	&sensor_dev_attr_pwm3_enable.dev_attr.attr,
1893	&sensor_dev_attr_pwm4_enable.dev_attr.attr,
1894
1895	&sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1896	&sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
1897	&sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1898	&sensor_dev_attr_pwm4_auto_channels_temp.dev_attr.attr,
1899	NULL
1900};
1901
1902/* Return 0 if detection is successful, -ENODEV otherwise */
1903static int adt7462_detect(struct i2c_client *client,
1904			  struct i2c_board_info *info)
1905{
1906	struct i2c_adapter *adapter = client->adapter;
1907	int vendor, device, revision;
1908
1909	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1910		return -ENODEV;
1911
1912	vendor = i2c_smbus_read_byte_data(client, ADT7462_REG_VENDOR);
1913	if (vendor != ADT7462_VENDOR)
1914		return -ENODEV;
1915
1916	device = i2c_smbus_read_byte_data(client, ADT7462_REG_DEVICE);
1917	if (device != ADT7462_DEVICE)
1918		return -ENODEV;
1919
1920	revision = i2c_smbus_read_byte_data(client, ADT7462_REG_REVISION);
1921	if (revision != ADT7462_REVISION)
1922		return -ENODEV;
1923
1924	strlcpy(info->type, "adt7462", I2C_NAME_SIZE);
1925
1926	return 0;
1927}
1928
1929static int adt7462_probe(struct i2c_client *client,
1930			 const struct i2c_device_id *id)
1931{
1932	struct adt7462_data *data;
1933	int err;
1934
1935	data = kzalloc(sizeof(struct adt7462_data), GFP_KERNEL);
1936	if (!data) {
1937		err = -ENOMEM;
1938		goto exit;
1939	}
1940
1941	i2c_set_clientdata(client, data);
1942	mutex_init(&data->lock);
1943
1944	dev_info(&client->dev, "%s chip found\n", client->name);
1945
1946	/* Register sysfs hooks */
1947	data->attrs.attrs = adt7462_attr;
1948	err = sysfs_create_group(&client->dev.kobj, &data->attrs);
1949	if (err)
1950		goto exit_free;
1951
1952	data->hwmon_dev = hwmon_device_register(&client->dev);
1953	if (IS_ERR(data->hwmon_dev)) {
1954		err = PTR_ERR(data->hwmon_dev);
1955		goto exit_remove;
1956	}
1957
1958	return 0;
1959
1960exit_remove:
1961	sysfs_remove_group(&client->dev.kobj, &data->attrs);
1962exit_free:
1963	kfree(data);
1964exit:
1965	return err;
1966}
1967
1968static int adt7462_remove(struct i2c_client *client)
1969{
1970	struct adt7462_data *data = i2c_get_clientdata(client);
1971
1972	hwmon_device_unregister(data->hwmon_dev);
1973	sysfs_remove_group(&client->dev.kobj, &data->attrs);
1974	kfree(data);
1975	return 0;
1976}
1977
1978static int __init adt7462_init(void)
1979{
1980	return i2c_add_driver(&adt7462_driver);
1981}
1982
1983static void __exit adt7462_exit(void)
1984{
1985	i2c_del_driver(&adt7462_driver);
1986}
1987
1988MODULE_AUTHOR("Darrick J. Wong <djwong@us.ibm.com>");
1989MODULE_DESCRIPTION("ADT7462 driver");
1990MODULE_LICENSE("GPL");
1991
1992module_init(adt7462_init);
1993module_exit(adt7462_exit);
v3.15
   1/*
   2 * A hwmon driver for the Analog Devices ADT7462
   3 * Copyright (C) 2008 IBM
   4 *
   5 * Author: Darrick J. Wong <darrick.wong@oracle.com>
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License as published by
   9 * the Free Software Foundation; either version 2 of the License, or
  10 * (at your option) any later version.
  11 *
  12 * This program is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 * GNU General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU General Public License
  18 * along with this program; if not, write to the Free Software
  19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  20 */
  21
  22#include <linux/module.h>
  23#include <linux/jiffies.h>
  24#include <linux/i2c.h>
  25#include <linux/hwmon.h>
  26#include <linux/hwmon-sysfs.h>
  27#include <linux/err.h>
  28#include <linux/mutex.h>
 
  29#include <linux/log2.h>
  30#include <linux/slab.h>
  31
  32/* Addresses to scan */
  33static const unsigned short normal_i2c[] = { 0x58, 0x5C, I2C_CLIENT_END };
  34
  35/* ADT7462 registers */
  36#define ADT7462_REG_DEVICE			0x3D
  37#define ADT7462_REG_VENDOR			0x3E
  38#define ADT7462_REG_REVISION			0x3F
  39
  40#define ADT7462_REG_MIN_TEMP_BASE_ADDR		0x44
  41#define ADT7462_REG_MIN_TEMP_MAX_ADDR		0x47
  42#define ADT7462_REG_MAX_TEMP_BASE_ADDR		0x48
  43#define ADT7462_REG_MAX_TEMP_MAX_ADDR		0x4B
  44#define ADT7462_REG_TEMP_BASE_ADDR		0x88
  45#define ADT7462_REG_TEMP_MAX_ADDR		0x8F
  46
  47#define ADT7462_REG_FAN_BASE_ADDR		0x98
  48#define ADT7462_REG_FAN_MAX_ADDR		0x9F
  49#define ADT7462_REG_FAN2_BASE_ADDR		0xA2
  50#define ADT7462_REG_FAN2_MAX_ADDR		0xA9
  51#define ADT7462_REG_FAN_ENABLE			0x07
  52#define ADT7462_REG_FAN_MIN_BASE_ADDR		0x78
  53#define ADT7462_REG_FAN_MIN_MAX_ADDR		0x7F
  54
  55#define ADT7462_REG_CFG2			0x02
  56#define		ADT7462_FSPD_MASK		0x20
  57
  58#define ADT7462_REG_PWM_BASE_ADDR		0xAA
  59#define ADT7462_REG_PWM_MAX_ADDR		0xAD
  60#define	ADT7462_REG_PWM_MIN_BASE_ADDR		0x28
  61#define ADT7462_REG_PWM_MIN_MAX_ADDR		0x2B
  62#define ADT7462_REG_PWM_MAX			0x2C
  63#define ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR	0x5C
  64#define ADT7462_REG_PWM_TEMP_MIN_MAX_ADDR	0x5F
  65#define ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR	0x60
  66#define ADT7462_REG_PWM_TEMP_RANGE_MAX_ADDR	0x63
  67#define	ADT7462_PWM_HYST_MASK			0x0F
  68#define	ADT7462_PWM_RANGE_MASK			0xF0
  69#define		ADT7462_PWM_RANGE_SHIFT		4
  70#define ADT7462_REG_PWM_CFG_BASE_ADDR		0x21
  71#define ADT7462_REG_PWM_CFG_MAX_ADDR		0x24
  72#define		ADT7462_PWM_CHANNEL_MASK	0xE0
  73#define		ADT7462_PWM_CHANNEL_SHIFT	5
  74
  75#define ADT7462_REG_PIN_CFG_BASE_ADDR		0x10
  76#define ADT7462_REG_PIN_CFG_MAX_ADDR		0x13
  77#define		ADT7462_PIN7_INPUT		0x01	/* cfg0 */
  78#define		ADT7462_DIODE3_INPUT		0x20
  79#define		ADT7462_DIODE1_INPUT		0x40
  80#define		ADT7462_VID_INPUT		0x80
  81#define		ADT7462_PIN22_INPUT		0x04	/* cfg1 */
  82#define		ADT7462_PIN21_INPUT		0x08
  83#define		ADT7462_PIN19_INPUT		0x10
  84#define		ADT7462_PIN15_INPUT		0x20
  85#define		ADT7462_PIN13_INPUT		0x40
  86#define		ADT7462_PIN8_INPUT		0x80
  87#define		ADT7462_PIN23_MASK		0x03
  88#define		ADT7462_PIN23_SHIFT		0
  89#define		ADT7462_PIN26_MASK		0x0C	/* cfg2 */
  90#define		ADT7462_PIN26_SHIFT		2
  91#define		ADT7462_PIN25_MASK		0x30
  92#define		ADT7462_PIN25_SHIFT		4
  93#define		ADT7462_PIN24_MASK		0xC0
  94#define		ADT7462_PIN24_SHIFT		6
  95#define		ADT7462_PIN26_VOLT_INPUT	0x08
  96#define		ADT7462_PIN25_VOLT_INPUT	0x20
  97#define		ADT7462_PIN28_SHIFT		4	/* cfg3 */
  98#define		ADT7462_PIN28_VOLT		0x5
  99
 100#define ADT7462_REG_ALARM1			0xB8
 101#define	ADT7462_LT_ALARM			0x02
 102#define		ADT7462_R1T_ALARM		0x04
 103#define		ADT7462_R2T_ALARM		0x08
 104#define		ADT7462_R3T_ALARM		0x10
 105#define ADT7462_REG_ALARM2			0xBB
 106#define		ADT7462_V0_ALARM		0x01
 107#define		ADT7462_V1_ALARM		0x02
 108#define		ADT7462_V2_ALARM		0x04
 109#define		ADT7462_V3_ALARM		0x08
 110#define		ADT7462_V4_ALARM		0x10
 111#define		ADT7462_V5_ALARM		0x20
 112#define		ADT7462_V6_ALARM		0x40
 113#define		ADT7462_V7_ALARM		0x80
 114#define ADT7462_REG_ALARM3			0xBC
 115#define		ADT7462_V8_ALARM		0x08
 116#define		ADT7462_V9_ALARM		0x10
 117#define		ADT7462_V10_ALARM		0x20
 118#define		ADT7462_V11_ALARM		0x40
 119#define		ADT7462_V12_ALARM		0x80
 120#define ADT7462_REG_ALARM4			0xBD
 121#define		ADT7462_F0_ALARM		0x01
 122#define		ADT7462_F1_ALARM		0x02
 123#define		ADT7462_F2_ALARM		0x04
 124#define		ADT7462_F3_ALARM		0x08
 125#define		ADT7462_F4_ALARM		0x10
 126#define		ADT7462_F5_ALARM		0x20
 127#define		ADT7462_F6_ALARM		0x40
 128#define		ADT7462_F7_ALARM		0x80
 129#define ADT7462_ALARM1				0x0000
 130#define ADT7462_ALARM2				0x0100
 131#define ADT7462_ALARM3				0x0200
 132#define ADT7462_ALARM4				0x0300
 133#define ADT7462_ALARM_REG_SHIFT			8
 134#define ADT7462_ALARM_FLAG_MASK			0x0F
 135
 136#define ADT7462_TEMP_COUNT		4
 137#define ADT7462_TEMP_REG(x)		(ADT7462_REG_TEMP_BASE_ADDR + ((x) * 2))
 138#define ADT7462_TEMP_MIN_REG(x)		(ADT7462_REG_MIN_TEMP_BASE_ADDR + (x))
 139#define ADT7462_TEMP_MAX_REG(x)		(ADT7462_REG_MAX_TEMP_BASE_ADDR + (x))
 140#define TEMP_FRAC_OFFSET		6
 141
 142#define ADT7462_FAN_COUNT		8
 143#define ADT7462_REG_FAN_MIN(x)		(ADT7462_REG_FAN_MIN_BASE_ADDR + (x))
 144
 145#define ADT7462_PWM_COUNT		4
 146#define ADT7462_REG_PWM(x)		(ADT7462_REG_PWM_BASE_ADDR + (x))
 147#define ADT7462_REG_PWM_MIN(x)		(ADT7462_REG_PWM_MIN_BASE_ADDR + (x))
 148#define ADT7462_REG_PWM_TMIN(x)		\
 149	(ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR + (x))
 150#define ADT7462_REG_PWM_TRANGE(x)	\
 151	(ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR + (x))
 152
 153#define ADT7462_PIN_CFG_REG_COUNT	4
 154#define ADT7462_REG_PIN_CFG(x)		(ADT7462_REG_PIN_CFG_BASE_ADDR + (x))
 155#define ADT7462_REG_PWM_CFG(x)		(ADT7462_REG_PWM_CFG_BASE_ADDR + (x))
 156
 157#define ADT7462_ALARM_REG_COUNT		4
 158
 159/*
 160 * The chip can measure 13 different voltage sources:
 161 *
 162 * 1. +12V1 (pin 7)
 163 * 2. Vccp1/+2.5V/+1.8V/+1.5V (pin 23)
 164 * 3. +12V3 (pin 22)
 165 * 4. +5V (pin 21)
 166 * 5. +1.25V/+0.9V (pin 19)
 167 * 6. +2.5V/+1.8V (pin 15)
 168 * 7. +3.3v (pin 13)
 169 * 8. +12V2 (pin 8)
 170 * 9. Vbatt/FSB_Vtt (pin 26)
 171 * A. +3.3V/+1.2V1 (pin 25)
 172 * B. Vccp2/+2.5V/+1.8V/+1.5V (pin 24)
 173 * C. +1.5V ICH (only if BOTH pin 28/29 are set to +1.5V)
 174 * D. +1.5V 3GPIO (only if BOTH pin 28/29 are set to +1.5V)
 175 *
 176 * Each of these 13 has a factor to convert raw to voltage.  Even better,
 177 * the pins can be connected to other sensors (tach/gpio/hot/etc), which
 178 * makes the bookkeeping tricky.
 179 *
 180 * Some, but not all, of these voltages have low/high limits.
 181 */
 182#define ADT7462_VOLT_COUNT	13
 183
 184#define ADT7462_VENDOR		0x41
 185#define ADT7462_DEVICE		0x62
 186/* datasheet only mentions a revision 4 */
 187#define ADT7462_REVISION	0x04
 188
 189/* How often do we reread sensors values? (In jiffies) */
 190#define SENSOR_REFRESH_INTERVAL	(2 * HZ)
 191
 192/* How often do we reread sensor limit values? (In jiffies) */
 193#define LIMIT_REFRESH_INTERVAL	(60 * HZ)
 194
 195/* datasheet says to divide this number by the fan reading to get fan rpm */
 196#define FAN_PERIOD_TO_RPM(x)	((90000 * 60) / (x))
 197#define FAN_RPM_TO_PERIOD	FAN_PERIOD_TO_RPM
 198#define FAN_PERIOD_INVALID	65535
 199#define FAN_DATA_VALID(x)	((x) && (x) != FAN_PERIOD_INVALID)
 200
 201#define MASK_AND_SHIFT(value, prefix)	\
 202	(((value) & prefix##_MASK) >> prefix##_SHIFT)
 203
 204struct adt7462_data {
 205	struct device		*hwmon_dev;
 206	struct attribute_group	attrs;
 207	struct mutex		lock;
 208	char			sensors_valid;
 209	char			limits_valid;
 210	unsigned long		sensors_last_updated;	/* In jiffies */
 211	unsigned long		limits_last_updated;	/* In jiffies */
 212
 213	u8			temp[ADT7462_TEMP_COUNT];
 214				/* bits 6-7 are quarter pieces of temp */
 215	u8			temp_frac[ADT7462_TEMP_COUNT];
 216	u8			temp_min[ADT7462_TEMP_COUNT];
 217	u8			temp_max[ADT7462_TEMP_COUNT];
 218	u16			fan[ADT7462_FAN_COUNT];
 219	u8			fan_enabled;
 220	u8			fan_min[ADT7462_FAN_COUNT];
 221	u8			cfg2;
 222	u8			pwm[ADT7462_PWM_COUNT];
 223	u8			pin_cfg[ADT7462_PIN_CFG_REG_COUNT];
 224	u8			voltages[ADT7462_VOLT_COUNT];
 225	u8			volt_max[ADT7462_VOLT_COUNT];
 226	u8			volt_min[ADT7462_VOLT_COUNT];
 227	u8			pwm_min[ADT7462_PWM_COUNT];
 228	u8			pwm_tmin[ADT7462_PWM_COUNT];
 229	u8			pwm_trange[ADT7462_PWM_COUNT];
 230	u8			pwm_max;	/* only one per chip */
 231	u8			pwm_cfg[ADT7462_PWM_COUNT];
 232	u8			alarms[ADT7462_ALARM_REG_COUNT];
 233};
 234
 235static int adt7462_probe(struct i2c_client *client,
 236			 const struct i2c_device_id *id);
 237static int adt7462_detect(struct i2c_client *client,
 238			  struct i2c_board_info *info);
 239static int adt7462_remove(struct i2c_client *client);
 240
 241static const struct i2c_device_id adt7462_id[] = {
 242	{ "adt7462", 0 },
 243	{ }
 244};
 245MODULE_DEVICE_TABLE(i2c, adt7462_id);
 246
 247static struct i2c_driver adt7462_driver = {
 248	.class		= I2C_CLASS_HWMON,
 249	.driver = {
 250		.name	= "adt7462",
 251	},
 252	.probe		= adt7462_probe,
 253	.remove		= adt7462_remove,
 254	.id_table	= adt7462_id,
 255	.detect		= adt7462_detect,
 256	.address_list	= normal_i2c,
 257};
 258
 259/*
 260 * 16-bit registers on the ADT7462 are low-byte first.  The data sheet says
 261 * that the low byte must be read before the high byte.
 262 */
 263static inline int adt7462_read_word_data(struct i2c_client *client, u8 reg)
 264{
 265	u16 foo;
 266	foo = i2c_smbus_read_byte_data(client, reg);
 267	foo |= ((u16)i2c_smbus_read_byte_data(client, reg + 1) << 8);
 268	return foo;
 269}
 270
 271/* For some reason these registers are not contiguous. */
 272static int ADT7462_REG_FAN(int fan)
 273{
 274	if (fan < 4)
 275		return ADT7462_REG_FAN_BASE_ADDR + (2 * fan);
 276	return ADT7462_REG_FAN2_BASE_ADDR + (2 * (fan - 4));
 277}
 278
 279/* Voltage registers are scattered everywhere */
 280static int ADT7462_REG_VOLT_MAX(struct adt7462_data *data, int which)
 281{
 282	switch (which) {
 283	case 0:
 284		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 285			return 0x7C;
 286		break;
 287	case 1:
 288		return 0x69;
 289	case 2:
 290		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 291			return 0x7F;
 292		break;
 293	case 3:
 294		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 295			return 0x7E;
 296		break;
 297	case 4:
 298		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
 299			return 0x4B;
 300		break;
 301	case 5:
 302		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
 303			return 0x49;
 304		break;
 305	case 6:
 306		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 307			return 0x68;
 308		break;
 309	case 7:
 310		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 311			return 0x7D;
 312		break;
 313	case 8:
 314		if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
 315			return 0x6C;
 316		break;
 317	case 9:
 318		if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
 319			return 0x6B;
 320		break;
 321	case 10:
 322		return 0x6A;
 323	case 11:
 324		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 325					ADT7462_PIN28_VOLT &&
 326		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 327			return 0x50;
 328		break;
 329	case 12:
 330		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 331					ADT7462_PIN28_VOLT &&
 332		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 333			return 0x4C;
 334		break;
 335	}
 336	return 0;
 337}
 338
 339static int ADT7462_REG_VOLT_MIN(struct adt7462_data *data, int which)
 340{
 341	switch (which) {
 342	case 0:
 343		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 344			return 0x6D;
 345		break;
 346	case 1:
 347		return 0x72;
 348	case 2:
 349		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 350			return 0x6F;
 351		break;
 352	case 3:
 353		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 354			return 0x71;
 355		break;
 356	case 4:
 357		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
 358			return 0x47;
 359		break;
 360	case 5:
 361		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
 362			return 0x45;
 363		break;
 364	case 6:
 365		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 366			return 0x70;
 367		break;
 368	case 7:
 369		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 370			return 0x6E;
 371		break;
 372	case 8:
 373		if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
 374			return 0x75;
 375		break;
 376	case 9:
 377		if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
 378			return 0x74;
 379		break;
 380	case 10:
 381		return 0x73;
 382	case 11:
 383		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 384					ADT7462_PIN28_VOLT &&
 385		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 386			return 0x76;
 387		break;
 388	case 12:
 389		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 390					ADT7462_PIN28_VOLT &&
 391		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 392			return 0x77;
 393		break;
 394	}
 395	return 0;
 396}
 397
 398static int ADT7462_REG_VOLT(struct adt7462_data *data, int which)
 399{
 400	switch (which) {
 401	case 0:
 402		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 403			return 0xA3;
 404		break;
 405	case 1:
 406		return 0x90;
 407	case 2:
 408		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 409			return 0xA9;
 410		break;
 411	case 3:
 412		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 413			return 0xA7;
 414		break;
 415	case 4:
 416		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
 417			return 0x8F;
 418		break;
 419	case 5:
 420		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
 421			return 0x8B;
 422		break;
 423	case 6:
 424		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 425			return 0x96;
 426		break;
 427	case 7:
 428		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 429			return 0xA5;
 430		break;
 431	case 8:
 432		if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
 433			return 0x93;
 434		break;
 435	case 9:
 436		if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
 437			return 0x92;
 438		break;
 439	case 10:
 440		return 0x91;
 441	case 11:
 442		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 443					ADT7462_PIN28_VOLT &&
 444		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 445			return 0x94;
 446		break;
 447	case 12:
 448		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 449					ADT7462_PIN28_VOLT &&
 450		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 451			return 0x95;
 452		break;
 453	}
 454	return -ENODEV;
 455}
 456
 457/* Provide labels for sysfs */
 458static const char *voltage_label(struct adt7462_data *data, int which)
 459{
 460	switch (which) {
 461	case 0:
 462		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 463			return "+12V1";
 464		break;
 465	case 1:
 466		switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) {
 467		case 0:
 468			return "Vccp1";
 469		case 1:
 470			return "+2.5V";
 471		case 2:
 472			return "+1.8V";
 473		case 3:
 474			return "+1.5V";
 475		}
 476	case 2:
 477		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 478			return "+12V3";
 479		break;
 480	case 3:
 481		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 482			return "+5V";
 483		break;
 484	case 4:
 485		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) {
 486			if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
 487				return "+0.9V";
 488			return "+1.25V";
 489		}
 490		break;
 491	case 5:
 492		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) {
 493			if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
 494				return "+1.8V";
 495			return "+2.5V";
 496		}
 497		break;
 498	case 6:
 499		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 500			return "+3.3V";
 501		break;
 502	case 7:
 503		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 504			return "+12V2";
 505		break;
 506	case 8:
 507		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) {
 508		case 0:
 509			return "Vbatt";
 510		case 1:
 511			return "FSB_Vtt";
 512		}
 513		break;
 514	case 9:
 515		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) {
 516		case 0:
 517			return "+3.3V";
 518		case 1:
 519			return "+1.2V1";
 520		}
 521		break;
 522	case 10:
 523		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) {
 524		case 0:
 525			return "Vccp2";
 526		case 1:
 527			return "+2.5V";
 528		case 2:
 529			return "+1.8V";
 530		case 3:
 531			return "+1.5";
 532		}
 533	case 11:
 534		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 535					ADT7462_PIN28_VOLT &&
 536		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 537			return "+1.5V ICH";
 538		break;
 539	case 12:
 540		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 541					ADT7462_PIN28_VOLT &&
 542		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 543			return "+1.5V 3GPIO";
 544		break;
 545	}
 546	return "N/A";
 547}
 548
 549/* Multipliers are actually in uV, not mV. */
 550static int voltage_multiplier(struct adt7462_data *data, int which)
 551{
 552	switch (which) {
 553	case 0:
 554		if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
 555			return 62500;
 556		break;
 557	case 1:
 558		switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) {
 559		case 0:
 560			if (data->pin_cfg[0] & ADT7462_VID_INPUT)
 561				return 12500;
 562			return 6250;
 563		case 1:
 564			return 13000;
 565		case 2:
 566			return 9400;
 567		case 3:
 568			return 7800;
 569		}
 570	case 2:
 571		if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
 572			return 62500;
 573		break;
 574	case 3:
 575		if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
 576			return 26000;
 577		break;
 578	case 4:
 579		if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) {
 580			if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
 581				return 4690;
 582			return 6500;
 583		}
 584		break;
 585	case 5:
 586		if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) {
 587			if (data->pin_cfg[1] & ADT7462_PIN15_INPUT)
 588				return 9400;
 589			return 13000;
 590		}
 591		break;
 592	case 6:
 593		if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
 594			return 17200;
 595		break;
 596	case 7:
 597		if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
 598			return 62500;
 599		break;
 600	case 8:
 601		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) {
 602		case 0:
 603			return 15600;
 604		case 1:
 605			return 6250;
 606		}
 607		break;
 608	case 9:
 609		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) {
 610		case 0:
 611			return 17200;
 612		case 1:
 613			return 6250;
 614		}
 615		break;
 616	case 10:
 617		switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) {
 618		case 0:
 619			return 6250;
 620		case 1:
 621			return 13000;
 622		case 2:
 623			return 9400;
 624		case 3:
 625			return 7800;
 626		}
 627	case 11:
 628	case 12:
 629		if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
 630					ADT7462_PIN28_VOLT &&
 631		    !(data->pin_cfg[0] & ADT7462_VID_INPUT))
 632			return 7800;
 633	}
 634	return 0;
 635}
 636
 637static int temp_enabled(struct adt7462_data *data, int which)
 638{
 639	switch (which) {
 640	case 0:
 641	case 2:
 642		return 1;
 643	case 1:
 644		if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT)
 645			return 1;
 646		break;
 647	case 3:
 648		if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT)
 649			return 1;
 650		break;
 651	}
 652	return 0;
 653}
 654
 655static const char *temp_label(struct adt7462_data *data, int which)
 656{
 657	switch (which) {
 658	case 0:
 659		return "local";
 660	case 1:
 661		if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT)
 662			return "remote1";
 663		break;
 664	case 2:
 665		return "remote2";
 666	case 3:
 667		if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT)
 668			return "remote3";
 669		break;
 670	}
 671	return "N/A";
 672}
 673
 674/* Map Trange register values to mC */
 675#define NUM_TRANGE_VALUES	16
 676static const int trange_values[NUM_TRANGE_VALUES] = {
 677	2000,
 678	2500,
 679	3300,
 680	4000,
 681	5000,
 682	6700,
 683	8000,
 684	10000,
 685	13300,
 686	16000,
 687	20000,
 688	26700,
 689	32000,
 690	40000,
 691	53300,
 692	80000
 693};
 694
 695static int find_trange_value(int trange)
 696{
 697	int i;
 698
 699	for (i = 0; i < NUM_TRANGE_VALUES; i++)
 700		if (trange_values[i] == trange)
 701			return i;
 702
 703	return -EINVAL;
 704}
 705
 706static struct adt7462_data *adt7462_update_device(struct device *dev)
 707{
 708	struct i2c_client *client = to_i2c_client(dev);
 709	struct adt7462_data *data = i2c_get_clientdata(client);
 710	unsigned long local_jiffies = jiffies;
 711	int i;
 712
 713	mutex_lock(&data->lock);
 714	if (time_before(local_jiffies, data->sensors_last_updated +
 715		SENSOR_REFRESH_INTERVAL)
 716		&& data->sensors_valid)
 717		goto no_sensor_update;
 718
 719	for (i = 0; i < ADT7462_TEMP_COUNT; i++) {
 720		/*
 721		 * Reading the fractional register locks the integral
 722		 * register until both have been read.
 723		 */
 724		data->temp_frac[i] = i2c_smbus_read_byte_data(client,
 725						ADT7462_TEMP_REG(i));
 726		data->temp[i] = i2c_smbus_read_byte_data(client,
 727						ADT7462_TEMP_REG(i) + 1);
 728	}
 729
 730	for (i = 0; i < ADT7462_FAN_COUNT; i++)
 731		data->fan[i] = adt7462_read_word_data(client,
 732						ADT7462_REG_FAN(i));
 733
 734	data->fan_enabled = i2c_smbus_read_byte_data(client,
 735					ADT7462_REG_FAN_ENABLE);
 736
 737	for (i = 0; i < ADT7462_PWM_COUNT; i++)
 738		data->pwm[i] = i2c_smbus_read_byte_data(client,
 739						ADT7462_REG_PWM(i));
 740
 741	for (i = 0; i < ADT7462_PIN_CFG_REG_COUNT; i++)
 742		data->pin_cfg[i] = i2c_smbus_read_byte_data(client,
 743				ADT7462_REG_PIN_CFG(i));
 744
 745	for (i = 0; i < ADT7462_VOLT_COUNT; i++) {
 746		int reg = ADT7462_REG_VOLT(data, i);
 747		if (!reg)
 748			data->voltages[i] = 0;
 749		else
 750			data->voltages[i] = i2c_smbus_read_byte_data(client,
 751								     reg);
 752	}
 753
 754	data->alarms[0] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM1);
 755	data->alarms[1] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM2);
 756	data->alarms[2] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM3);
 757	data->alarms[3] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM4);
 758
 759	data->sensors_last_updated = local_jiffies;
 760	data->sensors_valid = 1;
 761
 762no_sensor_update:
 763	if (time_before(local_jiffies, data->limits_last_updated +
 764		LIMIT_REFRESH_INTERVAL)
 765		&& data->limits_valid)
 766		goto out;
 767
 768	for (i = 0; i < ADT7462_TEMP_COUNT; i++) {
 769		data->temp_min[i] = i2c_smbus_read_byte_data(client,
 770						ADT7462_TEMP_MIN_REG(i));
 771		data->temp_max[i] = i2c_smbus_read_byte_data(client,
 772						ADT7462_TEMP_MAX_REG(i));
 773	}
 774
 775	for (i = 0; i < ADT7462_FAN_COUNT; i++)
 776		data->fan_min[i] = i2c_smbus_read_byte_data(client,
 777						ADT7462_REG_FAN_MIN(i));
 778
 779	for (i = 0; i < ADT7462_VOLT_COUNT; i++) {
 780		int reg = ADT7462_REG_VOLT_MAX(data, i);
 781		data->volt_max[i] =
 782			(reg ? i2c_smbus_read_byte_data(client, reg) : 0);
 783
 784		reg = ADT7462_REG_VOLT_MIN(data, i);
 785		data->volt_min[i] =
 786			(reg ? i2c_smbus_read_byte_data(client, reg) : 0);
 787	}
 788
 789	for (i = 0; i < ADT7462_PWM_COUNT; i++) {
 790		data->pwm_min[i] = i2c_smbus_read_byte_data(client,
 791						ADT7462_REG_PWM_MIN(i));
 792		data->pwm_tmin[i] = i2c_smbus_read_byte_data(client,
 793						ADT7462_REG_PWM_TMIN(i));
 794		data->pwm_trange[i] = i2c_smbus_read_byte_data(client,
 795						ADT7462_REG_PWM_TRANGE(i));
 796		data->pwm_cfg[i] = i2c_smbus_read_byte_data(client,
 797						ADT7462_REG_PWM_CFG(i));
 798	}
 799
 800	data->pwm_max = i2c_smbus_read_byte_data(client, ADT7462_REG_PWM_MAX);
 801
 802	data->cfg2 = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2);
 803
 804	data->limits_last_updated = local_jiffies;
 805	data->limits_valid = 1;
 806
 807out:
 808	mutex_unlock(&data->lock);
 809	return data;
 810}
 811
 812static ssize_t show_temp_min(struct device *dev,
 813			     struct device_attribute *devattr,
 814			     char *buf)
 815{
 816	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 817	struct adt7462_data *data = adt7462_update_device(dev);
 818
 819	if (!temp_enabled(data, attr->index))
 820		return sprintf(buf, "0\n");
 821
 822	return sprintf(buf, "%d\n", 1000 * (data->temp_min[attr->index] - 64));
 823}
 824
 825static ssize_t set_temp_min(struct device *dev,
 826			    struct device_attribute *devattr,
 827			    const char *buf,
 828			    size_t count)
 829{
 830	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 831	struct i2c_client *client = to_i2c_client(dev);
 832	struct adt7462_data *data = i2c_get_clientdata(client);
 833	long temp;
 834
 835	if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
 836		return -EINVAL;
 837
 838	temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
 839	temp = clamp_val(temp, 0, 255);
 840
 841	mutex_lock(&data->lock);
 842	data->temp_min[attr->index] = temp;
 843	i2c_smbus_write_byte_data(client, ADT7462_TEMP_MIN_REG(attr->index),
 844				  temp);
 845	mutex_unlock(&data->lock);
 846
 847	return count;
 848}
 849
 850static ssize_t show_temp_max(struct device *dev,
 851			     struct device_attribute *devattr,
 852			     char *buf)
 853{
 854	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 855	struct adt7462_data *data = adt7462_update_device(dev);
 856
 857	if (!temp_enabled(data, attr->index))
 858		return sprintf(buf, "0\n");
 859
 860	return sprintf(buf, "%d\n", 1000 * (data->temp_max[attr->index] - 64));
 861}
 862
 863static ssize_t set_temp_max(struct device *dev,
 864			    struct device_attribute *devattr,
 865			    const char *buf,
 866			    size_t count)
 867{
 868	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 869	struct i2c_client *client = to_i2c_client(dev);
 870	struct adt7462_data *data = i2c_get_clientdata(client);
 871	long temp;
 872
 873	if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
 874		return -EINVAL;
 875
 876	temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
 877	temp = clamp_val(temp, 0, 255);
 878
 879	mutex_lock(&data->lock);
 880	data->temp_max[attr->index] = temp;
 881	i2c_smbus_write_byte_data(client, ADT7462_TEMP_MAX_REG(attr->index),
 882				  temp);
 883	mutex_unlock(&data->lock);
 884
 885	return count;
 886}
 887
 888static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
 889			 char *buf)
 890{
 891	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 892	struct adt7462_data *data = adt7462_update_device(dev);
 893	u8 frac = data->temp_frac[attr->index] >> TEMP_FRAC_OFFSET;
 894
 895	if (!temp_enabled(data, attr->index))
 896		return sprintf(buf, "0\n");
 897
 898	return sprintf(buf, "%d\n", 1000 * (data->temp[attr->index] - 64) +
 899				     250 * frac);
 900}
 901
 902static ssize_t show_temp_label(struct device *dev,
 903			       struct device_attribute *devattr,
 904			       char *buf)
 905{
 906	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 907	struct adt7462_data *data = adt7462_update_device(dev);
 908
 909	return sprintf(buf, "%s\n", temp_label(data, attr->index));
 910}
 911
 912static ssize_t show_volt_max(struct device *dev,
 913			     struct device_attribute *devattr,
 914			     char *buf)
 915{
 916	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 917	struct adt7462_data *data = adt7462_update_device(dev);
 918	int x = voltage_multiplier(data, attr->index);
 919
 920	x *= data->volt_max[attr->index];
 921	x /= 1000; /* convert from uV to mV */
 922
 923	return sprintf(buf, "%d\n", x);
 924}
 925
 926static ssize_t set_volt_max(struct device *dev,
 927			    struct device_attribute *devattr,
 928			    const char *buf,
 929			    size_t count)
 930{
 931	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 932	struct i2c_client *client = to_i2c_client(dev);
 933	struct adt7462_data *data = i2c_get_clientdata(client);
 934	int x = voltage_multiplier(data, attr->index);
 935	long temp;
 936
 937	if (kstrtol(buf, 10, &temp) || !x)
 938		return -EINVAL;
 939
 940	temp *= 1000; /* convert mV to uV */
 941	temp = DIV_ROUND_CLOSEST(temp, x);
 942	temp = clamp_val(temp, 0, 255);
 943
 944	mutex_lock(&data->lock);
 945	data->volt_max[attr->index] = temp;
 946	i2c_smbus_write_byte_data(client,
 947				  ADT7462_REG_VOLT_MAX(data, attr->index),
 948				  temp);
 949	mutex_unlock(&data->lock);
 950
 951	return count;
 952}
 953
 954static ssize_t show_volt_min(struct device *dev,
 955			     struct device_attribute *devattr,
 956			     char *buf)
 957{
 958	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 959	struct adt7462_data *data = adt7462_update_device(dev);
 960	int x = voltage_multiplier(data, attr->index);
 961
 962	x *= data->volt_min[attr->index];
 963	x /= 1000; /* convert from uV to mV */
 964
 965	return sprintf(buf, "%d\n", x);
 966}
 967
 968static ssize_t set_volt_min(struct device *dev,
 969			    struct device_attribute *devattr,
 970			    const char *buf,
 971			    size_t count)
 972{
 973	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 974	struct i2c_client *client = to_i2c_client(dev);
 975	struct adt7462_data *data = i2c_get_clientdata(client);
 976	int x = voltage_multiplier(data, attr->index);
 977	long temp;
 978
 979	if (kstrtol(buf, 10, &temp) || !x)
 980		return -EINVAL;
 981
 982	temp *= 1000; /* convert mV to uV */
 983	temp = DIV_ROUND_CLOSEST(temp, x);
 984	temp = clamp_val(temp, 0, 255);
 985
 986	mutex_lock(&data->lock);
 987	data->volt_min[attr->index] = temp;
 988	i2c_smbus_write_byte_data(client,
 989				  ADT7462_REG_VOLT_MIN(data, attr->index),
 990				  temp);
 991	mutex_unlock(&data->lock);
 992
 993	return count;
 994}
 995
 996static ssize_t show_voltage(struct device *dev,
 997			    struct device_attribute *devattr,
 998			    char *buf)
 999{
1000	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1001	struct adt7462_data *data = adt7462_update_device(dev);
1002	int x = voltage_multiplier(data, attr->index);
1003
1004	x *= data->voltages[attr->index];
1005	x /= 1000; /* convert from uV to mV */
1006
1007	return sprintf(buf, "%d\n", x);
1008}
1009
1010static ssize_t show_voltage_label(struct device *dev,
1011				  struct device_attribute *devattr,
1012				  char *buf)
1013{
1014	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1015	struct adt7462_data *data = adt7462_update_device(dev);
1016
1017	return sprintf(buf, "%s\n", voltage_label(data, attr->index));
1018}
1019
1020static ssize_t show_alarm(struct device *dev,
1021			  struct device_attribute *devattr,
1022			  char *buf)
1023{
1024	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1025	struct adt7462_data *data = adt7462_update_device(dev);
1026	int reg = attr->index >> ADT7462_ALARM_REG_SHIFT;
1027	int mask = attr->index & ADT7462_ALARM_FLAG_MASK;
1028
1029	if (data->alarms[reg] & mask)
1030		return sprintf(buf, "1\n");
1031	else
1032		return sprintf(buf, "0\n");
1033}
1034
1035static int fan_enabled(struct adt7462_data *data, int fan)
1036{
1037	return data->fan_enabled & (1 << fan);
1038}
1039
1040static ssize_t show_fan_min(struct device *dev,
1041			    struct device_attribute *devattr,
1042			    char *buf)
1043{
1044	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1045	struct adt7462_data *data = adt7462_update_device(dev);
1046	u16 temp;
1047
1048	/* Only the MSB of the min fan period is stored... */
1049	temp = data->fan_min[attr->index];
1050	temp <<= 8;
1051
1052	if (!fan_enabled(data, attr->index) ||
1053	    !FAN_DATA_VALID(temp))
1054		return sprintf(buf, "0\n");
1055
1056	return sprintf(buf, "%d\n", FAN_PERIOD_TO_RPM(temp));
1057}
1058
1059static ssize_t set_fan_min(struct device *dev,
1060			   struct device_attribute *devattr,
1061			   const char *buf, size_t count)
1062{
1063	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1064	struct i2c_client *client = to_i2c_client(dev);
1065	struct adt7462_data *data = i2c_get_clientdata(client);
1066	long temp;
1067
1068	if (kstrtol(buf, 10, &temp) || !temp ||
1069	    !fan_enabled(data, attr->index))
1070		return -EINVAL;
1071
1072	temp = FAN_RPM_TO_PERIOD(temp);
1073	temp >>= 8;
1074	temp = clamp_val(temp, 1, 255);
1075
1076	mutex_lock(&data->lock);
1077	data->fan_min[attr->index] = temp;
1078	i2c_smbus_write_byte_data(client, ADT7462_REG_FAN_MIN(attr->index),
1079				  temp);
1080	mutex_unlock(&data->lock);
1081
1082	return count;
1083}
1084
1085static ssize_t show_fan(struct device *dev, struct device_attribute *devattr,
1086			char *buf)
1087{
1088	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1089	struct adt7462_data *data = adt7462_update_device(dev);
1090
1091	if (!fan_enabled(data, attr->index) ||
1092	    !FAN_DATA_VALID(data->fan[attr->index]))
1093		return sprintf(buf, "0\n");
1094
1095	return sprintf(buf, "%d\n",
1096		       FAN_PERIOD_TO_RPM(data->fan[attr->index]));
1097}
1098
1099static ssize_t show_force_pwm_max(struct device *dev,
1100				  struct device_attribute *devattr,
1101				  char *buf)
1102{
1103	struct adt7462_data *data = adt7462_update_device(dev);
1104	return sprintf(buf, "%d\n", (data->cfg2 & ADT7462_FSPD_MASK ? 1 : 0));
1105}
1106
1107static ssize_t set_force_pwm_max(struct device *dev,
1108				 struct device_attribute *devattr,
1109				 const char *buf,
1110				 size_t count)
1111{
1112	struct i2c_client *client = to_i2c_client(dev);
1113	struct adt7462_data *data = i2c_get_clientdata(client);
1114	long temp;
1115	u8 reg;
1116
1117	if (kstrtol(buf, 10, &temp))
1118		return -EINVAL;
1119
1120	mutex_lock(&data->lock);
1121	reg = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2);
1122	if (temp)
1123		reg |= ADT7462_FSPD_MASK;
1124	else
1125		reg &= ~ADT7462_FSPD_MASK;
1126	data->cfg2 = reg;
1127	i2c_smbus_write_byte_data(client, ADT7462_REG_CFG2, reg);
1128	mutex_unlock(&data->lock);
1129
1130	return count;
1131}
1132
1133static ssize_t show_pwm(struct device *dev, struct device_attribute *devattr,
1134			char *buf)
1135{
1136	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1137	struct adt7462_data *data = adt7462_update_device(dev);
1138	return sprintf(buf, "%d\n", data->pwm[attr->index]);
1139}
1140
1141static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr,
1142			const char *buf, size_t count)
1143{
1144	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1145	struct i2c_client *client = to_i2c_client(dev);
1146	struct adt7462_data *data = i2c_get_clientdata(client);
1147	long temp;
1148
1149	if (kstrtol(buf, 10, &temp))
1150		return -EINVAL;
1151
1152	temp = clamp_val(temp, 0, 255);
1153
1154	mutex_lock(&data->lock);
1155	data->pwm[attr->index] = temp;
1156	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM(attr->index), temp);
1157	mutex_unlock(&data->lock);
1158
1159	return count;
1160}
1161
1162static ssize_t show_pwm_max(struct device *dev,
1163			    struct device_attribute *devattr,
1164			    char *buf)
1165{
1166	struct adt7462_data *data = adt7462_update_device(dev);
1167	return sprintf(buf, "%d\n", data->pwm_max);
1168}
1169
1170static ssize_t set_pwm_max(struct device *dev,
1171			   struct device_attribute *devattr,
1172			   const char *buf,
1173			   size_t count)
1174{
1175	struct i2c_client *client = to_i2c_client(dev);
1176	struct adt7462_data *data = i2c_get_clientdata(client);
1177	long temp;
1178
1179	if (kstrtol(buf, 10, &temp))
1180		return -EINVAL;
1181
1182	temp = clamp_val(temp, 0, 255);
1183
1184	mutex_lock(&data->lock);
1185	data->pwm_max = temp;
1186	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MAX, temp);
1187	mutex_unlock(&data->lock);
1188
1189	return count;
1190}
1191
1192static ssize_t show_pwm_min(struct device *dev,
1193			    struct device_attribute *devattr,
1194			    char *buf)
1195{
1196	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1197	struct adt7462_data *data = adt7462_update_device(dev);
1198	return sprintf(buf, "%d\n", data->pwm_min[attr->index]);
1199}
1200
1201static ssize_t set_pwm_min(struct device *dev,
1202			   struct device_attribute *devattr,
1203			   const char *buf,
1204			   size_t count)
1205{
1206	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1207	struct i2c_client *client = to_i2c_client(dev);
1208	struct adt7462_data *data = i2c_get_clientdata(client);
1209	long temp;
1210
1211	if (kstrtol(buf, 10, &temp))
1212		return -EINVAL;
1213
1214	temp = clamp_val(temp, 0, 255);
1215
1216	mutex_lock(&data->lock);
1217	data->pwm_min[attr->index] = temp;
1218	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MIN(attr->index),
1219				  temp);
1220	mutex_unlock(&data->lock);
1221
1222	return count;
1223}
1224
1225static ssize_t show_pwm_hyst(struct device *dev,
1226			     struct device_attribute *devattr,
1227			     char *buf)
1228{
1229	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1230	struct adt7462_data *data = adt7462_update_device(dev);
1231	return sprintf(buf, "%d\n", 1000 *
1232		      (data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK));
1233}
1234
1235static ssize_t set_pwm_hyst(struct device *dev,
1236			    struct device_attribute *devattr,
1237			    const char *buf,
1238			    size_t count)
1239{
1240	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1241	struct i2c_client *client = to_i2c_client(dev);
1242	struct adt7462_data *data = i2c_get_clientdata(client);
1243	long temp;
1244
1245	if (kstrtol(buf, 10, &temp))
1246		return -EINVAL;
1247
1248	temp = DIV_ROUND_CLOSEST(temp, 1000);
1249	temp = clamp_val(temp, 0, 15);
1250
1251	/* package things up */
1252	temp &= ADT7462_PWM_HYST_MASK;
1253	temp |= data->pwm_trange[attr->index] & ADT7462_PWM_RANGE_MASK;
1254
1255	mutex_lock(&data->lock);
1256	data->pwm_trange[attr->index] = temp;
1257	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
1258				  temp);
1259	mutex_unlock(&data->lock);
1260
1261	return count;
1262}
1263
1264static ssize_t show_pwm_tmax(struct device *dev,
1265			     struct device_attribute *devattr,
1266			     char *buf)
1267{
1268	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1269	struct adt7462_data *data = adt7462_update_device(dev);
1270
1271	/* tmax = tmin + trange */
1272	int trange = trange_values[data->pwm_trange[attr->index] >>
1273				   ADT7462_PWM_RANGE_SHIFT];
1274	int tmin = (data->pwm_tmin[attr->index] - 64) * 1000;
1275
1276	return sprintf(buf, "%d\n", tmin + trange);
1277}
1278
1279static ssize_t set_pwm_tmax(struct device *dev,
1280			    struct device_attribute *devattr,
1281			    const char *buf,
1282			    size_t count)
1283{
1284	int temp;
1285	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1286	struct i2c_client *client = to_i2c_client(dev);
1287	struct adt7462_data *data = i2c_get_clientdata(client);
1288	int tmin, trange_value;
1289	long trange;
1290
1291	if (kstrtol(buf, 10, &trange))
1292		return -EINVAL;
1293
1294	/* trange = tmax - tmin */
1295	tmin = (data->pwm_tmin[attr->index] - 64) * 1000;
1296	trange_value = find_trange_value(trange - tmin);
 
1297	if (trange_value < 0)
1298		return trange_value;
1299
1300	temp = trange_value << ADT7462_PWM_RANGE_SHIFT;
1301	temp |= data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK;
1302
1303	mutex_lock(&data->lock);
1304	data->pwm_trange[attr->index] = temp;
1305	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
1306				  temp);
1307	mutex_unlock(&data->lock);
1308
1309	return count;
1310}
1311
1312static ssize_t show_pwm_tmin(struct device *dev,
1313			     struct device_attribute *devattr,
1314			     char *buf)
1315{
1316	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1317	struct adt7462_data *data = adt7462_update_device(dev);
1318	return sprintf(buf, "%d\n", 1000 * (data->pwm_tmin[attr->index] - 64));
1319}
1320
1321static ssize_t set_pwm_tmin(struct device *dev,
1322			    struct device_attribute *devattr,
1323			    const char *buf,
1324			    size_t count)
1325{
1326	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1327	struct i2c_client *client = to_i2c_client(dev);
1328	struct adt7462_data *data = i2c_get_clientdata(client);
1329	long temp;
1330
1331	if (kstrtol(buf, 10, &temp))
1332		return -EINVAL;
1333
1334	temp = DIV_ROUND_CLOSEST(temp, 1000) + 64;
1335	temp = clamp_val(temp, 0, 255);
1336
1337	mutex_lock(&data->lock);
1338	data->pwm_tmin[attr->index] = temp;
1339	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TMIN(attr->index),
1340				  temp);
1341	mutex_unlock(&data->lock);
1342
1343	return count;
1344}
1345
1346static ssize_t show_pwm_auto(struct device *dev,
1347			     struct device_attribute *devattr,
1348			     char *buf)
1349{
1350	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1351	struct adt7462_data *data = adt7462_update_device(dev);
1352	int cfg = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
1353
1354	switch (cfg) {
1355	case 4: /* off */
1356		return sprintf(buf, "0\n");
1357	case 7: /* manual */
1358		return sprintf(buf, "1\n");
1359	default: /* automatic */
1360		return sprintf(buf, "2\n");
1361	}
1362}
1363
1364static void set_pwm_channel(struct i2c_client *client,
1365			    struct adt7462_data *data,
1366			    int which,
1367			    int value)
1368{
1369	int temp = data->pwm_cfg[which] & ~ADT7462_PWM_CHANNEL_MASK;
1370	temp |= value << ADT7462_PWM_CHANNEL_SHIFT;
1371
1372	mutex_lock(&data->lock);
1373	data->pwm_cfg[which] = temp;
1374	i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_CFG(which), temp);
1375	mutex_unlock(&data->lock);
1376}
1377
1378static ssize_t set_pwm_auto(struct device *dev,
1379			    struct device_attribute *devattr,
1380			    const char *buf,
1381			    size_t count)
1382{
1383	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1384	struct i2c_client *client = to_i2c_client(dev);
1385	struct adt7462_data *data = i2c_get_clientdata(client);
1386	long temp;
1387
1388	if (kstrtol(buf, 10, &temp))
1389		return -EINVAL;
1390
1391	switch (temp) {
1392	case 0: /* off */
1393		set_pwm_channel(client, data, attr->index, 4);
1394		return count;
1395	case 1: /* manual */
1396		set_pwm_channel(client, data, attr->index, 7);
1397		return count;
1398	default:
1399		return -EINVAL;
1400	}
1401}
1402
1403static ssize_t show_pwm_auto_temp(struct device *dev,
1404				  struct device_attribute *devattr,
1405				  char *buf)
1406{
1407	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1408	struct adt7462_data *data = adt7462_update_device(dev);
1409	int channel = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
1410
1411	switch (channel) {
1412	case 0: /* temp[1234] only */
1413	case 1:
1414	case 2:
1415	case 3:
1416		return sprintf(buf, "%d\n", (1 << channel));
1417	case 5: /* temp1 & temp4  */
1418		return sprintf(buf, "9\n");
1419	case 6:
1420		return sprintf(buf, "15\n");
1421	default:
1422		return sprintf(buf, "0\n");
1423	}
1424}
1425
1426static int cvt_auto_temp(int input)
1427{
1428	if (input == 0xF)
1429		return 6;
1430	if (input == 0x9)
1431		return 5;
1432	if (input < 1 || !is_power_of_2(input))
1433		return -EINVAL;
1434	return ilog2(input);
1435}
1436
1437static ssize_t set_pwm_auto_temp(struct device *dev,
1438				 struct device_attribute *devattr,
1439				 const char *buf,
1440				 size_t count)
1441{
1442	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1443	struct i2c_client *client = to_i2c_client(dev);
1444	struct adt7462_data *data = i2c_get_clientdata(client);
1445	long temp;
1446
1447	if (kstrtol(buf, 10, &temp))
1448		return -EINVAL;
1449
1450	temp = cvt_auto_temp(temp);
1451	if (temp < 0)
1452		return temp;
1453
1454	set_pwm_channel(client, data, attr->index, temp);
1455
1456	return count;
1457}
1458
1459static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max,
1460		    set_temp_max, 0);
1461static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp_max,
1462		    set_temp_max, 1);
1463static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO, show_temp_max,
1464		    set_temp_max, 2);
1465static SENSOR_DEVICE_ATTR(temp4_max, S_IWUSR | S_IRUGO, show_temp_max,
1466		    set_temp_max, 3);
1467
1468static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp_min,
1469		    set_temp_min, 0);
1470static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp_min,
1471		    set_temp_min, 1);
1472static SENSOR_DEVICE_ATTR(temp3_min, S_IWUSR | S_IRUGO, show_temp_min,
1473		    set_temp_min, 2);
1474static SENSOR_DEVICE_ATTR(temp4_min, S_IWUSR | S_IRUGO, show_temp_min,
1475		    set_temp_min, 3);
1476
1477static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
1478static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1);
1479static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2);
1480static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3);
1481
1482static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_temp_label, NULL, 0);
1483static SENSOR_DEVICE_ATTR(temp2_label, S_IRUGO, show_temp_label, NULL, 1);
1484static SENSOR_DEVICE_ATTR(temp3_label, S_IRUGO, show_temp_label, NULL, 2);
1485static SENSOR_DEVICE_ATTR(temp4_label, S_IRUGO, show_temp_label, NULL, 3);
1486
1487static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL,
1488			  ADT7462_ALARM1 | ADT7462_LT_ALARM);
1489static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL,
1490			  ADT7462_ALARM1 | ADT7462_R1T_ALARM);
1491static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL,
1492			  ADT7462_ALARM1 | ADT7462_R2T_ALARM);
1493static SENSOR_DEVICE_ATTR(temp4_alarm, S_IRUGO, show_alarm, NULL,
1494			  ADT7462_ALARM1 | ADT7462_R3T_ALARM);
1495
1496static SENSOR_DEVICE_ATTR(in1_max, S_IWUSR | S_IRUGO, show_volt_max,
1497		    set_volt_max, 0);
1498static SENSOR_DEVICE_ATTR(in2_max, S_IWUSR | S_IRUGO, show_volt_max,
1499		    set_volt_max, 1);
1500static SENSOR_DEVICE_ATTR(in3_max, S_IWUSR | S_IRUGO, show_volt_max,
1501		    set_volt_max, 2);
1502static SENSOR_DEVICE_ATTR(in4_max, S_IWUSR | S_IRUGO, show_volt_max,
1503		    set_volt_max, 3);
1504static SENSOR_DEVICE_ATTR(in5_max, S_IWUSR | S_IRUGO, show_volt_max,
1505		    set_volt_max, 4);
1506static SENSOR_DEVICE_ATTR(in6_max, S_IWUSR | S_IRUGO, show_volt_max,
1507		    set_volt_max, 5);
1508static SENSOR_DEVICE_ATTR(in7_max, S_IWUSR | S_IRUGO, show_volt_max,
1509		    set_volt_max, 6);
1510static SENSOR_DEVICE_ATTR(in8_max, S_IWUSR | S_IRUGO, show_volt_max,
1511		    set_volt_max, 7);
1512static SENSOR_DEVICE_ATTR(in9_max, S_IWUSR | S_IRUGO, show_volt_max,
1513		    set_volt_max, 8);
1514static SENSOR_DEVICE_ATTR(in10_max, S_IWUSR | S_IRUGO, show_volt_max,
1515		    set_volt_max, 9);
1516static SENSOR_DEVICE_ATTR(in11_max, S_IWUSR | S_IRUGO, show_volt_max,
1517		    set_volt_max, 10);
1518static SENSOR_DEVICE_ATTR(in12_max, S_IWUSR | S_IRUGO, show_volt_max,
1519		    set_volt_max, 11);
1520static SENSOR_DEVICE_ATTR(in13_max, S_IWUSR | S_IRUGO, show_volt_max,
1521		    set_volt_max, 12);
1522
1523static SENSOR_DEVICE_ATTR(in1_min, S_IWUSR | S_IRUGO, show_volt_min,
1524		    set_volt_min, 0);
1525static SENSOR_DEVICE_ATTR(in2_min, S_IWUSR | S_IRUGO, show_volt_min,
1526		    set_volt_min, 1);
1527static SENSOR_DEVICE_ATTR(in3_min, S_IWUSR | S_IRUGO, show_volt_min,
1528		    set_volt_min, 2);
1529static SENSOR_DEVICE_ATTR(in4_min, S_IWUSR | S_IRUGO, show_volt_min,
1530		    set_volt_min, 3);
1531static SENSOR_DEVICE_ATTR(in5_min, S_IWUSR | S_IRUGO, show_volt_min,
1532		    set_volt_min, 4);
1533static SENSOR_DEVICE_ATTR(in6_min, S_IWUSR | S_IRUGO, show_volt_min,
1534		    set_volt_min, 5);
1535static SENSOR_DEVICE_ATTR(in7_min, S_IWUSR | S_IRUGO, show_volt_min,
1536		    set_volt_min, 6);
1537static SENSOR_DEVICE_ATTR(in8_min, S_IWUSR | S_IRUGO, show_volt_min,
1538		    set_volt_min, 7);
1539static SENSOR_DEVICE_ATTR(in9_min, S_IWUSR | S_IRUGO, show_volt_min,
1540		    set_volt_min, 8);
1541static SENSOR_DEVICE_ATTR(in10_min, S_IWUSR | S_IRUGO, show_volt_min,
1542		    set_volt_min, 9);
1543static SENSOR_DEVICE_ATTR(in11_min, S_IWUSR | S_IRUGO, show_volt_min,
1544		    set_volt_min, 10);
1545static SENSOR_DEVICE_ATTR(in12_min, S_IWUSR | S_IRUGO, show_volt_min,
1546		    set_volt_min, 11);
1547static SENSOR_DEVICE_ATTR(in13_min, S_IWUSR | S_IRUGO, show_volt_min,
1548		    set_volt_min, 12);
1549
1550static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_voltage, NULL, 0);
1551static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_voltage, NULL, 1);
1552static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_voltage, NULL, 2);
1553static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_voltage, NULL, 3);
1554static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, show_voltage, NULL, 4);
1555static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, show_voltage, NULL, 5);
1556static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, show_voltage, NULL, 6);
1557static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, show_voltage, NULL, 7);
1558static SENSOR_DEVICE_ATTR(in9_input, S_IRUGO, show_voltage, NULL, 8);
1559static SENSOR_DEVICE_ATTR(in10_input, S_IRUGO, show_voltage, NULL, 9);
1560static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, show_voltage, NULL, 10);
1561static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, show_voltage, NULL, 11);
1562static SENSOR_DEVICE_ATTR(in13_input, S_IRUGO, show_voltage, NULL, 12);
1563
1564static SENSOR_DEVICE_ATTR(in1_label, S_IRUGO, show_voltage_label, NULL, 0);
1565static SENSOR_DEVICE_ATTR(in2_label, S_IRUGO, show_voltage_label, NULL, 1);
1566static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, show_voltage_label, NULL, 2);
1567static SENSOR_DEVICE_ATTR(in4_label, S_IRUGO, show_voltage_label, NULL, 3);
1568static SENSOR_DEVICE_ATTR(in5_label, S_IRUGO, show_voltage_label, NULL, 4);
1569static SENSOR_DEVICE_ATTR(in6_label, S_IRUGO, show_voltage_label, NULL, 5);
1570static SENSOR_DEVICE_ATTR(in7_label, S_IRUGO, show_voltage_label, NULL, 6);
1571static SENSOR_DEVICE_ATTR(in8_label, S_IRUGO, show_voltage_label, NULL, 7);
1572static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, show_voltage_label, NULL, 8);
1573static SENSOR_DEVICE_ATTR(in10_label, S_IRUGO, show_voltage_label, NULL, 9);
1574static SENSOR_DEVICE_ATTR(in11_label, S_IRUGO, show_voltage_label, NULL, 10);
1575static SENSOR_DEVICE_ATTR(in12_label, S_IRUGO, show_voltage_label, NULL, 11);
1576static SENSOR_DEVICE_ATTR(in13_label, S_IRUGO, show_voltage_label, NULL, 12);
1577
1578static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL,
1579			  ADT7462_ALARM2 | ADT7462_V0_ALARM);
1580static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL,
1581			  ADT7462_ALARM2 | ADT7462_V7_ALARM);
1582static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL,
1583			  ADT7462_ALARM2 | ADT7462_V2_ALARM);
1584static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL,
1585			  ADT7462_ALARM2 | ADT7462_V6_ALARM);
1586static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL,
1587			  ADT7462_ALARM2 | ADT7462_V5_ALARM);
1588static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL,
1589			  ADT7462_ALARM2 | ADT7462_V4_ALARM);
1590static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL,
1591			  ADT7462_ALARM2 | ADT7462_V3_ALARM);
1592static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL,
1593			  ADT7462_ALARM2 | ADT7462_V1_ALARM);
1594static SENSOR_DEVICE_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL,
1595			  ADT7462_ALARM3 | ADT7462_V10_ALARM);
1596static SENSOR_DEVICE_ATTR(in10_alarm, S_IRUGO, show_alarm, NULL,
1597			  ADT7462_ALARM3 | ADT7462_V9_ALARM);
1598static SENSOR_DEVICE_ATTR(in11_alarm, S_IRUGO, show_alarm, NULL,
1599			  ADT7462_ALARM3 | ADT7462_V8_ALARM);
1600static SENSOR_DEVICE_ATTR(in12_alarm, S_IRUGO, show_alarm, NULL,
1601			  ADT7462_ALARM3 | ADT7462_V11_ALARM);
1602static SENSOR_DEVICE_ATTR(in13_alarm, S_IRUGO, show_alarm, NULL,
1603			  ADT7462_ALARM3 | ADT7462_V12_ALARM);
1604
1605static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
1606		    set_fan_min, 0);
1607static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
1608		    set_fan_min, 1);
1609static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
1610		    set_fan_min, 2);
1611static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
1612		    set_fan_min, 3);
1613static SENSOR_DEVICE_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min,
1614		    set_fan_min, 4);
1615static SENSOR_DEVICE_ATTR(fan6_min, S_IWUSR | S_IRUGO, show_fan_min,
1616		    set_fan_min, 5);
1617static SENSOR_DEVICE_ATTR(fan7_min, S_IWUSR | S_IRUGO, show_fan_min,
1618		    set_fan_min, 6);
1619static SENSOR_DEVICE_ATTR(fan8_min, S_IWUSR | S_IRUGO, show_fan_min,
1620		    set_fan_min, 7);
1621
1622static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0);
1623static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1);
1624static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2);
1625static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3);
1626static SENSOR_DEVICE_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4);
1627static SENSOR_DEVICE_ATTR(fan6_input, S_IRUGO, show_fan, NULL, 5);
1628static SENSOR_DEVICE_ATTR(fan7_input, S_IRUGO, show_fan, NULL, 6);
1629static SENSOR_DEVICE_ATTR(fan8_input, S_IRUGO, show_fan, NULL, 7);
1630
1631static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL,
1632			  ADT7462_ALARM4 | ADT7462_F0_ALARM);
1633static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL,
1634			  ADT7462_ALARM4 | ADT7462_F1_ALARM);
1635static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL,
1636			  ADT7462_ALARM4 | ADT7462_F2_ALARM);
1637static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL,
1638			  ADT7462_ALARM4 | ADT7462_F3_ALARM);
1639static SENSOR_DEVICE_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL,
1640			  ADT7462_ALARM4 | ADT7462_F4_ALARM);
1641static SENSOR_DEVICE_ATTR(fan6_alarm, S_IRUGO, show_alarm, NULL,
1642			  ADT7462_ALARM4 | ADT7462_F5_ALARM);
1643static SENSOR_DEVICE_ATTR(fan7_alarm, S_IRUGO, show_alarm, NULL,
1644			  ADT7462_ALARM4 | ADT7462_F6_ALARM);
1645static SENSOR_DEVICE_ATTR(fan8_alarm, S_IRUGO, show_alarm, NULL,
1646			  ADT7462_ALARM4 | ADT7462_F7_ALARM);
1647
1648static SENSOR_DEVICE_ATTR(force_pwm_max, S_IWUSR | S_IRUGO,
1649		    show_force_pwm_max, set_force_pwm_max, 0);
1650
1651static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 0);
1652static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 1);
1653static SENSOR_DEVICE_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 2);
1654static SENSOR_DEVICE_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 3);
1655
1656static SENSOR_DEVICE_ATTR(pwm1_auto_point1_pwm, S_IWUSR | S_IRUGO,
1657		    show_pwm_min, set_pwm_min, 0);
1658static SENSOR_DEVICE_ATTR(pwm2_auto_point1_pwm, S_IWUSR | S_IRUGO,
1659		    show_pwm_min, set_pwm_min, 1);
1660static SENSOR_DEVICE_ATTR(pwm3_auto_point1_pwm, S_IWUSR | S_IRUGO,
1661		    show_pwm_min, set_pwm_min, 2);
1662static SENSOR_DEVICE_ATTR(pwm4_auto_point1_pwm, S_IWUSR | S_IRUGO,
1663		    show_pwm_min, set_pwm_min, 3);
1664
1665static SENSOR_DEVICE_ATTR(pwm1_auto_point2_pwm, S_IWUSR | S_IRUGO,
1666		    show_pwm_max, set_pwm_max, 0);
1667static SENSOR_DEVICE_ATTR(pwm2_auto_point2_pwm, S_IWUSR | S_IRUGO,
1668		    show_pwm_max, set_pwm_max, 1);
1669static SENSOR_DEVICE_ATTR(pwm3_auto_point2_pwm, S_IWUSR | S_IRUGO,
1670		    show_pwm_max, set_pwm_max, 2);
1671static SENSOR_DEVICE_ATTR(pwm4_auto_point2_pwm, S_IWUSR | S_IRUGO,
1672		    show_pwm_max, set_pwm_max, 3);
1673
1674static SENSOR_DEVICE_ATTR(temp1_auto_point1_hyst, S_IWUSR | S_IRUGO,
1675		    show_pwm_hyst, set_pwm_hyst, 0);
1676static SENSOR_DEVICE_ATTR(temp2_auto_point1_hyst, S_IWUSR | S_IRUGO,
1677		    show_pwm_hyst, set_pwm_hyst, 1);
1678static SENSOR_DEVICE_ATTR(temp3_auto_point1_hyst, S_IWUSR | S_IRUGO,
1679		    show_pwm_hyst, set_pwm_hyst, 2);
1680static SENSOR_DEVICE_ATTR(temp4_auto_point1_hyst, S_IWUSR | S_IRUGO,
1681		    show_pwm_hyst, set_pwm_hyst, 3);
1682
1683static SENSOR_DEVICE_ATTR(temp1_auto_point2_hyst, S_IWUSR | S_IRUGO,
1684		    show_pwm_hyst, set_pwm_hyst, 0);
1685static SENSOR_DEVICE_ATTR(temp2_auto_point2_hyst, S_IWUSR | S_IRUGO,
1686		    show_pwm_hyst, set_pwm_hyst, 1);
1687static SENSOR_DEVICE_ATTR(temp3_auto_point2_hyst, S_IWUSR | S_IRUGO,
1688		    show_pwm_hyst, set_pwm_hyst, 2);
1689static SENSOR_DEVICE_ATTR(temp4_auto_point2_hyst, S_IWUSR | S_IRUGO,
1690		    show_pwm_hyst, set_pwm_hyst, 3);
1691
1692static SENSOR_DEVICE_ATTR(temp1_auto_point1_temp, S_IWUSR | S_IRUGO,
1693		    show_pwm_tmin, set_pwm_tmin, 0);
1694static SENSOR_DEVICE_ATTR(temp2_auto_point1_temp, S_IWUSR | S_IRUGO,
1695		    show_pwm_tmin, set_pwm_tmin, 1);
1696static SENSOR_DEVICE_ATTR(temp3_auto_point1_temp, S_IWUSR | S_IRUGO,
1697		    show_pwm_tmin, set_pwm_tmin, 2);
1698static SENSOR_DEVICE_ATTR(temp4_auto_point1_temp, S_IWUSR | S_IRUGO,
1699		    show_pwm_tmin, set_pwm_tmin, 3);
1700
1701static SENSOR_DEVICE_ATTR(temp1_auto_point2_temp, S_IWUSR | S_IRUGO,
1702		    show_pwm_tmax, set_pwm_tmax, 0);
1703static SENSOR_DEVICE_ATTR(temp2_auto_point2_temp, S_IWUSR | S_IRUGO,
1704		    show_pwm_tmax, set_pwm_tmax, 1);
1705static SENSOR_DEVICE_ATTR(temp3_auto_point2_temp, S_IWUSR | S_IRUGO,
1706		    show_pwm_tmax, set_pwm_tmax, 2);
1707static SENSOR_DEVICE_ATTR(temp4_auto_point2_temp, S_IWUSR | S_IRUGO,
1708		    show_pwm_tmax, set_pwm_tmax, 3);
1709
1710static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1711		    set_pwm_auto, 0);
1712static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1713		    set_pwm_auto, 1);
1714static SENSOR_DEVICE_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1715		    set_pwm_auto, 2);
1716static SENSOR_DEVICE_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1717		    set_pwm_auto, 3);
1718
1719static SENSOR_DEVICE_ATTR(pwm1_auto_channels_temp, S_IWUSR | S_IRUGO,
1720		    show_pwm_auto_temp, set_pwm_auto_temp, 0);
1721static SENSOR_DEVICE_ATTR(pwm2_auto_channels_temp, S_IWUSR | S_IRUGO,
1722		    show_pwm_auto_temp, set_pwm_auto_temp, 1);
1723static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO,
1724		    show_pwm_auto_temp, set_pwm_auto_temp, 2);
1725static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO,
1726		    show_pwm_auto_temp, set_pwm_auto_temp, 3);
1727
1728static struct attribute *adt7462_attr[] = {
 
1729	&sensor_dev_attr_temp1_max.dev_attr.attr,
1730	&sensor_dev_attr_temp2_max.dev_attr.attr,
1731	&sensor_dev_attr_temp3_max.dev_attr.attr,
1732	&sensor_dev_attr_temp4_max.dev_attr.attr,
1733
1734	&sensor_dev_attr_temp1_min.dev_attr.attr,
1735	&sensor_dev_attr_temp2_min.dev_attr.attr,
1736	&sensor_dev_attr_temp3_min.dev_attr.attr,
1737	&sensor_dev_attr_temp4_min.dev_attr.attr,
1738
1739	&sensor_dev_attr_temp1_input.dev_attr.attr,
1740	&sensor_dev_attr_temp2_input.dev_attr.attr,
1741	&sensor_dev_attr_temp3_input.dev_attr.attr,
1742	&sensor_dev_attr_temp4_input.dev_attr.attr,
1743
1744	&sensor_dev_attr_temp1_label.dev_attr.attr,
1745	&sensor_dev_attr_temp2_label.dev_attr.attr,
1746	&sensor_dev_attr_temp3_label.dev_attr.attr,
1747	&sensor_dev_attr_temp4_label.dev_attr.attr,
1748
1749	&sensor_dev_attr_temp1_alarm.dev_attr.attr,
1750	&sensor_dev_attr_temp2_alarm.dev_attr.attr,
1751	&sensor_dev_attr_temp3_alarm.dev_attr.attr,
1752	&sensor_dev_attr_temp4_alarm.dev_attr.attr,
1753
1754	&sensor_dev_attr_in1_max.dev_attr.attr,
1755	&sensor_dev_attr_in2_max.dev_attr.attr,
1756	&sensor_dev_attr_in3_max.dev_attr.attr,
1757	&sensor_dev_attr_in4_max.dev_attr.attr,
1758	&sensor_dev_attr_in5_max.dev_attr.attr,
1759	&sensor_dev_attr_in6_max.dev_attr.attr,
1760	&sensor_dev_attr_in7_max.dev_attr.attr,
1761	&sensor_dev_attr_in8_max.dev_attr.attr,
1762	&sensor_dev_attr_in9_max.dev_attr.attr,
1763	&sensor_dev_attr_in10_max.dev_attr.attr,
1764	&sensor_dev_attr_in11_max.dev_attr.attr,
1765	&sensor_dev_attr_in12_max.dev_attr.attr,
1766	&sensor_dev_attr_in13_max.dev_attr.attr,
1767
1768	&sensor_dev_attr_in1_min.dev_attr.attr,
1769	&sensor_dev_attr_in2_min.dev_attr.attr,
1770	&sensor_dev_attr_in3_min.dev_attr.attr,
1771	&sensor_dev_attr_in4_min.dev_attr.attr,
1772	&sensor_dev_attr_in5_min.dev_attr.attr,
1773	&sensor_dev_attr_in6_min.dev_attr.attr,
1774	&sensor_dev_attr_in7_min.dev_attr.attr,
1775	&sensor_dev_attr_in8_min.dev_attr.attr,
1776	&sensor_dev_attr_in9_min.dev_attr.attr,
1777	&sensor_dev_attr_in10_min.dev_attr.attr,
1778	&sensor_dev_attr_in11_min.dev_attr.attr,
1779	&sensor_dev_attr_in12_min.dev_attr.attr,
1780	&sensor_dev_attr_in13_min.dev_attr.attr,
1781
1782	&sensor_dev_attr_in1_input.dev_attr.attr,
1783	&sensor_dev_attr_in2_input.dev_attr.attr,
1784	&sensor_dev_attr_in3_input.dev_attr.attr,
1785	&sensor_dev_attr_in4_input.dev_attr.attr,
1786	&sensor_dev_attr_in5_input.dev_attr.attr,
1787	&sensor_dev_attr_in6_input.dev_attr.attr,
1788	&sensor_dev_attr_in7_input.dev_attr.attr,
1789	&sensor_dev_attr_in8_input.dev_attr.attr,
1790	&sensor_dev_attr_in9_input.dev_attr.attr,
1791	&sensor_dev_attr_in10_input.dev_attr.attr,
1792	&sensor_dev_attr_in11_input.dev_attr.attr,
1793	&sensor_dev_attr_in12_input.dev_attr.attr,
1794	&sensor_dev_attr_in13_input.dev_attr.attr,
1795
1796	&sensor_dev_attr_in1_label.dev_attr.attr,
1797	&sensor_dev_attr_in2_label.dev_attr.attr,
1798	&sensor_dev_attr_in3_label.dev_attr.attr,
1799	&sensor_dev_attr_in4_label.dev_attr.attr,
1800	&sensor_dev_attr_in5_label.dev_attr.attr,
1801	&sensor_dev_attr_in6_label.dev_attr.attr,
1802	&sensor_dev_attr_in7_label.dev_attr.attr,
1803	&sensor_dev_attr_in8_label.dev_attr.attr,
1804	&sensor_dev_attr_in9_label.dev_attr.attr,
1805	&sensor_dev_attr_in10_label.dev_attr.attr,
1806	&sensor_dev_attr_in11_label.dev_attr.attr,
1807	&sensor_dev_attr_in12_label.dev_attr.attr,
1808	&sensor_dev_attr_in13_label.dev_attr.attr,
1809
1810	&sensor_dev_attr_in1_alarm.dev_attr.attr,
1811	&sensor_dev_attr_in2_alarm.dev_attr.attr,
1812	&sensor_dev_attr_in3_alarm.dev_attr.attr,
1813	&sensor_dev_attr_in4_alarm.dev_attr.attr,
1814	&sensor_dev_attr_in5_alarm.dev_attr.attr,
1815	&sensor_dev_attr_in6_alarm.dev_attr.attr,
1816	&sensor_dev_attr_in7_alarm.dev_attr.attr,
1817	&sensor_dev_attr_in8_alarm.dev_attr.attr,
1818	&sensor_dev_attr_in9_alarm.dev_attr.attr,
1819	&sensor_dev_attr_in10_alarm.dev_attr.attr,
1820	&sensor_dev_attr_in11_alarm.dev_attr.attr,
1821	&sensor_dev_attr_in12_alarm.dev_attr.attr,
1822	&sensor_dev_attr_in13_alarm.dev_attr.attr,
1823
1824	&sensor_dev_attr_fan1_min.dev_attr.attr,
1825	&sensor_dev_attr_fan2_min.dev_attr.attr,
1826	&sensor_dev_attr_fan3_min.dev_attr.attr,
1827	&sensor_dev_attr_fan4_min.dev_attr.attr,
1828	&sensor_dev_attr_fan5_min.dev_attr.attr,
1829	&sensor_dev_attr_fan6_min.dev_attr.attr,
1830	&sensor_dev_attr_fan7_min.dev_attr.attr,
1831	&sensor_dev_attr_fan8_min.dev_attr.attr,
1832
1833	&sensor_dev_attr_fan1_input.dev_attr.attr,
1834	&sensor_dev_attr_fan2_input.dev_attr.attr,
1835	&sensor_dev_attr_fan3_input.dev_attr.attr,
1836	&sensor_dev_attr_fan4_input.dev_attr.attr,
1837	&sensor_dev_attr_fan5_input.dev_attr.attr,
1838	&sensor_dev_attr_fan6_input.dev_attr.attr,
1839	&sensor_dev_attr_fan7_input.dev_attr.attr,
1840	&sensor_dev_attr_fan8_input.dev_attr.attr,
1841
1842	&sensor_dev_attr_fan1_alarm.dev_attr.attr,
1843	&sensor_dev_attr_fan2_alarm.dev_attr.attr,
1844	&sensor_dev_attr_fan3_alarm.dev_attr.attr,
1845	&sensor_dev_attr_fan4_alarm.dev_attr.attr,
1846	&sensor_dev_attr_fan5_alarm.dev_attr.attr,
1847	&sensor_dev_attr_fan6_alarm.dev_attr.attr,
1848	&sensor_dev_attr_fan7_alarm.dev_attr.attr,
1849	&sensor_dev_attr_fan8_alarm.dev_attr.attr,
1850
1851	&sensor_dev_attr_force_pwm_max.dev_attr.attr,
1852	&sensor_dev_attr_pwm1.dev_attr.attr,
1853	&sensor_dev_attr_pwm2.dev_attr.attr,
1854	&sensor_dev_attr_pwm3.dev_attr.attr,
1855	&sensor_dev_attr_pwm4.dev_attr.attr,
1856
1857	&sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1858	&sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
1859	&sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1860	&sensor_dev_attr_pwm4_auto_point1_pwm.dev_attr.attr,
1861
1862	&sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1863	&sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
1864	&sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1865	&sensor_dev_attr_pwm4_auto_point2_pwm.dev_attr.attr,
1866
1867	&sensor_dev_attr_temp1_auto_point1_hyst.dev_attr.attr,
1868	&sensor_dev_attr_temp2_auto_point1_hyst.dev_attr.attr,
1869	&sensor_dev_attr_temp3_auto_point1_hyst.dev_attr.attr,
1870	&sensor_dev_attr_temp4_auto_point1_hyst.dev_attr.attr,
1871
1872	&sensor_dev_attr_temp1_auto_point2_hyst.dev_attr.attr,
1873	&sensor_dev_attr_temp2_auto_point2_hyst.dev_attr.attr,
1874	&sensor_dev_attr_temp3_auto_point2_hyst.dev_attr.attr,
1875	&sensor_dev_attr_temp4_auto_point2_hyst.dev_attr.attr,
1876
1877	&sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr,
1878	&sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr,
1879	&sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr,
1880	&sensor_dev_attr_temp4_auto_point1_temp.dev_attr.attr,
1881
1882	&sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr,
1883	&sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr,
1884	&sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr,
1885	&sensor_dev_attr_temp4_auto_point2_temp.dev_attr.attr,
1886
1887	&sensor_dev_attr_pwm1_enable.dev_attr.attr,
1888	&sensor_dev_attr_pwm2_enable.dev_attr.attr,
1889	&sensor_dev_attr_pwm3_enable.dev_attr.attr,
1890	&sensor_dev_attr_pwm4_enable.dev_attr.attr,
1891
1892	&sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1893	&sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
1894	&sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1895	&sensor_dev_attr_pwm4_auto_channels_temp.dev_attr.attr,
1896	NULL
1897};
1898
1899/* Return 0 if detection is successful, -ENODEV otherwise */
1900static int adt7462_detect(struct i2c_client *client,
1901			  struct i2c_board_info *info)
1902{
1903	struct i2c_adapter *adapter = client->adapter;
1904	int vendor, device, revision;
1905
1906	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1907		return -ENODEV;
1908
1909	vendor = i2c_smbus_read_byte_data(client, ADT7462_REG_VENDOR);
1910	if (vendor != ADT7462_VENDOR)
1911		return -ENODEV;
1912
1913	device = i2c_smbus_read_byte_data(client, ADT7462_REG_DEVICE);
1914	if (device != ADT7462_DEVICE)
1915		return -ENODEV;
1916
1917	revision = i2c_smbus_read_byte_data(client, ADT7462_REG_REVISION);
1918	if (revision != ADT7462_REVISION)
1919		return -ENODEV;
1920
1921	strlcpy(info->type, "adt7462", I2C_NAME_SIZE);
1922
1923	return 0;
1924}
1925
1926static int adt7462_probe(struct i2c_client *client,
1927			 const struct i2c_device_id *id)
1928{
1929	struct adt7462_data *data;
1930	int err;
1931
1932	data = devm_kzalloc(&client->dev, sizeof(struct adt7462_data),
1933			    GFP_KERNEL);
1934	if (!data)
1935		return -ENOMEM;
 
1936
1937	i2c_set_clientdata(client, data);
1938	mutex_init(&data->lock);
1939
1940	dev_info(&client->dev, "%s chip found\n", client->name);
1941
1942	/* Register sysfs hooks */
1943	data->attrs.attrs = adt7462_attr;
1944	err = sysfs_create_group(&client->dev.kobj, &data->attrs);
1945	if (err)
1946		return err;
1947
1948	data->hwmon_dev = hwmon_device_register(&client->dev);
1949	if (IS_ERR(data->hwmon_dev)) {
1950		err = PTR_ERR(data->hwmon_dev);
1951		goto exit_remove;
1952	}
1953
1954	return 0;
1955
1956exit_remove:
1957	sysfs_remove_group(&client->dev.kobj, &data->attrs);
 
 
 
1958	return err;
1959}
1960
1961static int adt7462_remove(struct i2c_client *client)
1962{
1963	struct adt7462_data *data = i2c_get_clientdata(client);
1964
1965	hwmon_device_unregister(data->hwmon_dev);
1966	sysfs_remove_group(&client->dev.kobj, &data->attrs);
 
1967	return 0;
1968}
1969
1970module_i2c_driver(adt7462_driver);
 
 
 
1971
1972MODULE_AUTHOR("Darrick J. Wong <darrick.wong@oracle.com>");
 
 
 
 
 
1973MODULE_DESCRIPTION("ADT7462 driver");
1974MODULE_LICENSE("GPL");