Linux Audio

Check our new training course

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