xref: /openbmc/linux/drivers/hwmon/max6650.c (revision 1975d167)
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 */
37 static int fan_voltage;
38 /* prescaler: Possible values are 1, 2, 4, 8, 16 or 0 for don't change */
39 static int prescaler;
40 /* clock: The clock frequency of the chip (max6651 can be clocked externally) */
41 static int clock = 254000;
42 
43 module_param(fan_voltage, int, 0444);
44 module_param(prescaler, int, 0444);
45 module_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 
102 struct 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 
120 static const u8 tach_reg[] = {
121 	MAX6650_REG_TACH0,
122 	MAX6650_REG_TACH1,
123 	MAX6650_REG_TACH2,
124 	MAX6650_REG_TACH3,
125 };
126 
127 static 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 };
138 MODULE_DEVICE_TABLE(of, max6650_dt_match);
139 
dac_to_pwm(int dac,bool v12)140 static 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 
pwm_to_dac(unsigned int pwm,bool v12)149 static 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 
max6650_update_device(struct device * dev)156 static 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 
190 error:
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  */
max6650_set_operating_mode(struct max6650_data * data,u8 mode)201 static 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 
max6650_set_target(struct max6650_data * data,unsigned long rpm)262 static 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 
alarm_show(struct device * dev,struct device_attribute * devattr,char * buf)297 static 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 
318 static SENSOR_DEVICE_ATTR_RO(gpio1_alarm, alarm, MAX6650_ALRM_GPIO1);
319 static SENSOR_DEVICE_ATTR_RO(gpio2_alarm, alarm, MAX6650_ALRM_GPIO2);
320 
max6650_attrs_visible(struct kobject * kobj,struct attribute * a,int n)321 static 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 
342 static 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 
348 static const struct attribute_group max6650_group = {
349 	.attrs = max6650_attrs,
350 	.is_visible = max6650_attrs_visible,
351 };
352 
353 static const struct attribute_group *max6650_groups[] = {
354 	&max6650_group,
355 	NULL
356 };
357 
max6650_init_client(struct max6650_data * data,struct i2c_client * client)358 static 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 
max6650_get_max_state(struct thermal_cooling_device * cdev,unsigned long * state)470 static int max6650_get_max_state(struct thermal_cooling_device *cdev,
471 				 unsigned long *state)
472 {
473 	*state = 255;
474 
475 	return 0;
476 }
477 
max6650_get_cur_state(struct thermal_cooling_device * cdev,unsigned long * state)478 static 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 
max6650_set_cur_state(struct thermal_cooling_device * cdev,unsigned long state)488 static 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 
513 static 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 
max6650_read(struct device * dev,enum hwmon_sensor_types type,u32 attr,int channel,long * val)519 static 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 
603 static 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 
max6650_write(struct device * dev,enum hwmon_sensor_types type,u32 attr,int channel,long val)610 static 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 
687 error:
688 	mutex_unlock(&data->update_lock);
689 	return ret;
690 }
691 
max6650_is_visible(const void * _data,enum hwmon_sensor_types type,u32 attr,int channel)692 static 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 
740 static const struct hwmon_channel_info * const 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 
749 static const struct hwmon_ops max6650_hwmon_ops = {
750 	.read = max6650_read,
751 	.write = max6650_write,
752 	.is_visible = max6650_is_visible,
753 };
754 
755 static const struct hwmon_chip_info max6650_chip_info = {
756 	.ops = &max6650_hwmon_ops,
757 	.info = max6650_info,
758 };
759 
760 static const struct i2c_device_id max6650_id[];
761 
max6650_probe(struct i2c_client * client)762 static 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 
810 static const struct i2c_device_id max6650_id[] = {
811 	{ "max6650", 1 },
812 	{ "max6651", 4 },
813 	{ }
814 };
815 MODULE_DEVICE_TABLE(i2c, max6650_id);
816 
817 static struct i2c_driver max6650_driver = {
818 	.driver = {
819 		.name	= "max6650",
820 		.of_match_table = of_match_ptr(max6650_dt_match),
821 	},
822 	.probe		= max6650_probe,
823 	.id_table	= max6650_id,
824 };
825 
826 module_i2c_driver(max6650_driver);
827 
828 MODULE_AUTHOR("Hans J. Koch");
829 MODULE_DESCRIPTION("MAX6650 sensor driver");
830 MODULE_LICENSE("GPL");
831