1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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
46
47
48
49static int fan_voltage;
50
51static int prescaler;
52
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
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
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
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
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
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;
119 unsigned long last_updated;
120
121
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
173
174
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
190
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 fan_show(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
221
222
223
224
225
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
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
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
281
282
283
284
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
304
305
306
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
347
348
349
350
351
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
362
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
405
406
407
408
409
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
453
454
455
456
457
458
459
460
461
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
512
513
514
515
516
517static ssize_t alarm_show(struct device *dev,
518 struct device_attribute *devattr, 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_RO(fan1_input, fan, 0);
538static SENSOR_DEVICE_ATTR_RO(fan2_input, fan, 1);
539static SENSOR_DEVICE_ATTR_RO(fan3_input, fan, 2);
540static SENSOR_DEVICE_ATTR_RO(fan4_input, fan, 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_RO(fan1_max_alarm, alarm, MAX6650_ALRM_MAX);
546static SENSOR_DEVICE_ATTR_RO(fan1_min_alarm, alarm, MAX6650_ALRM_MIN);
547static SENSOR_DEVICE_ATTR_RO(fan1_fault, alarm, MAX6650_ALRM_TACH);
548static SENSOR_DEVICE_ATTR_RO(gpio1_alarm, alarm, MAX6650_ALRM_GPIO1);
549static SENSOR_DEVICE_ATTR_RO(gpio2_alarm, alarm, MAX6650_ALRM_GPIO2);
550
551static umode_t max6650_attrs_visible(struct kobject *kobj, struct attribute *a,
552 int n)
553{
554 struct device *dev = container_of(kobj, struct device, kobj);
555 struct max6650_data *data = dev_get_drvdata(dev);
556 struct i2c_client *client = data->client;
557 u8 alarm_en = i2c_smbus_read_byte_data(client, MAX6650_REG_ALARM_EN);
558 struct device_attribute *devattr;
559
560
561
562
563
564 devattr = container_of(a, struct device_attribute, attr);
565 if (devattr == &sensor_dev_attr_fan1_max_alarm.dev_attr
566 || devattr == &sensor_dev_attr_fan1_min_alarm.dev_attr
567 || devattr == &sensor_dev_attr_fan1_fault.dev_attr
568 || devattr == &sensor_dev_attr_gpio1_alarm.dev_attr
569 || devattr == &sensor_dev_attr_gpio2_alarm.dev_attr) {
570 if (!(alarm_en & to_sensor_dev_attr(devattr)->index))
571 return 0;
572 }
573
574 return a->mode;
575}
576
577static struct attribute *max6650_attrs[] = {
578 &sensor_dev_attr_fan1_input.dev_attr.attr,
579 &dev_attr_fan1_target.attr,
580 &dev_attr_fan1_div.attr,
581 &dev_attr_pwm1_enable.attr,
582 &dev_attr_pwm1.attr,
583 &sensor_dev_attr_fan1_max_alarm.dev_attr.attr,
584 &sensor_dev_attr_fan1_min_alarm.dev_attr.attr,
585 &sensor_dev_attr_fan1_fault.dev_attr.attr,
586 &sensor_dev_attr_gpio1_alarm.dev_attr.attr,
587 &sensor_dev_attr_gpio2_alarm.dev_attr.attr,
588 NULL
589};
590
591static const struct attribute_group max6650_group = {
592 .attrs = max6650_attrs,
593 .is_visible = max6650_attrs_visible,
594};
595
596static struct attribute *max6651_attrs[] = {
597 &sensor_dev_attr_fan2_input.dev_attr.attr,
598 &sensor_dev_attr_fan3_input.dev_attr.attr,
599 &sensor_dev_attr_fan4_input.dev_attr.attr,
600 NULL
601};
602
603static const struct attribute_group max6651_group = {
604 .attrs = max6651_attrs,
605};
606
607
608
609
610
611static int max6650_init_client(struct max6650_data *data,
612 struct i2c_client *client)
613{
614 struct device *dev = &client->dev;
615 int config;
616 int err = -EIO;
617 u32 voltage;
618 u32 prescale;
619 u32 target_rpm;
620
621 if (of_property_read_u32(dev->of_node, "maxim,fan-microvolt",
622 &voltage))
623 voltage = fan_voltage;
624 else
625 voltage /= 1000000;
626 if (of_property_read_u32(dev->of_node, "maxim,fan-prescale",
627 &prescale))
628 prescale = prescaler;
629
630 config = i2c_smbus_read_byte_data(client, MAX6650_REG_CONFIG);
631
632 if (config < 0) {
633 dev_err(dev, "Error reading config, aborting.\n");
634 return err;
635 }
636
637 switch (voltage) {
638 case 0:
639 break;
640 case 5:
641 config &= ~MAX6650_CFG_V12;
642 break;
643 case 12:
644 config |= MAX6650_CFG_V12;
645 break;
646 default:
647 dev_err(dev, "illegal value for fan_voltage (%d)\n", voltage);
648 }
649
650 switch (prescale) {
651 case 0:
652 break;
653 case 1:
654 config &= ~MAX6650_CFG_PRESCALER_MASK;
655 break;
656 case 2:
657 config = (config & ~MAX6650_CFG_PRESCALER_MASK)
658 | MAX6650_CFG_PRESCALER_2;
659 break;
660 case 4:
661 config = (config & ~MAX6650_CFG_PRESCALER_MASK)
662 | MAX6650_CFG_PRESCALER_4;
663 break;
664 case 8:
665 config = (config & ~MAX6650_CFG_PRESCALER_MASK)
666 | MAX6650_CFG_PRESCALER_8;
667 break;
668 case 16:
669 config = (config & ~MAX6650_CFG_PRESCALER_MASK)
670 | MAX6650_CFG_PRESCALER_16;
671 break;
672 default:
673 dev_err(dev, "illegal value for prescaler (%d)\n", prescale);
674 }
675
676 dev_info(dev, "Fan voltage: %dV, prescaler: %d.\n",
677 (config & MAX6650_CFG_V12) ? 12 : 5,
678 1 << (config & MAX6650_CFG_PRESCALER_MASK));
679
680 if (i2c_smbus_write_byte_data(client, MAX6650_REG_CONFIG, config)) {
681 dev_err(dev, "Config write error, aborting.\n");
682 return err;
683 }
684
685 data->config = config;
686 data->count = i2c_smbus_read_byte_data(client, MAX6650_REG_COUNT);
687
688 if (!of_property_read_u32(client->dev.of_node, "maxim,fan-target-rpm",
689 &target_rpm)) {
690 max6650_set_target(data, target_rpm);
691 max6650_set_operating_mode(data, MAX6650_CFG_MODE_CLOSED_LOOP);
692 }
693
694 return 0;
695}
696
697static int max6650_probe(struct i2c_client *client,
698 const struct i2c_device_id *id)
699{
700 struct device *dev = &client->dev;
701 const struct of_device_id *of_id =
702 of_match_device(of_match_ptr(max6650_dt_match), dev);
703 struct max6650_data *data;
704 struct device *hwmon_dev;
705 int err;
706
707 data = devm_kzalloc(dev, sizeof(struct max6650_data), GFP_KERNEL);
708 if (!data)
709 return -ENOMEM;
710
711 data->client = client;
712 mutex_init(&data->update_lock);
713 data->nr_fans = of_id ? (int)(uintptr_t)of_id->data : id->driver_data;
714
715
716
717
718 err = max6650_init_client(data, client);
719 if (err)
720 return err;
721
722 data->groups[0] = &max6650_group;
723
724 if (data->nr_fans == 4)
725 data->groups[1] = &max6651_group;
726
727 hwmon_dev = devm_hwmon_device_register_with_groups(dev,
728 client->name, data,
729 data->groups);
730 return PTR_ERR_OR_ZERO(hwmon_dev);
731}
732
733static const struct i2c_device_id max6650_id[] = {
734 { "max6650", 1 },
735 { "max6651", 4 },
736 { }
737};
738MODULE_DEVICE_TABLE(i2c, max6650_id);
739
740static struct i2c_driver max6650_driver = {
741 .driver = {
742 .name = "max6650",
743 .of_match_table = of_match_ptr(max6650_dt_match),
744 },
745 .probe = max6650_probe,
746 .id_table = max6650_id,
747};
748
749module_i2c_driver(max6650_driver);
750
751MODULE_AUTHOR("Hans J. Koch");
752MODULE_DESCRIPTION("MAX6650 sensor driver");
753MODULE_LICENSE("GPL");
754