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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69#include <linux/module.h>
70#include <linux/init.h>
71#include <linux/slab.h>
72#include <linux/jiffies.h>
73#include <linux/i2c.h>
74#include <linux/hwmon-sysfs.h>
75#include <linux/hwmon.h>
76#include <linux/err.h>
77#include <linux/mutex.h>
78#include <linux/sysfs.h>
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93static const unsigned short normal_i2c[] = {
94 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x4c, 0x4d, 0x4e, I2C_CLIENT_END };
95
96
97
98
99
100I2C_CLIENT_INSMOD_8(lm90, adm1032, lm99, lm86, max6657, adt7461, max6680,
101 max6646);
102
103
104
105
106
107#define LM90_REG_R_MAN_ID 0xFE
108#define LM90_REG_R_CHIP_ID 0xFF
109#define LM90_REG_R_CONFIG1 0x03
110#define LM90_REG_W_CONFIG1 0x09
111#define LM90_REG_R_CONFIG2 0xBF
112#define LM90_REG_W_CONFIG2 0xBF
113#define LM90_REG_R_CONVRATE 0x04
114#define LM90_REG_W_CONVRATE 0x0A
115#define LM90_REG_R_STATUS 0x02
116#define LM90_REG_R_LOCAL_TEMP 0x00
117#define LM90_REG_R_LOCAL_HIGH 0x05
118#define LM90_REG_W_LOCAL_HIGH 0x0B
119#define LM90_REG_R_LOCAL_LOW 0x06
120#define LM90_REG_W_LOCAL_LOW 0x0C
121#define LM90_REG_R_LOCAL_CRIT 0x20
122#define LM90_REG_W_LOCAL_CRIT 0x20
123#define LM90_REG_R_REMOTE_TEMPH 0x01
124#define LM90_REG_R_REMOTE_TEMPL 0x10
125#define LM90_REG_R_REMOTE_OFFSH 0x11
126#define LM90_REG_W_REMOTE_OFFSH 0x11
127#define LM90_REG_R_REMOTE_OFFSL 0x12
128#define LM90_REG_W_REMOTE_OFFSL 0x12
129#define LM90_REG_R_REMOTE_HIGHH 0x07
130#define LM90_REG_W_REMOTE_HIGHH 0x0D
131#define LM90_REG_R_REMOTE_HIGHL 0x13
132#define LM90_REG_W_REMOTE_HIGHL 0x13
133#define LM90_REG_R_REMOTE_LOWH 0x08
134#define LM90_REG_W_REMOTE_LOWH 0x0E
135#define LM90_REG_R_REMOTE_LOWL 0x14
136#define LM90_REG_W_REMOTE_LOWL 0x14
137#define LM90_REG_R_REMOTE_CRIT 0x19
138#define LM90_REG_W_REMOTE_CRIT 0x19
139#define LM90_REG_R_TCRIT_HYST 0x21
140#define LM90_REG_W_TCRIT_HYST 0x21
141
142
143
144#define MAX6657_REG_R_LOCAL_TEMPL 0x11
145
146
147
148
149#define LM90_FLAG_ADT7461_EXT 0x01
150
151
152
153
154
155static int lm90_detect(struct i2c_client *client, int kind,
156 struct i2c_board_info *info);
157static int lm90_probe(struct i2c_client *client,
158 const struct i2c_device_id *id);
159static void lm90_init_client(struct i2c_client *client);
160static int lm90_remove(struct i2c_client *client);
161static struct lm90_data *lm90_update_device(struct device *dev);
162
163
164
165
166
167static const struct i2c_device_id lm90_id[] = {
168 { "adm1032", adm1032 },
169 { "adt7461", adt7461 },
170 { "lm90", lm90 },
171 { "lm86", lm86 },
172 { "lm89", lm86 },
173 { "lm99", lm99 },
174 { "max6646", max6646 },
175 { "max6647", max6646 },
176 { "max6649", max6646 },
177 { "max6657", max6657 },
178 { "max6658", max6657 },
179 { "max6659", max6657 },
180 { "max6680", max6680 },
181 { "max6681", max6680 },
182 { }
183};
184MODULE_DEVICE_TABLE(i2c, lm90_id);
185
186static struct i2c_driver lm90_driver = {
187 .class = I2C_CLASS_HWMON,
188 .driver = {
189 .name = "lm90",
190 },
191 .probe = lm90_probe,
192 .remove = lm90_remove,
193 .id_table = lm90_id,
194 .detect = lm90_detect,
195 .address_data = &addr_data,
196};
197
198
199
200
201
202struct lm90_data {
203 struct device *hwmon_dev;
204 struct mutex update_lock;
205 char valid;
206 unsigned long last_updated;
207 int kind;
208 int flags;
209
210
211 s8 temp8[4];
212
213
214
215 s16 temp11[5];
216
217
218
219
220 u8 temp_hyst;
221 u8 alarms;
222};
223
224
225
226
227
228
229
230
231
232
233static inline int temp_from_s8(s8 val)
234{
235 return val * 1000;
236}
237
238static inline int temp_from_u8(u8 val)
239{
240 return val * 1000;
241}
242
243static inline int temp_from_s16(s16 val)
244{
245 return val / 32 * 125;
246}
247
248static inline int temp_from_u16(u16 val)
249{
250 return val / 32 * 125;
251}
252
253static s8 temp_to_s8(long val)
254{
255 if (val <= -128000)
256 return -128;
257 if (val >= 127000)
258 return 127;
259 if (val < 0)
260 return (val - 500) / 1000;
261 return (val + 500) / 1000;
262}
263
264static u8 temp_to_u8(long val)
265{
266 if (val <= 0)
267 return 0;
268 if (val >= 255000)
269 return 255;
270 return (val + 500) / 1000;
271}
272
273static s16 temp_to_s16(long val)
274{
275 if (val <= -128000)
276 return 0x8000;
277 if (val >= 127875)
278 return 0x7FE0;
279 if (val < 0)
280 return (val - 62) / 125 * 32;
281 return (val + 62) / 125 * 32;
282}
283
284static u8 hyst_to_reg(long val)
285{
286 if (val <= 0)
287 return 0;
288 if (val >= 30500)
289 return 31;
290 return (val + 500) / 1000;
291}
292
293
294
295
296
297
298
299
300
301static inline int temp_from_u8_adt7461(struct lm90_data *data, u8 val)
302{
303 if (data->flags & LM90_FLAG_ADT7461_EXT)
304 return (val - 64) * 1000;
305 else
306 return temp_from_s8(val);
307}
308
309static inline int temp_from_u16_adt7461(struct lm90_data *data, u16 val)
310{
311 if (data->flags & LM90_FLAG_ADT7461_EXT)
312 return (val - 0x4000) / 64 * 250;
313 else
314 return temp_from_s16(val);
315}
316
317static u8 temp_to_u8_adt7461(struct lm90_data *data, long val)
318{
319 if (data->flags & LM90_FLAG_ADT7461_EXT) {
320 if (val <= -64000)
321 return 0;
322 if (val >= 191000)
323 return 0xFF;
324 return (val + 500 + 64000) / 1000;
325 } else {
326 if (val <= 0)
327 return 0;
328 if (val >= 127000)
329 return 127;
330 return (val + 500) / 1000;
331 }
332}
333
334static u16 temp_to_u16_adt7461(struct lm90_data *data, long val)
335{
336 if (data->flags & LM90_FLAG_ADT7461_EXT) {
337 if (val <= -64000)
338 return 0;
339 if (val >= 191750)
340 return 0xFFC0;
341 return (val + 64000 + 125) / 250 * 64;
342 } else {
343 if (val <= 0)
344 return 0;
345 if (val >= 127750)
346 return 0x7FC0;
347 return (val + 125) / 250 * 64;
348 }
349}
350
351
352
353
354
355static ssize_t show_temp8(struct device *dev, struct device_attribute *devattr,
356 char *buf)
357{
358 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
359 struct lm90_data *data = lm90_update_device(dev);
360 int temp;
361
362 if (data->kind == adt7461)
363 temp = temp_from_u8_adt7461(data, data->temp8[attr->index]);
364 else if (data->kind == max6646)
365 temp = temp_from_u8(data->temp8[attr->index]);
366 else
367 temp = temp_from_s8(data->temp8[attr->index]);
368
369
370 if (data->kind == lm99 && attr->index == 3)
371 temp += 16000;
372
373 return sprintf(buf, "%d\n", temp);
374}
375
376static ssize_t set_temp8(struct device *dev, struct device_attribute *devattr,
377 const char *buf, size_t count)
378{
379 static const u8 reg[4] = {
380 LM90_REG_W_LOCAL_LOW,
381 LM90_REG_W_LOCAL_HIGH,
382 LM90_REG_W_LOCAL_CRIT,
383 LM90_REG_W_REMOTE_CRIT,
384 };
385
386 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
387 struct i2c_client *client = to_i2c_client(dev);
388 struct lm90_data *data = i2c_get_clientdata(client);
389 long val = simple_strtol(buf, NULL, 10);
390 int nr = attr->index;
391
392
393 if (data->kind == lm99 && attr->index == 3)
394 val -= 16000;
395
396 mutex_lock(&data->update_lock);
397 if (data->kind == adt7461)
398 data->temp8[nr] = temp_to_u8_adt7461(data, val);
399 else if (data->kind == max6646)
400 data->temp8[nr] = temp_to_u8(val);
401 else
402 data->temp8[nr] = temp_to_s8(val);
403 i2c_smbus_write_byte_data(client, reg[nr], data->temp8[nr]);
404 mutex_unlock(&data->update_lock);
405 return count;
406}
407
408static ssize_t show_temp11(struct device *dev, struct device_attribute *devattr,
409 char *buf)
410{
411 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
412 struct lm90_data *data = lm90_update_device(dev);
413 int temp;
414
415 if (data->kind == adt7461)
416 temp = temp_from_u16_adt7461(data, data->temp11[attr->index]);
417 else if (data->kind == max6646)
418 temp = temp_from_u16(data->temp11[attr->index]);
419 else
420 temp = temp_from_s16(data->temp11[attr->index]);
421
422
423 if (data->kind == lm99 && attr->index <= 2)
424 temp += 16000;
425
426 return sprintf(buf, "%d\n", temp);
427}
428
429static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr,
430 const char *buf, size_t count)
431{
432 static const u8 reg[6] = {
433 LM90_REG_W_REMOTE_LOWH,
434 LM90_REG_W_REMOTE_LOWL,
435 LM90_REG_W_REMOTE_HIGHH,
436 LM90_REG_W_REMOTE_HIGHL,
437 LM90_REG_W_REMOTE_OFFSH,
438 LM90_REG_W_REMOTE_OFFSL,
439 };
440
441 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
442 struct i2c_client *client = to_i2c_client(dev);
443 struct lm90_data *data = i2c_get_clientdata(client);
444 long val = simple_strtol(buf, NULL, 10);
445 int nr = attr->index;
446
447
448 if (data->kind == lm99 && attr->index <= 2)
449 val -= 16000;
450
451 mutex_lock(&data->update_lock);
452 if (data->kind == adt7461)
453 data->temp11[nr] = temp_to_u16_adt7461(data, val);
454 else if (data->kind == max6657 || data->kind == max6680)
455 data->temp11[nr] = temp_to_s8(val) << 8;
456 else if (data->kind == max6646)
457 data->temp11[nr] = temp_to_u8(val) << 8;
458 else
459 data->temp11[nr] = temp_to_s16(val);
460
461 i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2],
462 data->temp11[nr] >> 8);
463 if (data->kind != max6657 && data->kind != max6680
464 && data->kind != max6646)
465 i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1],
466 data->temp11[nr] & 0xff);
467 mutex_unlock(&data->update_lock);
468 return count;
469}
470
471static ssize_t show_temphyst(struct device *dev, struct device_attribute *devattr,
472 char *buf)
473{
474 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
475 struct lm90_data *data = lm90_update_device(dev);
476 int temp;
477
478 if (data->kind == adt7461)
479 temp = temp_from_u8_adt7461(data, data->temp8[attr->index]);
480 else if (data->kind == max6646)
481 temp = temp_from_u8(data->temp8[attr->index]);
482 else
483 temp = temp_from_s8(data->temp8[attr->index]);
484
485
486 if (data->kind == lm99 && attr->index == 3)
487 temp += 16000;
488
489 return sprintf(buf, "%d\n", temp - temp_from_s8(data->temp_hyst));
490}
491
492static ssize_t set_temphyst(struct device *dev, struct device_attribute *dummy,
493 const char *buf, size_t count)
494{
495 struct i2c_client *client = to_i2c_client(dev);
496 struct lm90_data *data = i2c_get_clientdata(client);
497 long val = simple_strtol(buf, NULL, 10);
498 int temp;
499
500 mutex_lock(&data->update_lock);
501 if (data->kind == adt7461)
502 temp = temp_from_u8_adt7461(data, data->temp8[2]);
503 else if (data->kind == max6646)
504 temp = temp_from_u8(data->temp8[2]);
505 else
506 temp = temp_from_s8(data->temp8[2]);
507
508 data->temp_hyst = hyst_to_reg(temp - val);
509 i2c_smbus_write_byte_data(client, LM90_REG_W_TCRIT_HYST,
510 data->temp_hyst);
511 mutex_unlock(&data->update_lock);
512 return count;
513}
514
515static ssize_t show_alarms(struct device *dev, struct device_attribute *dummy,
516 char *buf)
517{
518 struct lm90_data *data = lm90_update_device(dev);
519 return sprintf(buf, "%d\n", data->alarms);
520}
521
522static ssize_t show_alarm(struct device *dev, struct device_attribute
523 *devattr, char *buf)
524{
525 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
526 struct lm90_data *data = lm90_update_device(dev);
527 int bitnr = attr->index;
528
529 return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
530}
531
532static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp11, NULL, 4);
533static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp11, NULL, 0);
534static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp8,
535 set_temp8, 0);
536static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp11,
537 set_temp11, 1);
538static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp8,
539 set_temp8, 1);
540static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp11,
541 set_temp11, 2);
542static SENSOR_DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, show_temp8,
543 set_temp8, 2);
544static SENSOR_DEVICE_ATTR(temp2_crit, S_IWUSR | S_IRUGO, show_temp8,
545 set_temp8, 3);
546static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temphyst,
547 set_temphyst, 2);
548static SENSOR_DEVICE_ATTR(temp2_crit_hyst, S_IRUGO, show_temphyst, NULL, 3);
549static SENSOR_DEVICE_ATTR(temp2_offset, S_IWUSR | S_IRUGO, show_temp11,
550 set_temp11, 3);
551
552
553static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 0);
554static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 1);
555static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_alarm, NULL, 2);
556static SENSOR_DEVICE_ATTR(temp2_min_alarm, S_IRUGO, show_alarm, NULL, 3);
557static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 4);
558static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 5);
559static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6);
560
561static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
562
563static struct attribute *lm90_attributes[] = {
564 &sensor_dev_attr_temp1_input.dev_attr.attr,
565 &sensor_dev_attr_temp2_input.dev_attr.attr,
566 &sensor_dev_attr_temp1_min.dev_attr.attr,
567 &sensor_dev_attr_temp2_min.dev_attr.attr,
568 &sensor_dev_attr_temp1_max.dev_attr.attr,
569 &sensor_dev_attr_temp2_max.dev_attr.attr,
570 &sensor_dev_attr_temp1_crit.dev_attr.attr,
571 &sensor_dev_attr_temp2_crit.dev_attr.attr,
572 &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr,
573 &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr,
574
575 &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr,
576 &sensor_dev_attr_temp2_crit_alarm.dev_attr.attr,
577 &sensor_dev_attr_temp2_fault.dev_attr.attr,
578 &sensor_dev_attr_temp2_min_alarm.dev_attr.attr,
579 &sensor_dev_attr_temp2_max_alarm.dev_attr.attr,
580 &sensor_dev_attr_temp1_min_alarm.dev_attr.attr,
581 &sensor_dev_attr_temp1_max_alarm.dev_attr.attr,
582 &dev_attr_alarms.attr,
583 NULL
584};
585
586static const struct attribute_group lm90_group = {
587 .attrs = lm90_attributes,
588};
589
590
591static ssize_t show_pec(struct device *dev, struct device_attribute *dummy,
592 char *buf)
593{
594 struct i2c_client *client = to_i2c_client(dev);
595 return sprintf(buf, "%d\n", !!(client->flags & I2C_CLIENT_PEC));
596}
597
598static ssize_t set_pec(struct device *dev, struct device_attribute *dummy,
599 const char *buf, size_t count)
600{
601 struct i2c_client *client = to_i2c_client(dev);
602 long val = simple_strtol(buf, NULL, 10);
603
604 switch (val) {
605 case 0:
606 client->flags &= ~I2C_CLIENT_PEC;
607 break;
608 case 1:
609 client->flags |= I2C_CLIENT_PEC;
610 break;
611 default:
612 return -EINVAL;
613 }
614
615 return count;
616}
617
618static DEVICE_ATTR(pec, S_IWUSR | S_IRUGO, show_pec, set_pec);
619
620
621
622
623
624
625
626static inline s32 adm1032_write_byte(struct i2c_client *client, u8 value)
627{
628 return i2c_smbus_xfer(client->adapter, client->addr,
629 client->flags & ~I2C_CLIENT_PEC,
630 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
631}
632
633
634
635
636
637static int lm90_read_reg(struct i2c_client* client, u8 reg, u8 *value)
638{
639 int err;
640
641 if (client->flags & I2C_CLIENT_PEC) {
642 err = adm1032_write_byte(client, reg);
643 if (err >= 0)
644 err = i2c_smbus_read_byte(client);
645 } else
646 err = i2c_smbus_read_byte_data(client, reg);
647
648 if (err < 0) {
649 dev_warn(&client->dev, "Register %#02x read failed (%d)\n",
650 reg, err);
651 return err;
652 }
653 *value = err;
654
655 return 0;
656}
657
658
659static int lm90_detect(struct i2c_client *new_client, int kind,
660 struct i2c_board_info *info)
661{
662 struct i2c_adapter *adapter = new_client->adapter;
663 int address = new_client->addr;
664 const char *name = "";
665
666 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
667 return -ENODEV;
668
669
670
671
672
673
674
675
676
677
678
679
680
681 if (kind == 0)
682 kind = lm90;
683
684 if (kind < 0) {
685 int man_id, chip_id, reg_config1, reg_convrate;
686
687 if ((man_id = i2c_smbus_read_byte_data(new_client,
688 LM90_REG_R_MAN_ID)) < 0
689 || (chip_id = i2c_smbus_read_byte_data(new_client,
690 LM90_REG_R_CHIP_ID)) < 0
691 || (reg_config1 = i2c_smbus_read_byte_data(new_client,
692 LM90_REG_R_CONFIG1)) < 0
693 || (reg_convrate = i2c_smbus_read_byte_data(new_client,
694 LM90_REG_R_CONVRATE)) < 0)
695 return -ENODEV;
696
697 if ((address == 0x4C || address == 0x4D)
698 && man_id == 0x01) {
699 int reg_config2;
700
701 if ((reg_config2 = i2c_smbus_read_byte_data(new_client,
702 LM90_REG_R_CONFIG2)) < 0)
703 return -ENODEV;
704
705 if ((reg_config1 & 0x2A) == 0x00
706 && (reg_config2 & 0xF8) == 0x00
707 && reg_convrate <= 0x09) {
708 if (address == 0x4C
709 && (chip_id & 0xF0) == 0x20) {
710 kind = lm90;
711 } else
712 if ((chip_id & 0xF0) == 0x30) {
713 kind = lm99;
714 dev_info(&adapter->dev,
715 "Assuming LM99 chip at "
716 "0x%02x\n", address);
717 dev_info(&adapter->dev,
718 "If it is an LM89, pass "
719 "force_lm86=%d,0x%02x when "
720 "loading the lm90 driver\n",
721 i2c_adapter_id(adapter),
722 address);
723 } else
724 if (address == 0x4C
725 && (chip_id & 0xF0) == 0x10) {
726 kind = lm86;
727 }
728 }
729 } else
730 if ((address == 0x4C || address == 0x4D)
731 && man_id == 0x41) {
732 if ((chip_id & 0xF0) == 0x40
733 && (reg_config1 & 0x3F) == 0x00
734 && reg_convrate <= 0x0A) {
735 kind = adm1032;
736 } else
737 if (chip_id == 0x51
738 && (reg_config1 & 0x1B) == 0x00
739 && reg_convrate <= 0x0A) {
740 kind = adt7461;
741 }
742 } else
743 if (man_id == 0x4D) {
744
745
746
747
748
749
750
751
752
753 if (chip_id == man_id
754 && (address == 0x4C || address == 0x4D)
755 && (reg_config1 & 0x1F) == (man_id & 0x0F)
756 && reg_convrate <= 0x09) {
757 kind = max6657;
758 } else
759
760
761
762
763
764
765 if (chip_id == 0x01
766 && (reg_config1 & 0x03) == 0x00
767 && reg_convrate <= 0x07) {
768 kind = max6680;
769 } else
770
771
772
773
774
775 if (chip_id == 0x59
776 && (reg_config1 & 0x3f) == 0x00
777 && reg_convrate <= 0x07) {
778 kind = max6646;
779 }
780 }
781
782 if (kind <= 0) {
783 dev_dbg(&adapter->dev,
784 "Unsupported chip at 0x%02x (man_id=0x%02X, "
785 "chip_id=0x%02X)\n", address, man_id, chip_id);
786 return -ENODEV;
787 }
788 }
789
790
791 if (kind == lm90) {
792 name = "lm90";
793 } else if (kind == adm1032) {
794 name = "adm1032";
795
796
797 if (i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
798 info->flags |= I2C_CLIENT_PEC;
799 } else if (kind == lm99) {
800 name = "lm99";
801 } else if (kind == lm86) {
802 name = "lm86";
803 } else if (kind == max6657) {
804 name = "max6657";
805 } else if (kind == max6680) {
806 name = "max6680";
807 } else if (kind == adt7461) {
808 name = "adt7461";
809 } else if (kind == max6646) {
810 name = "max6646";
811 }
812 strlcpy(info->type, name, I2C_NAME_SIZE);
813
814 return 0;
815}
816
817static int lm90_probe(struct i2c_client *new_client,
818 const struct i2c_device_id *id)
819{
820 struct i2c_adapter *adapter = to_i2c_adapter(new_client->dev.parent);
821 struct lm90_data *data;
822 int err;
823
824 data = kzalloc(sizeof(struct lm90_data), GFP_KERNEL);
825 if (!data) {
826 err = -ENOMEM;
827 goto exit;
828 }
829 i2c_set_clientdata(new_client, data);
830 mutex_init(&data->update_lock);
831
832
833 data->kind = id->driver_data;
834 if (data->kind == adm1032) {
835 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
836 new_client->flags &= ~I2C_CLIENT_PEC;
837 }
838
839
840 lm90_init_client(new_client);
841
842
843 if ((err = sysfs_create_group(&new_client->dev.kobj, &lm90_group)))
844 goto exit_free;
845 if (new_client->flags & I2C_CLIENT_PEC) {
846 if ((err = device_create_file(&new_client->dev,
847 &dev_attr_pec)))
848 goto exit_remove_files;
849 }
850 if (data->kind != max6657 && data->kind != max6646) {
851 if ((err = device_create_file(&new_client->dev,
852 &sensor_dev_attr_temp2_offset.dev_attr)))
853 goto exit_remove_files;
854 }
855
856 data->hwmon_dev = hwmon_device_register(&new_client->dev);
857 if (IS_ERR(data->hwmon_dev)) {
858 err = PTR_ERR(data->hwmon_dev);
859 goto exit_remove_files;
860 }
861
862 return 0;
863
864exit_remove_files:
865 sysfs_remove_group(&new_client->dev.kobj, &lm90_group);
866 device_remove_file(&new_client->dev, &dev_attr_pec);
867exit_free:
868 kfree(data);
869exit:
870 return err;
871}
872
873static void lm90_init_client(struct i2c_client *client)
874{
875 u8 config, config_orig;
876 struct lm90_data *data = i2c_get_clientdata(client);
877
878
879
880
881 i2c_smbus_write_byte_data(client, LM90_REG_W_CONVRATE,
882 5);
883 if (lm90_read_reg(client, LM90_REG_R_CONFIG1, &config) < 0) {
884 dev_warn(&client->dev, "Initialization failed!\n");
885 return;
886 }
887 config_orig = config;
888
889
890 if (data->kind == adt7461) {
891 if (config & 0x04)
892 data->flags |= LM90_FLAG_ADT7461_EXT;
893 }
894
895
896
897
898
899
900 if (data->kind == max6680) {
901 config |= 0x18;
902 }
903
904 config &= 0xBF;
905 if (config != config_orig)
906 i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config);
907}
908
909static int lm90_remove(struct i2c_client *client)
910{
911 struct lm90_data *data = i2c_get_clientdata(client);
912
913 hwmon_device_unregister(data->hwmon_dev);
914 sysfs_remove_group(&client->dev.kobj, &lm90_group);
915 device_remove_file(&client->dev, &dev_attr_pec);
916 if (data->kind != max6657 && data->kind != max6646)
917 device_remove_file(&client->dev,
918 &sensor_dev_attr_temp2_offset.dev_attr);
919
920 kfree(data);
921 return 0;
922}
923
924static int lm90_read16(struct i2c_client *client, u8 regh, u8 regl, u16 *value)
925{
926 int err;
927 u8 oldh, newh, l;
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942 if ((err = lm90_read_reg(client, regh, &oldh))
943 || (err = lm90_read_reg(client, regl, &l))
944 || (err = lm90_read_reg(client, regh, &newh)))
945 return err;
946 if (oldh != newh) {
947 err = lm90_read_reg(client, regl, &l);
948 if (err)
949 return err;
950 }
951 *value = (newh << 8) | l;
952
953 return 0;
954}
955
956static struct lm90_data *lm90_update_device(struct device *dev)
957{
958 struct i2c_client *client = to_i2c_client(dev);
959 struct lm90_data *data = i2c_get_clientdata(client);
960
961 mutex_lock(&data->update_lock);
962
963 if (time_after(jiffies, data->last_updated + HZ * 2) || !data->valid) {
964 u8 h, l;
965
966 dev_dbg(&client->dev, "Updating lm90 data.\n");
967 lm90_read_reg(client, LM90_REG_R_LOCAL_LOW, &data->temp8[0]);
968 lm90_read_reg(client, LM90_REG_R_LOCAL_HIGH, &data->temp8[1]);
969 lm90_read_reg(client, LM90_REG_R_LOCAL_CRIT, &data->temp8[2]);
970 lm90_read_reg(client, LM90_REG_R_REMOTE_CRIT, &data->temp8[3]);
971 lm90_read_reg(client, LM90_REG_R_TCRIT_HYST, &data->temp_hyst);
972
973 if (data->kind == max6657 || data->kind == max6646) {
974 lm90_read16(client, LM90_REG_R_LOCAL_TEMP,
975 MAX6657_REG_R_LOCAL_TEMPL,
976 &data->temp11[4]);
977 } else {
978 if (lm90_read_reg(client, LM90_REG_R_LOCAL_TEMP,
979 &h) == 0)
980 data->temp11[4] = h << 8;
981 }
982 lm90_read16(client, LM90_REG_R_REMOTE_TEMPH,
983 LM90_REG_R_REMOTE_TEMPL, &data->temp11[0]);
984
985 if (lm90_read_reg(client, LM90_REG_R_REMOTE_LOWH, &h) == 0) {
986 data->temp11[1] = h << 8;
987 if (data->kind != max6657 && data->kind != max6680
988 && data->kind != max6646
989 && lm90_read_reg(client, LM90_REG_R_REMOTE_LOWL,
990 &l) == 0)
991 data->temp11[1] |= l;
992 }
993 if (lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHH, &h) == 0) {
994 data->temp11[2] = h << 8;
995 if (data->kind != max6657 && data->kind != max6680
996 && data->kind != max6646
997 && lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHL,
998 &l) == 0)
999 data->temp11[2] |= l;
1000 }
1001
1002 if (data->kind != max6657 && data->kind != max6646) {
1003 if (lm90_read_reg(client, LM90_REG_R_REMOTE_OFFSH,
1004 &h) == 0
1005 && lm90_read_reg(client, LM90_REG_R_REMOTE_OFFSL,
1006 &l) == 0)
1007 data->temp11[3] = (h << 8) | l;
1008 }
1009 lm90_read_reg(client, LM90_REG_R_STATUS, &data->alarms);
1010
1011 data->last_updated = jiffies;
1012 data->valid = 1;
1013 }
1014
1015 mutex_unlock(&data->update_lock);
1016
1017 return data;
1018}
1019
1020static int __init sensors_lm90_init(void)
1021{
1022 return i2c_add_driver(&lm90_driver);
1023}
1024
1025static void __exit sensors_lm90_exit(void)
1026{
1027 i2c_del_driver(&lm90_driver);
1028}
1029
1030MODULE_AUTHOR("Jean Delvare <khali@linux-fr.org>");
1031MODULE_DESCRIPTION("LM90/ADM1032 driver");
1032MODULE_LICENSE("GPL");
1033
1034module_init(sensors_lm90_init);
1035module_exit(sensors_lm90_exit);
1036