Linux Audio

Check our new training course

Loading...
v5.9
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * A hwmon driver for the Analog Devices ADT7470
   4 * Copyright (C) 2007 IBM
   5 *
   6 * Author: Darrick J. Wong <darrick.wong@oracle.com>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   7 */
   8
   9#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  10
  11#include <linux/module.h>
  12#include <linux/jiffies.h>
  13#include <linux/i2c.h>
  14#include <linux/hwmon.h>
  15#include <linux/hwmon-sysfs.h>
  16#include <linux/err.h>
  17#include <linux/mutex.h>
  18#include <linux/delay.h>
  19#include <linux/log2.h>
  20#include <linux/kthread.h>
  21#include <linux/slab.h>
  22#include <linux/util_macros.h>
  23
  24/* Addresses to scan */
  25static const unsigned short normal_i2c[] = { 0x2C, 0x2E, 0x2F, I2C_CLIENT_END };
  26
  27/* ADT7470 registers */
  28#define ADT7470_REG_BASE_ADDR			0x20
  29#define ADT7470_REG_TEMP_BASE_ADDR		0x20
  30#define ADT7470_REG_TEMP_MAX_ADDR		0x29
  31#define ADT7470_REG_FAN_BASE_ADDR		0x2A
  32#define ADT7470_REG_FAN_MAX_ADDR		0x31
  33#define ADT7470_REG_PWM_BASE_ADDR		0x32
  34#define ADT7470_REG_PWM_MAX_ADDR		0x35
  35#define ADT7470_REG_PWM_MAX_BASE_ADDR		0x38
  36#define ADT7470_REG_PWM_MAX_MAX_ADDR		0x3B
  37#define ADT7470_REG_CFG				0x40
  38#define		ADT7470_FSPD_MASK		0x04
  39#define ADT7470_REG_ALARM1			0x41
  40#define		ADT7470_R1T_ALARM		0x01
  41#define		ADT7470_R2T_ALARM		0x02
  42#define		ADT7470_R3T_ALARM		0x04
  43#define		ADT7470_R4T_ALARM		0x08
  44#define		ADT7470_R5T_ALARM		0x10
  45#define		ADT7470_R6T_ALARM		0x20
  46#define		ADT7470_R7T_ALARM		0x40
  47#define		ADT7470_OOL_ALARM		0x80
  48#define ADT7470_REG_ALARM2			0x42
  49#define		ADT7470_R8T_ALARM		0x01
  50#define		ADT7470_R9T_ALARM		0x02
  51#define		ADT7470_R10T_ALARM		0x04
  52#define		ADT7470_FAN1_ALARM		0x10
  53#define		ADT7470_FAN2_ALARM		0x20
  54#define		ADT7470_FAN3_ALARM		0x40
  55#define		ADT7470_FAN4_ALARM		0x80
  56#define ADT7470_REG_TEMP_LIMITS_BASE_ADDR	0x44
  57#define ADT7470_REG_TEMP_LIMITS_MAX_ADDR	0x57
  58#define ADT7470_REG_FAN_MIN_BASE_ADDR		0x58
  59#define ADT7470_REG_FAN_MIN_MAX_ADDR		0x5F
  60#define ADT7470_REG_FAN_MAX_BASE_ADDR		0x60
  61#define ADT7470_REG_FAN_MAX_MAX_ADDR		0x67
  62#define ADT7470_REG_PWM_CFG_BASE_ADDR		0x68
  63#define ADT7470_REG_PWM12_CFG			0x68
  64#define		ADT7470_PWM2_AUTO_MASK		0x40
  65#define		ADT7470_PWM1_AUTO_MASK		0x80
  66#define		ADT7470_PWM_AUTO_MASK		0xC0
  67#define ADT7470_REG_PWM34_CFG			0x69
  68#define		ADT7470_PWM3_AUTO_MASK		0x40
  69#define		ADT7470_PWM4_AUTO_MASK		0x80
  70#define	ADT7470_REG_PWM_MIN_BASE_ADDR		0x6A
  71#define ADT7470_REG_PWM_MIN_MAX_ADDR		0x6D
  72#define ADT7470_REG_PWM_TEMP_MIN_BASE_ADDR	0x6E
  73#define ADT7470_REG_PWM_TEMP_MIN_MAX_ADDR	0x71
  74#define ADT7470_REG_CFG_2			0x74
  75#define ADT7470_REG_ACOUSTICS12			0x75
  76#define ADT7470_REG_ACOUSTICS34			0x76
  77#define ADT7470_REG_DEVICE			0x3D
  78#define ADT7470_REG_VENDOR			0x3E
  79#define ADT7470_REG_REVISION			0x3F
  80#define ADT7470_REG_ALARM1_MASK			0x72
  81#define ADT7470_REG_ALARM2_MASK			0x73
  82#define ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR	0x7C
  83#define ADT7470_REG_PWM_AUTO_TEMP_MAX_ADDR	0x7D
  84#define ADT7470_REG_MAX_ADDR			0x81
  85
  86#define ADT7470_TEMP_COUNT	10
  87#define ADT7470_TEMP_REG(x)	(ADT7470_REG_TEMP_BASE_ADDR + (x))
  88#define ADT7470_TEMP_MIN_REG(x) (ADT7470_REG_TEMP_LIMITS_BASE_ADDR + ((x) * 2))
  89#define ADT7470_TEMP_MAX_REG(x) (ADT7470_REG_TEMP_LIMITS_BASE_ADDR + \
  90				((x) * 2) + 1)
  91
  92#define ADT7470_FAN_COUNT	4
  93#define ADT7470_REG_FAN(x)	(ADT7470_REG_FAN_BASE_ADDR + ((x) * 2))
  94#define ADT7470_REG_FAN_MIN(x)	(ADT7470_REG_FAN_MIN_BASE_ADDR + ((x) * 2))
  95#define ADT7470_REG_FAN_MAX(x)	(ADT7470_REG_FAN_MAX_BASE_ADDR + ((x) * 2))
  96
  97#define ADT7470_PWM_COUNT	4
  98#define ADT7470_REG_PWM(x)	(ADT7470_REG_PWM_BASE_ADDR + (x))
  99#define ADT7470_REG_PWM_MAX(x)	(ADT7470_REG_PWM_MAX_BASE_ADDR + (x))
 100#define ADT7470_REG_PWM_MIN(x)	(ADT7470_REG_PWM_MIN_BASE_ADDR + (x))
 101#define ADT7470_REG_PWM_TMIN(x)	(ADT7470_REG_PWM_TEMP_MIN_BASE_ADDR + (x))
 102#define ADT7470_REG_PWM_CFG(x)	(ADT7470_REG_PWM_CFG_BASE_ADDR + ((x) / 2))
 103#define ADT7470_REG_PWM_AUTO_TEMP(x)	(ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR + \
 104					((x) / 2))
 105
 106#define ALARM2(x)		((x) << 8)
 107
 108#define ADT7470_VENDOR		0x41
 109#define ADT7470_DEVICE		0x70
 110/* datasheet only mentions a revision 2 */
 111#define ADT7470_REVISION	0x02
 112
 113/* "all temps" according to hwmon sysfs interface spec */
 114#define ADT7470_PWM_ALL_TEMPS	0x3FF
 115
 116/* How often do we reread sensors values? (In jiffies) */
 117#define SENSOR_REFRESH_INTERVAL	(5 * HZ)
 118
 119/* How often do we reread sensor limit values? (In jiffies) */
 120#define LIMIT_REFRESH_INTERVAL	(60 * HZ)
 121
 122/* Wait at least 200ms per sensor for 10 sensors */
 123#define TEMP_COLLECTION_TIME	2000
 124
 125/* auto update thing won't fire more than every 2s */
 126#define AUTO_UPDATE_INTERVAL	2000
 127
 128/* datasheet says to divide this number by the fan reading to get fan rpm */
 129#define FAN_PERIOD_TO_RPM(x)	((90000 * 60) / (x))
 130#define FAN_RPM_TO_PERIOD	FAN_PERIOD_TO_RPM
 131#define FAN_PERIOD_INVALID	65535
 132#define FAN_DATA_VALID(x)	((x) && (x) != FAN_PERIOD_INVALID)
 133
 134/* Config registers 1 and 2 include fields for selecting the PWM frequency */
 135#define ADT7470_CFG_LF		0x40
 136#define ADT7470_FREQ_MASK	0x70
 137#define ADT7470_FREQ_SHIFT	4
 138
 139struct adt7470_data {
 140	struct i2c_client	*client;
 141	struct mutex		lock;
 142	char			sensors_valid;
 143	char			limits_valid;
 144	unsigned long		sensors_last_updated;	/* In jiffies */
 145	unsigned long		limits_last_updated;	/* In jiffies */
 146
 147	int			num_temp_sensors;	/* -1 = probe */
 148	int			temperatures_probed;
 149
 150	s8			temp[ADT7470_TEMP_COUNT];
 151	s8			temp_min[ADT7470_TEMP_COUNT];
 152	s8			temp_max[ADT7470_TEMP_COUNT];
 153	u16			fan[ADT7470_FAN_COUNT];
 154	u16			fan_min[ADT7470_FAN_COUNT];
 155	u16			fan_max[ADT7470_FAN_COUNT];
 156	u16			alarm;
 157	u16			alarms_mask;
 158	u8			force_pwm_max;
 159	u8			pwm[ADT7470_PWM_COUNT];
 160	u8			pwm_max[ADT7470_PWM_COUNT];
 161	u8			pwm_automatic[ADT7470_PWM_COUNT];
 162	u8			pwm_min[ADT7470_PWM_COUNT];
 163	s8			pwm_tmin[ADT7470_PWM_COUNT];
 164	u8			pwm_auto_temp[ADT7470_PWM_COUNT];
 165
 166	struct task_struct	*auto_update;
 167	unsigned int		auto_update_interval;
 168};
 169
 170/*
 171 * 16-bit registers on the ADT7470 are low-byte first.  The data sheet says
 172 * that the low byte must be read before the high byte.
 173 */
 174static inline int adt7470_read_word_data(struct i2c_client *client, u8 reg)
 175{
 176	u16 foo;
 177	foo = i2c_smbus_read_byte_data(client, reg);
 178	foo |= ((u16)i2c_smbus_read_byte_data(client, reg + 1) << 8);
 179	return foo;
 180}
 181
 182static inline int adt7470_write_word_data(struct i2c_client *client, u8 reg,
 183					  u16 value)
 184{
 185	return i2c_smbus_write_byte_data(client, reg, value & 0xFF)
 186	       || i2c_smbus_write_byte_data(client, reg + 1, value >> 8);
 187}
 188
 189/* Probe for temperature sensors.  Assumes lock is held */
 190static int adt7470_read_temperatures(struct i2c_client *client,
 191				     struct adt7470_data *data)
 192{
 193	unsigned long res;
 194	int i;
 195	u8 cfg, pwm[4], pwm_cfg[2];
 196
 197	/* save pwm[1-4] config register */
 198	pwm_cfg[0] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM_CFG(0));
 199	pwm_cfg[1] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM_CFG(2));
 200
 201	/* set manual pwm to whatever it is set to now */
 202	for (i = 0; i < ADT7470_FAN_COUNT; i++)
 203		pwm[i] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM(i));
 204
 205	/* put pwm in manual mode */
 206	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(0),
 207		pwm_cfg[0] & ~(ADT7470_PWM_AUTO_MASK));
 208	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(2),
 209		pwm_cfg[1] & ~(ADT7470_PWM_AUTO_MASK));
 210
 211	/* write pwm control to whatever it was */
 212	for (i = 0; i < ADT7470_FAN_COUNT; i++)
 213		i2c_smbus_write_byte_data(client, ADT7470_REG_PWM(i), pwm[i]);
 214
 215	/* start reading temperature sensors */
 216	cfg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
 217	cfg |= 0x80;
 218	i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, cfg);
 219
 220	/* Delay is 200ms * number of temp sensors. */
 221	res = msleep_interruptible((data->num_temp_sensors >= 0 ?
 222				    data->num_temp_sensors * 200 :
 223				    TEMP_COLLECTION_TIME));
 224
 225	/* done reading temperature sensors */
 226	cfg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
 227	cfg &= ~0x80;
 228	i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, cfg);
 229
 230	/* restore pwm[1-4] config registers */
 231	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(0), pwm_cfg[0]);
 232	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(2), pwm_cfg[1]);
 233
 234	if (res) {
 235		pr_err("ha ha, interrupted\n");
 236		return -EAGAIN;
 237	}
 238
 239	/* Only count fans if we have to */
 240	if (data->num_temp_sensors >= 0)
 241		return 0;
 242
 243	for (i = 0; i < ADT7470_TEMP_COUNT; i++) {
 244		data->temp[i] = i2c_smbus_read_byte_data(client,
 245						ADT7470_TEMP_REG(i));
 246		if (data->temp[i])
 247			data->num_temp_sensors = i + 1;
 248	}
 249	data->temperatures_probed = 1;
 250	return 0;
 251}
 252
 253static int adt7470_update_thread(void *p)
 254{
 255	struct i2c_client *client = p;
 256	struct adt7470_data *data = i2c_get_clientdata(client);
 257
 258	while (!kthread_should_stop()) {
 259		mutex_lock(&data->lock);
 260		adt7470_read_temperatures(client, data);
 261		mutex_unlock(&data->lock);
 262
 263		set_current_state(TASK_INTERRUPTIBLE);
 264		if (kthread_should_stop())
 265			break;
 266
 267		schedule_timeout(msecs_to_jiffies(data->auto_update_interval));
 268	}
 269
 270	return 0;
 271}
 272
 273static struct adt7470_data *adt7470_update_device(struct device *dev)
 274{
 275	struct adt7470_data *data = dev_get_drvdata(dev);
 276	struct i2c_client *client = data->client;
 277	unsigned long local_jiffies = jiffies;
 278	u8 cfg;
 279	int i;
 280	int need_sensors = 1;
 281	int need_limits = 1;
 282
 283	/*
 284	 * Figure out if we need to update the shadow registers.
 285	 * Lockless means that we may occasionally report out of
 286	 * date data.
 287	 */
 288	if (time_before(local_jiffies, data->sensors_last_updated +
 289			SENSOR_REFRESH_INTERVAL) &&
 290	    data->sensors_valid)
 291		need_sensors = 0;
 292
 293	if (time_before(local_jiffies, data->limits_last_updated +
 294			LIMIT_REFRESH_INTERVAL) &&
 295	    data->limits_valid)
 296		need_limits = 0;
 297
 298	if (!need_sensors && !need_limits)
 299		return data;
 300
 301	mutex_lock(&data->lock);
 302	if (!need_sensors)
 303		goto no_sensor_update;
 304
 305	if (!data->temperatures_probed)
 306		adt7470_read_temperatures(client, data);
 307	else
 308		for (i = 0; i < ADT7470_TEMP_COUNT; i++)
 309			data->temp[i] = i2c_smbus_read_byte_data(client,
 310						ADT7470_TEMP_REG(i));
 311
 312	for (i = 0; i < ADT7470_FAN_COUNT; i++)
 313		data->fan[i] = adt7470_read_word_data(client,
 314						ADT7470_REG_FAN(i));
 315
 316	for (i = 0; i < ADT7470_PWM_COUNT; i++) {
 317		int reg;
 318		int reg_mask;
 319
 320		data->pwm[i] = i2c_smbus_read_byte_data(client,
 321						ADT7470_REG_PWM(i));
 322
 323		if (i % 2)
 324			reg_mask = ADT7470_PWM2_AUTO_MASK;
 325		else
 326			reg_mask = ADT7470_PWM1_AUTO_MASK;
 327
 328		reg = ADT7470_REG_PWM_CFG(i);
 329		if (i2c_smbus_read_byte_data(client, reg) & reg_mask)
 330			data->pwm_automatic[i] = 1;
 331		else
 332			data->pwm_automatic[i] = 0;
 333
 334		reg = ADT7470_REG_PWM_AUTO_TEMP(i);
 335		cfg = i2c_smbus_read_byte_data(client, reg);
 336		if (!(i % 2))
 337			data->pwm_auto_temp[i] = cfg >> 4;
 338		else
 339			data->pwm_auto_temp[i] = cfg & 0xF;
 340	}
 341
 342	if (i2c_smbus_read_byte_data(client, ADT7470_REG_CFG) &
 343	    ADT7470_FSPD_MASK)
 344		data->force_pwm_max = 1;
 345	else
 346		data->force_pwm_max = 0;
 347
 348	data->alarm = i2c_smbus_read_byte_data(client, ADT7470_REG_ALARM1);
 349	if (data->alarm & ADT7470_OOL_ALARM)
 350		data->alarm |= ALARM2(i2c_smbus_read_byte_data(client,
 351							ADT7470_REG_ALARM2));
 352	data->alarms_mask = adt7470_read_word_data(client,
 353						   ADT7470_REG_ALARM1_MASK);
 354
 355	data->sensors_last_updated = local_jiffies;
 356	data->sensors_valid = 1;
 357
 358no_sensor_update:
 359	if (!need_limits)
 360		goto out;
 361
 362	for (i = 0; i < ADT7470_TEMP_COUNT; i++) {
 363		data->temp_min[i] = i2c_smbus_read_byte_data(client,
 364						ADT7470_TEMP_MIN_REG(i));
 365		data->temp_max[i] = i2c_smbus_read_byte_data(client,
 366						ADT7470_TEMP_MAX_REG(i));
 367	}
 368
 369	for (i = 0; i < ADT7470_FAN_COUNT; i++) {
 370		data->fan_min[i] = adt7470_read_word_data(client,
 371						ADT7470_REG_FAN_MIN(i));
 372		data->fan_max[i] = adt7470_read_word_data(client,
 373						ADT7470_REG_FAN_MAX(i));
 374	}
 375
 376	for (i = 0; i < ADT7470_PWM_COUNT; i++) {
 377		data->pwm_max[i] = i2c_smbus_read_byte_data(client,
 378						ADT7470_REG_PWM_MAX(i));
 379		data->pwm_min[i] = i2c_smbus_read_byte_data(client,
 380						ADT7470_REG_PWM_MIN(i));
 381		data->pwm_tmin[i] = i2c_smbus_read_byte_data(client,
 382						ADT7470_REG_PWM_TMIN(i));
 383	}
 384
 385	data->limits_last_updated = local_jiffies;
 386	data->limits_valid = 1;
 387
 388out:
 389	mutex_unlock(&data->lock);
 390	return data;
 391}
 392
 393static ssize_t auto_update_interval_show(struct device *dev,
 394					 struct device_attribute *devattr,
 395					 char *buf)
 396{
 397	struct adt7470_data *data = adt7470_update_device(dev);
 398	return sprintf(buf, "%d\n", data->auto_update_interval);
 399}
 400
 401static ssize_t auto_update_interval_store(struct device *dev,
 402					  struct device_attribute *devattr,
 403					  const char *buf, size_t count)
 404{
 405	struct adt7470_data *data = dev_get_drvdata(dev);
 406	long temp;
 407
 408	if (kstrtol(buf, 10, &temp))
 409		return -EINVAL;
 410
 411	temp = clamp_val(temp, 0, 60000);
 412
 413	mutex_lock(&data->lock);
 414	data->auto_update_interval = temp;
 415	mutex_unlock(&data->lock);
 416
 417	return count;
 418}
 419
 420static ssize_t num_temp_sensors_show(struct device *dev,
 421				     struct device_attribute *devattr,
 422				     char *buf)
 423{
 424	struct adt7470_data *data = adt7470_update_device(dev);
 425	return sprintf(buf, "%d\n", data->num_temp_sensors);
 426}
 427
 428static ssize_t num_temp_sensors_store(struct device *dev,
 429				      struct device_attribute *devattr,
 430				      const char *buf, size_t count)
 431{
 432	struct adt7470_data *data = dev_get_drvdata(dev);
 433	long temp;
 434
 435	if (kstrtol(buf, 10, &temp))
 436		return -EINVAL;
 437
 438	temp = clamp_val(temp, -1, 10);
 439
 440	mutex_lock(&data->lock);
 441	data->num_temp_sensors = temp;
 442	if (temp < 0)
 443		data->temperatures_probed = 0;
 444	mutex_unlock(&data->lock);
 445
 446	return count;
 447}
 448
 449static ssize_t temp_min_show(struct device *dev,
 450			     struct device_attribute *devattr, char *buf)
 
 451{
 452	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 453	struct adt7470_data *data = adt7470_update_device(dev);
 454	return sprintf(buf, "%d\n", 1000 * data->temp_min[attr->index]);
 455}
 456
 457static ssize_t temp_min_store(struct device *dev,
 458			      struct device_attribute *devattr,
 459			      const char *buf, size_t count)
 
 460{
 461	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 462	struct adt7470_data *data = dev_get_drvdata(dev);
 463	struct i2c_client *client = data->client;
 464	long temp;
 465
 466	if (kstrtol(buf, 10, &temp))
 467		return -EINVAL;
 468
 469	temp = clamp_val(temp, -128000, 127000);
 470	temp = DIV_ROUND_CLOSEST(temp, 1000);
 471
 472	mutex_lock(&data->lock);
 473	data->temp_min[attr->index] = temp;
 474	i2c_smbus_write_byte_data(client, ADT7470_TEMP_MIN_REG(attr->index),
 475				  temp);
 476	mutex_unlock(&data->lock);
 477
 478	return count;
 479}
 480
 481static ssize_t temp_max_show(struct device *dev,
 482			     struct device_attribute *devattr, char *buf)
 
 483{
 484	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 485	struct adt7470_data *data = adt7470_update_device(dev);
 486	return sprintf(buf, "%d\n", 1000 * data->temp_max[attr->index]);
 487}
 488
 489static ssize_t temp_max_store(struct device *dev,
 490			      struct device_attribute *devattr,
 491			      const char *buf, size_t count)
 
 492{
 493	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 494	struct adt7470_data *data = dev_get_drvdata(dev);
 495	struct i2c_client *client = data->client;
 496	long temp;
 497
 498	if (kstrtol(buf, 10, &temp))
 499		return -EINVAL;
 500
 501	temp = clamp_val(temp, -128000, 127000);
 502	temp = DIV_ROUND_CLOSEST(temp, 1000);
 503
 504	mutex_lock(&data->lock);
 505	data->temp_max[attr->index] = temp;
 506	i2c_smbus_write_byte_data(client, ADT7470_TEMP_MAX_REG(attr->index),
 507				  temp);
 508	mutex_unlock(&data->lock);
 509
 510	return count;
 511}
 512
 513static ssize_t temp_show(struct device *dev, struct device_attribute *devattr,
 514			 char *buf)
 515{
 516	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 517	struct adt7470_data *data = adt7470_update_device(dev);
 518	return sprintf(buf, "%d\n", 1000 * data->temp[attr->index]);
 519}
 520
 521static ssize_t alarm_mask_show(struct device *dev,
 522			   struct device_attribute *devattr,
 523			   char *buf)
 524{
 525	struct adt7470_data *data = adt7470_update_device(dev);
 526
 527	return sprintf(buf, "%x\n", data->alarms_mask);
 528}
 529
 530static ssize_t alarm_mask_store(struct device *dev,
 531				struct device_attribute *devattr,
 532				const char *buf, size_t count)
 533{
 534	struct adt7470_data *data = dev_get_drvdata(dev);
 535	long mask;
 536
 537	if (kstrtoul(buf, 0, &mask))
 538		return -EINVAL;
 539
 540	if (mask & ~0xffff)
 541		return -EINVAL;
 542
 543	mutex_lock(&data->lock);
 544	data->alarms_mask = mask;
 545	adt7470_write_word_data(data->client, ADT7470_REG_ALARM1_MASK, mask);
 546	mutex_unlock(&data->lock);
 547
 548	return count;
 549}
 550
 551static ssize_t fan_max_show(struct device *dev,
 552			    struct device_attribute *devattr, char *buf)
 
 553{
 554	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 555	struct adt7470_data *data = adt7470_update_device(dev);
 556
 557	if (FAN_DATA_VALID(data->fan_max[attr->index]))
 558		return sprintf(buf, "%d\n",
 559			       FAN_PERIOD_TO_RPM(data->fan_max[attr->index]));
 560	else
 561		return sprintf(buf, "0\n");
 562}
 563
 564static ssize_t fan_max_store(struct device *dev,
 565			     struct device_attribute *devattr,
 566			     const char *buf, size_t count)
 567{
 568	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 569	struct adt7470_data *data = dev_get_drvdata(dev);
 570	struct i2c_client *client = data->client;
 571	long temp;
 572
 573	if (kstrtol(buf, 10, &temp) || !temp)
 574		return -EINVAL;
 575
 576	temp = FAN_RPM_TO_PERIOD(temp);
 577	temp = clamp_val(temp, 1, 65534);
 578
 579	mutex_lock(&data->lock);
 580	data->fan_max[attr->index] = temp;
 581	adt7470_write_word_data(client, ADT7470_REG_FAN_MAX(attr->index), temp);
 582	mutex_unlock(&data->lock);
 583
 584	return count;
 585}
 586
 587static ssize_t fan_min_show(struct device *dev,
 588			    struct device_attribute *devattr, char *buf)
 
 589{
 590	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 591	struct adt7470_data *data = adt7470_update_device(dev);
 592
 593	if (FAN_DATA_VALID(data->fan_min[attr->index]))
 594		return sprintf(buf, "%d\n",
 595			       FAN_PERIOD_TO_RPM(data->fan_min[attr->index]));
 596	else
 597		return sprintf(buf, "0\n");
 598}
 599
 600static ssize_t fan_min_store(struct device *dev,
 601			     struct device_attribute *devattr,
 602			     const char *buf, size_t count)
 603{
 604	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 605	struct adt7470_data *data = dev_get_drvdata(dev);
 606	struct i2c_client *client = data->client;
 607	long temp;
 608
 609	if (kstrtol(buf, 10, &temp) || !temp)
 610		return -EINVAL;
 611
 612	temp = FAN_RPM_TO_PERIOD(temp);
 613	temp = clamp_val(temp, 1, 65534);
 614
 615	mutex_lock(&data->lock);
 616	data->fan_min[attr->index] = temp;
 617	adt7470_write_word_data(client, ADT7470_REG_FAN_MIN(attr->index), temp);
 618	mutex_unlock(&data->lock);
 619
 620	return count;
 621}
 622
 623static ssize_t fan_show(struct device *dev, struct device_attribute *devattr,
 624			char *buf)
 625{
 626	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 627	struct adt7470_data *data = adt7470_update_device(dev);
 628
 629	if (FAN_DATA_VALID(data->fan[attr->index]))
 630		return sprintf(buf, "%d\n",
 631			       FAN_PERIOD_TO_RPM(data->fan[attr->index]));
 632	else
 633		return sprintf(buf, "0\n");
 634}
 635
 636static ssize_t force_pwm_max_show(struct device *dev,
 637				  struct device_attribute *devattr, char *buf)
 
 638{
 639	struct adt7470_data *data = adt7470_update_device(dev);
 640	return sprintf(buf, "%d\n", data->force_pwm_max);
 641}
 642
 643static ssize_t force_pwm_max_store(struct device *dev,
 644				   struct device_attribute *devattr,
 645				   const char *buf, size_t count)
 
 646{
 647	struct adt7470_data *data = dev_get_drvdata(dev);
 648	struct i2c_client *client = data->client;
 649	long temp;
 650	u8 reg;
 651
 652	if (kstrtol(buf, 10, &temp))
 653		return -EINVAL;
 654
 655	mutex_lock(&data->lock);
 656	data->force_pwm_max = temp;
 657	reg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
 658	if (temp)
 659		reg |= ADT7470_FSPD_MASK;
 660	else
 661		reg &= ~ADT7470_FSPD_MASK;
 662	i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, reg);
 663	mutex_unlock(&data->lock);
 664
 665	return count;
 666}
 667
 668static ssize_t pwm_show(struct device *dev, struct device_attribute *devattr,
 669			char *buf)
 670{
 671	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 672	struct adt7470_data *data = adt7470_update_device(dev);
 673	return sprintf(buf, "%d\n", data->pwm[attr->index]);
 674}
 675
 676static ssize_t pwm_store(struct device *dev, struct device_attribute *devattr,
 677			 const char *buf, size_t count)
 678{
 679	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 680	struct adt7470_data *data = dev_get_drvdata(dev);
 681	struct i2c_client *client = data->client;
 682	long temp;
 683
 684	if (kstrtol(buf, 10, &temp))
 685		return -EINVAL;
 686
 687	temp = clamp_val(temp, 0, 255);
 688
 689	mutex_lock(&data->lock);
 690	data->pwm[attr->index] = temp;
 691	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM(attr->index), temp);
 692	mutex_unlock(&data->lock);
 693
 694	return count;
 695}
 696
 697/* These are the valid PWM frequencies to the nearest Hz */
 698static const int adt7470_freq_map[] = {
 699	11, 15, 22, 29, 35, 44, 59, 88, 1400, 22500
 700};
 701
 702static ssize_t pwm1_freq_show(struct device *dev,
 703			      struct device_attribute *devattr, char *buf)
 704{
 705	struct adt7470_data *data = adt7470_update_device(dev);
 706	unsigned char cfg_reg_1;
 707	unsigned char cfg_reg_2;
 708	int index;
 709
 710	mutex_lock(&data->lock);
 711	cfg_reg_1 = i2c_smbus_read_byte_data(data->client, ADT7470_REG_CFG);
 712	cfg_reg_2 = i2c_smbus_read_byte_data(data->client, ADT7470_REG_CFG_2);
 713	mutex_unlock(&data->lock);
 714
 715	index = (cfg_reg_2 & ADT7470_FREQ_MASK) >> ADT7470_FREQ_SHIFT;
 716	if (!(cfg_reg_1 & ADT7470_CFG_LF))
 717		index += 8;
 718	if (index >= ARRAY_SIZE(adt7470_freq_map))
 719		index = ARRAY_SIZE(adt7470_freq_map) - 1;
 720
 721	return scnprintf(buf, PAGE_SIZE, "%d\n", adt7470_freq_map[index]);
 722}
 723
 724static ssize_t pwm1_freq_store(struct device *dev,
 725			       struct device_attribute *devattr,
 726			       const char *buf, size_t count)
 727{
 728	struct adt7470_data *data = dev_get_drvdata(dev);
 729	struct i2c_client *client = data->client;
 730	long freq;
 731	int index;
 732	int low_freq = ADT7470_CFG_LF;
 733	unsigned char val;
 734
 735	if (kstrtol(buf, 10, &freq))
 736		return -EINVAL;
 737
 738	/* Round the user value given to the closest available frequency */
 739	index = find_closest(freq, adt7470_freq_map,
 740			     ARRAY_SIZE(adt7470_freq_map));
 741
 742	if (index >= 8) {
 743		index -= 8;
 744		low_freq = 0;
 745	}
 746
 747	mutex_lock(&data->lock);
 748	/* Configuration Register 1 */
 749	val = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
 750	i2c_smbus_write_byte_data(client, ADT7470_REG_CFG,
 751				  (val & ~ADT7470_CFG_LF) | low_freq);
 752	/* Configuration Register 2 */
 753	val = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG_2);
 754	i2c_smbus_write_byte_data(client, ADT7470_REG_CFG_2,
 755		(val & ~ADT7470_FREQ_MASK) | (index << ADT7470_FREQ_SHIFT));
 756	mutex_unlock(&data->lock);
 757
 758	return count;
 759}
 760
 761static ssize_t pwm_max_show(struct device *dev,
 762			    struct device_attribute *devattr, char *buf)
 
 763{
 764	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 765	struct adt7470_data *data = adt7470_update_device(dev);
 766	return sprintf(buf, "%d\n", data->pwm_max[attr->index]);
 767}
 768
 769static ssize_t pwm_max_store(struct device *dev,
 770			     struct device_attribute *devattr,
 771			     const char *buf, size_t count)
 
 772{
 773	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 774	struct adt7470_data *data = dev_get_drvdata(dev);
 775	struct i2c_client *client = data->client;
 776	long temp;
 777
 778	if (kstrtol(buf, 10, &temp))
 779		return -EINVAL;
 780
 781	temp = clamp_val(temp, 0, 255);
 782
 783	mutex_lock(&data->lock);
 784	data->pwm_max[attr->index] = temp;
 785	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_MAX(attr->index),
 786				  temp);
 787	mutex_unlock(&data->lock);
 788
 789	return count;
 790}
 791
 792static ssize_t pwm_min_show(struct device *dev,
 793			    struct device_attribute *devattr, char *buf)
 
 794{
 795	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 796	struct adt7470_data *data = adt7470_update_device(dev);
 797	return sprintf(buf, "%d\n", data->pwm_min[attr->index]);
 798}
 799
 800static ssize_t pwm_min_store(struct device *dev,
 801			     struct device_attribute *devattr,
 802			     const char *buf, size_t count)
 
 803{
 804	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 805	struct adt7470_data *data = dev_get_drvdata(dev);
 806	struct i2c_client *client = data->client;
 807	long temp;
 808
 809	if (kstrtol(buf, 10, &temp))
 810		return -EINVAL;
 811
 812	temp = clamp_val(temp, 0, 255);
 813
 814	mutex_lock(&data->lock);
 815	data->pwm_min[attr->index] = temp;
 816	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_MIN(attr->index),
 817				  temp);
 818	mutex_unlock(&data->lock);
 819
 820	return count;
 821}
 822
 823static ssize_t pwm_tmax_show(struct device *dev,
 824			     struct device_attribute *devattr, char *buf)
 
 825{
 826	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 827	struct adt7470_data *data = adt7470_update_device(dev);
 828	/* the datasheet says that tmax = tmin + 20C */
 829	return sprintf(buf, "%d\n", 1000 * (20 + data->pwm_tmin[attr->index]));
 830}
 831
 832static ssize_t pwm_tmin_show(struct device *dev,
 833			     struct device_attribute *devattr, char *buf)
 
 834{
 835	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 836	struct adt7470_data *data = adt7470_update_device(dev);
 837	return sprintf(buf, "%d\n", 1000 * data->pwm_tmin[attr->index]);
 838}
 839
 840static ssize_t pwm_tmin_store(struct device *dev,
 841			      struct device_attribute *devattr,
 842			      const char *buf, size_t count)
 
 843{
 844	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 845	struct adt7470_data *data = dev_get_drvdata(dev);
 846	struct i2c_client *client = data->client;
 847	long temp;
 848
 849	if (kstrtol(buf, 10, &temp))
 850		return -EINVAL;
 851
 852	temp = clamp_val(temp, -128000, 127000);
 853	temp = DIV_ROUND_CLOSEST(temp, 1000);
 854
 855	mutex_lock(&data->lock);
 856	data->pwm_tmin[attr->index] = temp;
 857	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_TMIN(attr->index),
 858				  temp);
 859	mutex_unlock(&data->lock);
 860
 861	return count;
 862}
 863
 864static ssize_t pwm_auto_show(struct device *dev,
 865			     struct device_attribute *devattr, char *buf)
 
 866{
 867	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 868	struct adt7470_data *data = adt7470_update_device(dev);
 869	return sprintf(buf, "%d\n", 1 + data->pwm_automatic[attr->index]);
 870}
 871
 872static ssize_t pwm_auto_store(struct device *dev,
 873			      struct device_attribute *devattr,
 874			      const char *buf, size_t count)
 
 875{
 876	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 877	struct adt7470_data *data = dev_get_drvdata(dev);
 878	struct i2c_client *client = data->client;
 879	int pwm_auto_reg = ADT7470_REG_PWM_CFG(attr->index);
 880	int pwm_auto_reg_mask;
 881	long temp;
 882	u8 reg;
 883
 884	if (kstrtol(buf, 10, &temp))
 885		return -EINVAL;
 886
 887	if (attr->index % 2)
 888		pwm_auto_reg_mask = ADT7470_PWM2_AUTO_MASK;
 889	else
 890		pwm_auto_reg_mask = ADT7470_PWM1_AUTO_MASK;
 891
 892	if (temp != 2 && temp != 1)
 893		return -EINVAL;
 894	temp--;
 895
 896	mutex_lock(&data->lock);
 897	data->pwm_automatic[attr->index] = temp;
 898	reg = i2c_smbus_read_byte_data(client, pwm_auto_reg);
 899	if (temp)
 900		reg |= pwm_auto_reg_mask;
 901	else
 902		reg &= ~pwm_auto_reg_mask;
 903	i2c_smbus_write_byte_data(client, pwm_auto_reg, reg);
 904	mutex_unlock(&data->lock);
 905
 906	return count;
 907}
 908
 909static ssize_t pwm_auto_temp_show(struct device *dev,
 910				  struct device_attribute *devattr, char *buf)
 
 911{
 912	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 913	struct adt7470_data *data = adt7470_update_device(dev);
 914	u8 ctrl = data->pwm_auto_temp[attr->index];
 915
 916	if (ctrl)
 917		return sprintf(buf, "%d\n", 1 << (ctrl - 1));
 918	else
 919		return sprintf(buf, "%d\n", ADT7470_PWM_ALL_TEMPS);
 920}
 921
 922static int cvt_auto_temp(int input)
 923{
 924	if (input == ADT7470_PWM_ALL_TEMPS)
 925		return 0;
 926	if (input < 1 || !is_power_of_2(input))
 927		return -EINVAL;
 928	return ilog2(input) + 1;
 929}
 930
 931static ssize_t pwm_auto_temp_store(struct device *dev,
 932				   struct device_attribute *devattr,
 933				   const char *buf, size_t count)
 
 934{
 935	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 936	struct adt7470_data *data = dev_get_drvdata(dev);
 937	struct i2c_client *client = data->client;
 938	int pwm_auto_reg = ADT7470_REG_PWM_AUTO_TEMP(attr->index);
 939	long temp;
 940	u8 reg;
 941
 942	if (kstrtol(buf, 10, &temp))
 943		return -EINVAL;
 944
 945	temp = cvt_auto_temp(temp);
 946	if (temp < 0)
 947		return temp;
 948
 949	mutex_lock(&data->lock);
 950	data->pwm_automatic[attr->index] = temp;
 951	reg = i2c_smbus_read_byte_data(client, pwm_auto_reg);
 952
 953	if (!(attr->index % 2)) {
 954		reg &= 0xF;
 955		reg |= (temp << 4) & 0xF0;
 956	} else {
 957		reg &= 0xF0;
 958		reg |= temp & 0xF;
 959	}
 960
 961	i2c_smbus_write_byte_data(client, pwm_auto_reg, reg);
 962	mutex_unlock(&data->lock);
 963
 964	return count;
 965}
 966
 967static ssize_t alarm_show(struct device *dev,
 968			  struct device_attribute *devattr, char *buf)
 
 969{
 970	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 971	struct adt7470_data *data = adt7470_update_device(dev);
 972
 973	if (data->alarm & attr->index)
 974		return sprintf(buf, "1\n");
 975	else
 976		return sprintf(buf, "0\n");
 977}
 978
 979static DEVICE_ATTR_RW(alarm_mask);
 980static DEVICE_ATTR_RW(num_temp_sensors);
 981static DEVICE_ATTR_RW(auto_update_interval);
 982
 983static SENSOR_DEVICE_ATTR_RW(temp1_max, temp_max, 0);
 984static SENSOR_DEVICE_ATTR_RW(temp2_max, temp_max, 1);
 985static SENSOR_DEVICE_ATTR_RW(temp3_max, temp_max, 2);
 986static SENSOR_DEVICE_ATTR_RW(temp4_max, temp_max, 3);
 987static SENSOR_DEVICE_ATTR_RW(temp5_max, temp_max, 4);
 988static SENSOR_DEVICE_ATTR_RW(temp6_max, temp_max, 5);
 989static SENSOR_DEVICE_ATTR_RW(temp7_max, temp_max, 6);
 990static SENSOR_DEVICE_ATTR_RW(temp8_max, temp_max, 7);
 991static SENSOR_DEVICE_ATTR_RW(temp9_max, temp_max, 8);
 992static SENSOR_DEVICE_ATTR_RW(temp10_max, temp_max, 9);
 993
 994static SENSOR_DEVICE_ATTR_RW(temp1_min, temp_min, 0);
 995static SENSOR_DEVICE_ATTR_RW(temp2_min, temp_min, 1);
 996static SENSOR_DEVICE_ATTR_RW(temp3_min, temp_min, 2);
 997static SENSOR_DEVICE_ATTR_RW(temp4_min, temp_min, 3);
 998static SENSOR_DEVICE_ATTR_RW(temp5_min, temp_min, 4);
 999static SENSOR_DEVICE_ATTR_RW(temp6_min, temp_min, 5);
