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
43
44
45
46
47static const unsigned short normal_i2c[] = {0x1b, 0x1f, 0x48, 0x4b,
48 I2C_CLIENT_END};
49
50
51
52
53
54
55static int fan_voltage;
56
57static int prescaler;
58
59static int clock = 254000;
60
61module_param(fan_voltage, int, S_IRUGO);
62module_param(prescaler, int, S_IRUGO);
63module_param(clock, int, S_IRUGO);
64
65I2C_CLIENT_INSMOD_1(max6650);
66
67
68
69
70
71#define MAX6650_REG_SPEED 0x00
72#define MAX6650_REG_CONFIG 0x02
73#define MAX6650_REG_GPIO_DEF 0x04
74#define MAX6650_REG_DAC 0x06
75#define MAX6650_REG_ALARM_EN 0x08
76#define MAX6650_REG_ALARM 0x0A
77#define MAX6650_REG_TACH0 0x0C
78#define MAX6650_REG_TACH1 0x0E
79#define MAX6650_REG_TACH2 0x10
80#define MAX6650_REG_TACH3 0x12
81#define MAX6650_REG_GPIO_STAT 0x14
82#define MAX6650_REG_COUNT 0x16
83
84
85
86
87
88#define MAX6650_CFG_V12 0x08
89#define MAX6650_CFG_PRESCALER_MASK 0x07
90#define MAX6650_CFG_PRESCALER_2 0x01
91#define MAX6650_CFG_PRESCALER_4 0x02
92#define MAX6650_CFG_PRESCALER_8 0x03
93#define MAX6650_CFG_PRESCALER_16 0x04
94#define MAX6650_CFG_MODE_MASK 0x30
95#define MAX6650_CFG_MODE_ON 0x00
96#define MAX6650_CFG_MODE_OFF 0x10
97#define MAX6650_CFG_MODE_CLOSED_LOOP 0x20
98#define MAX6650_CFG_MODE_OPEN_LOOP 0x30
99#define MAX6650_COUNT_MASK 0x03
100
101
102#define FAN_RPM_MIN 240
103#define FAN_RPM_MAX 30000
104
105#define DIV_FROM_REG(reg) (1 << (reg & 7))
106
107static int max6650_probe(struct i2c_client *client,
108 const struct i2c_device_id *id);
109static int max6650_detect(struct i2c_client *client, int kind,
110 struct i2c_board_info *info);
111static int max6650_init_client(struct i2c_client *client);
112static int max6650_remove(struct i2c_client *client);
113static struct max6650_data *max6650_update_device(struct device *dev);
114
115
116
117
118
119static const struct i2c_device_id max6650_id[] = {
120 { "max6650", max6650 },
121 { }
122};
123MODULE_DEVICE_TABLE(i2c, max6650_id);
124
125static struct i2c_driver max6650_driver = {
126 .class = I2C_CLASS_HWMON,
127 .driver = {
128 .name = "max6650",
129 },
130 .probe = max6650_probe,
131 .remove = max6650_remove,
132 .id_table = max6650_id,
133 .detect = max6650_detect,
134 .address_data = &addr_data,
135};
136
137
138
139
140
141struct max6650_data
142{
143 struct device *hwmon_dev;
144 struct mutex update_lock;
145 char valid;
146 unsigned long last_updated;
147
148
149 u8 speed;
150 u8 config;
151 u8 tach[4];
152 u8 count;
153 u8 dac;
154};
155
156static ssize_t get_fan(struct device *dev, struct device_attribute *devattr,
157 char *buf)
158{
159 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
160 struct max6650_data *data = max6650_update_device(dev);
161 int rpm;
162
163
164
165
166
167
168
169
170
171
172 rpm = ((data->tach[attr->index] * 120) / DIV_FROM_REG(data->count));
173 return sprintf(buf, "%d\n", rpm);
174}
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217static ssize_t get_target(struct device *dev, struct device_attribute *devattr,
218 char *buf)
219{
220 struct max6650_data *data = max6650_update_device(dev);
221 int kscale, ktach, rpm;
222
223
224
225
226
227
228
229
230
231 kscale = DIV_FROM_REG(data->config);
232 ktach = data->speed;
233 rpm = 60 * kscale * clock / (256 * (ktach + 1));
234 return sprintf(buf, "%d\n", rpm);
235}
236
237static ssize_t set_target(struct device *dev, struct device_attribute *devattr,
238 const char *buf, size_t count)
239{
240 struct i2c_client *client = to_i2c_client(dev);
241 struct max6650_data *data = i2c_get_clientdata(client);
242 int rpm = simple_strtoul(buf, NULL, 10);
243 int kscale, ktach;
244
245 rpm = SENSORS_LIMIT(rpm, FAN_RPM_MIN, FAN_RPM_MAX);
246
247
248
249
250
251
252
253
254 mutex_lock(&data->update_lock);
255
256 kscale = DIV_FROM_REG(data->config);
257 ktach = ((clock * kscale) / (256 * rpm / 60)) - 1;
258 if (ktach < 0)
259 ktach = 0;
260 if (ktach > 255)
261 ktach = 255;
262 data->speed = ktach;
263
264 i2c_smbus_write_byte_data(client, MAX6650_REG_SPEED, data->speed);
265
266 mutex_unlock(&data->update_lock);
267
268 return count;
269}
270
271
272
273
274
275
276
277
278
279
280static ssize_t get_pwm(struct device *dev, struct device_attribute *devattr,
281 char *buf)
282{
283 int pwm;
284 struct max6650_data *data = max6650_update_device(dev);
285
286
287
288 if (data->config & MAX6650_CFG_V12)
289 pwm = 255 - (255 * (int)data->dac)/180;
290 else
291 pwm = 255 - (255 * (int)data->dac)/76;
292
293 if (pwm < 0)
294 pwm = 0;
295
296 return sprintf(buf, "%d\n", pwm);
297}
298
299static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr,
300 const char *buf, size_t count)
301{
302 struct i2c_client *client = to_i2c_client(dev);
303 struct max6650_data *data = i2c_get_clientdata(client);
304 int pwm = simple_strtoul(buf, NULL, 10);
305
306 pwm = SENSORS_LIMIT(pwm, 0, 255);
307
308 mutex_lock(&data->update_lock);
309
310 if (data->config & MAX6650_CFG_V12)
311 data->dac = 180 - (180 * pwm)/255;
312 else
313 data->dac = 76 - (76 * pwm)/255;
314
315 i2c_smbus_write_byte_data(client, MAX6650_REG_DAC, data->dac);
316
317 mutex_unlock(&data->update_lock);
318
319 return count;
320}
321
322
323
324
325
326
327
328
329
330static ssize_t get_enable(struct device *dev, struct device_attribute *devattr,
331 char *buf)
332{
333 struct max6650_data *data = max6650_update_device(dev);
334 int mode = (data->config & MAX6650_CFG_MODE_MASK) >> 4;
335 int sysfs_modes[4] = {0, 1, 2, 1};
336
337 return sprintf(buf, "%d\n", sysfs_modes[mode]);
338}
339
340static ssize_t set_enable(struct device *dev, struct device_attribute *devattr,
341 const char *buf, size_t count)
342{
343 struct i2c_client *client = to_i2c_client(dev);
344 struct max6650_data *data = i2c_get_clientdata(client);
345 int mode = simple_strtoul(buf, NULL, 10);
346 int max6650_modes[3] = {0, 3, 2};
347
348 if ((mode < 0)||(mode > 2)) {
349 dev_err(&client->dev,
350 "illegal value for pwm1_enable (%d)\n", mode);
351 return -EINVAL;
352 }
353
354 mutex_lock(&data->update_lock);
355
356 data->config = i2c_smbus_read_byte_data(client, MAX6650_REG_CONFIG);
357 data->config = (data->config & ~MAX6650_CFG_MODE_MASK)
358 | (max6650_modes[mode] << 4);
359
360 i2c_smbus_write_byte_data(client, MAX6650_REG_CONFIG, data->config);
361
362 mutex_unlock(&data->update_lock);
363
364 return count;
365}
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380static ssize_t get_div(struct device *dev, struct device_attribute *devattr,
381 char *buf)
382{
383 struct max6650_data *data = max6650_update_device(dev);
384
385 return sprintf(buf, "%d\n", DIV_FROM_REG(data->count));
386}
387
388static ssize_t set_div(struct device *dev, struct device_attribute *devattr,
389 const char *buf, size_t count)
390{
391 struct i2c_client *client = to_i2c_client(dev);
392 struct max6650_data *data = i2c_get_clientdata(client);
393 int div = simple_strtoul(buf, NULL, 10);
394
395 mutex_lock(&data->update_lock);
396 switch (div) {
397 case 1:
398 data->count = 0;
399 break;
400 case 2:
401 data->count = 1;
402 break;
403 case 4:
404 data->count = 2;
405 break;
406 case 8:
407 data->count = 3;
408 break;
409 default:
410 dev_err(&client->dev,
411 "illegal value for fan divider (%d)\n", div);
412 return -EINVAL;
413 }
414
415 i2c_smbus_write_byte_data(client, MAX6650_REG_COUNT, data->count);
416 mutex_unlock(&data->update_lock);
417
418 return count;
419}
420
421static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, get_fan, NULL, 0);
422static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, get_fan, NULL, 1);
423static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, get_fan, NULL, 2);
424static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, get_fan, NULL, 3);
425static DEVICE_ATTR(fan1_target, S_IWUSR | S_IRUGO, get_target, set_target);
426static DEVICE_ATTR(fan1_div, S_IWUSR | S_IRUGO, get_div, set_div);
427static DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, get_enable, set_enable);
428static DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, get_pwm, set_pwm);
429
430
431static struct attribute *max6650_attrs[] = {
432 &sensor_dev_attr_fan1_input.dev_attr.attr,
433 &sensor_dev_attr_fan2_input.dev_attr.attr,
434 &sensor_dev_attr_fan3_input.dev_attr.attr,
435 &sensor_dev_attr_fan4_input.dev_attr.attr,
436 &dev_attr_fan1_target.attr,
437 &dev_attr_fan1_div.attr,
438 &dev_attr_pwm1_enable.attr,
439 &dev_attr_pwm1.attr,
440 NULL
441};
442
443static struct attribute_group max6650_attr_grp = {
444 .attrs = max6650_attrs,
445};
446
447
448
449
450
451
452static int max6650_detect(struct i2c_client *client, int kind,
453 struct i2c_board_info *info)
454{
455 struct i2c_adapter *adapter = client->adapter;
456 int address = client->addr;
457
458 dev_dbg(&adapter->dev, "max6650_detect called, kind = %d\n", kind);
459
460 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
461 dev_dbg(&adapter->dev, "max6650: I2C bus doesn't support "
462 "byte read mode, skipping.\n");
463 return -ENODEV;
464 }
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481 if ((kind < 0) &&
482 ( (i2c_smbus_read_byte_data(client, MAX6650_REG_CONFIG) & 0xC0)
483 ||(i2c_smbus_read_byte_data(client, MAX6650_REG_GPIO_STAT) & 0xE0)
484 ||(i2c_smbus_read_byte_data(client, MAX6650_REG_ALARM_EN) & 0xE0)
485 ||(i2c_smbus_read_byte_data(client, MAX6650_REG_ALARM) & 0xE0)
486 ||(i2c_smbus_read_byte_data(client, MAX6650_REG_COUNT) & 0xFC))) {
487 dev_dbg(&adapter->dev,
488 "max6650: detection failed at 0x%02x.\n", address);
489 return -ENODEV;
490 }
491
492 dev_info(&adapter->dev, "max6650: chip found at 0x%02x.\n", address);
493
494 strlcpy(info->type, "max6650", I2C_NAME_SIZE);
495
496 return 0;
497}
498
499static int max6650_probe(struct i2c_client *client,
500 const struct i2c_device_id *id)
501{
502 struct max6650_data *data;
503 int err;
504
505 if (!(data = kzalloc(sizeof(struct max6650_data), GFP_KERNEL))) {
506 dev_err(&client->dev, "out of memory.\n");
507 return -ENOMEM;
508 }
509
510 i2c_set_clientdata(client, data);
511 mutex_init(&data->update_lock);
512
513
514
515
516 err = max6650_init_client(client);
517 if (err)
518 goto err_free;
519
520 err = sysfs_create_group(&client->dev.kobj, &max6650_attr_grp);
521 if (err)
522 goto err_free;
523
524 data->hwmon_dev = hwmon_device_register(&client->dev);
525 if (!IS_ERR(data->hwmon_dev))
526 return 0;
527
528 err = PTR_ERR(data->hwmon_dev);
529 dev_err(&client->dev, "error registering hwmon device.\n");
530 sysfs_remove_group(&client->dev.kobj, &max6650_attr_grp);
531err_free:
532 kfree(data);
533 return err;
534}
535
536static int max6650_remove(struct i2c_client *client)
537{
538 struct max6650_data *data = i2c_get_clientdata(client);
539
540 sysfs_remove_group(&client->dev.kobj, &max6650_attr_grp);
541 hwmon_device_unregister(data->hwmon_dev);
542 kfree(data);
543 return 0;
544}
545
546static int max6650_init_client(struct i2c_client *client)
547{
548 struct max6650_data *data = i2c_get_clientdata(client);
549 int config;
550 int err = -EIO;
551
552 config = i2c_smbus_read_byte_data(client, MAX6650_REG_CONFIG);
553
554 if (config < 0) {
555 dev_err(&client->dev, "Error reading config, aborting.\n");
556 return err;
557 }
558
559 switch (fan_voltage) {
560 case 0:
561 break;
562 case 5:
563 config &= ~MAX6650_CFG_V12;
564 break;
565 case 12:
566 config |= MAX6650_CFG_V12;
567 break;
568 default:
569 dev_err(&client->dev,
570 "illegal value for fan_voltage (%d)\n",
571 fan_voltage);
572 }
573
574 dev_info(&client->dev, "Fan voltage is set to %dV.\n",
575 (config & MAX6650_CFG_V12) ? 12 : 5);
576
577 switch (prescaler) {
578 case 0:
579 break;
580 case 1:
581 config &= ~MAX6650_CFG_PRESCALER_MASK;
582 break;
583 case 2:
584 config = (config & ~MAX6650_CFG_PRESCALER_MASK)
585 | MAX6650_CFG_PRESCALER_2;
586 break;
587 case 4:
588 config = (config & ~MAX6650_CFG_PRESCALER_MASK)
589 | MAX6650_CFG_PRESCALER_4;
590 break;
591 case 8:
592 config = (config & ~MAX6650_CFG_PRESCALER_MASK)
593 | MAX6650_CFG_PRESCALER_8;
594 break;
595 case 16:
596 config = (config & ~MAX6650_CFG_PRESCALER_MASK)
597 | MAX6650_CFG_PRESCALER_16;
598 break;
599 default:
600 dev_err(&client->dev,
601 "illegal value for prescaler (%d)\n",
602 prescaler);
603 }
604
605 dev_info(&client->dev, "Prescaler is set to %d.\n",
606 1 << (config & MAX6650_CFG_PRESCALER_MASK));
607
608
609
610
611
612
613 if ((config & MAX6650_CFG_MODE_MASK) == MAX6650_CFG_MODE_OFF) {
614 dev_dbg(&client->dev, "Change mode to open loop, full off.\n");
615 config = (config & ~MAX6650_CFG_MODE_MASK)
616 | MAX6650_CFG_MODE_OPEN_LOOP;
617 if (i2c_smbus_write_byte_data(client, MAX6650_REG_DAC, 255)) {
618 dev_err(&client->dev, "DAC write error, aborting.\n");
619 return err;
620 }
621 }
622
623 if (i2c_smbus_write_byte_data(client, MAX6650_REG_CONFIG, config)) {
624 dev_err(&client->dev, "Config write error, aborting.\n");
625 return err;
626 }
627
628 data->config = config;
629 data->count = i2c_smbus_read_byte_data(client, MAX6650_REG_COUNT);
630
631 return 0;
632}
633
634static const u8 tach_reg[] = {
635 MAX6650_REG_TACH0,
636 MAX6650_REG_TACH1,
637 MAX6650_REG_TACH2,
638 MAX6650_REG_TACH3,
639};
640
641static struct max6650_data *max6650_update_device(struct device *dev)
642{
643 int i;
644 struct i2c_client *client = to_i2c_client(dev);
645 struct max6650_data *data = i2c_get_clientdata(client);
646
647 mutex_lock(&data->update_lock);
648
649 if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
650 data->speed = i2c_smbus_read_byte_data(client,
651 MAX6650_REG_SPEED);
652 data->config = i2c_smbus_read_byte_data(client,
653 MAX6650_REG_CONFIG);
654 for (i = 0; i < 4; i++) {
655 data->tach[i] = i2c_smbus_read_byte_data(client,
656 tach_reg[i]);
657 }
658 data->count = i2c_smbus_read_byte_data(client,
659 MAX6650_REG_COUNT);
660 data->dac = i2c_smbus_read_byte_data(client, MAX6650_REG_DAC);
661
662 data->last_updated = jiffies;
663 data->valid = 1;
664 }
665
666 mutex_unlock(&data->update_lock);
667
668 return data;
669}
670
671static int __init sensors_max6650_init(void)
672{
673 return i2c_add_driver(&max6650_driver);
674}
675
676static void __exit sensors_max6650_exit(void)
677{
678 i2c_del_driver(&max6650_driver);
679}
680
681MODULE_AUTHOR("Hans J. Koch");
682MODULE_DESCRIPTION("MAX6650 sensor driver");
683MODULE_LICENSE("GPL");
684
685module_init(sensors_max6650_init);
686module_exit(sensors_max6650_exit);