cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

adt7470.c (35021B)


      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 int adt7470_remove(struct i2c_client *client)
   1300{
   1301	struct adt7470_data *data = i2c_get_clientdata(client);
   1302
   1303	kthread_stop(data->auto_update);
   1304	return 0;
   1305}
   1306
   1307static const struct i2c_device_id adt7470_id[] = {
   1308	{ "adt7470", 0 },
   1309	{ }
   1310};
   1311MODULE_DEVICE_TABLE(i2c, adt7470_id);
   1312
   1313static struct i2c_driver adt7470_driver = {
   1314	.class		= I2C_CLASS_HWMON,
   1315	.driver = {
   1316		.name	= "adt7470",
   1317	},
   1318	.probe_new	= adt7470_probe,
   1319	.remove		= adt7470_remove,
   1320	.id_table	= adt7470_id,
   1321	.detect		= adt7470_detect,
   1322	.address_list	= normal_i2c,
   1323};
   1324
   1325module_i2c_driver(adt7470_driver);
   1326
   1327MODULE_AUTHOR("Darrick J. Wong <darrick.wong@oracle.com>");
   1328MODULE_DESCRIPTION("ADT7470 driver");
   1329MODULE_LICENSE("GPL");