Merge branch 'for-linus' of git://git.o-hand.com/linux-rpurdie-backlight
[pandora-kernel.git] / drivers / hwmon / lm90.c
1 /*
2  * lm90.c - Part of lm_sensors, Linux kernel modules for hardware
3  *          monitoring
4  * Copyright (C) 2003-2010  Jean Delvare <khali@linux-fr.org>
5  *
6  * Based on the lm83 driver. The LM90 is a sensor chip made by National
7  * Semiconductor. It reports up to two temperatures (its own plus up to
8  * one external one) with a 0.125 deg resolution (1 deg for local
9  * temperature) and a 3-4 deg accuracy.
10  *
11  * This driver also supports the LM89 and LM99, two other sensor chips
12  * made by National Semiconductor. Both have an increased remote
13  * temperature measurement accuracy (1 degree), and the LM99
14  * additionally shifts remote temperatures (measured and limits) by 16
15  * degrees, which allows for higher temperatures measurement.
16  * Note that there is no way to differentiate between both chips.
17  * When device is auto-detected, the driver will assume an LM99.
18  *
19  * This driver also supports the LM86, another sensor chip made by
20  * National Semiconductor. It is exactly similar to the LM90 except it
21  * has a higher accuracy.
22  *
23  * This driver also supports the ADM1032, a sensor chip made by Analog
24  * Devices. That chip is similar to the LM90, with a few differences
25  * that are not handled by this driver. Among others, it has a higher
26  * accuracy than the LM90, much like the LM86 does.
27  *
28  * This driver also supports the MAX6657, MAX6658 and MAX6659 sensor
29  * chips made by Maxim. These chips are similar to the LM86.
30  * Note that there is no easy way to differentiate between the three
31  * variants. The extra address and features of the MAX6659 are not
32  * supported by this driver. These chips lack the remote temperature
33  * offset feature.
34  *
35  * This driver also supports the MAX6646, MAX6647, MAX6648, MAX6649 and
36  * MAX6692 chips made by Maxim.  These are again similar to the LM86,
37  * but they use unsigned temperature values and can report temperatures
38  * from 0 to 145 degrees.
39  *
40  * This driver also supports the MAX6680 and MAX6681, two other sensor
41  * chips made by Maxim. These are quite similar to the other Maxim
42  * chips. The MAX6680 and MAX6681 only differ in the pinout so they can
43  * be treated identically.
44  *
45  * This driver also supports the ADT7461 chip from Analog Devices.
46  * It's supported in both compatibility and extended mode. It is mostly
47  * compatible with LM90 except for a data format difference for the
48  * temperature value registers.
49  *
50  * Since the LM90 was the first chipset supported by this driver, most
51  * comments will refer to this chipset, but are actually general and
52  * concern all supported chipsets, unless mentioned otherwise.
53  *
54  * This program is free software; you can redistribute it and/or modify
55  * it under the terms of the GNU General Public License as published by
56  * the Free Software Foundation; either version 2 of the License, or
57  * (at your option) any later version.
58  *
59  * This program is distributed in the hope that it will be useful,
60  * but WITHOUT ANY WARRANTY; without even the implied warranty of
61  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
62  * GNU General Public License for more details.
63  *
64  * You should have received a copy of the GNU General Public License
65  * along with this program; if not, write to the Free Software
66  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
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  * Addresses to scan
82  * Address is fully defined internally and cannot be changed except for
83  * MAX6659, MAX6680 and MAX6681.
84  * LM86, LM89, LM90, LM99, ADM1032, ADM1032-1, ADT7461, MAX6649, MAX6657
85  * and MAX6658 have address 0x4c.
86  * ADM1032-2, ADT7461-2, LM89-1, LM99-1 and MAX6646 have address 0x4d.
87  * MAX6647 has address 0x4e.
88  * MAX6659 can have address 0x4c, 0x4d or 0x4e (unsupported).
89  * MAX6680 and MAX6681 can have address 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b,
90  * 0x4c, 0x4d or 0x4e.
91  */
92
93 static const unsigned short normal_i2c[] = {
94         0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x4c, 0x4d, 0x4e, I2C_CLIENT_END };
95
96 enum chips { lm90, adm1032, lm99, lm86, max6657, adt7461, max6680, max6646,
97         w83l771 };
98
99 /*
100  * The LM90 registers
101  */
102
103 #define LM90_REG_R_MAN_ID               0xFE
104 #define LM90_REG_R_CHIP_ID              0xFF
105 #define LM90_REG_R_CONFIG1              0x03
106 #define LM90_REG_W_CONFIG1              0x09
107 #define LM90_REG_R_CONFIG2              0xBF
108 #define LM90_REG_W_CONFIG2              0xBF
109 #define LM90_REG_R_CONVRATE             0x04
110 #define LM90_REG_W_CONVRATE             0x0A
111 #define LM90_REG_R_STATUS               0x02
112 #define LM90_REG_R_LOCAL_TEMP           0x00
113 #define LM90_REG_R_LOCAL_HIGH           0x05
114 #define LM90_REG_W_LOCAL_HIGH           0x0B
115 #define LM90_REG_R_LOCAL_LOW            0x06
116 #define LM90_REG_W_LOCAL_LOW            0x0C
117 #define LM90_REG_R_LOCAL_CRIT           0x20
118 #define LM90_REG_W_LOCAL_CRIT           0x20
119 #define LM90_REG_R_REMOTE_TEMPH         0x01
120 #define LM90_REG_R_REMOTE_TEMPL         0x10
121 #define LM90_REG_R_REMOTE_OFFSH         0x11
122 #define LM90_REG_W_REMOTE_OFFSH         0x11
123 #define LM90_REG_R_REMOTE_OFFSL         0x12
124 #define LM90_REG_W_REMOTE_OFFSL         0x12
125 #define LM90_REG_R_REMOTE_HIGHH         0x07
126 #define LM90_REG_W_REMOTE_HIGHH         0x0D
127 #define LM90_REG_R_REMOTE_HIGHL         0x13
128 #define LM90_REG_W_REMOTE_HIGHL         0x13
129 #define LM90_REG_R_REMOTE_LOWH          0x08
130 #define LM90_REG_W_REMOTE_LOWH          0x0E
131 #define LM90_REG_R_REMOTE_LOWL          0x14
132 #define LM90_REG_W_REMOTE_LOWL          0x14
133 #define LM90_REG_R_REMOTE_CRIT          0x19
134 #define LM90_REG_W_REMOTE_CRIT          0x19
135 #define LM90_REG_R_TCRIT_HYST           0x21
136 #define LM90_REG_W_TCRIT_HYST           0x21
137
138 /* MAX6646/6647/6649/6657/6658/6659 registers */
139
140 #define MAX6657_REG_R_LOCAL_TEMPL       0x11
141
142 /*
143  * Device flags
144  */
145 #define LM90_FLAG_ADT7461_EXT           0x01    /* ADT7461 extended mode */
146
147 /*
148  * Functions declaration
149  */
150
151 static int lm90_detect(struct i2c_client *client, struct i2c_board_info *info);
152 static int lm90_probe(struct i2c_client *client,
153                       const struct i2c_device_id *id);
154 static void lm90_init_client(struct i2c_client *client);
155 static void lm90_alert(struct i2c_client *client, unsigned int flag);
156 static int lm90_remove(struct i2c_client *client);
157 static struct lm90_data *lm90_update_device(struct device *dev);
158
159 /*
160  * Driver data (common to all clients)
161  */
162
163 static const struct i2c_device_id lm90_id[] = {
164         { "adm1032", adm1032 },
165         { "adt7461", adt7461 },
166         { "lm90", lm90 },
167         { "lm86", lm86 },
168         { "lm89", lm86 },
169         { "lm99", lm99 },
170         { "max6646", max6646 },
171         { "max6647", max6646 },
172         { "max6649", max6646 },
173         { "max6657", max6657 },
174         { "max6658", max6657 },
175         { "max6659", max6657 },
176         { "max6680", max6680 },
177         { "max6681", max6680 },
178         { "w83l771", w83l771 },
179         { }
180 };
181 MODULE_DEVICE_TABLE(i2c, lm90_id);
182
183 static struct i2c_driver lm90_driver = {
184         .class          = I2C_CLASS_HWMON,
185         .driver = {
186                 .name   = "lm90",
187         },
188         .probe          = lm90_probe,
189         .remove         = lm90_remove,
190         .alert          = lm90_alert,
191         .id_table       = lm90_id,
192         .detect         = lm90_detect,
193         .address_list   = normal_i2c,
194 };
195
196 /*
197  * Client data (each client gets its own)
198  */
199
200 struct lm90_data {
201         struct device *hwmon_dev;
202         struct mutex update_lock;
203         char valid; /* zero until following fields are valid */
204         unsigned long last_updated; /* in jiffies */
205         int kind;
206         int flags;
207
208         u8 config_orig;         /* Original configuration register value */
209         u8 alert_alarms;        /* Which alarm bits trigger ALERT# */
210
211         /* registers values */
212         s8 temp8[4];    /* 0: local low limit
213                            1: local high limit
214                            2: local critical limit
215                            3: remote critical limit */
216         s16 temp11[5];  /* 0: remote input
217                            1: remote low limit
218                            2: remote high limit
219                            3: remote offset (except max6646 and max6657)
220                            4: local input */
221         u8 temp_hyst;
222         u8 alarms; /* bitvector */
223 };
224
225 /*
226  * Conversions
227  * For local temperatures and limits, critical limits and the hysteresis
228  * value, the LM90 uses signed 8-bit values with LSB = 1 degree Celsius.
229  * For remote temperatures and limits, it uses signed 11-bit values with
230  * LSB = 0.125 degree Celsius, left-justified in 16-bit registers.  Some
231  * Maxim chips use unsigned values.
232  */
233
234 static inline int temp_from_s8(s8 val)
235 {
236         return val * 1000;
237 }
238
239 static inline int temp_from_u8(u8 val)
240 {
241         return val * 1000;
242 }
243
244 static inline int temp_from_s16(s16 val)
245 {
246         return val / 32 * 125;
247 }
248
249 static inline int temp_from_u16(u16 val)
250 {
251         return val / 32 * 125;
252 }
253
254 static s8 temp_to_s8(long val)
255 {
256         if (val <= -128000)
257                 return -128;
258         if (val >= 127000)
259                 return 127;
260         if (val < 0)
261                 return (val - 500) / 1000;
262         return (val + 500) / 1000;
263 }
264
265 static u8 temp_to_u8(long val)
266 {
267         if (val <= 0)
268                 return 0;
269         if (val >= 255000)
270                 return 255;
271         return (val + 500) / 1000;
272 }
273
274 static s16 temp_to_s16(long val)
275 {
276         if (val <= -128000)
277                 return 0x8000;
278         if (val >= 127875)
279                 return 0x7FE0;
280         if (val < 0)
281                 return (val - 62) / 125 * 32;
282         return (val + 62) / 125 * 32;
283 }
284
285 static u8 hyst_to_reg(long val)
286 {
287         if (val <= 0)
288                 return 0;
289         if (val >= 30500)
290                 return 31;
291         return (val + 500) / 1000;
292 }
293
294 /*
295  * ADT7461 in compatibility mode is almost identical to LM90 except that
296  * attempts to write values that are outside the range 0 < temp < 127 are
297  * treated as the boundary value.
298  *
299  * ADT7461 in "extended mode" operation uses unsigned integers offset by
300  * 64 (e.g., 0 -> -64 degC).  The range is restricted to -64..191 degC.
301  */
302 static inline int temp_from_u8_adt7461(struct lm90_data *data, u8 val)
303 {
304         if (data->flags & LM90_FLAG_ADT7461_EXT)
305                 return (val - 64) * 1000;
306         else
307                 return temp_from_s8(val);
308 }
309
310 static inline int temp_from_u16_adt7461(struct lm90_data *data, u16 val)
311 {
312         if (data->flags & LM90_FLAG_ADT7461_EXT)
313                 return (val - 0x4000) / 64 * 250;
314         else
315                 return temp_from_s16(val);
316 }
317
318 static u8 temp_to_u8_adt7461(struct lm90_data *data, long val)
319 {
320         if (data->flags & LM90_FLAG_ADT7461_EXT) {
321                 if (val <= -64000)
322                         return 0;
323                 if (val >= 191000)
324                         return 0xFF;
325                 return (val + 500 + 64000) / 1000;
326         } else {
327                 if (val <= 0)
328                         return 0;
329                 if (val >= 127000)
330                         return 127;
331                 return (val + 500) / 1000;
332         }
333 }
334
335 static u16 temp_to_u16_adt7461(struct lm90_data *data, long val)
336 {
337         if (data->flags & LM90_FLAG_ADT7461_EXT) {
338                 if (val <= -64000)
339                         return 0;
340                 if (val >= 191750)
341                         return 0xFFC0;
342                 return (val + 64000 + 125) / 250 * 64;
343         } else {
344                 if (val <= 0)
345                         return 0;
346                 if (val >= 127750)
347                         return 0x7FC0;
348                 return (val + 125) / 250 * 64;
349         }
350 }
351
352 /*
353  * Sysfs stuff
354  */
355
356 static ssize_t show_temp8(struct device *dev, struct device_attribute *devattr,
357                           char *buf)
358 {
359         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
360         struct lm90_data *data = lm90_update_device(dev);
361         int temp;
362
363         if (data->kind == adt7461)
364                 temp = temp_from_u8_adt7461(data, data->temp8[attr->index]);
365         else if (data->kind == max6646)
366                 temp = temp_from_u8(data->temp8[attr->index]);
367         else
368                 temp = temp_from_s8(data->temp8[attr->index]);
369
370         /* +16 degrees offset for temp2 for the LM99 */
371         if (data->kind == lm99 && attr->index == 3)
372                 temp += 16000;
373
374         return sprintf(buf, "%d\n", temp);
375 }
376
377 static ssize_t set_temp8(struct device *dev, struct device_attribute *devattr,
378                          const char *buf, size_t count)
379 {
380         static const u8 reg[4] = {
381                 LM90_REG_W_LOCAL_LOW,
382                 LM90_REG_W_LOCAL_HIGH,
383                 LM90_REG_W_LOCAL_CRIT,
384                 LM90_REG_W_REMOTE_CRIT,
385         };
386
387         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
388         struct i2c_client *client = to_i2c_client(dev);
389         struct lm90_data *data = i2c_get_clientdata(client);
390         long val = simple_strtol(buf, NULL, 10);
391         int nr = attr->index;
392
393         /* +16 degrees offset for temp2 for the LM99 */
394         if (data->kind == lm99 && attr->index == 3)
395                 val -= 16000;
396
397         mutex_lock(&data->update_lock);
398         if (data->kind == adt7461)
399                 data->temp8[nr] = temp_to_u8_adt7461(data, val);
400         else if (data->kind == max6646)
401                 data->temp8[nr] = temp_to_u8(val);
402         else
403                 data->temp8[nr] = temp_to_s8(val);
404         i2c_smbus_write_byte_data(client, reg[nr], data->temp8[nr]);
405         mutex_unlock(&data->update_lock);
406         return count;
407 }
408
409 static ssize_t show_temp11(struct device *dev, struct device_attribute *devattr,
410                            char *buf)
411 {
412         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
413         struct lm90_data *data = lm90_update_device(dev);
414         int temp;
415
416         if (data->kind == adt7461)
417                 temp = temp_from_u16_adt7461(data, data->temp11[attr->index]);
418         else if (data->kind == max6646)
419                 temp = temp_from_u16(data->temp11[attr->index]);
420         else
421                 temp = temp_from_s16(data->temp11[attr->index]);
422
423         /* +16 degrees offset for temp2 for the LM99 */
424         if (data->kind == lm99 &&  attr->index <= 2)
425                 temp += 16000;
426
427         return sprintf(buf, "%d\n", temp);
428 }
429
430 static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr,
431                           const char *buf, size_t count)
432 {
433         static const u8 reg[6] = {
434                 LM90_REG_W_REMOTE_LOWH,
435                 LM90_REG_W_REMOTE_LOWL,
436                 LM90_REG_W_REMOTE_HIGHH,
437                 LM90_REG_W_REMOTE_HIGHL,
438                 LM90_REG_W_REMOTE_OFFSH,
439                 LM90_REG_W_REMOTE_OFFSL,
440         };
441
442         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
443         struct i2c_client *client = to_i2c_client(dev);
444         struct lm90_data *data = i2c_get_clientdata(client);
445         long val = simple_strtol(buf, NULL, 10);
446         int nr = attr->index;
447
448         /* +16 degrees offset for temp2 for the LM99 */
449         if (data->kind == lm99 && attr->index <= 2)
450                 val -= 16000;
451
452         mutex_lock(&data->update_lock);
453         if (data->kind == adt7461)
454                 data->temp11[nr] = temp_to_u16_adt7461(data, val);
455         else if (data->kind == max6657 || data->kind == max6680)
456                 data->temp11[nr] = temp_to_s8(val) << 8;
457         else if (data->kind == max6646)
458                 data->temp11[nr] = temp_to_u8(val) << 8;
459         else
460                 data->temp11[nr] = temp_to_s16(val);
461
462         i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2],
463                                   data->temp11[nr] >> 8);
464         if (data->kind != max6657 && data->kind != max6680
465             && data->kind != max6646)
466                 i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1],
467                                           data->temp11[nr] & 0xff);
468         mutex_unlock(&data->update_lock);
469         return count;
470 }
471
472 static ssize_t show_temphyst(struct device *dev, struct device_attribute *devattr,
473                              char *buf)
474 {
475         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
476         struct lm90_data *data = lm90_update_device(dev);
477         int temp;
478
479         if (data->kind == adt7461)
480                 temp = temp_from_u8_adt7461(data, data->temp8[attr->index]);
481         else if (data->kind == max6646)
482                 temp = temp_from_u8(data->temp8[attr->index]);
483         else
484                 temp = temp_from_s8(data->temp8[attr->index]);
485
486         /* +16 degrees offset for temp2 for the LM99 */
487         if (data->kind == lm99 && attr->index == 3)
488                 temp += 16000;
489
490         return sprintf(buf, "%d\n", temp - temp_from_s8(data->temp_hyst));
491 }
492
493 static ssize_t set_temphyst(struct device *dev, struct device_attribute *dummy,
494                             const char *buf, size_t count)
495 {
496         struct i2c_client *client = to_i2c_client(dev);
497         struct lm90_data *data = i2c_get_clientdata(client);
498         long val = simple_strtol(buf, NULL, 10);
499         int temp;
500
501         mutex_lock(&data->update_lock);
502         if (data->kind == adt7461)
503                 temp = temp_from_u8_adt7461(data, data->temp8[2]);
504         else if (data->kind == max6646)
505                 temp = temp_from_u8(data->temp8[2]);
506         else
507                 temp = temp_from_s8(data->temp8[2]);
508
509         data->temp_hyst = hyst_to_reg(temp - val);
510         i2c_smbus_write_byte_data(client, LM90_REG_W_TCRIT_HYST,
511                                   data->temp_hyst);
512         mutex_unlock(&data->update_lock);
513         return count;
514 }
515
516 static ssize_t show_alarms(struct device *dev, struct device_attribute *dummy,
517                            char *buf)
518 {
519         struct lm90_data *data = lm90_update_device(dev);
520         return sprintf(buf, "%d\n", data->alarms);
521 }
522
523 static ssize_t show_alarm(struct device *dev, struct device_attribute
524                           *devattr, char *buf)
525 {
526         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
527         struct lm90_data *data = lm90_update_device(dev);
528         int bitnr = attr->index;
529
530         return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
531 }
532
533 static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp11, NULL, 4);
534 static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp11, NULL, 0);
535 static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp8,
536         set_temp8, 0);
537 static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp11,
538         set_temp11, 1);
539 static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp8,
540         set_temp8, 1);
541 static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp11,
542         set_temp11, 2);
543 static SENSOR_DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, show_temp8,
544         set_temp8, 2);
545 static SENSOR_DEVICE_ATTR(temp2_crit, S_IWUSR | S_IRUGO, show_temp8,
546         set_temp8, 3);
547 static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temphyst,
548         set_temphyst, 2);
549 static SENSOR_DEVICE_ATTR(temp2_crit_hyst, S_IRUGO, show_temphyst, NULL, 3);
550 static SENSOR_DEVICE_ATTR(temp2_offset, S_IWUSR | S_IRUGO, show_temp11,
551         set_temp11, 3);
552
553 /* Individual alarm files */
554 static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 0);
555 static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 1);
556 static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_alarm, NULL, 2);
557 static SENSOR_DEVICE_ATTR(temp2_min_alarm, S_IRUGO, show_alarm, NULL, 3);
558 static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 4);
559 static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 5);
560 static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6);
561 /* Raw alarm file for compatibility */
562 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
563
564 static struct attribute *lm90_attributes[] = {
565         &sensor_dev_attr_temp1_input.dev_attr.attr,
566         &sensor_dev_attr_temp2_input.dev_attr.attr,
567         &sensor_dev_attr_temp1_min.dev_attr.attr,
568         &sensor_dev_attr_temp2_min.dev_attr.attr,
569         &sensor_dev_attr_temp1_max.dev_attr.attr,
570         &sensor_dev_attr_temp2_max.dev_attr.attr,
571         &sensor_dev_attr_temp1_crit.dev_attr.attr,
572         &sensor_dev_attr_temp2_crit.dev_attr.attr,
573         &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr,
574         &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr,
575
576         &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr,
577         &sensor_dev_attr_temp2_crit_alarm.dev_attr.attr,
578         &sensor_dev_attr_temp2_fault.dev_attr.attr,
579         &sensor_dev_attr_temp2_min_alarm.dev_attr.attr,
580         &sensor_dev_attr_temp2_max_alarm.dev_attr.attr,
581         &sensor_dev_attr_temp1_min_alarm.dev_attr.attr,
582         &sensor_dev_attr_temp1_max_alarm.dev_attr.attr,
583         &dev_attr_alarms.attr,
584         NULL
585 };
586
587 static const struct attribute_group lm90_group = {
588         .attrs = lm90_attributes,
589 };
590
591 /* pec used for ADM1032 only */
592 static ssize_t show_pec(struct device *dev, struct device_attribute *dummy,
593                         char *buf)
594 {
595         struct i2c_client *client = to_i2c_client(dev);
596         return sprintf(buf, "%d\n", !!(client->flags & I2C_CLIENT_PEC));
597 }
598
599 static ssize_t set_pec(struct device *dev, struct device_attribute *dummy,
600                        const char *buf, size_t count)
601 {
602         struct i2c_client *client = to_i2c_client(dev);
603         long val = simple_strtol(buf, NULL, 10);
604
605         switch (val) {
606         case 0:
607                 client->flags &= ~I2C_CLIENT_PEC;
608                 break;
609         case 1:
610                 client->flags |= I2C_CLIENT_PEC;
611                 break;
612         default:
613                 return -EINVAL;
614         }
615
616         return count;
617 }
618
619 static DEVICE_ATTR(pec, S_IWUSR | S_IRUGO, show_pec, set_pec);
620
621 /*
622  * Real code
623  */
624
625 /* The ADM1032 supports PEC but not on write byte transactions, so we need
626    to explicitly ask for a transaction without PEC. */
627 static inline s32 adm1032_write_byte(struct i2c_client *client, u8 value)
628 {
629         return i2c_smbus_xfer(client->adapter, client->addr,
630                               client->flags & ~I2C_CLIENT_PEC,
631                               I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
632 }
633
634 /* It is assumed that client->update_lock is held (unless we are in
635    detection or initialization steps). This matters when PEC is enabled,
636    because we don't want the address pointer to change between the write
637    byte and the read byte transactions. */
638 static int lm90_read_reg(struct i2c_client* client, u8 reg, u8 *value)
639 {
640         int err;
641
642         if (client->flags & I2C_CLIENT_PEC) {
643                 err = adm1032_write_byte(client, reg);
644                 if (err >= 0)
645                         err = i2c_smbus_read_byte(client);
646         } else
647                 err = i2c_smbus_read_byte_data(client, reg);
648
649         if (err < 0) {
650                 dev_warn(&client->dev, "Register %#02x read failed (%d)\n",
651                          reg, err);
652                 return err;
653         }
654         *value = err;
655
656         return 0;
657 }
658
659 /* Return 0 if detection is successful, -ENODEV otherwise */
660 static int lm90_detect(struct i2c_client *new_client,
661                        struct i2c_board_info *info)
662 {
663         struct i2c_adapter *adapter = new_client->adapter;
664         int address = new_client->addr;
665         const char *name = NULL;
666         int man_id, chip_id, reg_config1, reg_convrate;
667
668         if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
669                 return -ENODEV;
670
671         /* detection and identification */
672         if ((man_id = i2c_smbus_read_byte_data(new_client,
673                                                 LM90_REG_R_MAN_ID)) < 0
674          || (chip_id = i2c_smbus_read_byte_data(new_client,
675                                                 LM90_REG_R_CHIP_ID)) < 0
676          || (reg_config1 = i2c_smbus_read_byte_data(new_client,
677                                                 LM90_REG_R_CONFIG1)) < 0
678          || (reg_convrate = i2c_smbus_read_byte_data(new_client,
679                                                 LM90_REG_R_CONVRATE)) < 0)
680                 return -ENODEV;
681
682         if ((address == 0x4C || address == 0x4D)
683          && man_id == 0x01) { /* National Semiconductor */
684                 int reg_config2;
685
686                 reg_config2 = i2c_smbus_read_byte_data(new_client,
687                                                 LM90_REG_R_CONFIG2);
688                 if (reg_config2 < 0)
689                         return -ENODEV;
690
691                 if ((reg_config1 & 0x2A) == 0x00
692                  && (reg_config2 & 0xF8) == 0x00
693                  && reg_convrate <= 0x09) {
694                         if (address == 0x4C
695                          && (chip_id & 0xF0) == 0x20) { /* LM90 */
696                                 name = "lm90";
697                         } else
698                         if ((chip_id & 0xF0) == 0x30) { /* LM89/LM99 */
699                                 name = "lm99";
700                                 dev_info(&adapter->dev,
701                                          "Assuming LM99 chip at 0x%02x\n",
702                                          address);
703                                 dev_info(&adapter->dev,
704                                          "If it is an LM89, instantiate it "
705                                          "with the new_device sysfs "
706                                          "interface\n");
707                         } else
708                         if (address == 0x4C
709                          && (chip_id & 0xF0) == 0x10) { /* LM86 */
710                                 name = "lm86";
711                         }
712                 }
713         } else
714         if ((address == 0x4C || address == 0x4D)
715          && man_id == 0x41) { /* Analog Devices */
716                 if ((chip_id & 0xF0) == 0x40 /* ADM1032 */
717                  && (reg_config1 & 0x3F) == 0x00
718                  && reg_convrate <= 0x0A) {
719                         name = "adm1032";
720                         /* The ADM1032 supports PEC, but only if combined
721                            transactions are not used. */
722                         if (i2c_check_functionality(adapter,
723                                                     I2C_FUNC_SMBUS_BYTE))
724                                 info->flags |= I2C_CLIENT_PEC;
725                 } else
726                 if (chip_id == 0x51 /* ADT7461 */
727                  && (reg_config1 & 0x1B) == 0x00
728                  && reg_convrate <= 0x0A) {
729                         name = "adt7461";
730                 }
731         } else
732         if (man_id == 0x4D) { /* Maxim */
733                 /*
734                  * The MAX6657, MAX6658 and MAX6659 do NOT have a chip_id
735                  * register. Reading from that address will return the last
736                  * read value, which in our case is those of the man_id
737                  * register. Likewise, the config1 register seems to lack a
738                  * low nibble, so the value will be those of the previous
739                  * read, so in our case those of the man_id register.
740                  */
741                 if (chip_id == man_id
742                  && (address == 0x4C || address == 0x4D)
743                  && (reg_config1 & 0x1F) == (man_id & 0x0F)
744                  && reg_convrate <= 0x09) {
745                         name = "max6657";
746                 } else
747                 /*
748                  * The chip_id register of the MAX6680 and MAX6681 holds the
749                  * revision of the chip. The lowest bit of the config1 register
750                  * is unused and should return zero when read, so should the
751                  * second to last bit of config1 (software reset).
752                  */
753                 if (chip_id == 0x01
754                  && (reg_config1 & 0x03) == 0x00
755                  && reg_convrate <= 0x07) {
756                         name = "max6680";
757                 } else
758                 /*
759                  * The chip_id register of the MAX6646/6647/6649 holds the
760                  * revision of the chip. The lowest 6 bits of the config1
761                  * register are unused and should return zero when read.
762                  */
763                 if (chip_id == 0x59
764                  && (reg_config1 & 0x3f) == 0x00
765                  && reg_convrate <= 0x07) {
766                         name = "max6646";
767                 }
768         } else
769         if (address == 0x4C
770          && man_id == 0x5C) { /* Winbond/Nuvoton */
771                 if ((chip_id & 0xFE) == 0x10 /* W83L771AWG/ASG */
772                  && (reg_config1 & 0x2A) == 0x00
773                  && reg_convrate <= 0x08) {
774                         name = "w83l771";
775                 }
776         }
777
778         if (!name) { /* identification failed */
779                 dev_dbg(&adapter->dev,
780                         "Unsupported chip at 0x%02x (man_id=0x%02X, "
781                         "chip_id=0x%02X)\n", address, man_id, chip_id);
782                 return -ENODEV;
783         }
784
785         strlcpy(info->type, name, I2C_NAME_SIZE);
786
787         return 0;
788 }
789
790 static int lm90_probe(struct i2c_client *new_client,
791                       const struct i2c_device_id *id)
792 {
793         struct i2c_adapter *adapter = to_i2c_adapter(new_client->dev.parent);
794         struct lm90_data *data;
795         int err;
796
797         data = kzalloc(sizeof(struct lm90_data), GFP_KERNEL);
798         if (!data) {
799                 err = -ENOMEM;
800                 goto exit;
801         }
802         i2c_set_clientdata(new_client, data);
803         mutex_init(&data->update_lock);
804
805         /* Set the device type */
806         data->kind = id->driver_data;
807         if (data->kind == adm1032) {
808                 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
809                         new_client->flags &= ~I2C_CLIENT_PEC;
810         }
811
812         /* Different devices have different alarm bits triggering the
813          * ALERT# output */
814         switch (data->kind) {
815         case lm90:
816         case lm99:
817         case lm86:
818                 data->alert_alarms = 0x7b;
819                 break;
820         default:
821                 data->alert_alarms = 0x7c;
822                 break;
823         }
824
825         /* Initialize the LM90 chip */
826         lm90_init_client(new_client);
827
828         /* Register sysfs hooks */
829         if ((err = sysfs_create_group(&new_client->dev.kobj, &lm90_group)))
830                 goto exit_free;
831         if (new_client->flags & I2C_CLIENT_PEC) {
832                 if ((err = device_create_file(&new_client->dev,
833                                               &dev_attr_pec)))
834                         goto exit_remove_files;
835         }
836         if (data->kind != max6657 && data->kind != max6646) {
837                 if ((err = device_create_file(&new_client->dev,
838                                 &sensor_dev_attr_temp2_offset.dev_attr)))
839                         goto exit_remove_files;
840         }
841
842         data->hwmon_dev = hwmon_device_register(&new_client->dev);
843         if (IS_ERR(data->hwmon_dev)) {
844                 err = PTR_ERR(data->hwmon_dev);
845                 goto exit_remove_files;
846         }
847
848         return 0;
849
850 exit_remove_files:
851         sysfs_remove_group(&new_client->dev.kobj, &lm90_group);
852         device_remove_file(&new_client->dev, &dev_attr_pec);
853 exit_free:
854         kfree(data);
855 exit:
856         return err;
857 }
858
859 static void lm90_init_client(struct i2c_client *client)
860 {
861         u8 config;
862         struct lm90_data *data = i2c_get_clientdata(client);
863
864         /*
865          * Start the conversions.
866          */
867         i2c_smbus_write_byte_data(client, LM90_REG_W_CONVRATE,
868                                   5); /* 2 Hz */
869         if (lm90_read_reg(client, LM90_REG_R_CONFIG1, &config) < 0) {
870                 dev_warn(&client->dev, "Initialization failed!\n");
871                 return;
872         }
873         data->config_orig = config;
874
875         /* Check Temperature Range Select */
876         if (data->kind == adt7461) {
877                 if (config & 0x04)
878                         data->flags |= LM90_FLAG_ADT7461_EXT;
879         }
880
881         /*
882          * Put MAX6680/MAX8881 into extended resolution (bit 0x10,
883          * 0.125 degree resolution) and range (0x08, extend range
884          * to -64 degree) mode for the remote temperature sensor.
885          */
886         if (data->kind == max6680) {
887                 config |= 0x18;
888         }
889
890         config &= 0xBF; /* run */
891         if (config != data->config_orig) /* Only write if changed */
892                 i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config);
893 }
894
895 static int lm90_remove(struct i2c_client *client)
896 {
897         struct lm90_data *data = i2c_get_clientdata(client);
898
899         hwmon_device_unregister(data->hwmon_dev);
900         sysfs_remove_group(&client->dev.kobj, &lm90_group);
901         device_remove_file(&client->dev, &dev_attr_pec);
902         if (data->kind != max6657 && data->kind != max6646)
903                 device_remove_file(&client->dev,
904                                    &sensor_dev_attr_temp2_offset.dev_attr);
905
906         /* Restore initial configuration */
907         i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1,
908                                   data->config_orig);
909
910         kfree(data);
911         return 0;
912 }
913
914 static void lm90_alert(struct i2c_client *client, unsigned int flag)
915 {
916         struct lm90_data *data = i2c_get_clientdata(client);
917         u8 config, alarms;
918
919         lm90_read_reg(client, LM90_REG_R_STATUS, &alarms);
920         if ((alarms & 0x7f) == 0) {
921                 dev_info(&client->dev, "Everything OK\n");
922         } else {
923                 if (alarms & 0x61)
924                         dev_warn(&client->dev,
925                                  "temp%d out of range, please check!\n", 1);
926                 if (alarms & 0x1a)
927                         dev_warn(&client->dev,
928                                  "temp%d out of range, please check!\n", 2);
929                 if (alarms & 0x04)
930                         dev_warn(&client->dev,
931                                  "temp%d diode open, please check!\n", 2);
932
933                 /* Disable ALERT# output, because these chips don't implement
934                   SMBus alert correctly; they should only hold the alert line
935                   low briefly. */
936                 if ((data->kind == adm1032 || data->kind == adt7461)
937                  && (alarms & data->alert_alarms)) {
938                         dev_dbg(&client->dev, "Disabling ALERT#\n");
939                         lm90_read_reg(client, LM90_REG_R_CONFIG1, &config);
940                         i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1,
941                                                   config | 0x80);
942                 }
943         }
944 }
945
946 static int lm90_read16(struct i2c_client *client, u8 regh, u8 regl, u16 *value)
947 {
948         int err;
949         u8 oldh, newh, l;
950
951         /*
952          * There is a trick here. We have to read two registers to have the
953          * sensor temperature, but we have to beware a conversion could occur
954          * inbetween the readings. The datasheet says we should either use
955          * the one-shot conversion register, which we don't want to do
956          * (disables hardware monitoring) or monitor the busy bit, which is
957          * impossible (we can't read the values and monitor that bit at the
958          * exact same time). So the solution used here is to read the high
959          * byte once, then the low byte, then the high byte again. If the new
960          * high byte matches the old one, then we have a valid reading. Else
961          * we have to read the low byte again, and now we believe we have a
962          * correct reading.
963          */
964         if ((err = lm90_read_reg(client, regh, &oldh))
965          || (err = lm90_read_reg(client, regl, &l))
966          || (err = lm90_read_reg(client, regh, &newh)))
967                 return err;
968         if (oldh != newh) {
969                 err = lm90_read_reg(client, regl, &l);
970                 if (err)
971                         return err;
972         }
973         *value = (newh << 8) | l;
974
975         return 0;
976 }
977
978 static struct lm90_data *lm90_update_device(struct device *dev)
979 {
980         struct i2c_client *client = to_i2c_client(dev);
981         struct lm90_data *data = i2c_get_clientdata(client);
982
983         mutex_lock(&data->update_lock);
984
985         if (time_after(jiffies, data->last_updated + HZ / 2 + HZ / 10)
986          || !data->valid) {
987                 u8 h, l;
988
989                 dev_dbg(&client->dev, "Updating lm90 data.\n");
990                 lm90_read_reg(client, LM90_REG_R_LOCAL_LOW, &data->temp8[0]);
991                 lm90_read_reg(client, LM90_REG_R_LOCAL_HIGH, &data->temp8[1]);
992                 lm90_read_reg(client, LM90_REG_R_LOCAL_CRIT, &data->temp8[2]);
993                 lm90_read_reg(client, LM90_REG_R_REMOTE_CRIT, &data->temp8[3]);
994                 lm90_read_reg(client, LM90_REG_R_TCRIT_HYST, &data->temp_hyst);
995
996                 if (data->kind == max6657 || data->kind == max6646) {
997                         lm90_read16(client, LM90_REG_R_LOCAL_TEMP,
998                                     MAX6657_REG_R_LOCAL_TEMPL,
999                                     &data->temp11[4]);
1000                 } else {
1001                         if (lm90_read_reg(client, LM90_REG_R_LOCAL_TEMP,
1002                                           &h) == 0)
1003                                 data->temp11[4] = h << 8;
1004                 }
1005                 lm90_read16(client, LM90_REG_R_REMOTE_TEMPH,
1006                             LM90_REG_R_REMOTE_TEMPL, &data->temp11[0]);
1007
1008                 if (lm90_read_reg(client, LM90_REG_R_REMOTE_LOWH, &h) == 0) {
1009                         data->temp11[1] = h << 8;
1010                         if (data->kind != max6657 && data->kind != max6680
1011                          && data->kind != max6646
1012                          && lm90_read_reg(client, LM90_REG_R_REMOTE_LOWL,
1013                                           &l) == 0)
1014                                 data->temp11[1] |= l;
1015                 }
1016                 if (lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHH, &h) == 0) {
1017                         data->temp11[2] = h << 8;
1018                         if (data->kind != max6657 && data->kind != max6680
1019                          && data->kind != max6646
1020                          && lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHL,
1021                                           &l) == 0)
1022                                 data->temp11[2] |= l;
1023                 }
1024
1025                 if (data->kind != max6657 && data->kind != max6646) {
1026                         if (lm90_read_reg(client, LM90_REG_R_REMOTE_OFFSH,
1027                                           &h) == 0
1028                          && lm90_read_reg(client, LM90_REG_R_REMOTE_OFFSL,
1029                                           &l) == 0)
1030                                 data->temp11[3] = (h << 8) | l;
1031                 }
1032                 lm90_read_reg(client, LM90_REG_R_STATUS, &data->alarms);
1033
1034                 /* Re-enable ALERT# output if it was originally enabled and
1035                  * relevant alarms are all clear */
1036                 if ((data->config_orig & 0x80) == 0
1037                  && (data->alarms & data->alert_alarms) == 0) {
1038                         u8 config;
1039
1040                         lm90_read_reg(client, LM90_REG_R_CONFIG1, &config);
1041                         if (config & 0x80) {
1042                                 dev_dbg(&client->dev, "Re-enabling ALERT#\n");
1043                                 i2c_smbus_write_byte_data(client,
1044                                                           LM90_REG_W_CONFIG1,
1045                                                           config & ~0x80);
1046                         }
1047                 }
1048
1049                 data->last_updated = jiffies;
1050                 data->valid = 1;
1051         }
1052
1053         mutex_unlock(&data->update_lock);
1054
1055         return data;
1056 }
1057
1058 static int __init sensors_lm90_init(void)
1059 {
1060         return i2c_add_driver(&lm90_driver);
1061 }
1062
1063 static void __exit sensors_lm90_exit(void)
1064 {
1065         i2c_del_driver(&lm90_driver);
1066 }
1067
1068 MODULE_AUTHOR("Jean Delvare <khali@linux-fr.org>");
1069 MODULE_DESCRIPTION("LM90/ADM1032 driver");
1070 MODULE_LICENSE("GPL");
1071
1072 module_init(sensors_lm90_init);
1073 module_exit(sensors_lm90_exit);