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

max6650.c (19484B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * max6650.c - Part of lm_sensors, Linux kernel modules for hardware
      4 *             monitoring.
      5 *
      6 * (C) 2007 by Hans J. Koch <hjk@hansjkoch.de>
      7 *
      8 * based on code written by John Morris <john.morris@spirentcom.com>
      9 * Copyright (c) 2003 Spirent Communications
     10 * and Claus Gindhart <claus.gindhart@kontron.com>
     11 *
     12 * This module has only been tested with the MAX6650 chip. It should
     13 * also work with the MAX6651. It does not distinguish max6650 and max6651
     14 * chips.
     15 *
     16 * The datasheet was last seen at:
     17 *
     18 *        http://pdfserv.maxim-ic.com/en/ds/MAX6650-MAX6651.pdf
     19 */
     20
     21#include <linux/module.h>
     22#include <linux/init.h>
     23#include <linux/slab.h>
     24#include <linux/jiffies.h>
     25#include <linux/i2c.h>
     26#include <linux/hwmon.h>
     27#include <linux/hwmon-sysfs.h>
     28#include <linux/err.h>
     29#include <linux/of_device.h>
     30#include <linux/thermal.h>
     31
     32/*
     33 * Insmod parameters
     34 */
     35
     36/* fan_voltage: 5=5V fan, 12=12V fan, 0=don't change */
     37static int fan_voltage;
     38/* prescaler: Possible values are 1, 2, 4, 8, 16 or 0 for don't change */
     39static int prescaler;
     40/* clock: The clock frequency of the chip (max6651 can be clocked externally) */
     41static int clock = 254000;
     42
     43module_param(fan_voltage, int, 0444);
     44module_param(prescaler, int, 0444);
     45module_param(clock, int, 0444);
     46
     47/*
     48 * MAX 6650/6651 registers
     49 */
     50
     51#define MAX6650_REG_SPEED	0x00
     52#define MAX6650_REG_CONFIG	0x02
     53#define MAX6650_REG_GPIO_DEF	0x04
     54#define MAX6650_REG_DAC		0x06
     55#define MAX6650_REG_ALARM_EN	0x08
     56#define MAX6650_REG_ALARM	0x0A
     57#define MAX6650_REG_TACH0	0x0C
     58#define MAX6650_REG_TACH1	0x0E
     59#define MAX6650_REG_TACH2	0x10
     60#define MAX6650_REG_TACH3	0x12
     61#define MAX6650_REG_GPIO_STAT	0x14
     62#define MAX6650_REG_COUNT	0x16
     63
     64/*
     65 * Config register bits
     66 */
     67
     68#define MAX6650_CFG_V12			0x08
     69#define MAX6650_CFG_PRESCALER_MASK	0x07
     70#define MAX6650_CFG_PRESCALER_2		0x01
     71#define MAX6650_CFG_PRESCALER_4		0x02
     72#define MAX6650_CFG_PRESCALER_8		0x03
     73#define MAX6650_CFG_PRESCALER_16	0x04
     74#define MAX6650_CFG_MODE_MASK		0x30
     75#define MAX6650_CFG_MODE_ON		0x00
     76#define MAX6650_CFG_MODE_OFF		0x10
     77#define MAX6650_CFG_MODE_CLOSED_LOOP	0x20
     78#define MAX6650_CFG_MODE_OPEN_LOOP	0x30
     79#define MAX6650_COUNT_MASK		0x03
     80
     81/*
     82 * Alarm status register bits
     83 */
     84
     85#define MAX6650_ALRM_MAX	0x01
     86#define MAX6650_ALRM_MIN	0x02
     87#define MAX6650_ALRM_TACH	0x04
     88#define MAX6650_ALRM_GPIO1	0x08
     89#define MAX6650_ALRM_GPIO2	0x10
     90
     91/* Minimum and maximum values of the FAN-RPM */
     92#define FAN_RPM_MIN 240
     93#define FAN_RPM_MAX 30000
     94
     95#define DIV_FROM_REG(reg)	(1 << ((reg) & 7))
     96#define DAC_LIMIT(v12)		((v12) ? 180 : 76)
     97
     98/*
     99 * Client data (each client gets its own)
    100 */
    101
    102struct max6650_data {
    103	struct i2c_client *client;
    104	struct mutex update_lock; /* protect alarm register updates */
    105	int nr_fans;
    106	bool valid; /* false until following fields are valid */
    107	unsigned long last_updated; /* in jiffies */
    108
    109	/* register values */
    110	u8 speed;
    111	u8 config;
    112	u8 tach[4];
    113	u8 count;
    114	u8 dac;
    115	u8 alarm;
    116	u8 alarm_en;
    117	unsigned long cooling_dev_state;
    118};
    119
    120static const u8 tach_reg[] = {
    121	MAX6650_REG_TACH0,
    122	MAX6650_REG_TACH1,
    123	MAX6650_REG_TACH2,
    124	MAX6650_REG_TACH3,
    125};
    126
    127static const struct of_device_id __maybe_unused max6650_dt_match[] = {
    128	{
    129		.compatible = "maxim,max6650",
    130		.data = (void *)1
    131	},
    132	{
    133		.compatible = "maxim,max6651",
    134		.data = (void *)4
    135	},
    136	{ },
    137};
    138MODULE_DEVICE_TABLE(of, max6650_dt_match);
    139
    140static int dac_to_pwm(int dac, bool v12)
    141{
    142	/*
    143	 * Useful range for dac is 0-180 for 12V fans and 0-76 for 5V fans.
    144	 * Lower DAC values mean higher speeds.
    145	 */
    146	return clamp_val(255 - (255 * dac) / DAC_LIMIT(v12), 0, 255);
    147}
    148
    149static u8 pwm_to_dac(unsigned int pwm, bool v12)
    150{
    151	int limit = DAC_LIMIT(v12);
    152
    153	return limit - (limit * pwm) / 255;
    154}
    155
    156static struct max6650_data *max6650_update_device(struct device *dev)
    157{
    158	struct max6650_data *data = dev_get_drvdata(dev);
    159	struct i2c_client *client = data->client;
    160	int reg, err = 0;
    161	int i;
    162
    163	mutex_lock(&data->update_lock);
    164
    165	if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
    166		for (i = 0; i < data->nr_fans; i++) {
    167			reg = i2c_smbus_read_byte_data(client, tach_reg[i]);
    168			if (reg < 0) {
    169				err = reg;
    170				goto error;
    171			}
    172			data->tach[i] = reg;
    173		}
    174
    175		/*
    176		 * Alarms are cleared on read in case the condition that
    177		 * caused the alarm is removed. Keep the value latched here
    178		 * for providing the register through different alarm files.
    179		 */
    180		reg = i2c_smbus_read_byte_data(client, MAX6650_REG_ALARM);
    181		if (reg < 0) {
    182			err = reg;
    183			goto error;
    184		}
    185		data->alarm |= reg;
    186		data->last_updated = jiffies;
    187		data->valid = true;
    188	}
    189
    190error:
    191	mutex_unlock(&data->update_lock);
    192	if (err)
    193		data = ERR_PTR(err);
    194	return data;
    195}
    196
    197/*
    198 * Change the operating mode of the chip (if needed).
    199 * mode is one of the MAX6650_CFG_MODE_* values.
    200 */
    201static int max6650_set_operating_mode(struct max6650_data *data, u8 mode)
    202{
    203	int result;
    204	u8 config = data->config;
    205
    206	if (mode == (config & MAX6650_CFG_MODE_MASK))
    207		return 0;
    208
    209	config = (config & ~MAX6650_CFG_MODE_MASK) | mode;
    210
    211	result = i2c_smbus_write_byte_data(data->client, MAX6650_REG_CONFIG,
    212					   config);
    213	if (result < 0)
    214		return result;
    215
    216	data->config = config;
    217
    218	return 0;
    219}
    220
    221/*
    222 * Set the fan speed to the specified RPM (or read back the RPM setting).
    223 * This works in closed loop mode only. Use pwm1 for open loop speed setting.
    224 *
    225 * The MAX6650/1 will automatically control fan speed when in closed loop
    226 * mode.
    227 *
    228 * Assumptions:
    229 *
    230 * 1) The MAX6650/1 internal 254kHz clock frequency is set correctly. Use
    231 *    the clock module parameter if you need to fine tune this.
    232 *
    233 * 2) The prescaler (low three bits of the config register) has already
    234 *    been set to an appropriate value. Use the prescaler module parameter
    235 *    if your BIOS doesn't initialize the chip properly.
    236 *
    237 * The relevant equations are given on pages 21 and 22 of the datasheet.
    238 *
    239 * From the datasheet, the relevant equation when in regulation is:
    240 *
    241 *    [fCLK / (128 x (KTACH + 1))] = 2 x FanSpeed / KSCALE
    242 *
    243 * where:
    244 *
    245 *    fCLK is the oscillator frequency (either the 254kHz internal
    246 *         oscillator or the externally applied clock)
    247 *
    248 *    KTACH is the value in the speed register
    249 *
    250 *    FanSpeed is the speed of the fan in rps
    251 *
    252 *    KSCALE is the prescaler value (1, 2, 4, 8, or 16)
    253 *
    254 * When reading, we need to solve for FanSpeed. When writing, we need to
    255 * solve for KTACH.
    256 *
    257 * Note: this tachometer is completely separate from the tachometers
    258 * used to measure the fan speeds. Only one fan's speed (fan1) is
    259 * controlled.
    260 */
    261
    262static int max6650_set_target(struct max6650_data *data, unsigned long rpm)
    263{
    264	int kscale, ktach;
    265
    266	if (rpm == 0)
    267		return max6650_set_operating_mode(data, MAX6650_CFG_MODE_OFF);
    268
    269	rpm = clamp_val(rpm, FAN_RPM_MIN, FAN_RPM_MAX);
    270
    271	/*
    272	 * Divide the required speed by 60 to get from rpm to rps, then
    273	 * use the datasheet equation:
    274	 *
    275	 *     KTACH = [(fCLK x KSCALE) / (256 x FanSpeed)] - 1
    276	 */
    277
    278	kscale = DIV_FROM_REG(data->config);
    279	ktach = ((clock * kscale) / (256 * rpm / 60)) - 1;
    280	if (ktach < 0)
    281		ktach = 0;
    282	if (ktach > 255)
    283		ktach = 255;
    284	data->speed = ktach;
    285
    286	return i2c_smbus_write_byte_data(data->client, MAX6650_REG_SPEED,
    287					 data->speed);
    288}
    289
    290/*
    291 * Get gpio alarm status:
    292 * Possible values:
    293 * 0 = no alarm
    294 * 1 = alarm
    295 */
    296
    297static ssize_t alarm_show(struct device *dev,
    298			  struct device_attribute *devattr, char *buf)
    299{
    300	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
    301	struct max6650_data *data = max6650_update_device(dev);
    302	bool alarm;
    303
    304	if (IS_ERR(data))
    305		return PTR_ERR(data);
    306
    307	alarm = data->alarm & attr->index;
    308	if (alarm) {
    309		mutex_lock(&data->update_lock);
    310		data->alarm &= ~attr->index;
    311		data->valid = false;
    312		mutex_unlock(&data->update_lock);
    313	}
    314
    315	return sprintf(buf, "%d\n", alarm);
    316}
    317
    318static SENSOR_DEVICE_ATTR_RO(gpio1_alarm, alarm, MAX6650_ALRM_GPIO1);
    319static SENSOR_DEVICE_ATTR_RO(gpio2_alarm, alarm, MAX6650_ALRM_GPIO2);
    320
    321static umode_t max6650_attrs_visible(struct kobject *kobj, struct attribute *a,
    322				     int n)
    323{
    324	struct device *dev = kobj_to_dev(kobj);
    325	struct max6650_data *data = dev_get_drvdata(dev);
    326	struct device_attribute *devattr;
    327
    328	/*
    329	 * Hide the alarms that have not been enabled by the firmware
    330	 */
    331
    332	devattr = container_of(a, struct device_attribute, attr);
    333	if (devattr == &sensor_dev_attr_gpio1_alarm.dev_attr ||
    334	    devattr == &sensor_dev_attr_gpio2_alarm.dev_attr) {
    335		if (!(data->alarm_en & to_sensor_dev_attr(devattr)->index))
    336			return 0;
    337	}
    338
    339	return a->mode;
    340}
    341
    342static struct attribute *max6650_attrs[] = {
    343	&sensor_dev_attr_gpio1_alarm.dev_attr.attr,
    344	&sensor_dev_attr_gpio2_alarm.dev_attr.attr,
    345	NULL
    346};
    347
    348static const struct attribute_group max6650_group = {
    349	.attrs = max6650_attrs,
    350	.is_visible = max6650_attrs_visible,
    351};
    352
    353static const struct attribute_group *max6650_groups[] = {
    354	&max6650_group,
    355	NULL
    356};
    357
    358static int max6650_init_client(struct max6650_data *data,
    359			       struct i2c_client *client)
    360{
    361	struct device *dev = &client->dev;
    362	int reg;
    363	int err;
    364	u32 voltage;
    365	u32 prescale;
    366	u32 target_rpm;
    367
    368	if (of_property_read_u32(dev->of_node, "maxim,fan-microvolt",
    369				 &voltage))
    370		voltage = fan_voltage;
    371	else
    372		voltage /= 1000000; /* Microvolts to volts */
    373	if (of_property_read_u32(dev->of_node, "maxim,fan-prescale",
    374				 &prescale))
    375		prescale = prescaler;
    376
    377	reg = i2c_smbus_read_byte_data(client, MAX6650_REG_CONFIG);
    378	if (reg < 0) {
    379		dev_err(dev, "Error reading config register, aborting.\n");
    380		return reg;
    381	}
    382
    383	switch (voltage) {
    384	case 0:
    385		break;
    386	case 5:
    387		reg &= ~MAX6650_CFG_V12;
    388		break;
    389	case 12:
    390		reg |= MAX6650_CFG_V12;
    391		break;
    392	default:
    393		dev_err(dev, "illegal value for fan_voltage (%d)\n", voltage);
    394	}
    395
    396	switch (prescale) {
    397	case 0:
    398		break;
    399	case 1:
    400		reg &= ~MAX6650_CFG_PRESCALER_MASK;
    401		break;
    402	case 2:
    403		reg = (reg & ~MAX6650_CFG_PRESCALER_MASK)
    404			 | MAX6650_CFG_PRESCALER_2;
    405		break;
    406	case  4:
    407		reg = (reg & ~MAX6650_CFG_PRESCALER_MASK)
    408			 | MAX6650_CFG_PRESCALER_4;
    409		break;
    410	case  8:
    411		reg = (reg & ~MAX6650_CFG_PRESCALER_MASK)
    412			 | MAX6650_CFG_PRESCALER_8;
    413		break;
    414	case 16:
    415		reg = (reg & ~MAX6650_CFG_PRESCALER_MASK)
    416			 | MAX6650_CFG_PRESCALER_16;
    417		break;
    418	default:
    419		dev_err(dev, "illegal value for prescaler (%d)\n", prescale);
    420	}
    421
    422	dev_info(dev, "Fan voltage: %dV, prescaler: %d.\n",
    423		 (reg & MAX6650_CFG_V12) ? 12 : 5,
    424		 1 << (reg & MAX6650_CFG_PRESCALER_MASK));
    425
    426	err = i2c_smbus_write_byte_data(client, MAX6650_REG_CONFIG, reg);
    427	if (err) {
    428		dev_err(dev, "Config write error, aborting.\n");
    429		return err;
    430	}
    431	data->config = reg;
    432
    433	reg = i2c_smbus_read_byte_data(client, MAX6650_REG_SPEED);
    434	if (reg < 0) {
    435		dev_err(dev, "Failed to read speed register, aborting.\n");
    436		return reg;
    437	}
    438	data->speed = reg;
    439
    440	reg = i2c_smbus_read_byte_data(client, MAX6650_REG_DAC);
    441	if (reg < 0) {
    442		dev_err(dev, "Failed to read DAC register, aborting.\n");
    443		return reg;
    444	}
    445	data->dac = reg;
    446
    447	reg = i2c_smbus_read_byte_data(client, MAX6650_REG_COUNT);
    448	if (reg < 0) {
    449		dev_err(dev, "Failed to read count register, aborting.\n");
    450		return reg;
    451	}
    452	data->count = reg;
    453
    454	reg = i2c_smbus_read_byte_data(client, MAX6650_REG_ALARM_EN);
    455	if (reg < 0) {
    456		dev_err(dev, "Failed to read alarm configuration, aborting.\n");
    457		return reg;
    458	}
    459	data->alarm_en = reg;
    460
    461	if (!of_property_read_u32(client->dev.of_node, "maxim,fan-target-rpm",
    462				  &target_rpm)) {
    463		max6650_set_target(data, target_rpm);
    464		max6650_set_operating_mode(data, MAX6650_CFG_MODE_CLOSED_LOOP);
    465	}
    466
    467	return 0;
    468}
    469
    470static int max6650_get_max_state(struct thermal_cooling_device *cdev,
    471				 unsigned long *state)
    472{
    473	*state = 255;
    474
    475	return 0;
    476}
    477
    478static int max6650_get_cur_state(struct thermal_cooling_device *cdev,
    479				 unsigned long *state)
    480{
    481	struct max6650_data *data = cdev->devdata;
    482
    483	*state = data->cooling_dev_state;
    484
    485	return 0;
    486}
    487
    488static int max6650_set_cur_state(struct thermal_cooling_device *cdev,
    489				 unsigned long state)
    490{
    491	struct max6650_data *data = cdev->devdata;
    492	struct i2c_client *client = data->client;
    493	int err;
    494
    495	state = clamp_val(state, 0, 255);
    496
    497	mutex_lock(&data->update_lock);
    498
    499	data->dac = pwm_to_dac(state, data->config & MAX6650_CFG_V12);
    500	err = i2c_smbus_write_byte_data(client, MAX6650_REG_DAC, data->dac);
    501	if (!err) {
    502		max6650_set_operating_mode(data, state ?
    503					   MAX6650_CFG_MODE_OPEN_LOOP :
    504					   MAX6650_CFG_MODE_OFF);
    505		data->cooling_dev_state = state;
    506	}
    507
    508	mutex_unlock(&data->update_lock);
    509
    510	return err;
    511}
    512
    513static const struct thermal_cooling_device_ops max6650_cooling_ops = {
    514	.get_max_state = max6650_get_max_state,
    515	.get_cur_state = max6650_get_cur_state,
    516	.set_cur_state = max6650_set_cur_state,
    517};
    518
    519static int max6650_read(struct device *dev, enum hwmon_sensor_types type,
    520			u32 attr, int channel, long *val)
    521{
    522	struct max6650_data *data = max6650_update_device(dev);
    523	int mode;
    524
    525	if (IS_ERR(data))
    526		return PTR_ERR(data);
    527
    528	switch (type) {
    529	case hwmon_pwm:
    530		switch (attr) {
    531		case hwmon_pwm_input:
    532			*val = dac_to_pwm(data->dac,
    533					  data->config & MAX6650_CFG_V12);
    534			break;
    535		case hwmon_pwm_enable:
    536			/*
    537			 * Possible values:
    538			 * 0 = Fan always on
    539			 * 1 = Open loop, Voltage is set according to speed,
    540			 *     not regulated.
    541			 * 2 = Closed loop, RPM for all fans regulated by fan1
    542			 *     tachometer
    543			 * 3 = Fan off
    544			 */
    545			mode = (data->config & MAX6650_CFG_MODE_MASK) >> 4;
    546			*val = (4 - mode) & 3; /* {0 1 2 3} -> {0 3 2 1} */
    547			break;
    548		default:
    549			return -EOPNOTSUPP;
    550		}
    551		break;
    552	case hwmon_fan:
    553		switch (attr) {
    554		case hwmon_fan_input:
    555			/*
    556			 * Calculation details:
    557			 *
    558			 * Each tachometer counts over an interval given by the
    559			 * "count" register (0.25, 0.5, 1 or 2 seconds).
    560			 * The driver assumes that the fans produce two pulses
    561			 * per revolution (this seems to be the most common).
    562			 */
    563			*val = DIV_ROUND_CLOSEST(data->tach[channel] * 120,
    564						 DIV_FROM_REG(data->count));
    565			break;
    566		case hwmon_fan_div:
    567			*val = DIV_FROM_REG(data->count);
    568			break;
    569		case hwmon_fan_target:
    570			/*
    571			 * Use the datasheet equation:
    572			 *    FanSpeed = KSCALE x fCLK / [256 x (KTACH + 1)]
    573			 * then multiply by 60 to give rpm.
    574			 */
    575			*val = 60 * DIV_FROM_REG(data->config) * clock /
    576				(256 * (data->speed + 1));
    577			break;
    578		case hwmon_fan_min_alarm:
    579			*val = !!(data->alarm & MAX6650_ALRM_MIN);
    580			data->alarm &= ~MAX6650_ALRM_MIN;
    581			data->valid = false;
    582			break;
    583		case hwmon_fan_max_alarm:
    584			*val = !!(data->alarm & MAX6650_ALRM_MAX);
    585			data->alarm &= ~MAX6650_ALRM_MAX;
    586			data->valid = false;
    587			break;
    588		case hwmon_fan_fault:
    589			*val = !!(data->alarm & MAX6650_ALRM_TACH);
    590			data->alarm &= ~MAX6650_ALRM_TACH;
    591			data->valid = false;
    592			break;
    593		default:
    594			return -EOPNOTSUPP;
    595		}
    596		break;
    597	default:
    598		return -EOPNOTSUPP;
    599	}
    600	return 0;
    601}
    602
    603static const u8 max6650_pwm_modes[] = {
    604	MAX6650_CFG_MODE_ON,
    605	MAX6650_CFG_MODE_OPEN_LOOP,
    606	MAX6650_CFG_MODE_CLOSED_LOOP,
    607	MAX6650_CFG_MODE_OFF,
    608};
    609
    610static int max6650_write(struct device *dev, enum hwmon_sensor_types type,
    611			 u32 attr, int channel, long val)
    612{
    613	struct max6650_data *data = dev_get_drvdata(dev);
    614	int ret = 0;
    615	u8 reg;
    616
    617	mutex_lock(&data->update_lock);
    618
    619	switch (type) {
    620	case hwmon_pwm:
    621		switch (attr) {
    622		case hwmon_pwm_input:
    623			reg = pwm_to_dac(clamp_val(val, 0, 255),
    624					 data->config & MAX6650_CFG_V12);
    625			ret = i2c_smbus_write_byte_data(data->client,
    626							MAX6650_REG_DAC, reg);
    627			if (ret)
    628				break;
    629			data->dac = reg;
    630			break;
    631		case hwmon_pwm_enable:
    632			if (val < 0 || val >= ARRAY_SIZE(max6650_pwm_modes)) {
    633				ret = -EINVAL;
    634				break;
    635			}
    636			ret = max6650_set_operating_mode(data,
    637						max6650_pwm_modes[val]);
    638			break;
    639		default:
    640			ret = -EOPNOTSUPP;
    641			break;
    642		}
    643		break;
    644	case hwmon_fan:
    645		switch (attr) {
    646		case hwmon_fan_div:
    647			switch (val) {
    648			case 1:
    649				reg = 0;
    650				break;
    651			case 2:
    652				reg = 1;
    653				break;
    654			case 4:
    655				reg = 2;
    656				break;
    657			case 8:
    658				reg = 3;
    659				break;
    660			default:
    661				ret = -EINVAL;
    662				goto error;
    663			}
    664			ret = i2c_smbus_write_byte_data(data->client,
    665							MAX6650_REG_COUNT, reg);
    666			if (ret)
    667				break;
    668			data->count = reg;
    669			break;
    670		case hwmon_fan_target:
    671			if (val < 0) {
    672				ret = -EINVAL;
    673				break;
    674			}
    675			ret = max6650_set_target(data, val);
    676			break;
    677		default:
    678			ret = -EOPNOTSUPP;
    679			break;
    680		}
    681		break;
    682	default:
    683		ret = -EOPNOTSUPP;
    684		break;
    685	}
    686
    687error:
    688	mutex_unlock(&data->update_lock);
    689	return ret;
    690}
    691
    692static umode_t max6650_is_visible(const void *_data,
    693				  enum hwmon_sensor_types type, u32 attr,
    694				  int channel)
    695{
    696	const struct max6650_data *data = _data;
    697
    698	if (channel && (channel >= data->nr_fans || type != hwmon_fan))
    699		return 0;
    700
    701	switch (type) {
    702	case hwmon_fan:
    703		switch (attr) {
    704		case hwmon_fan_input:
    705			return 0444;
    706		case hwmon_fan_target:
    707		case hwmon_fan_div:
    708			return 0644;
    709		case hwmon_fan_min_alarm:
    710			if (data->alarm_en & MAX6650_ALRM_MIN)
    711				return 0444;
    712			break;
    713		case hwmon_fan_max_alarm:
    714			if (data->alarm_en & MAX6650_ALRM_MAX)
    715				return 0444;
    716			break;
    717		case hwmon_fan_fault:
    718			if (data->alarm_en & MAX6650_ALRM_TACH)
    719				return 0444;
    720			break;
    721		default:
    722			break;
    723		}
    724		break;
    725	case hwmon_pwm:
    726		switch (attr) {
    727		case hwmon_pwm_input:
    728		case hwmon_pwm_enable:
    729			return 0644;
    730		default:
    731			break;
    732		}
    733		break;
    734	default:
    735		break;
    736	}
    737	return 0;
    738}
    739
    740static const struct hwmon_channel_info *max6650_info[] = {
    741	HWMON_CHANNEL_INFO(fan, HWMON_F_INPUT | HWMON_F_TARGET | HWMON_F_DIV |
    742			   HWMON_F_MIN_ALARM | HWMON_F_MAX_ALARM |
    743			   HWMON_F_FAULT,
    744			   HWMON_F_INPUT, HWMON_F_INPUT, HWMON_F_INPUT),
    745	HWMON_CHANNEL_INFO(pwm, HWMON_PWM_INPUT | HWMON_PWM_ENABLE),
    746	NULL
    747};
    748
    749static const struct hwmon_ops max6650_hwmon_ops = {
    750	.read = max6650_read,
    751	.write = max6650_write,
    752	.is_visible = max6650_is_visible,
    753};
    754
    755static const struct hwmon_chip_info max6650_chip_info = {
    756	.ops = &max6650_hwmon_ops,
    757	.info = max6650_info,
    758};
    759
    760static const struct i2c_device_id max6650_id[];
    761
    762static int max6650_probe(struct i2c_client *client)
    763{
    764	struct thermal_cooling_device *cooling_dev;
    765	struct device *dev = &client->dev;
    766	const struct of_device_id *of_id =
    767		of_match_device(of_match_ptr(max6650_dt_match), dev);
    768	struct max6650_data *data;
    769	struct device *hwmon_dev;
    770	int err;
    771
    772	data = devm_kzalloc(dev, sizeof(struct max6650_data), GFP_KERNEL);
    773	if (!data)
    774		return -ENOMEM;
    775
    776	data->client = client;
    777	i2c_set_clientdata(client, data);
    778	mutex_init(&data->update_lock);
    779	data->nr_fans = of_id ? (int)(uintptr_t)of_id->data :
    780				i2c_match_id(max6650_id, client)->driver_data;
    781
    782	/*
    783	 * Initialize the max6650 chip
    784	 */
    785	err = max6650_init_client(data, client);
    786	if (err)
    787		return err;
    788
    789	hwmon_dev = devm_hwmon_device_register_with_info(dev,
    790							 client->name, data,
    791							 &max6650_chip_info,
    792							 max6650_groups);
    793	err = PTR_ERR_OR_ZERO(hwmon_dev);
    794	if (err)
    795		return err;
    796
    797	if (IS_ENABLED(CONFIG_THERMAL)) {
    798		cooling_dev = devm_thermal_of_cooling_device_register(dev,
    799						dev->of_node, client->name,
    800						data, &max6650_cooling_ops);
    801		if (IS_ERR(cooling_dev)) {
    802			dev_warn(dev, "thermal cooling device register failed: %ld\n",
    803				 PTR_ERR(cooling_dev));
    804		}
    805	}
    806
    807	return 0;
    808}
    809
    810static const struct i2c_device_id max6650_id[] = {
    811	{ "max6650", 1 },
    812	{ "max6651", 4 },
    813	{ }
    814};
    815MODULE_DEVICE_TABLE(i2c, max6650_id);
    816
    817static struct i2c_driver max6650_driver = {
    818	.driver = {
    819		.name	= "max6650",
    820		.of_match_table = of_match_ptr(max6650_dt_match),
    821	},
    822	.probe_new	= max6650_probe,
    823	.id_table	= max6650_id,
    824};
    825
    826module_i2c_driver(max6650_driver);
    827
    828MODULE_AUTHOR("Hans J. Koch");
    829MODULE_DESCRIPTION("MAX6650 sensor driver");
    830MODULE_LICENSE("GPL");