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