1000static SENSOR_DEVICE_ATTR_RW(temp7_min, temp_min, 6);
1001static SENSOR_DEVICE_ATTR_RW(temp8_min, temp_min, 7);
1002static SENSOR_DEVICE_ATTR_RW(temp9_min, temp_min, 8);
1003static SENSOR_DEVICE_ATTR_RW(temp10_min, temp_min, 9);
1004
1005static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, 0);
1006static SENSOR_DEVICE_ATTR_RO(temp2_input, temp, 1);
1007static SENSOR_DEVICE_ATTR_RO(temp3_input, temp, 2);
1008static SENSOR_DEVICE_ATTR_RO(temp4_input, temp, 3);
1009static SENSOR_DEVICE_ATTR_RO(temp5_input, temp, 4);
1010static SENSOR_DEVICE_ATTR_RO(temp6_input, temp, 5);
1011static SENSOR_DEVICE_ATTR_RO(temp7_input, temp, 6);
1012static SENSOR_DEVICE_ATTR_RO(temp8_input, temp, 7);
1013static SENSOR_DEVICE_ATTR_RO(temp9_input, temp, 8);
1014static SENSOR_DEVICE_ATTR_RO(temp10_input, temp, 9);
1015
1016static SENSOR_DEVICE_ATTR_RO(temp1_alarm, alarm, ADT7470_R1T_ALARM);
1017static SENSOR_DEVICE_ATTR_RO(temp2_alarm, alarm, ADT7470_R2T_ALARM);
1018static SENSOR_DEVICE_ATTR_RO(temp3_alarm, alarm, ADT7470_R3T_ALARM);
1019static SENSOR_DEVICE_ATTR_RO(temp4_alarm, alarm, ADT7470_R4T_ALARM);
1020static SENSOR_DEVICE_ATTR_RO(temp5_alarm, alarm, ADT7470_R5T_ALARM);
1021static SENSOR_DEVICE_ATTR_RO(temp6_alarm, alarm, ADT7470_R6T_ALARM);
1022static SENSOR_DEVICE_ATTR_RO(temp7_alarm, alarm, ADT7470_R7T_ALARM);
1023static SENSOR_DEVICE_ATTR_RO(temp8_alarm, alarm, ALARM2(ADT7470_R8T_ALARM));
1024static SENSOR_DEVICE_ATTR_RO(temp9_alarm, alarm, ALARM2(ADT7470_R9T_ALARM));
1025static SENSOR_DEVICE_ATTR_RO(temp10_alarm, alarm, ALARM2(ADT7470_R10T_ALARM));
1026
1027static SENSOR_DEVICE_ATTR_RW(fan1_max, fan_max, 0);
1028static SENSOR_DEVICE_ATTR_RW(fan2_max, fan_max, 1);
1029static SENSOR_DEVICE_ATTR_RW(fan3_max, fan_max, 2);
1030static SENSOR_DEVICE_ATTR_RW(fan4_max, fan_max, 3);
1031
1032static SENSOR_DEVICE_ATTR_RW(fan1_min, fan_min, 0);
1033static SENSOR_DEVICE_ATTR_RW(fan2_min, fan_min, 1);
1034static SENSOR_DEVICE_ATTR_RW(fan3_min, fan_min, 2);
1035static SENSOR_DEVICE_ATTR_RW(fan4_min, fan_min, 3);
1036
1037static SENSOR_DEVICE_ATTR_RO(fan1_input, fan, 0);
1038static SENSOR_DEVICE_ATTR_RO(fan2_input, fan, 1);
1039static SENSOR_DEVICE_ATTR_RO(fan3_input, fan, 2);
1040static SENSOR_DEVICE_ATTR_RO(fan4_input, fan, 3);
1041
1042static SENSOR_DEVICE_ATTR_RO(fan1_alarm, alarm, ALARM2(ADT7470_FAN1_ALARM));
1043static SENSOR_DEVICE_ATTR_RO(fan2_alarm, alarm, ALARM2(ADT7470_FAN2_ALARM));
1044static SENSOR_DEVICE_ATTR_RO(fan3_alarm, alarm, ALARM2(ADT7470_FAN3_ALARM));
1045static SENSOR_DEVICE_ATTR_RO(fan4_alarm, alarm, ALARM2(ADT7470_FAN4_ALARM));
1046
1047static SENSOR_DEVICE_ATTR_RW(force_pwm_max, force_pwm_max, 0);
1048
1049static SENSOR_DEVICE_ATTR_RW(pwm1, pwm, 0);
1050static SENSOR_DEVICE_ATTR_RW(pwm2, pwm, 1);
1051static SENSOR_DEVICE_ATTR_RW(pwm3, pwm, 2);
1052static SENSOR_DEVICE_ATTR_RW(pwm4, pwm, 3);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1053
1054static DEVICE_ATTR_RW(pwm1_freq);
1055
1056static SENSOR_DEVICE_ATTR_RW(pwm1_auto_point1_pwm, pwm_min, 0);
1057static SENSOR_DEVICE_ATTR_RW(pwm2_auto_point1_pwm, pwm_min, 1);
1058static SENSOR_DEVICE_ATTR_RW(pwm3_auto_point1_pwm, pwm_min, 2);
1059static SENSOR_DEVICE_ATTR_RW(pwm4_auto_point1_pwm, pwm_min, 3);
1060
1061static SENSOR_DEVICE_ATTR_RW(pwm1_auto_point2_pwm, pwm_max, 0);
1062static SENSOR_DEVICE_ATTR_RW(pwm2_auto_point2_pwm, pwm_max, 1);
1063static SENSOR_DEVICE_ATTR_RW(pwm3_auto_point2_pwm, pwm_max, 2);
1064static SENSOR_DEVICE_ATTR_RW(pwm4_auto_point2_pwm, pwm_max, 3);
1065
1066static SENSOR_DEVICE_ATTR_RW(pwm1_auto_point1_temp, pwm_tmin, 0);
1067static SENSOR_DEVICE_ATTR_RW(pwm2_auto_point1_temp, pwm_tmin, 1);
1068static SENSOR_DEVICE_ATTR_RW(pwm3_auto_point1_temp, pwm_tmin, 2);
1069static SENSOR_DEVICE_ATTR_RW(pwm4_auto_point1_temp, pwm_tmin, 3);
1070
1071static SENSOR_DEVICE_ATTR_RO(pwm1_auto_point2_temp, pwm_tmax, 0);
1072static SENSOR_DEVICE_ATTR_RO(pwm2_auto_point2_temp, pwm_tmax, 1);
1073static SENSOR_DEVICE_ATTR_RO(pwm3_auto_point2_temp, pwm_tmax, 2);
1074static SENSOR_DEVICE_ATTR_RO(pwm4_auto_point2_temp, pwm_tmax, 3);
1075
1076static SENSOR_DEVICE_ATTR_RW(pwm1_enable, pwm_auto, 0);
1077static SENSOR_DEVICE_ATTR_RW(pwm2_enable, pwm_auto, 1);
1078static SENSOR_DEVICE_ATTR_RW(pwm3_enable, pwm_auto, 2);
1079static SENSOR_DEVICE_ATTR_RW(pwm4_enable, pwm_auto, 3);
1080
1081static SENSOR_DEVICE_ATTR_RW(pwm1_auto_channels_temp, pwm_auto_temp, 0);
1082static SENSOR_DEVICE_ATTR_RW(pwm2_auto_channels_temp, pwm_auto_temp, 1);
1083static SENSOR_DEVICE_ATTR_RW(pwm3_auto_channels_temp, pwm_auto_temp, 2);
1084static SENSOR_DEVICE_ATTR_RW(pwm4_auto_channels_temp, pwm_auto_temp, 3);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1085
1086static struct attribute *adt7470_attrs[] = {
1087	&dev_attr_alarm_mask.attr,
1088	&dev_attr_num_temp_sensors.attr,
1089	&dev_attr_auto_update_interval.attr,
1090	&sensor_dev_attr_temp1_max.dev_attr.attr,
1091	&sensor_dev_attr_temp2_max.dev_attr.attr,
1092	&sensor_dev_attr_temp3_max.dev_attr.attr,
1093	&sensor_dev_attr_temp4_max.dev_attr.attr,
1094	&sensor_dev_attr_temp5_max.dev_attr.attr,
1095	&sensor_dev_attr_temp6_max.dev_attr.attr,
1096	&sensor_dev_attr_temp7_max.dev_attr.attr,
1097	&sensor_dev_attr_temp8_max.dev_attr.attr,
1098	&sensor_dev_attr_temp9_max.dev_attr.attr,
1099	&sensor_dev_attr_temp10_max.dev_attr.attr,
1100	&sensor_dev_attr_temp1_min.dev_attr.attr,
1101	&sensor_dev_attr_temp2_min.dev_attr.attr,
1102	&sensor_dev_attr_temp3_min.dev_attr.attr,
1103	&sensor_dev_attr_temp4_min.dev_attr.attr,
1104	&sensor_dev_attr_temp5_min.dev_attr.attr,
1105	&sensor_dev_attr_temp6_min.dev_attr.attr,
1106	&sensor_dev_attr_temp7_min.dev_attr.attr,
1107	&sensor_dev_attr_temp8_min.dev_attr.attr,
1108	&sensor_dev_attr_temp9_min.dev_attr.attr,
1109	&sensor_dev_attr_temp10_min.dev_attr.attr,
1110	&sensor_dev_attr_temp1_input.dev_attr.attr,
1111	&sensor_dev_attr_temp2_input.dev_attr.attr,
1112	&sensor_dev_attr_temp3_input.dev_attr.attr,
1113	&sensor_dev_attr_temp4_input.dev_attr.attr,
1114	&sensor_dev_attr_temp5_input.dev_attr.attr,
1115	&sensor_dev_attr_temp6_input.dev_attr.attr,
1116	&sensor_dev_attr_temp7_input.dev_attr.attr,
1117	&sensor_dev_attr_temp8_input.dev_attr.attr,
1118	&sensor_dev_attr_temp9_input.dev_attr.attr,
1119	&sensor_dev_attr_temp10_input.dev_attr.attr,
1120	&sensor_dev_attr_temp1_alarm.dev_attr.attr,
1121	&sensor_dev_attr_temp2_alarm.dev_attr.attr,
1122	&sensor_dev_attr_temp3_alarm.dev_attr.attr,
1123	&sensor_dev_attr_temp4_alarm.dev_attr.attr,
1124	&sensor_dev_attr_temp5_alarm.dev_attr.attr,
1125	&sensor_dev_attr_temp6_alarm.dev_attr.attr,
1126	&sensor_dev_attr_temp7_alarm.dev_attr.attr,
1127	&sensor_dev_attr_temp8_alarm.dev_attr.attr,
1128	&sensor_dev_attr_temp9_alarm.dev_attr.attr,
1129	&sensor_dev_attr_temp10_alarm.dev_attr.attr,
1130	&sensor_dev_attr_fan1_max.dev_attr.attr,
1131	&sensor_dev_attr_fan2_max.dev_attr.attr,
1132	&sensor_dev_attr_fan3_max.dev_attr.attr,
1133	&sensor_dev_attr_fan4_max.dev_attr.attr,
1134	&sensor_dev_attr_fan1_min.dev_attr.attr,
1135	&sensor_dev_attr_fan2_min.dev_attr.attr,
1136	&sensor_dev_attr_fan3_min.dev_attr.attr,
1137	&sensor_dev_attr_fan4_min.dev_attr.attr,
1138	&sensor_dev_attr_fan1_input.dev_attr.attr,
1139	&sensor_dev_attr_fan2_input.dev_attr.attr,
1140	&sensor_dev_attr_fan3_input.dev_attr.attr,
1141	&sensor_dev_attr_fan4_input.dev_attr.attr,
1142	&sensor_dev_attr_fan1_alarm.dev_attr.attr,
1143	&sensor_dev_attr_fan2_alarm.dev_attr.attr,
1144	&sensor_dev_attr_fan3_alarm.dev_attr.attr,
1145	&sensor_dev_attr_fan4_alarm.dev_attr.attr,
1146	&sensor_dev_attr_force_pwm_max.dev_attr.attr,
1147	&sensor_dev_attr_pwm1.dev_attr.attr,
1148	&dev_attr_pwm1_freq.attr,
1149	&sensor_dev_attr_pwm2.dev_attr.attr,
1150	&sensor_dev_attr_pwm3.dev_attr.attr,
1151	&sensor_dev_attr_pwm4.dev_attr.attr,
1152	&sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1153	&sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
1154	&sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1155	&sensor_dev_attr_pwm4_auto_point1_pwm.dev_attr.attr,
1156	&sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1157	&sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
1158	&sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1159	&sensor_dev_attr_pwm4_auto_point2_pwm.dev_attr.attr,
1160	&sensor_dev_attr_pwm1_auto_point1_temp.dev_attr.attr,
1161	&sensor_dev_attr_pwm2_auto_point1_temp.dev_attr.attr,
1162	&sensor_dev_attr_pwm3_auto_point1_temp.dev_attr.attr,
1163	&sensor_dev_attr_pwm4_auto_point1_temp.dev_attr.attr,
1164	&sensor_dev_attr_pwm1_auto_point2_temp.dev_attr.attr,
1165	&sensor_dev_attr_pwm2_auto_point2_temp.dev_attr.attr,
1166	&sensor_dev_attr_pwm3_auto_point2_temp.dev_attr.attr,
1167	&sensor_dev_attr_pwm4_auto_point2_temp.dev_attr.attr,
1168	&sensor_dev_attr_pwm1_enable.dev_attr.attr,
1169	&sensor_dev_attr_pwm2_enable.dev_attr.attr,
1170	&sensor_dev_attr_pwm3_enable.dev_attr.attr,
1171	&sensor_dev_attr_pwm4_enable.dev_attr.attr,
1172	&sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1173	&sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
1174	&sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1175	&sensor_dev_attr_pwm4_auto_channels_temp.dev_attr.attr,
1176	NULL
1177};
1178
1179ATTRIBUTE_GROUPS(adt7470);
1180
1181/* Return 0 if detection is successful, -ENODEV otherwise */
1182static int adt7470_detect(struct i2c_client *client,
1183			  struct i2c_board_info *info)
1184{
1185	struct i2c_adapter *adapter = client->adapter;
1186	int vendor, device, revision;
1187
1188	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1189		return -ENODEV;
1190
1191	vendor = i2c_smbus_read_byte_data(client, ADT7470_REG_VENDOR);
1192	if (vendor != ADT7470_VENDOR)
1193		return -ENODEV;
1194
1195	device = i2c_smbus_read_byte_data(client, ADT7470_REG_DEVICE);
1196	if (device != ADT7470_DEVICE)
1197		return -ENODEV;
1198
1199	revision = i2c_smbus_read_byte_data(client, ADT7470_REG_REVISION);
1200	if (revision != ADT7470_REVISION)
1201		return -ENODEV;
1202
1203	strlcpy(info->type, "adt7470", I2C_NAME_SIZE);
1204
1205	return 0;
1206}
1207
1208static void adt7470_init_client(struct i2c_client *client)
1209{
1210	int reg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
1211
1212	if (reg < 0) {
1213		dev_err(&client->dev, "cannot read configuration register\n");
1214	} else {
1215		/* start monitoring (and do a self-test) */
1216		i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, reg | 3);
1217	}
1218}
1219
1220static int adt7470_probe(struct i2c_client *client,
1221			 const struct i2c_device_id *id)
1222{
1223	struct device *dev = &client->dev;
1224	struct adt7470_data *data;
1225	struct device *hwmon_dev;
1226
1227	data = devm_kzalloc(dev, sizeof(struct adt7470_data), GFP_KERNEL);
1228	if (!data)
1229		return -ENOMEM;
1230
1231	data->num_temp_sensors = -1;
1232	data->auto_update_interval = AUTO_UPDATE_INTERVAL;
1233
1234	i2c_set_clientdata(client, data);
1235	data->client = client;
1236	mutex_init(&data->lock);
1237
1238	dev_info(&client->dev, "%s chip found\n", client->name);
1239
1240	/* Initialize the ADT7470 chip */
1241	adt7470_init_client(client);
1242
1243	/* Register sysfs hooks */
1244	hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
1245							   data,
1246							   adt7470_groups);
1247
1248	if (IS_ERR(hwmon_dev))
1249		return PTR_ERR(hwmon_dev);
1250
1251	data->auto_update = kthread_run(adt7470_update_thread, client, "%s",
1252					dev_name(hwmon_dev));
1253	if (IS_ERR(data->auto_update)) {
1254		return PTR_ERR(data->auto_update);
1255	}
1256
1257	return 0;
1258}
1259
1260static int adt7470_remove(struct i2c_client *client)
1261{
1262	struct adt7470_data *data = i2c_get_clientdata(client);
1263
1264	kthread_stop(data->auto_update);
1265	return 0;
1266}
1267
1268static const struct i2c_device_id adt7470_id[] = {
1269	{ "adt7470", 0 },
1270	{ }
1271};
1272MODULE_DEVICE_TABLE(i2c, adt7470_id);
1273
1274static struct i2c_driver adt7470_driver = {
1275	.class		= I2C_CLASS_HWMON,
1276	.driver = {
1277		.name	= "adt7470",
1278	},
1279	.probe		= adt7470_probe,
1280	.remove		= adt7470_remove,
1281	.id_table	= adt7470_id,
1282	.detect		= adt7470_detect,
1283	.address_list	= normal_i2c,
1284};
1285
1286module_i2c_driver(adt7470_driver);
1287
1288MODULE_AUTHOR("Darrick J. Wong <darrick.wong@oracle.com>");
1289MODULE_DESCRIPTION("ADT7470 driver");
1290MODULE_LICENSE("GPL");
v4.17
 
   1/*
   2 * A hwmon driver for the Analog Devices ADT7470
   3 * Copyright (C) 2007 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#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  23
  24#include <linux/module.h>
  25#include <linux/jiffies.h>
  26#include <linux/i2c.h>
  27#include <linux/hwmon.h>
  28#include <linux/hwmon-sysfs.h>
  29#include <linux/err.h>
  30#include <linux/mutex.h>
  31#include <linux/delay.h>
  32#include <linux/log2.h>
  33#include <linux/kthread.h>
  34#include <linux/slab.h>
  35#include <linux/util_macros.h>
  36
  37/* Addresses to scan */
  38static const unsigned short normal_i2c[] = { 0x2C, 0x2E, 0x2F, I2C_CLIENT_END };
  39
  40/* ADT7470 registers */
  41#define ADT7470_REG_BASE_ADDR			0x20
  42#define ADT7470_REG_TEMP_BASE_ADDR		0x20
  43#define ADT7470_REG_TEMP_MAX_ADDR		0x29
  44#define ADT7470_REG_FAN_BASE_ADDR		0x2A
  45#define ADT7470_REG_FAN_MAX_ADDR		0x31
  46#define ADT7470_REG_PWM_BASE_ADDR		0x32
  47#define ADT7470_REG_PWM_MAX_ADDR		0x35
  48#define ADT7470_REG_PWM_MAX_BASE_ADDR		0x38
  49#define ADT7470_REG_PWM_MAX_MAX_ADDR		0x3B
  50#define ADT7470_REG_CFG				0x40
  51#define		ADT7470_FSPD_MASK		0x04
  52#define ADT7470_REG_ALARM1			0x41
  53#define		ADT7470_R1T_ALARM		0x01
  54#define		ADT7470_R2T_ALARM		0x02
  55#define		ADT7470_R3T_ALARM		0x04
  56#define		ADT7470_R4T_ALARM		0x08
  57#define		ADT7470_R5T_ALARM		0x10
  58#define		ADT7470_R6T_ALARM		0x20
  59#define		ADT7470_R7T_ALARM		0x40
  60#define		ADT7470_OOL_ALARM		0x80
  61#define ADT7470_REG_ALARM2			0x42
  62#define		ADT7470_R8T_ALARM		0x01
  63#define		ADT7470_R9T_ALARM		0x02
  64#define		ADT7470_R10T_ALARM		0x04
  65#define		ADT7470_FAN1_ALARM		0x10
  66#define		ADT7470_FAN2_ALARM		0x20
  67#define		ADT7470_FAN3_ALARM		0x40
  68#define		ADT7470_FAN4_ALARM		0x80
  69#define ADT7470_REG_TEMP_LIMITS_BASE_ADDR	0x44
  70#define ADT7470_REG_TEMP_LIMITS_MAX_ADDR	0x57
  71#define ADT7470_REG_FAN_MIN_BASE_ADDR		0x58
  72#define ADT7470_REG_FAN_MIN_MAX_ADDR		0x5F
  73#define ADT7470_REG_FAN_MAX_BASE_ADDR		0x60
  74#define ADT7470_REG_FAN_MAX_MAX_ADDR		0x67
  75#define ADT7470_REG_PWM_CFG_BASE_ADDR		0x68
  76#define ADT7470_REG_PWM12_CFG			0x68
  77#define		ADT7470_PWM2_AUTO_MASK		0x40
  78#define		ADT7470_PWM1_AUTO_MASK		0x80
  79#define		ADT7470_PWM_AUTO_MASK		0xC0
  80#define ADT7470_REG_PWM34_CFG			0x69
  81#define		ADT7470_PWM3_AUTO_MASK		0x40
  82#define		ADT7470_PWM4_AUTO_MASK		0x80
  83#define	ADT7470_REG_PWM_MIN_BASE_ADDR		0x6A
  84#define ADT7470_REG_PWM_MIN_MAX_ADDR		0x6D
  85#define ADT7470_REG_PWM_TEMP_MIN_BASE_ADDR	0x6E
  86#define ADT7470_REG_PWM_TEMP_MIN_MAX_ADDR	0x71
  87#define ADT7470_REG_CFG_2			0x74
  88#define ADT7470_REG_ACOUSTICS12			0x75
  89#define ADT7470_REG_ACOUSTICS34			0x76
  90#define ADT7470_REG_DEVICE			0x3D
  91#define ADT7470_REG_VENDOR			0x3E
  92#define ADT7470_REG_REVISION			0x3F
  93#define ADT7470_REG_ALARM1_MASK			0x72
  94#define ADT7470_REG_ALARM2_MASK			0x73
  95#define ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR	0x7C
  96#define ADT7470_REG_PWM_AUTO_TEMP_MAX_ADDR	0x7D
  97#define ADT7470_REG_MAX_ADDR			0x81
  98
  99#define ADT7470_TEMP_COUNT	10
 100#define ADT7470_TEMP_REG(x)	(ADT7470_REG_TEMP_BASE_ADDR + (x))
 101#define ADT7470_TEMP_MIN_REG(x) (ADT7470_REG_TEMP_LIMITS_BASE_ADDR + ((x) * 2))
 102#define ADT7470_TEMP_MAX_REG(x) (ADT7470_REG_TEMP_LIMITS_BASE_ADDR + \
 103				((x) * 2) + 1)
 104
 105#define ADT7470_FAN_COUNT	4
 106#define ADT7470_REG_FAN(x)	(ADT7470_REG_FAN_BASE_ADDR + ((x) * 2))
 107#define ADT7470_REG_FAN_MIN(x)	(ADT7470_REG_FAN_MIN_BASE_ADDR + ((x) * 2))
 108#define ADT7470_REG_FAN_MAX(x)	(ADT7470_REG_FAN_MAX_BASE_ADDR + ((x) * 2))
 109
 110#define ADT7470_PWM_COUNT	4
 111#define ADT7470_REG_PWM(x)	(ADT7470_REG_PWM_BASE_ADDR + (x))
 112#define ADT7470_REG_PWM_MAX(x)	(ADT7470_REG_PWM_MAX_BASE_ADDR + (x))
 113#define ADT7470_REG_PWM_MIN(x)	(ADT7470_REG_PWM_MIN_BASE_ADDR + (x))
 114#define ADT7470_REG_PWM_TMIN(x)	(ADT7470_REG_PWM_TEMP_MIN_BASE_ADDR + (x))
 115#define ADT7470_REG_PWM_CFG(x)	(ADT7470_REG_PWM_CFG_BASE_ADDR + ((x) / 2))
 116#define ADT7470_REG_PWM_AUTO_TEMP(x)	(ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR + \
 117					((x) / 2))
 118
 119#define ALARM2(x)		((x) << 8)
 120
 121#define ADT7470_VENDOR		0x41
 122#define ADT7470_DEVICE		0x70
 123/* datasheet only mentions a revision 2 */
 124#define ADT7470_REVISION	0x02
 125
 126/* "all temps" according to hwmon sysfs interface spec */
 127#define ADT7470_PWM_ALL_TEMPS	0x3FF
 128
 129/* How often do we reread sensors values? (In jiffies) */
 130#define SENSOR_REFRESH_INTERVAL	(5 * HZ)
 131
 132/* How often do we reread sensor limit values? (In jiffies) */
 133#define LIMIT_REFRESH_INTERVAL	(60 * HZ)
 134
 135/* Wait at least 200ms per sensor for 10 sensors */
 136#define TEMP_COLLECTION_TIME	2000
 137
 138/* auto update thing won't fire more than every 2s */
 139#define AUTO_UPDATE_INTERVAL	2000
 140
 141/* datasheet says to divide this number by the fan reading to get fan rpm */
 142#define FAN_PERIOD_TO_RPM(x)	((90000 * 60) / (x))
 143#define FAN_RPM_TO_PERIOD	FAN_PERIOD_TO_RPM
 144#define FAN_PERIOD_INVALID	65535
 145#define FAN_DATA_VALID(x)	((x) && (x) != FAN_PERIOD_INVALID)
 146
 147/* Config registers 1 and 2 include fields for selecting the PWM frequency */
 148#define ADT7470_CFG_LF		0x40
 149#define ADT7470_FREQ_MASK	0x70
 150#define ADT7470_FREQ_SHIFT	4
 151
 152struct adt7470_data {
 153	struct i2c_client	*client;
 154	struct mutex		lock;
 155	char			sensors_valid;
 156	char			limits_valid;
 157	unsigned long		sensors_last_updated;	/* In jiffies */
 158	unsigned long		limits_last_updated;	/* In jiffies */
 159
 160	int			num_temp_sensors;	/* -1 = probe */
 161	int			temperatures_probed;
 162
 163	s8			temp[ADT7470_TEMP_COUNT];
 164	s8			temp_min[ADT7470_TEMP_COUNT];
 165	s8			temp_max[ADT7470_TEMP_COUNT];
 166	u16			fan[ADT7470_FAN_COUNT];
 167	u16			fan_min[ADT7470_FAN_COUNT];
 168	u16			fan_max[ADT7470_FAN_COUNT];
 169	u16			alarm;
 170	u16			alarms_mask;
 171	u8			force_pwm_max;
 172	u8			pwm[ADT7470_PWM_COUNT];
 173	u8			pwm_max[ADT7470_PWM_COUNT];
 174	u8			pwm_automatic[ADT7470_PWM_COUNT];
 175	u8			pwm_min[ADT7470_PWM_COUNT];
 176	s8			pwm_tmin[ADT7470_PWM_COUNT];
 177	u8			pwm_auto_temp[ADT7470_PWM_COUNT];
 178
 179	struct task_struct	*auto_update;
 180	unsigned int		auto_update_interval;
 181};
 182
 183/*
 184 * 16-bit registers on the ADT7470 are low-byte first.  The data sheet says
 185 * that the low byte must be read before the high byte.
 186 */
 187static inline int adt7470_read_word_data(struct i2c_client *client, u8 reg)
 188{
 189	u16 foo;
 190	foo = i2c_smbus_read_byte_data(client, reg);
 191	foo |= ((u16)i2c_smbus_read_byte_data(client, reg + 1) << 8);
 192	return foo;
 193}
 194
 195static inline int adt7470_write_word_data(struct i2c_client *client, u8 reg,
 196					  u16 value)
 197{
 198	return i2c_smbus_write_byte_data(client, reg, value & 0xFF)
 199	       || i2c_smbus_write_byte_data(client, reg + 1, value >> 8);
 200}
 201
 202/* Probe for temperature sensors.  Assumes lock is held */
 203static int adt7470_read_temperatures(struct i2c_client *client,
 204				     struct adt7470_data *data)
 205{
 206	unsigned long res;
 207	int i;
 208	u8 cfg, pwm[4], pwm_cfg[2];
 209
 210	/* save pwm[1-4] config register */
 211	pwm_cfg[0] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM_CFG(0));
 212	pwm_cfg[1] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM_CFG(2));
 213
 214	/* set manual pwm to whatever it is set to now */
 215	for (i = 0; i < ADT7470_FAN_COUNT; i++)
 216		pwm[i] = i2c_smbus_read_byte_data(client, ADT7470_REG_PWM(i));
 217
 218	/* put pwm in manual mode */
 219	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(0),
 220		pwm_cfg[0] & ~(ADT7470_PWM_AUTO_MASK));
 221	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(2),
 222		pwm_cfg[1] & ~(ADT7470_PWM_AUTO_MASK));
 223
 224	/* write pwm control to whatever it was */
 225	for (i = 0; i < ADT7470_FAN_COUNT; i++)
 226		i2c_smbus_write_byte_data(client, ADT7470_REG_PWM(i), pwm[i]);
 227
 228	/* start reading temperature sensors */
 229	cfg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
 230	cfg |= 0x80;
 231	i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, cfg);
 232
 233	/* Delay is 200ms * number of temp sensors. */
 234	res = msleep_interruptible((data->num_temp_sensors >= 0 ?
 235				    data->num_temp_sensors * 200 :
 236				    TEMP_COLLECTION_TIME));
 237
 238	/* done reading temperature sensors */
 239	cfg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
 240	cfg &= ~0x80;
 241	i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, cfg);
 242
 243	/* restore pwm[1-4] config registers */
 244	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(0), pwm_cfg[0]);
 245	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_CFG(2), pwm_cfg[1]);
 246
 247	if (res) {
 248		pr_err("ha ha, interrupted\n");
 249		return -EAGAIN;
 250	}
 251
 252	/* Only count fans if we have to */
 253	if (data->num_temp_sensors >= 0)
 254		return 0;
 255
 256	for (i = 0; i < ADT7470_TEMP_COUNT; i++) {
 257		data->temp[i] = i2c_smbus_read_byte_data(client,
 258						ADT7470_TEMP_REG(i));
 259		if (data->temp[i])
 260			data->num_temp_sensors = i + 1;
 261	}
 262	data->temperatures_probed = 1;
 263	return 0;
 264}
 265
 266static int adt7470_update_thread(void *p)
 267{
 268	struct i2c_client *client = p;
 269	struct adt7470_data *data = i2c_get_clientdata(client);
 270
 271	while (!kthread_should_stop()) {
 272		mutex_lock(&data->lock);
 273		adt7470_read_temperatures(client, data);
 274		mutex_unlock(&data->lock);
 275
 276		set_current_state(TASK_INTERRUPTIBLE);
 277		if (kthread_should_stop())
 278			break;
 279
 280		schedule_timeout(msecs_to_jiffies(data->auto_update_interval));
 281	}
 282
 283	return 0;
 284}
 285
 286static struct adt7470_data *adt7470_update_device(struct device *dev)
 287{
 288	struct adt7470_data *data = dev_get_drvdata(dev);
 289	struct i2c_client *client = data->client;
 290	unsigned long local_jiffies = jiffies;
 291	u8 cfg;
 292	int i;
 293	int need_sensors = 1;
 294	int need_limits = 1;
 295
 296	/*
 297	 * Figure out if we need to update the shadow registers.
 298	 * Lockless means that we may occasionally report out of
 299	 * date data.
 300	 */
 301	if (time_before(local_jiffies, data->sensors_last_updated +
 302			SENSOR_REFRESH_INTERVAL) &&
 303	    data->sensors_valid)
 304		need_sensors = 0;
 305
 306	if (time_before(local_jiffies, data->limits_last_updated +
 307			LIMIT_REFRESH_INTERVAL) &&
 308	    data->limits_valid)
 309		need_limits = 0;
 310
 311	if (!need_sensors && !need_limits)
 312		return data;
 313
 314	mutex_lock(&data->lock);
 315	if (!need_sensors)
 316		goto no_sensor_update;
 317
 318	if (!data->temperatures_probed)
 319		adt7470_read_temperatures(client, data);
 320	else
 321		for (i = 0; i < ADT7470_TEMP_COUNT; i++)
 322			data->temp[i] = i2c_smbus_read_byte_data(client,
 323						ADT7470_TEMP_REG(i));
 324
 325	for (i = 0; i < ADT7470_FAN_COUNT; i++)
 326		data->fan[i] = adt7470_read_word_data(client,
 327						ADT7470_REG_FAN(i));
 328
 329	for (i = 0; i < ADT7470_PWM_COUNT; i++) {
 330		int reg;
 331		int reg_mask;
 332
 333		data->pwm[i] = i2c_smbus_read_byte_data(client,
 334						ADT7470_REG_PWM(i));
 335
 336		if (i % 2)
 337			reg_mask = ADT7470_PWM2_AUTO_MASK;
 338		else
 339			reg_mask = ADT7470_PWM1_AUTO_MASK;
 340
 341		reg = ADT7470_REG_PWM_CFG(i);
 342		if (i2c_smbus_read_byte_data(client, reg) & reg_mask)
 343			data->pwm_automatic[i] = 1;
 344		else
 345			data->pwm_automatic[i] = 0;
 346
 347		reg = ADT7470_REG_PWM_AUTO_TEMP(i);
 348		cfg = i2c_smbus_read_byte_data(client, reg);
 349		if (!(i % 2))
 350			data->pwm_auto_temp[i] = cfg >> 4;
 351		else
 352			data->pwm_auto_temp[i] = cfg & 0xF;
 353	}
 354
 355	if (i2c_smbus_read_byte_data(client, ADT7470_REG_CFG) &
 356	    ADT7470_FSPD_MASK)
 357		data->force_pwm_max = 1;
 358	else
 359		data->force_pwm_max = 0;
 360
 361	data->alarm = i2c_smbus_read_byte_data(client, ADT7470_REG_ALARM1);
 362	if (data->alarm & ADT7470_OOL_ALARM)
 363		data->alarm |= ALARM2(i2c_smbus_read_byte_data(client,
 364							ADT7470_REG_ALARM2));
 365	data->alarms_mask = adt7470_read_word_data(client,
 366						   ADT7470_REG_ALARM1_MASK);
 367
 368	data->sensors_last_updated = local_jiffies;
 369	data->sensors_valid = 1;
 370
 371no_sensor_update:
 372	if (!need_limits)
 373		goto out;
 374
 375	for (i = 0; i < ADT7470_TEMP_COUNT; i++) {
 376		data->temp_min[i] = i2c_smbus_read_byte_data(client,
 377						ADT7470_TEMP_MIN_REG(i));
 378		data->temp_max[i] = i2c_smbus_read_byte_data(client,
 379						ADT7470_TEMP_MAX_REG(i));
 380	}
 381
 382	for (i = 0; i < ADT7470_FAN_COUNT; i++) {
 383		data->fan_min[i] = adt7470_read_word_data(client,
 384						ADT7470_REG_FAN_MIN(i));
 385		data->fan_max[i] = adt7470_read_word_data(client,
 386						ADT7470_REG_FAN_MAX(i));
 387	}
 388
 389	for (i = 0; i < ADT7470_PWM_COUNT; i++) {
 390		data->pwm_max[i] = i2c_smbus_read_byte_data(client,
 391						ADT7470_REG_PWM_MAX(i));
 392		data->pwm_min[i] = i2c_smbus_read_byte_data(client,
 393						ADT7470_REG_PWM_MIN(i));
 394		data->pwm_tmin[i] = i2c_smbus_read_byte_data(client,
 395						ADT7470_REG_PWM_TMIN(i));
 396	}
 397
 398	data->limits_last_updated = local_jiffies;
 399	data->limits_valid = 1;
 400
 401out:
 402	mutex_unlock(&data->lock);
 403	return data;
 404}
 405
 406static ssize_t auto_update_interval_show(struct device *dev,
 407					 struct device_attribute *devattr,
 408					 char *buf)
 409{
 410	struct adt7470_data *data = adt7470_update_device(dev);
 411	return sprintf(buf, "%d\n", data->auto_update_interval);
 412}
 413
 414static ssize_t auto_update_interval_store(struct device *dev,
 415					  struct device_attribute *devattr,
 416					  const char *buf, size_t count)
 417{
 418	struct adt7470_data *data = dev_get_drvdata(dev);
 419	long temp;
 420
 421	if (kstrtol(buf, 10, &temp))
 422		return -EINVAL;
 423
 424	temp = clamp_val(temp, 0, 60000);
 425
 426	mutex_lock(&data->lock);
 427	data->auto_update_interval = temp;
 428	mutex_unlock(&data->lock);
 429
 430	return count;
 431}
 432
 433static ssize_t num_temp_sensors_show(struct device *dev,
 434				     struct device_attribute *devattr,
 435				     char *buf)
 436{
 437	struct adt7470_data *data = adt7470_update_device(dev);
 438	return sprintf(buf, "%d\n", data->num_temp_sensors);
 439}
 440
 441static ssize_t num_temp_sensors_store(struct device *dev,
 442				      struct device_attribute *devattr,
 443				      const char *buf, size_t count)
 444{
 445	struct adt7470_data *data = dev_get_drvdata(dev);
 446	long temp;
 447
 448	if (kstrtol(buf, 10, &temp))
 449		return -EINVAL;
 450
 451	temp = clamp_val(temp, -1, 10);
 452
 453	mutex_lock(&data->lock);
 454	data->num_temp_sensors = temp;
 455	if (temp < 0)
 456		data->temperatures_probed = 0;
 457	mutex_unlock(&data->lock);
 458
 459	return count;
 460}
 461
 462static ssize_t show_temp_min(struct device *dev,
 463			     struct device_attribute *devattr,
 464			     char *buf)
 465{
 466	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 467	struct adt7470_data *data = adt7470_update_device(dev);
 468	return sprintf(buf, "%d\n", 1000 * data->temp_min[attr->index]);
 469}
 470
 471static ssize_t set_temp_min(struct device *dev,
 472			    struct device_attribute *devattr,
 473			    const char *buf,
 474			    size_t count)
 475{
 476	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 477	struct adt7470_data *data = dev_get_drvdata(dev);
 478	struct i2c_client *client = data->client;
 479	long temp;
 480
 481	if (kstrtol(buf, 10, &temp))
 482		return -EINVAL;
 483
 484	temp = clamp_val(temp, -128000, 127000);
 485	temp = DIV_ROUND_CLOSEST(temp, 1000);
 486
 487	mutex_lock(&data->lock);
 488	data->temp_min[attr->index] = temp;
 489	i2c_smbus_write_byte_data(client, ADT7470_TEMP_MIN_REG(attr->index),
 490				  temp);
 491	mutex_unlock(&data->lock);
 492
 493	return count;
 494}
 495
 496static ssize_t show_temp_max(struct device *dev,
 497			     struct device_attribute *devattr,
 498			     char *buf)
 499{
 500	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 501	struct adt7470_data *data = adt7470_update_device(dev);
 502	return sprintf(buf, "%d\n", 1000 * data->temp_max[attr->index]);
 503}
 504
 505static ssize_t set_temp_max(struct device *dev,
 506			    struct device_attribute *devattr,
 507			    const char *buf,
 508			    size_t count)
 509{
 510	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 511	struct adt7470_data *data = dev_get_drvdata(dev);
 512	struct i2c_client *client = data->client;
 513	long temp;
 514
 515	if (kstrtol(buf, 10, &temp))
 516		return -EINVAL;
 517
 518	temp = clamp_val(temp, -128000, 127000);
 519	temp = DIV_ROUND_CLOSEST(temp, 1000);
 520
 521	mutex_lock(&data->lock);
 522	data->temp_max[attr->index] = temp;
 523	i2c_smbus_write_byte_data(client, ADT7470_TEMP_MAX_REG(attr->index),
 524				  temp);
 525	mutex_unlock(&data->lock);
 526
 527	return count;
 528}
 529
 530static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
 531			 char *buf)
 532{
 533	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 534	struct adt7470_data *data = adt7470_update_device(dev);
 535	return sprintf(buf, "%d\n", 1000 * data->temp[attr->index]);
 536}
 537
 538static ssize_t alarm_mask_show(struct device *dev,
 539			   struct device_attribute *devattr,
 540			   char *buf)
 541{
 542	struct adt7470_data *data = adt7470_update_device(dev);
 543
 544	return sprintf(buf, "%x\n", data->alarms_mask);
 545}
 546
 547static ssize_t alarm_mask_store(struct device *dev,
 548				struct device_attribute *devattr,
 549				const char *buf, size_t count)
 550{
 551	struct adt7470_data *data = dev_get_drvdata(dev);
 552	long mask;
 553
 554	if (kstrtoul(buf, 0, &mask))
 555		return -EINVAL;
 556
 557	if (mask & ~0xffff)
 558		return -EINVAL;
 559
 560	mutex_lock(&data->lock);
 561	data->alarms_mask = mask;
 562	adt7470_write_word_data(data->client, ADT7470_REG_ALARM1_MASK, mask);
 563	mutex_unlock(&data->lock);
 564
 565	return count;
 566}
 567
 568static ssize_t show_fan_max(struct device *dev,
 569			    struct device_attribute *devattr,
 570			    char *buf)
 571{
 572	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 573	struct adt7470_data *data = adt7470_update_device(dev);
 574
 575	if (FAN_DATA_VALID(data->fan_max[attr->index]))
 576		return sprintf(buf, "%d\n",
 577			       FAN_PERIOD_TO_RPM(data->fan_max[attr->index]));
 578	else
 579		return sprintf(buf, "0\n");
 580}
 581
 582static ssize_t set_fan_max(struct device *dev,
 583			   struct device_attribute *devattr,
 584			   const char *buf, size_t count)
 585{
 586	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 587	struct adt7470_data *data = dev_get_drvdata(dev);
 588	struct i2c_client *client = data->client;
 589	long temp;
 590
 591	if (kstrtol(buf, 10, &temp) || !temp)
 592		return -EINVAL;
 593
 594	temp = FAN_RPM_TO_PERIOD(temp);
 595	temp = clamp_val(temp, 1, 65534);
 596
 597	mutex_lock(&data->lock);
 598	data->fan_max[attr->index] = temp;
 599	adt7470_write_word_data(client, ADT7470_REG_FAN_MAX(attr->index), temp);
 600	mutex_unlock(&data->lock);
 601
 602	return count;
 603}
 604
 605static ssize_t show_fan_min(struct device *dev,
 606			    struct device_attribute *devattr,
 607			    char *buf)
 608{
 609	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 610	struct adt7470_data *data = adt7470_update_device(dev);
 611
 612	if (FAN_DATA_VALID(data->fan_min[attr->index]))
 613		return sprintf(buf, "%d\n",
 614			       FAN_PERIOD_TO_RPM(data->fan_min[attr->index]));
 615	else
 616		return sprintf(buf, "0\n");
 617}
 618
 619static ssize_t set_fan_min(struct device *dev,
 620			   struct device_attribute *devattr,
 621			   const char *buf, size_t count)
 622{
 623	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 624	struct adt7470_data *data = dev_get_drvdata(dev);
 625	struct i2c_client *client = data->client;
 626	long temp;
 627
 628	if (kstrtol(buf, 10, &temp) || !temp)
 629		return -EINVAL;
 630
 631	temp = FAN_RPM_TO_PERIOD(temp);
 632	temp = clamp_val(temp, 1, 65534);
 633
 634	mutex_lock(&data->lock);
 635	data->fan_min[attr->index] = temp;
 636	adt7470_write_word_data(client, ADT7470_REG_FAN_MIN(attr->index), temp);
 637	mutex_unlock(&data->lock);
 638
 639	return count;
 640}
 641
 642static ssize_t show_fan(struct device *dev, struct device_attribute *devattr,
 643			char *buf)
 644{
 645	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 646	struct adt7470_data *data = adt7470_update_device(dev);
 647
 648	if (FAN_DATA_VALID(data->fan[attr->index]))
 649		return sprintf(buf, "%d\n",
 650			       FAN_PERIOD_TO_RPM(data->fan[attr->index]));
 651	else
 652		return sprintf(buf, "0\n");
 653}
 654
 655static ssize_t show_force_pwm_max(struct device *dev,
 656				  struct device_attribute *devattr,
 657				  char *buf)
 658{
 659	struct adt7470_data *data = adt7470_update_device(dev);
 660	return sprintf(buf, "%d\n", data->force_pwm_max);
 661}
 662
 663static ssize_t set_force_pwm_max(struct device *dev,
 664				 struct device_attribute *devattr,
 665				 const char *buf,
 666				 size_t count)
 667{
 668	struct adt7470_data *data = dev_get_drvdata(dev);
 669	struct i2c_client *client = data->client;
 670	long temp;
 671	u8 reg;
 672
 673	if (kstrtol(buf, 10, &temp))
 674		return -EINVAL;
 675
 676	mutex_lock(&data->lock);
 677	data->force_pwm_max = temp;
 678	reg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
 679	if (temp)
 680		reg |= ADT7470_FSPD_MASK;
 681	else
 682		reg &= ~ADT7470_FSPD_MASK;
 683	i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, reg);
 684	mutex_unlock(&data->lock);
 685
 686	return count;
 687}
 688
 689static ssize_t show_pwm(struct device *dev, struct device_attribute *devattr,
 690			char *buf)
 691{
 692	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 693	struct adt7470_data *data = adt7470_update_device(dev);
 694	return sprintf(buf, "%d\n", data->pwm[attr->index]);
 695}
 696
 697static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr,
 698			const char *buf, size_t count)
 699{
 700	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 701	struct adt7470_data *data = dev_get_drvdata(dev);
 702	struct i2c_client *client = data->client;
 703	long temp;
 704
 705	if (kstrtol(buf, 10, &temp))
 706		return -EINVAL;
 707
 708	temp = clamp_val(temp, 0, 255);
 709
 710	mutex_lock(&data->lock);
 711	data->pwm[attr->index] = temp;
 712	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM(attr->index), temp);
 713	mutex_unlock(&data->lock);
 714
 715	return count;
 716}
 717
 718/* These are the valid PWM frequencies to the nearest Hz */
 719static const int adt7470_freq_map[] = {
 720	11, 15, 22, 29, 35, 44, 59, 88, 1400, 22500
 721};
 722
 723static ssize_t pwm1_freq_show(struct device *dev,
 724			      struct device_attribute *devattr, char *buf)
 725{
 726	struct adt7470_data *data = adt7470_update_device(dev);
 727	unsigned char cfg_reg_1;
 728	unsigned char cfg_reg_2;
 729	int index;
 730
 731	mutex_lock(&data->lock);
 732	cfg_reg_1 = i2c_smbus_read_byte_data(data->client, ADT7470_REG_CFG);
 733	cfg_reg_2 = i2c_smbus_read_byte_data(data->client, ADT7470_REG_CFG_2);
 734	mutex_unlock(&data->lock);
 735
 736	index = (cfg_reg_2 & ADT7470_FREQ_MASK) >> ADT7470_FREQ_SHIFT;
 737	if (!(cfg_reg_1 & ADT7470_CFG_LF))
 738		index += 8;
 739	if (index >= ARRAY_SIZE(adt7470_freq_map))
 740		index = ARRAY_SIZE(adt7470_freq_map) - 1;
 741
 742	return scnprintf(buf, PAGE_SIZE, "%d\n", adt7470_freq_map[index]);
 743}
 744
 745static ssize_t pwm1_freq_store(struct device *dev,
 746			       struct device_attribute *devattr,
 747			       const char *buf, size_t count)
 748{
 749	struct adt7470_data *data = dev_get_drvdata(dev);
 750	struct i2c_client *client = data->client;
 751	long freq;
 752	int index;
 753	int low_freq = ADT7470_CFG_LF;
 754	unsigned char val;
 755
 756	if (kstrtol(buf, 10, &freq))
 757		return -EINVAL;
 758
 759	/* Round the user value given to the closest available frequency */
 760	index = find_closest(freq, adt7470_freq_map,
 761			     ARRAY_SIZE(adt7470_freq_map));
 762
 763	if (index >= 8) {
 764		index -= 8;
 765		low_freq = 0;
 766	}
 767
 768	mutex_lock(&data->lock);
 769	/* Configuration Register 1 */
 770	val = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
 771	i2c_smbus_write_byte_data(client, ADT7470_REG_CFG,
 772				  (val & ~ADT7470_CFG_LF) | low_freq);
 773	/* Configuration Register 2 */
 774	val = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG_2);
 775	i2c_smbus_write_byte_data(client, ADT7470_REG_CFG_2,
 776		(val & ~ADT7470_FREQ_MASK) | (index << ADT7470_FREQ_SHIFT));
 777	mutex_unlock(&data->lock);
 778
 779	return count;
 780}
 781
 782static ssize_t show_pwm_max(struct device *dev,
 783			    struct device_attribute *devattr,
 784			    char *buf)
 785{
 786	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 787	struct adt7470_data *data = adt7470_update_device(dev);
 788	return sprintf(buf, "%d\n", data->pwm_max[attr->index]);
 789}
 790
 791static ssize_t set_pwm_max(struct device *dev,
 792			   struct device_attribute *devattr,
 793			   const char *buf,
 794			   size_t count)
 795{
 796	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 797	struct adt7470_data *data = dev_get_drvdata(dev);
 798	struct i2c_client *client = data->client;
 799	long temp;
 800
 801	if (kstrtol(buf, 10, &temp))
 802		return -EINVAL;
 803
 804	temp = clamp_val(temp, 0, 255);
 805
 806	mutex_lock(&data->lock);
 807	data->pwm_max[attr->index] = temp;
 808	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_MAX(attr->index),
 809				  temp);
 810	mutex_unlock(&data->lock);
 811
 812	return count;
 813}
 814
 815static ssize_t show_pwm_min(struct device *dev,
 816			    struct device_attribute *devattr,
 817			    char *buf)
 818{
 819	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 820	struct adt7470_data *data = adt7470_update_device(dev);
 821	return sprintf(buf, "%d\n", data->pwm_min[attr->index]);
 822}
 823
 824static ssize_t set_pwm_min(struct device *dev,
 825			   struct device_attribute *devattr,
 826			   const char *buf,
 827			   size_t count)
 828{
 829	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 830	struct adt7470_data *data = dev_get_drvdata(dev);
 831	struct i2c_client *client = data->client;
 832	long temp;
 833
 834	if (kstrtol(buf, 10, &temp))
 835		return -EINVAL;
 836
 837	temp = clamp_val(temp, 0, 255);
 838
 839	mutex_lock(&data->lock);
 840	data->pwm_min[attr->index] = temp;
 841	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_MIN(attr->index),
 842				  temp);
 843	mutex_unlock(&data->lock);
 844
 845	return count;
 846}
 847
 848static ssize_t show_pwm_tmax(struct device *dev,
 849			     struct device_attribute *devattr,
 850			     char *buf)
 851{
 852	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 853	struct adt7470_data *data = adt7470_update_device(dev);
 854	/* the datasheet says that tmax = tmin + 20C */
 855	return sprintf(buf, "%d\n", 1000 * (20 + data->pwm_tmin[attr->index]));
 856}
 857
 858static ssize_t show_pwm_tmin(struct device *dev,
 859			     struct device_attribute *devattr,
 860			     char *buf)
 861{
 862	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 863	struct adt7470_data *data = adt7470_update_device(dev);
 864	return sprintf(buf, "%d\n", 1000 * data->pwm_tmin[attr->index]);
 865}
 866
 867static ssize_t set_pwm_tmin(struct device *dev,
 868			    struct device_attribute *devattr,
 869			    const char *buf,
 870			    size_t count)
 871{
 872	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 873	struct adt7470_data *data = dev_get_drvdata(dev);
 874	struct i2c_client *client = data->client;
 875	long temp;
 876
 877	if (kstrtol(buf, 10, &temp))
 878		return -EINVAL;
 879
 880	temp = clamp_val(temp, -128000, 127000);
 881	temp = DIV_ROUND_CLOSEST(temp, 1000);
 882
 883	mutex_lock(&data->lock);
 884	data->pwm_tmin[attr->index] = temp;
 885	i2c_smbus_write_byte_data(client, ADT7470_REG_PWM_TMIN(attr->index),
 886				  temp);
 887	mutex_unlock(&data->lock);
 888
 889	return count;
 890}
 891
 892static ssize_t show_pwm_auto(struct device *dev,
 893			     struct device_attribute *devattr,
 894			     char *buf)
 895{
 896	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 897	struct adt7470_data *data = adt7470_update_device(dev);
 898	return sprintf(buf, "%d\n", 1 + data->pwm_automatic[attr->index]);
 899}
 900
 901static ssize_t set_pwm_auto(struct device *dev,
 902			    struct device_attribute *devattr,
 903			    const char *buf,
 904			    size_t count)
 905{
 906	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 907	struct adt7470_data *data = dev_get_drvdata(dev);
 908	struct i2c_client *client = data->client;
 909	int pwm_auto_reg = ADT7470_REG_PWM_CFG(attr->index);
 910	int pwm_auto_reg_mask;
 911	long temp;
 912	u8 reg;
 913
 914	if (kstrtol(buf, 10, &temp))
 915		return -EINVAL;
 916
 917	if (attr->index % 2)
 918		pwm_auto_reg_mask = ADT7470_PWM2_AUTO_MASK;
 919	else
 920		pwm_auto_reg_mask = ADT7470_PWM1_AUTO_MASK;
 921
 922	if (temp != 2 && temp != 1)
 923		return -EINVAL;
 924	temp--;
 925
 926	mutex_lock(&data->lock);
 927	data->pwm_automatic[attr->index] = temp;
 928	reg = i2c_smbus_read_byte_data(client, pwm_auto_reg);
 929	if (temp)
 930		reg |= pwm_auto_reg_mask;
 931	else
 932		reg &= ~pwm_auto_reg_mask;
 933	i2c_smbus_write_byte_data(client, pwm_auto_reg, reg);
 934	mutex_unlock(&data->lock);
 935
 936	return count;
 937}
 938
 939static ssize_t show_pwm_auto_temp(struct device *dev,
 940				  struct device_attribute *devattr,
 941				  char *buf)
 942{
 943	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 944	struct adt7470_data *data = adt7470_update_device(dev);
 945	u8 ctrl = data->pwm_auto_temp[attr->index];
 946
 947	if (ctrl)
 948		return sprintf(buf, "%d\n", 1 << (ctrl - 1));
 949	else
 950		return sprintf(buf, "%d\n", ADT7470_PWM_ALL_TEMPS);
 951}
 952
 953static int cvt_auto_temp(int input)
 954{
 955	if (input == ADT7470_PWM_ALL_TEMPS)
 956		return 0;
 957	if (input < 1 || !is_power_of_2(input))
 958		return -EINVAL;
 959	return ilog2(input) + 1;
 960}
 961
 962static ssize_t set_pwm_auto_temp(struct device *dev,
 963				 struct device_attribute *devattr,
 964				 const char *buf,
 965				 size_t count)
 966{
 967	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 968	struct adt7470_data *data = dev_get_drvdata(dev);
 969	struct i2c_client *client = data->client;
 970	int pwm_auto_reg = ADT7470_REG_PWM_AUTO_TEMP(attr->index);
 971	long temp;
 972	u8 reg;
 973
 974	if (kstrtol(buf, 10, &temp))
 975		return -EINVAL;
 976
 977	temp = cvt_auto_temp(temp);
 978	if (temp < 0)
 979		return temp;
 980
 981	mutex_lock(&data->lock);
 982	data->pwm_automatic[attr->index] = temp;
 983	reg = i2c_smbus_read_byte_data(client, pwm_auto_reg);
 984
 985	if (!(attr->index % 2)) {
 986		reg &= 0xF;
 987		reg |= (temp << 4) & 0xF0;
 988	} else {
 989		reg &= 0xF0;
 990		reg |= temp & 0xF;
 991	}
 992
 993	i2c_smbus_write_byte_data(client, pwm_auto_reg, reg);
 994	mutex_unlock(&data->lock);
 995
 996	return count;
 997}
 998
 999static ssize_t show_alarm(struct device *dev,
1000			  struct device_attribute *devattr,
1001			  char *buf)
1002{
1003	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1004	struct adt7470_data *data = adt7470_update_device(dev);
1005
1006	if (data->alarm & attr->index)
1007		return sprintf(buf, "1\n");
1008	else
1009		return sprintf(buf, "0\n");
1010}
1011
1012static DEVICE_ATTR_RW(alarm_mask);
1013static DEVICE_ATTR_RW(num_temp_sensors);
1014static DEVICE_ATTR_RW(auto_update_interval);
1015
1016static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max,
1017		    set_temp_max, 0);
1018static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp_max,
1019		    set_temp_max, 1);
1020static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO, show_temp_max,
1021		    set_temp_max, 2);
1022static SENSOR_DEVICE_ATTR(temp4_max, S_IWUSR | S_IRUGO, show_temp_max,
1023		    set_temp_max, 3);
1024static SENSOR_DEVICE_ATTR(temp5_max, S_IWUSR | S_IRUGO, show_temp_max,
1025		    set_temp_max, 4);
1026static SENSOR_DEVICE_ATTR(temp6_max, S_IWUSR | S_IRUGO, show_temp_max,
1027		    set_temp_max, 5);
1028static SENSOR_DEVICE_ATTR(temp7_max, S_IWUSR | S_IRUGO, show_temp_max,
1029		    set_temp_max, 6);
1030static SENSOR_DEVICE_ATTR(temp8_max, S_IWUSR | S_IRUGO, show_temp_max,
1031		    set_temp_max, 7);
1032static SENSOR_DEVICE_ATTR(temp9_max, S_IWUSR | S_IRUGO, show_temp_max,
1033		    set_temp_max, 8);
1034static SENSOR_DEVICE_ATTR(temp10_max, S_IWUSR | S_IRUGO, show_temp_max,
1035		    set_temp_max, 9);
1036
1037static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp_min,
1038		    set_temp_min, 0);
1039static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp_min,
1040		    set_temp_min, 1);
1041static SENSOR_DEVICE_ATTR(temp3_min, S_IWUSR | S_IRUGO, show_temp_min,
1042		    set_temp_min, 2);
1043static SENSOR_DEVICE_ATTR(temp4_min, S_IWUSR | S_IRUGO, show_temp_min,
1044		    set_temp_min, 3);
1045static SENSOR_DEVICE_ATTR(temp5_min, S_IWUSR | S_IRUGO, show_temp_min,
1046		    set_temp_min, 4);
1047static SENSOR_DEVICE_ATTR(temp6_min, S_IWUSR | S_IRUGO, show_temp_min,
1048		    set_temp_min, 5);
1049static SENSOR_DEVICE_ATTR(temp7_min, S_IWUSR | S_IRUGO, show_temp_min,
1050		    set_temp_min, 6);
1051static SENSOR_DEVICE_ATTR(temp8_min, S_IWUSR | S_IRUGO, show_temp_min,
1052		    set_temp_min, 7);
1053static SENSOR_DEVICE_ATTR(temp9_min, S_IWUSR | S_IRUGO, show_temp_min,
1054		    set_temp_min, 8);
1055static SENSOR_DEVICE_ATTR(temp10_min, S_IWUSR | S_IRUGO, show_temp_min,
1056		    set_temp_min, 9);
1057
1058static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
1059static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1);
1060static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2);
1061static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3);
1062static SENSOR_DEVICE_ATTR(temp5_input, S_IRUGO, show_temp, NULL, 4);
1063static SENSOR_DEVICE_ATTR(temp6_input, S_IRUGO, show_temp, NULL, 5);
1064static SENSOR_DEVICE_ATTR(temp7_input, S_IRUGO, show_temp, NULL, 6);
1065static SENSOR_DEVICE_ATTR(temp8_input, S_IRUGO, show_temp, NULL, 7);
1066static SENSOR_DEVICE_ATTR(temp9_input, S_IRUGO, show_temp, NULL, 8);
1067static SENSOR_DEVICE_ATTR(temp10_input, S_IRUGO, show_temp, NULL, 9);
1068
1069static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL,
1070			  ADT7470_R1T_ALARM);
1071static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL,
1072			  ADT7470_R2T_ALARM);
1073static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL,
1074			  ADT7470_R3T_ALARM);
1075static SENSOR_DEVICE_ATTR(temp4_alarm, S_IRUGO, show_alarm, NULL,
1076			  ADT7470_R4T_ALARM);
1077static SENSOR_DEVICE_ATTR(temp5_alarm, S_IRUGO, show_alarm, NULL,
1078			  ADT7470_R5T_ALARM);
1079static SENSOR_DEVICE_ATTR(temp6_alarm, S_IRUGO, show_alarm, NULL,
1080			  ADT7470_R6T_ALARM);
1081static SENSOR_DEVICE_ATTR(temp7_alarm, S_IRUGO, show_alarm, NULL,
1082			  ADT7470_R7T_ALARM);
1083static SENSOR_DEVICE_ATTR(temp8_alarm, S_IRUGO, show_alarm, NULL,
1084			  ALARM2(ADT7470_R8T_ALARM));
1085static SENSOR_DEVICE_ATTR(temp9_alarm, S_IRUGO, show_alarm, NULL,
1086			  ALARM2(ADT7470_R9T_ALARM));
1087static SENSOR_DEVICE_ATTR(temp10_alarm, S_IRUGO, show_alarm, NULL,
1088			  ALARM2(ADT7470_R10T_ALARM));
1089
1090static SENSOR_DEVICE_ATTR(fan1_max, S_IWUSR | S_IRUGO, show_fan_max,
1091		    set_fan_max, 0);
1092static SENSOR_DEVICE_ATTR(fan2_max, S_IWUSR | S_IRUGO, show_fan_max,
1093		    set_fan_max, 1);
1094static SENSOR_DEVICE_ATTR(fan3_max, S_IWUSR | S_IRUGO, show_fan_max,
1095		    set_fan_max, 2);
1096static SENSOR_DEVICE_ATTR(fan4_max, S_IWUSR | S_IRUGO, show_fan_max,
1097		    set_fan_max, 3);
1098
1099static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
1100		    set_fan_min, 0);
1101static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
1102		    set_fan_min, 1);
1103static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
1104		    set_fan_min, 2);
1105static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
1106		    set_fan_min, 3);
1107
1108static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0);
1109static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1);
1110static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2);
1111static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3);
1112
1113static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL,
1114			  ALARM2(ADT7470_FAN1_ALARM));
1115static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL,
1116			  ALARM2(ADT7470_FAN2_ALARM));
1117static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL,
1118			  ALARM2(ADT7470_FAN3_ALARM));
1119static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL,
1120			  ALARM2(ADT7470_FAN4_ALARM));
1121
1122static SENSOR_DEVICE_ATTR(force_pwm_max, S_IWUSR | S_IRUGO,
1123		    show_force_pwm_max, set_force_pwm_max, 0);
1124
1125static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 0);
1126static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 1);
1127static SENSOR_DEVICE_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 2);
1128static SENSOR_DEVICE_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 3);
1129
1130static DEVICE_ATTR_RW(pwm1_freq);
1131
1132static SENSOR_DEVICE_ATTR(pwm1_auto_point1_pwm, S_IWUSR | S_IRUGO,
1133		    show_pwm_min, set_pwm_min, 0);
1134static SENSOR_DEVICE_ATTR(pwm2_auto_point1_pwm, S_IWUSR | S_IRUGO,
1135		    show_pwm_min, set_pwm_min, 1);
1136static SENSOR_DEVICE_ATTR(pwm3_auto_point1_pwm, S_IWUSR | S_IRUGO,
1137		    show_pwm_min, set_pwm_min, 2);
1138static SENSOR_DEVICE_ATTR(pwm4_auto_point1_pwm, S_IWUSR | S_IRUGO,
1139		    show_pwm_min, set_pwm_min, 3);
1140
1141static SENSOR_DEVICE_ATTR(pwm1_auto_point2_pwm, S_IWUSR | S_IRUGO,
1142		    show_pwm_max, set_pwm_max, 0);
1143static SENSOR_DEVICE_ATTR(pwm2_auto_point2_pwm, S_IWUSR | S_IRUGO,
1144		    show_pwm_max, set_pwm_max, 1);
1145static SENSOR_DEVICE_ATTR(pwm3_auto_point2_pwm, S_IWUSR | S_IRUGO,
1146		    show_pwm_max, set_pwm_max, 2);
1147static SENSOR_DEVICE_ATTR(pwm4_auto_point2_pwm, S_IWUSR | S_IRUGO,
1148		    show_pwm_max, set_pwm_max, 3);
1149
1150static SENSOR_DEVICE_ATTR(pwm1_auto_point1_temp, S_IWUSR | S_IRUGO,
1151		    show_pwm_tmin, set_pwm_tmin, 0);
1152static SENSOR_DEVICE_ATTR(pwm2_auto_point1_temp, S_IWUSR | S_IRUGO,
1153		    show_pwm_tmin, set_pwm_tmin, 1);
1154static SENSOR_DEVICE_ATTR(pwm3_auto_point1_temp, S_IWUSR | S_IRUGO,
1155		    show_pwm_tmin, set_pwm_tmin, 2);
1156static SENSOR_DEVICE_ATTR(pwm4_auto_point1_temp, S_IWUSR | S_IRUGO,
1157		    show_pwm_tmin, set_pwm_tmin, 3);
1158
1159static SENSOR_DEVICE_ATTR(pwm1_auto_point2_temp, S_IRUGO, show_pwm_tmax,
1160		    NULL, 0);
1161static SENSOR_DEVICE_ATTR(pwm2_auto_point2_temp, S_IRUGO, show_pwm_tmax,
1162		    NULL, 1);
1163static SENSOR_DEVICE_ATTR(pwm3_auto_point2_temp, S_IRUGO, show_pwm_tmax,
1164		    NULL, 2);
1165static SENSOR_DEVICE_ATTR(pwm4_auto_point2_temp, S_IRUGO, show_pwm_tmax,
1166		    NULL, 3);
1167
1168static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1169		    set_pwm_auto, 0);
1170static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1171		    set_pwm_auto, 1);
1172static SENSOR_DEVICE_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1173		    set_pwm_auto, 2);
1174static SENSOR_DEVICE_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
1175		    set_pwm_auto, 3);
1176
1177static SENSOR_DEVICE_ATTR(pwm1_auto_channels_temp, S_IWUSR | S_IRUGO,
1178		    show_pwm_auto_temp, set_pwm_auto_temp, 0);
1179static SENSOR_DEVICE_ATTR(pwm2_auto_channels_temp, S_IWUSR | S_IRUGO,
1180		    show_pwm_auto_temp, set_pwm_auto_temp, 1);
1181static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO,
1182		    show_pwm_auto_temp, set_pwm_auto_temp, 2);
1183static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO,
1184		    show_pwm_auto_temp, set_pwm_auto_temp, 3);
1185
1186static struct attribute *adt7470_attrs[] = {
1187	&dev_attr_alarm_mask.attr,
1188	&dev_attr_num_temp_sensors.attr,
1189	&dev_attr_auto_update_interval.attr,
1190	&sensor_dev_attr_temp1_max.dev_attr.attr,
1191	&sensor_dev_attr_temp2_max.dev_attr.attr,
1192	&sensor_dev_attr_temp3_max.dev_attr.attr,
1193	&sensor_dev_attr_temp4_max.dev_attr.attr,
1194	&sensor_dev_attr_temp5_max.dev_attr.attr,
1195	&sensor_dev_attr_temp6_max.dev_attr.attr,
1196	&sensor_dev_attr_temp7_max.dev_attr.attr,
1197	&sensor_dev_attr_temp8_max.dev_attr.attr,
1198	&sensor_dev_attr_temp9_max.dev_attr.attr,
1199	&sensor_dev_attr_temp10_max.dev_attr.attr,
1200	&sensor_dev_attr_temp1_min.dev_attr.attr,
1201	&sensor_dev_attr_temp2_min.dev_attr.attr,
1202	&sensor_dev_attr_temp3_min.dev_attr.attr,
1203	&sensor_dev_attr_temp4_min.dev_attr.attr,
1204	&sensor_dev_attr_temp5_min.dev_attr.attr,
1205	&sensor_dev_attr_temp6_min.dev_attr.attr,
1206	&sensor_dev_attr_temp7_min.dev_attr.attr,
1207	&sensor_dev_attr_temp8_min.dev_attr.attr,
1208	&sensor_dev_attr_temp9_min.dev_attr.attr,
1209	&sensor_dev_attr_temp10_min.dev_attr.attr,
1210	&sensor_dev_attr_temp1_input.dev_attr.attr,
1211	&sensor_dev_attr_temp2_input.dev_attr.attr,
1212	&sensor_dev_attr_temp3_input.dev_attr.attr,
1213	&sensor_dev_attr_temp4_input.dev_attr.attr,
1214	&sensor_dev_attr_temp5_input.dev_attr.attr,
1215	&sensor_dev_attr_temp6_input.dev_attr.attr,
1216	&sensor_dev_attr_temp7_input.dev_attr.attr,
1217	&sensor_dev_attr_temp8_input.dev_attr.attr,
1218	&sensor_dev_attr_temp9_input.dev_attr.attr,
1219	&sensor_dev_attr_temp10_input.dev_attr.attr,
1220	&sensor_dev_attr_temp1_alarm.dev_attr.attr,
1221	&sensor_dev_attr_temp2_alarm.dev_attr.attr,
1222	&sensor_dev_attr_temp3_alarm.dev_attr.attr,
1223	&sensor_dev_attr_temp4_alarm.dev_attr.attr,
1224	&sensor_dev_attr_temp5_alarm.dev_attr.attr,
1225	&sensor_dev_attr_temp6_alarm.dev_attr.attr,
1226	&sensor_dev_attr_temp7_alarm.dev_attr.attr,
1227	&sensor_dev_attr_temp8_alarm.dev_attr.attr,
1228	&sensor_dev_attr_temp9_alarm.dev_attr.attr,
1229	&sensor_dev_attr_temp10_alarm.dev_attr.attr,
1230	&sensor_dev_attr_fan1_max.dev_attr.attr,
1231	&sensor_dev_attr_fan2_max.dev_attr.attr,
1232	&sensor_dev_attr_fan3_max.dev_attr.attr,
1233	&sensor_dev_attr_fan4_max.dev_attr.attr,
1234	&sensor_dev_attr_fan1_min.dev_attr.attr,
1235	&sensor_dev_attr_fan2_min.dev_attr.attr,
1236	&sensor_dev_attr_fan3_min.dev_attr.attr,
1237	&sensor_dev_attr_fan4_min.dev_attr.attr,
1238	&sensor_dev_attr_fan1_input.dev_attr.attr,
1239	&sensor_dev_attr_fan2_input.dev_attr.attr,
1240	&sensor_dev_attr_fan3_input.dev_attr.attr,
1241	&sensor_dev_attr_fan4_input.dev_attr.attr,
1242	&sensor_dev_attr_fan1_alarm.dev_attr.attr,
1243	&sensor_dev_attr_fan2_alarm.dev_attr.attr,
1244	&sensor_dev_attr_fan3_alarm.dev_attr.attr,
1245	&sensor_dev_attr_fan4_alarm.dev_attr.attr,
1246	&sensor_dev_attr_force_pwm_max.dev_attr.attr,
1247	&sensor_dev_attr_pwm1.dev_attr.attr,
1248	&dev_attr_pwm1_freq.attr,
1249	&sensor_dev_attr_pwm2.dev_attr.attr,
1250	&sensor_dev_attr_pwm3.dev_attr.attr,
1251	&sensor_dev_attr_pwm4.dev_attr.attr,
1252	&sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1253	&sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
1254	&sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1255	&sensor_dev_attr_pwm4_auto_point1_pwm.dev_attr.attr,
1256	&sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1257	&sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
1258	&sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1259	&sensor_dev_attr_pwm4_auto_point2_pwm.dev_attr.attr,
1260	&sensor_dev_attr_pwm1_auto_point1_temp.dev_attr.attr,
1261	&sensor_dev_attr_pwm2_auto_point1_temp.dev_attr.attr,
1262	&sensor_dev_attr_pwm3_auto_point1_temp.dev_attr.attr,
1263	&sensor_dev_attr_pwm4_auto_point1_temp.dev_attr.attr,
1264	&sensor_dev_attr_pwm1_auto_point2_temp.dev_attr.attr,
1265	&sensor_dev_attr_pwm2_auto_point2_temp.dev_attr.attr,
1266	&sensor_dev_attr_pwm3_auto_point2_temp.dev_attr.attr,
1267	&sensor_dev_attr_pwm4_auto_point2_temp.dev_attr.attr,
1268	&sensor_dev_attr_pwm1_enable.dev_attr.attr,
1269	&sensor_dev_attr_pwm2_enable.dev_attr.attr,
1270	&sensor_dev_attr_pwm3_enable.dev_attr.attr,
1271	&sensor_dev_attr_pwm4_enable.dev_attr.attr,
1272	&sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1273	&sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
1274	&sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1275	&sensor_dev_attr_pwm4_auto_channels_temp.dev_attr.attr,
1276	NULL
1277};
1278
1279ATTRIBUTE_GROUPS(adt7470);
1280
1281/* Return 0 if detection is successful, -ENODEV otherwise */
1282static int adt7470_detect(struct i2c_client *client,
1283			  struct i2c_board_info *info)
1284{
1285	struct i2c_adapter *adapter = client->adapter;
1286	int vendor, device, revision;
1287
1288	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1289		return -ENODEV;
1290
1291	vendor = i2c_smbus_read_byte_data(client, ADT7470_REG_VENDOR);
1292	if (vendor != ADT7470_VENDOR)
1293		return -ENODEV;
1294
1295	device = i2c_smbus_read_byte_data(client, ADT7470_REG_DEVICE);
1296	if (device != ADT7470_DEVICE)
1297		return -ENODEV;
1298
1299	revision = i2c_smbus_read_byte_data(client, ADT7470_REG_REVISION);
1300	if (revision != ADT7470_REVISION)
1301		return -ENODEV;
1302
1303	strlcpy(info->type, "adt7470", I2C_NAME_SIZE);
1304
1305	return 0;
1306}
1307
1308static void adt7470_init_client(struct i2c_client *client)
1309{
1310	int reg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
1311
1312	if (reg < 0) {
1313		dev_err(&client->dev, "cannot read configuration register\n");
1314	} else {
1315		/* start monitoring (and do a self-test) */
1316		i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, reg | 3);
1317	}
1318}
1319
1320static int adt7470_probe(struct i2c_client *client,
1321			 const struct i2c_device_id *id)
1322{
1323	struct device *dev = &client->dev;
1324	struct adt7470_data *data;
1325	struct device *hwmon_dev;
1326
1327	data = devm_kzalloc(dev, sizeof(struct adt7470_data), GFP_KERNEL);
1328	if (!data)
1329		return -ENOMEM;
1330
1331	data->num_temp_sensors = -1;
1332	data->auto_update_interval = AUTO_UPDATE_INTERVAL;
1333
1334	i2c_set_clientdata(client, data);
1335	data->client = client;
1336	mutex_init(&data->lock);
1337
1338	dev_info(&client->dev, "%s chip found\n", client->name);
1339
1340	/* Initialize the ADT7470 chip */
1341	adt7470_init_client(client);
1342
1343	/* Register sysfs hooks */
1344	hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
1345							   data,
1346							   adt7470_groups);
1347
1348	if (IS_ERR(hwmon_dev))
1349		return PTR_ERR(hwmon_dev);
1350
1351	data->auto_update = kthread_run(adt7470_update_thread, client, "%s",
1352					dev_name(hwmon_dev));
1353	if (IS_ERR(data->auto_update)) {
1354		return PTR_ERR(data->auto_update);
1355	}
1356
1357	return 0;
1358}
1359
1360static int adt7470_remove(struct i2c_client *client)
1361{
1362	struct adt7470_data *data = i2c_get_clientdata(client);
1363
1364	kthread_stop(data->auto_update);
1365	return 0;
1366}
1367
1368static const struct i2c_device_id adt7470_id[] = {
1369	{ "adt7470", 0 },
1370	{ }
1371};
1372MODULE_DEVICE_TABLE(i2c, adt7470_id);
1373
1374static struct i2c_driver adt7470_driver = {
1375	.class		= I2C_CLASS_HWMON,
1376	.driver = {
1377		.name	= "adt7470",
1378	},
1379	.probe		= adt7470_probe,
1380	.remove		= adt7470_remove,
1381	.id_table	= adt7470_id,
1382	.detect		= adt7470_detect,
1383	.address_list	= normal_i2c,
1384};
1385
1386module_i2c_driver(adt7470_driver);
1387
1388MODULE_AUTHOR("Darrick J. Wong <darrick.wong@oracle.com>");
1389MODULE_DESCRIPTION("ADT7470 driver");
1390MODULE_LICENSE("GPL");