Linux Audio

Check our new training course

Yocto / OpenEmbedded training

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