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