hwmon: (max6650) Declare valid as boolean
[linux-2.6-microblaze.git] / drivers / hwmon / max6650.c
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         const struct attribute_group *groups[3];
105         struct mutex update_lock;
106         int nr_fans;
107         bool valid; /* false until following fields are valid */
108         unsigned long last_updated; /* in jiffies */
109
110         /* register values */
111         u8 speed;
112         u8 config;
113         u8 tach[4];
114         u8 count;
115         u8 dac;
116         u8 alarm;
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
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
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
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 i;
161
162         mutex_lock(&data->update_lock);
163
164         if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
165                 data->speed = i2c_smbus_read_byte_data(client,
166                                                        MAX6650_REG_SPEED);
167                 data->config = i2c_smbus_read_byte_data(client,
168                                                         MAX6650_REG_CONFIG);
169                 for (i = 0; i < data->nr_fans; i++) {
170                         data->tach[i] = i2c_smbus_read_byte_data(client,
171                                                                  tach_reg[i]);
172                 }
173                 data->count = i2c_smbus_read_byte_data(client,
174                                                         MAX6650_REG_COUNT);
175                 data->dac = i2c_smbus_read_byte_data(client, MAX6650_REG_DAC);
176
177                 /*
178                  * Alarms are cleared on read in case the condition that
179                  * caused the alarm is removed. Keep the value latched here
180                  * for providing the register through different alarm files.
181                  */
182                 data->alarm |= i2c_smbus_read_byte_data(client,
183                                                         MAX6650_REG_ALARM);
184
185                 data->last_updated = jiffies;
186                 data->valid = true;
187         }
188
189         mutex_unlock(&data->update_lock);
190
191         return data;
192 }
193
194 /*
195  * Change the operating mode of the chip (if needed).
196  * mode is one of the MAX6650_CFG_MODE_* values.
197  */
198 static int max6650_set_operating_mode(struct max6650_data *data, u8 mode)
199 {
200         int result;
201         u8 config = data->config;
202
203         if (mode == (config & MAX6650_CFG_MODE_MASK))
204                 return 0;
205
206         config = (config & ~MAX6650_CFG_MODE_MASK) | mode;
207
208         result = i2c_smbus_write_byte_data(data->client, MAX6650_REG_CONFIG,
209                                            config);
210         if (result < 0)
211                 return result;
212
213         data->config = config;
214
215         return 0;
216 }
217
218 static ssize_t fan_show(struct device *dev, struct device_attribute *devattr,
219                         char *buf)
220 {
221         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
222         struct max6650_data *data = max6650_update_device(dev);
223         int rpm;
224
225         /*
226          * Calculation details:
227          *
228          * Each tachometer counts over an interval given by the "count"
229          * register (0.25, 0.5, 1 or 2 seconds). This module assumes
230          * that the fans produce two pulses per revolution (this seems
231          * to be the most common).
232          */
233
234         rpm = ((data->tach[attr->index] * 120) / DIV_FROM_REG(data->count));
235         return sprintf(buf, "%d\n", rpm);
236 }
237
238 /*
239  * Set the fan speed to the specified RPM (or read back the RPM setting).
240  * This works in closed loop mode only. Use pwm1 for open loop speed setting.
241  *
242  * The MAX6650/1 will automatically control fan speed when in closed loop
243  * mode.
244  *
245  * Assumptions:
246  *
247  * 1) The MAX6650/1 internal 254kHz clock frequency is set correctly. Use
248  *    the clock module parameter if you need to fine tune this.
249  *
250  * 2) The prescaler (low three bits of the config register) has already
251  *    been set to an appropriate value. Use the prescaler module parameter
252  *    if your BIOS doesn't initialize the chip properly.
253  *
254  * The relevant equations are given on pages 21 and 22 of the datasheet.
255  *
256  * From the datasheet, the relevant equation when in regulation is:
257  *
258  *    [fCLK / (128 x (KTACH + 1))] = 2 x FanSpeed / KSCALE
259  *
260  * where:
261  *
262  *    fCLK is the oscillator frequency (either the 254kHz internal
263  *         oscillator or the externally applied clock)
264  *
265  *    KTACH is the value in the speed register
266  *
267  *    FanSpeed is the speed of the fan in rps
268  *
269  *    KSCALE is the prescaler value (1, 2, 4, 8, or 16)
270  *
271  * When reading, we need to solve for FanSpeed. When writing, we need to
272  * solve for KTACH.
273  *
274  * Note: this tachometer is completely separate from the tachometers
275  * used to measure the fan speeds. Only one fan's speed (fan1) is
276  * controlled.
277  */
278
279 static ssize_t fan1_target_show(struct device *dev,
280                                 struct device_attribute *devattr, char *buf)
281 {
282         struct max6650_data *data = max6650_update_device(dev);
283         int kscale, ktach, rpm;
284
285         /*
286          * Use the datasheet equation:
287          *
288          *    FanSpeed = KSCALE x fCLK / [256 x (KTACH + 1)]
289          *
290          * then multiply by 60 to give rpm.
291          */
292
293         kscale = DIV_FROM_REG(data->config);
294         ktach = data->speed;
295         rpm = 60 * kscale * clock / (256 * (ktach + 1));
296         return sprintf(buf, "%d\n", rpm);
297 }
298
299 static int max6650_set_target(struct max6650_data *data, unsigned long rpm)
300 {
301         int kscale, ktach;
302
303         if (rpm == 0)
304                 return max6650_set_operating_mode(data, MAX6650_CFG_MODE_OFF);
305
306         rpm = clamp_val(rpm, FAN_RPM_MIN, FAN_RPM_MAX);
307
308         /*
309          * Divide the required speed by 60 to get from rpm to rps, then
310          * use the datasheet equation:
311          *
312          *     KTACH = [(fCLK x KSCALE) / (256 x FanSpeed)] - 1
313          */
314
315         kscale = DIV_FROM_REG(data->config);
316         ktach = ((clock * kscale) / (256 * rpm / 60)) - 1;
317         if (ktach < 0)
318                 ktach = 0;
319         if (ktach > 255)
320                 ktach = 255;
321         data->speed = ktach;
322
323         return i2c_smbus_write_byte_data(data->client, MAX6650_REG_SPEED,
324                                          data->speed);
325 }
326
327 static ssize_t fan1_target_store(struct device *dev,
328                                  struct device_attribute *devattr,
329                                  const char *buf, size_t count)
330 {
331         struct max6650_data *data = dev_get_drvdata(dev);
332         unsigned long rpm;
333         int err;
334
335         err = kstrtoul(buf, 10, &rpm);
336         if (err)
337                 return err;
338
339         mutex_lock(&data->update_lock);
340
341         err = max6650_set_target(data, rpm);
342
343         mutex_unlock(&data->update_lock);
344
345         if (err < 0)
346                 return err;
347
348         return count;
349 }
350
351 /*
352  * Get/set the fan speed in open loop mode using pwm1 sysfs file.
353  * Speed is given as a relative value from 0 to 255, where 255 is maximum
354  * speed. Note that this is done by writing directly to the chip's DAC,
355  * it won't change the closed loop speed set by fan1_target.
356  * Also note that due to rounding errors it is possible that you don't read
357  * back exactly the value you have set.
358  */
359
360 static ssize_t pwm1_show(struct device *dev, struct device_attribute *devattr,
361                          char *buf)
362 {
363         struct max6650_data *data = max6650_update_device(dev);
364
365         return sprintf(buf, "%d\n", dac_to_pwm(data->dac,
366                                                data->config & MAX6650_CFG_V12));
367 }
368
369 static ssize_t pwm1_store(struct device *dev,
370                           struct device_attribute *devattr, const char *buf,
371                           size_t count)
372 {
373         struct max6650_data *data = dev_get_drvdata(dev);
374         struct i2c_client *client = data->client;
375         unsigned long pwm;
376         int err;
377         u8 dac;
378
379         err = kstrtoul(buf, 10, &pwm);
380         if (err)
381                 return err;
382
383         pwm = clamp_val(pwm, 0, 255);
384
385         mutex_lock(&data->update_lock);
386         dac = pwm_to_dac(pwm, data->config & MAX6650_CFG_V12);
387         err = i2c_smbus_write_byte_data(client, MAX6650_REG_DAC, dac);
388         if (!err)
389                 data->dac = dac;
390         mutex_unlock(&data->update_lock);
391
392         return err < 0 ? err : count;
393 }
394
395 /*
396  * Get/Set controller mode:
397  * Possible values:
398  * 0 = Fan always on
399  * 1 = Open loop, Voltage is set according to speed, not regulated.
400  * 2 = Closed loop, RPM for all fans regulated by fan1 tachometer
401  * 3 = Fan off
402  */
403 static ssize_t pwm1_enable_show(struct device *dev,
404                                 struct device_attribute *devattr, char *buf)
405 {
406         struct max6650_data *data = max6650_update_device(dev);
407         int mode = (data->config & MAX6650_CFG_MODE_MASK) >> 4;
408         int sysfs_modes[4] = {0, 3, 2, 1};
409
410         return sprintf(buf, "%d\n", sysfs_modes[mode]);
411 }
412
413 static ssize_t pwm1_enable_store(struct device *dev,
414                                  struct device_attribute *devattr,
415                                  const char *buf, size_t count)
416 {
417         struct max6650_data *data = dev_get_drvdata(dev);
418         unsigned long mode;
419         int err;
420         const u8 max6650_modes[] = {
421                 MAX6650_CFG_MODE_ON,
422                 MAX6650_CFG_MODE_OPEN_LOOP,
423                 MAX6650_CFG_MODE_CLOSED_LOOP,
424                 MAX6650_CFG_MODE_OFF,
425                 };
426
427         err = kstrtoul(buf, 10, &mode);
428         if (err)
429                 return err;
430
431         if (mode >= ARRAY_SIZE(max6650_modes))
432                 return -EINVAL;
433
434         mutex_lock(&data->update_lock);
435
436         max6650_set_operating_mode(data, max6650_modes[mode]);
437
438         mutex_unlock(&data->update_lock);
439
440         return count;
441 }
442
443 /*
444  * Read/write functions for fan1_div sysfs file. The MAX6650 has no such
445  * divider. We handle this by converting between divider and counttime:
446  *
447  * (counttime == k) <==> (divider == 2^k), k = 0, 1, 2, or 3
448  *
449  * Lower values of k allow to connect a faster fan without the risk of
450  * counter overflow. The price is lower resolution. You can also set counttime
451  * using the module parameter. Note that the module parameter "prescaler" also
452  * influences the behaviour. Unfortunately, there's no sysfs attribute
453  * defined for that. See the data sheet for details.
454  */
455
456 static ssize_t fan1_div_show(struct device *dev,
457                              struct device_attribute *devattr, char *buf)
458 {
459         struct max6650_data *data = max6650_update_device(dev);
460
461         return sprintf(buf, "%d\n", DIV_FROM_REG(data->count));
462 }
463
464 static ssize_t fan1_div_store(struct device *dev,
465                               struct device_attribute *devattr,
466                               const char *buf, size_t count)
467 {
468         struct max6650_data *data = dev_get_drvdata(dev);
469         struct i2c_client *client = data->client;
470         unsigned long div;
471         int err;
472
473         err = kstrtoul(buf, 10, &div);
474         if (err)
475                 return err;
476
477         mutex_lock(&data->update_lock);
478         switch (div) {
479         case 1:
480                 data->count = 0;
481                 break;
482         case 2:
483                 data->count = 1;
484                 break;
485         case 4:
486                 data->count = 2;
487                 break;
488         case 8:
489                 data->count = 3;
490                 break;
491         default:
492                 mutex_unlock(&data->update_lock);
493                 return -EINVAL;
494         }
495
496         i2c_smbus_write_byte_data(client, MAX6650_REG_COUNT, data->count);
497         mutex_unlock(&data->update_lock);
498
499         return count;
500 }
501
502 /*
503  * Get alarm stati:
504  * Possible values:
505  * 0 = no alarm
506  * 1 = alarm
507  */
508
509 static ssize_t alarm_show(struct device *dev,
510                           struct device_attribute *devattr, char *buf)
511 {
512         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
513         struct max6650_data *data = max6650_update_device(dev);
514         struct i2c_client *client = data->client;
515         int alarm = 0;
516
517         if (data->alarm & attr->index) {
518                 mutex_lock(&data->update_lock);
519                 alarm = 1;
520                 data->alarm &= ~attr->index;
521                 data->alarm |= i2c_smbus_read_byte_data(client,
522                                                         MAX6650_REG_ALARM);
523                 mutex_unlock(&data->update_lock);
524         }
525
526         return sprintf(buf, "%d\n", alarm);
527 }
528
529 static SENSOR_DEVICE_ATTR_RO(fan1_input, fan, 0);
530 static SENSOR_DEVICE_ATTR_RO(fan2_input, fan, 1);
531 static SENSOR_DEVICE_ATTR_RO(fan3_input, fan, 2);
532 static SENSOR_DEVICE_ATTR_RO(fan4_input, fan, 3);
533 static DEVICE_ATTR_RW(fan1_target);
534 static DEVICE_ATTR_RW(fan1_div);
535 static DEVICE_ATTR_RW(pwm1_enable);
536 static DEVICE_ATTR_RW(pwm1);
537 static SENSOR_DEVICE_ATTR_RO(fan1_max_alarm, alarm, MAX6650_ALRM_MAX);
538 static SENSOR_DEVICE_ATTR_RO(fan1_min_alarm, alarm, MAX6650_ALRM_MIN);
539 static SENSOR_DEVICE_ATTR_RO(fan1_fault, alarm, MAX6650_ALRM_TACH);
540 static SENSOR_DEVICE_ATTR_RO(gpio1_alarm, alarm, MAX6650_ALRM_GPIO1);
541 static SENSOR_DEVICE_ATTR_RO(gpio2_alarm, alarm, MAX6650_ALRM_GPIO2);
542
543 static umode_t max6650_attrs_visible(struct kobject *kobj, struct attribute *a,
544                                     int n)
545 {
546         struct device *dev = container_of(kobj, struct device, kobj);
547         struct max6650_data *data = dev_get_drvdata(dev);
548         struct i2c_client *client = data->client;
549         u8 alarm_en = i2c_smbus_read_byte_data(client, MAX6650_REG_ALARM_EN);
550         struct device_attribute *devattr;
551
552         /*
553          * Hide the alarms that have not been enabled by the firmware
554          */
555
556         devattr = container_of(a, struct device_attribute, attr);
557         if (devattr == &sensor_dev_attr_fan1_max_alarm.dev_attr
558          || devattr == &sensor_dev_attr_fan1_min_alarm.dev_attr
559          || devattr == &sensor_dev_attr_fan1_fault.dev_attr
560          || devattr == &sensor_dev_attr_gpio1_alarm.dev_attr
561          || devattr == &sensor_dev_attr_gpio2_alarm.dev_attr) {
562                 if (!(alarm_en & to_sensor_dev_attr(devattr)->index))
563                         return 0;
564         }
565
566         return a->mode;
567 }
568
569 static struct attribute *max6650_attrs[] = {
570         &sensor_dev_attr_fan1_input.dev_attr.attr,
571         &dev_attr_fan1_target.attr,
572         &dev_attr_fan1_div.attr,
573         &dev_attr_pwm1_enable.attr,
574         &dev_attr_pwm1.attr,
575         &sensor_dev_attr_fan1_max_alarm.dev_attr.attr,
576         &sensor_dev_attr_fan1_min_alarm.dev_attr.attr,
577         &sensor_dev_attr_fan1_fault.dev_attr.attr,
578         &sensor_dev_attr_gpio1_alarm.dev_attr.attr,
579         &sensor_dev_attr_gpio2_alarm.dev_attr.attr,
580         NULL
581 };
582
583 static const struct attribute_group max6650_group = {
584         .attrs = max6650_attrs,
585         .is_visible = max6650_attrs_visible,
586 };
587
588 static struct attribute *max6651_attrs[] = {
589         &sensor_dev_attr_fan2_input.dev_attr.attr,
590         &sensor_dev_attr_fan3_input.dev_attr.attr,
591         &sensor_dev_attr_fan4_input.dev_attr.attr,
592         NULL
593 };
594
595 static const struct attribute_group max6651_group = {
596         .attrs = max6651_attrs,
597 };
598
599 /*
600  * Real code
601  */
602
603 static int max6650_init_client(struct max6650_data *data,
604                                struct i2c_client *client)
605 {
606         struct device *dev = &client->dev;
607         int reg;
608         int err;
609         u32 voltage;
610         u32 prescale;
611         u32 target_rpm;
612
613         if (of_property_read_u32(dev->of_node, "maxim,fan-microvolt",
614                                  &voltage))
615                 voltage = fan_voltage;
616         else
617                 voltage /= 1000000; /* Microvolts to volts */
618         if (of_property_read_u32(dev->of_node, "maxim,fan-prescale",
619                                  &prescale))
620                 prescale = prescaler;
621
622         reg = i2c_smbus_read_byte_data(client, MAX6650_REG_CONFIG);
623         if (reg < 0) {
624                 dev_err(dev, "Error reading config register, aborting.\n");
625                 return reg;
626         }
627
628         switch (voltage) {
629         case 0:
630                 break;
631         case 5:
632                 reg &= ~MAX6650_CFG_V12;
633                 break;
634         case 12:
635                 reg |= MAX6650_CFG_V12;
636                 break;
637         default:
638                 dev_err(dev, "illegal value for fan_voltage (%d)\n", voltage);
639         }
640
641         switch (prescale) {
642         case 0:
643                 break;
644         case 1:
645                 reg &= ~MAX6650_CFG_PRESCALER_MASK;
646                 break;
647         case 2:
648                 reg = (reg & ~MAX6650_CFG_PRESCALER_MASK)
649                          | MAX6650_CFG_PRESCALER_2;
650                 break;
651         case  4:
652                 reg = (reg & ~MAX6650_CFG_PRESCALER_MASK)
653                          | MAX6650_CFG_PRESCALER_4;
654                 break;
655         case  8:
656                 reg = (reg & ~MAX6650_CFG_PRESCALER_MASK)
657                          | MAX6650_CFG_PRESCALER_8;
658                 break;
659         case 16:
660                 reg = (reg & ~MAX6650_CFG_PRESCALER_MASK)
661                          | MAX6650_CFG_PRESCALER_16;
662                 break;
663         default:
664                 dev_err(dev, "illegal value for prescaler (%d)\n", prescale);
665         }
666
667         dev_info(dev, "Fan voltage: %dV, prescaler: %d.\n",
668                  (reg & MAX6650_CFG_V12) ? 12 : 5,
669                  1 << (reg & MAX6650_CFG_PRESCALER_MASK));
670
671         err = i2c_smbus_write_byte_data(client, MAX6650_REG_CONFIG, reg);
672         if (err) {
673                 dev_err(dev, "Config write error, aborting.\n");
674                 return err;
675         }
676
677         data->config = reg;
678         reg = i2c_smbus_read_byte_data(client, MAX6650_REG_COUNT);
679         if (reg < 0) {
680                 dev_err(dev, "Failed to read count register, aborting.\n");
681                 return reg;
682         }
683         data->count = reg;
684
685         if (!of_property_read_u32(client->dev.of_node, "maxim,fan-target-rpm",
686                                   &target_rpm)) {
687                 max6650_set_target(data, target_rpm);
688                 max6650_set_operating_mode(data, MAX6650_CFG_MODE_CLOSED_LOOP);
689         }
690
691         return 0;
692 }
693
694 #if IS_ENABLED(CONFIG_THERMAL)
695
696 static int max6650_get_max_state(struct thermal_cooling_device *cdev,
697                                  unsigned long *state)
698 {
699         *state = 255;
700
701         return 0;
702 }
703
704 static int max6650_get_cur_state(struct thermal_cooling_device *cdev,
705                                  unsigned long *state)
706 {
707         struct max6650_data *data = cdev->devdata;
708
709         *state = data->cooling_dev_state;
710
711         return 0;
712 }
713
714 static int max6650_set_cur_state(struct thermal_cooling_device *cdev,
715                                  unsigned long state)
716 {
717         struct max6650_data *data = cdev->devdata;
718         struct i2c_client *client = data->client;
719         int err;
720
721         state = clamp_val(state, 0, 255);
722
723         mutex_lock(&data->update_lock);
724
725         data->dac = pwm_to_dac(state, data->config & MAX6650_CFG_V12);
726         err = i2c_smbus_write_byte_data(client, MAX6650_REG_DAC, data->dac);
727
728         if (!err) {
729                 max6650_set_operating_mode(data, state ?
730                                                    MAX6650_CFG_MODE_OPEN_LOOP :
731                                                    MAX6650_CFG_MODE_OFF);
732                 data->cooling_dev_state = state;
733         }
734
735         mutex_unlock(&data->update_lock);
736
737         return err;
738 }
739
740 static const struct thermal_cooling_device_ops max6650_cooling_ops = {
741         .get_max_state = max6650_get_max_state,
742         .get_cur_state = max6650_get_cur_state,
743         .set_cur_state = max6650_set_cur_state,
744 };
745 #endif
746
747 static int max6650_probe(struct i2c_client *client,
748                          const struct i2c_device_id *id)
749 {
750         struct thermal_cooling_device *cooling_dev;
751         struct device *dev = &client->dev;
752         const struct of_device_id *of_id =
753                 of_match_device(of_match_ptr(max6650_dt_match), dev);
754         struct max6650_data *data;
755         struct device *hwmon_dev;
756         int err;
757
758         data = devm_kzalloc(dev, sizeof(struct max6650_data), GFP_KERNEL);
759         if (!data)
760                 return -ENOMEM;
761
762         data->client = client;
763         i2c_set_clientdata(client, data);
764         mutex_init(&data->update_lock);
765         data->nr_fans = of_id ? (int)(uintptr_t)of_id->data : id->driver_data;
766
767         /*
768          * Initialize the max6650 chip
769          */
770         err = max6650_init_client(data, client);
771         if (err)
772                 return err;
773
774         data->groups[0] = &max6650_group;
775         /* 3 additional fan inputs for the MAX6651 */
776         if (data->nr_fans == 4)
777                 data->groups[1] = &max6651_group;
778
779         hwmon_dev = devm_hwmon_device_register_with_groups(dev,
780                                                            client->name, data,
781                                                            data->groups);
782         err = PTR_ERR_OR_ZERO(hwmon_dev);
783         if (err)
784                 return err;
785
786 #if IS_ENABLED(CONFIG_THERMAL)
787         cooling_dev = devm_thermal_of_cooling_device_register(dev, dev->of_node,
788                                 client->name, data, &max6650_cooling_ops);
789         if (IS_ERR(cooling_dev)) {
790                 dev_warn(dev, "thermal cooling device register failed: %ld\n",
791                          PTR_ERR(cooling_dev));
792         }
793 #endif
794         return 0;
795 }
796
797 static const struct i2c_device_id max6650_id[] = {
798         { "max6650", 1 },
799         { "max6651", 4 },
800         { }
801 };
802 MODULE_DEVICE_TABLE(i2c, max6650_id);
803
804 static struct i2c_driver max6650_driver = {
805         .driver = {
806                 .name   = "max6650",
807                 .of_match_table = of_match_ptr(max6650_dt_match),
808         },
809         .probe          = max6650_probe,
810         .id_table       = max6650_id,
811 };
812
813 module_i2c_driver(max6650_driver);
814
815 MODULE_AUTHOR("Hans J. Koch");
816 MODULE_DESCRIPTION("MAX6650 sensor driver");
817 MODULE_LICENSE("GPL");