Linux Audio

Check our new training course

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