2 * lm90.c - Part of lm_sensors, Linux kernel modules for hardware
4 * Copyright (C) 2003-2008 Jean Delvare <khali@linux-fr.org>
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.
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. The
16 * driver doesn't handle it since it can be done easily in user-space.
17 * Note that there is no way to differentiate between both chips.
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.
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.
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
35 * This driver also supports the MAX6680 and MAX6681, two other sensor
36 * chips made by Maxim. These are quite similar to the other Maxim
37 * chips. The MAX6680 and MAX6681 only differ in the pinout so they can
38 * be treated identically.
40 * This driver also supports the ADT7461 chip from Analog Devices but
41 * only in its "compatability mode". If an ADT7461 chip is found but
42 * is configured in non-compatible mode (where its temperature
43 * register values are decoded differently) it is ignored by this
46 * Since the LM90 was the first chipset supported by this driver, most
47 * comments will refer to this chipset, but are actually general and
48 * concern all supported chipsets, unless mentioned otherwise.
50 * This program is free software; you can redistribute it and/or modify
51 * it under the terms of the GNU General Public License as published by
52 * the Free Software Foundation; either version 2 of the License, or
53 * (at your option) any later version.
55 * This program is distributed in the hope that it will be useful,
56 * but WITHOUT ANY WARRANTY; without even the implied warranty of
57 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
58 * GNU General Public License for more details.
60 * You should have received a copy of the GNU General Public License
61 * along with this program; if not, write to the Free Software
62 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
65 #include <linux/module.h>
66 #include <linux/init.h>
67 #include <linux/slab.h>
68 #include <linux/jiffies.h>
69 #include <linux/i2c.h>
70 #include <linux/hwmon-sysfs.h>
71 #include <linux/hwmon.h>
72 #include <linux/err.h>
73 #include <linux/mutex.h>
74 #include <linux/sysfs.h>
78 * Address is fully defined internally and cannot be changed except for
79 * MAX6659, MAX6680 and MAX6681.
80 * LM86, LM89, LM90, LM99, ADM1032, ADM1032-1, ADT7461, MAX6657 and MAX6658
82 * ADM1032-2, ADT7461-2, LM89-1, and LM99-1 have address 0x4d.
83 * MAX6659 can have address 0x4c, 0x4d or 0x4e (unsupported).
84 * MAX6680 and MAX6681 can have address 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b,
88 static const unsigned short normal_i2c[] = {
89 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x4c, 0x4d, 0x4e, I2C_CLIENT_END };
95 I2C_CLIENT_INSMOD_7(lm90, adm1032, lm99, lm86, max6657, adt7461, max6680);
101 #define LM90_REG_R_MAN_ID 0xFE
102 #define LM90_REG_R_CHIP_ID 0xFF
103 #define LM90_REG_R_CONFIG1 0x03
104 #define LM90_REG_W_CONFIG1 0x09
105 #define LM90_REG_R_CONFIG2 0xBF
106 #define LM90_REG_W_CONFIG2 0xBF
107 #define LM90_REG_R_CONVRATE 0x04
108 #define LM90_REG_W_CONVRATE 0x0A
109 #define LM90_REG_R_STATUS 0x02
110 #define LM90_REG_R_LOCAL_TEMP 0x00
111 #define LM90_REG_R_LOCAL_HIGH 0x05
112 #define LM90_REG_W_LOCAL_HIGH 0x0B
113 #define LM90_REG_R_LOCAL_LOW 0x06
114 #define LM90_REG_W_LOCAL_LOW 0x0C
115 #define LM90_REG_R_LOCAL_CRIT 0x20
116 #define LM90_REG_W_LOCAL_CRIT 0x20
117 #define LM90_REG_R_REMOTE_TEMPH 0x01
118 #define LM90_REG_R_REMOTE_TEMPL 0x10
119 #define LM90_REG_R_REMOTE_OFFSH 0x11
120 #define LM90_REG_W_REMOTE_OFFSH 0x11
121 #define LM90_REG_R_REMOTE_OFFSL 0x12
122 #define LM90_REG_W_REMOTE_OFFSL 0x12
123 #define LM90_REG_R_REMOTE_HIGHH 0x07
124 #define LM90_REG_W_REMOTE_HIGHH 0x0D
125 #define LM90_REG_R_REMOTE_HIGHL 0x13
126 #define LM90_REG_W_REMOTE_HIGHL 0x13
127 #define LM90_REG_R_REMOTE_LOWH 0x08
128 #define LM90_REG_W_REMOTE_LOWH 0x0E
129 #define LM90_REG_R_REMOTE_LOWL 0x14
130 #define LM90_REG_W_REMOTE_LOWL 0x14
131 #define LM90_REG_R_REMOTE_CRIT 0x19
132 #define LM90_REG_W_REMOTE_CRIT 0x19
133 #define LM90_REG_R_TCRIT_HYST 0x21
134 #define LM90_REG_W_TCRIT_HYST 0x21
136 /* MAX6657-specific registers */
138 #define MAX6657_REG_R_LOCAL_TEMPL 0x11
141 * Functions declaration
144 static int lm90_detect(struct i2c_client *client, int kind,
145 struct i2c_board_info *info);
146 static int lm90_probe(struct i2c_client *client,
147 const struct i2c_device_id *id);
148 static void lm90_init_client(struct i2c_client *client);
149 static int lm90_remove(struct i2c_client *client);
150 static struct lm90_data *lm90_update_device(struct device *dev);
153 * Driver data (common to all clients)
156 static const struct i2c_device_id lm90_id[] = {
157 { "adm1032", adm1032 },
158 { "adt7461", adt7461 },
162 { "lm99", lm99 }, /* Missing temperature offset */
163 { "max6657", max6657 },
164 { "max6658", max6657 },
165 { "max6659", max6657 },
166 { "max6680", max6680 },
167 { "max6681", max6680 },
170 MODULE_DEVICE_TABLE(i2c, lm90_id);
172 static struct i2c_driver lm90_driver = {
173 .class = I2C_CLASS_HWMON,
178 .remove = lm90_remove,
180 .detect = lm90_detect,
181 .address_data = &addr_data,
185 * Client data (each client gets its own)
189 struct device *hwmon_dev;
190 struct mutex update_lock;
191 char valid; /* zero until following fields are valid */
192 unsigned long last_updated; /* in jiffies */
195 /* registers values */
196 s8 temp8[4]; /* 0: local low limit
198 2: local critical limit
199 3: remote critical limit */
200 s16 temp11[5]; /* 0: remote input
203 3: remote offset (except max6657)
206 u8 alarms; /* bitvector */
211 * For local temperatures and limits, critical limits and the hysteresis
212 * value, the LM90 uses signed 8-bit values with LSB = 1 degree Celsius.
213 * For remote temperatures and limits, it uses signed 11-bit values with
214 * LSB = 0.125 degree Celsius, left-justified in 16-bit registers.
217 static inline int temp1_from_reg(s8 val)
222 static inline int temp2_from_reg(s16 val)
224 return val / 32 * 125;
227 static s8 temp1_to_reg(long val)
234 return (val - 500) / 1000;
235 return (val + 500) / 1000;
238 static s16 temp2_to_reg(long val)
245 return (val - 62) / 125 * 32;
246 return (val + 62) / 125 * 32;
249 static u8 hyst_to_reg(long val)
255 return (val + 500) / 1000;
259 * ADT7461 is almost identical to LM90 except that attempts to write
260 * values that are outside the range 0 < temp < 127 are treated as
261 * the boundary value.
263 static u8 temp1_to_reg_adt7461(long val)
269 return (val + 500) / 1000;
272 static u16 temp2_to_reg_adt7461(long val)
278 return (val + 125) / 250 * 64;
285 static ssize_t show_temp8(struct device *dev, struct device_attribute *devattr,
288 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
289 struct lm90_data *data = lm90_update_device(dev);
290 return sprintf(buf, "%d\n", temp1_from_reg(data->temp8[attr->index]));
293 static ssize_t set_temp8(struct device *dev, struct device_attribute *devattr,
294 const char *buf, size_t count)
296 static const u8 reg[4] = {
297 LM90_REG_W_LOCAL_LOW,
298 LM90_REG_W_LOCAL_HIGH,
299 LM90_REG_W_LOCAL_CRIT,
300 LM90_REG_W_REMOTE_CRIT,
303 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
304 struct i2c_client *client = to_i2c_client(dev);
305 struct lm90_data *data = i2c_get_clientdata(client);
306 long val = simple_strtol(buf, NULL, 10);
307 int nr = attr->index;
309 mutex_lock(&data->update_lock);
310 if (data->kind == adt7461)
311 data->temp8[nr] = temp1_to_reg_adt7461(val);
313 data->temp8[nr] = temp1_to_reg(val);
314 i2c_smbus_write_byte_data(client, reg[nr], data->temp8[nr]);
315 mutex_unlock(&data->update_lock);
319 static ssize_t show_temp11(struct device *dev, struct device_attribute *devattr,
322 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
323 struct lm90_data *data = lm90_update_device(dev);
324 return sprintf(buf, "%d\n", temp2_from_reg(data->temp11[attr->index]));
327 static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr,
328 const char *buf, size_t count)
330 static const u8 reg[6] = {
331 LM90_REG_W_REMOTE_LOWH,
332 LM90_REG_W_REMOTE_LOWL,
333 LM90_REG_W_REMOTE_HIGHH,
334 LM90_REG_W_REMOTE_HIGHL,
335 LM90_REG_W_REMOTE_OFFSH,
336 LM90_REG_W_REMOTE_OFFSL,
339 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
340 struct i2c_client *client = to_i2c_client(dev);
341 struct lm90_data *data = i2c_get_clientdata(client);
342 long val = simple_strtol(buf, NULL, 10);
343 int nr = attr->index;
345 mutex_lock(&data->update_lock);
346 if (data->kind == adt7461)
347 data->temp11[nr] = temp2_to_reg_adt7461(val);
348 else if (data->kind == max6657 || data->kind == max6680)
349 data->temp11[nr] = temp1_to_reg(val) << 8;
351 data->temp11[nr] = temp2_to_reg(val);
353 i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2],
354 data->temp11[nr] >> 8);
355 if (data->kind != max6657 && data->kind != max6680)
356 i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1],
357 data->temp11[nr] & 0xff);
358 mutex_unlock(&data->update_lock);
362 static ssize_t show_temphyst(struct device *dev, struct device_attribute *devattr,
365 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
366 struct lm90_data *data = lm90_update_device(dev);
367 return sprintf(buf, "%d\n", temp1_from_reg(data->temp8[attr->index])
368 - temp1_from_reg(data->temp_hyst));
371 static ssize_t set_temphyst(struct device *dev, struct device_attribute *dummy,
372 const char *buf, size_t count)
374 struct i2c_client *client = to_i2c_client(dev);
375 struct lm90_data *data = i2c_get_clientdata(client);
376 long val = simple_strtol(buf, NULL, 10);
379 mutex_lock(&data->update_lock);
380 hyst = temp1_from_reg(data->temp8[2]) - val;
381 i2c_smbus_write_byte_data(client, LM90_REG_W_TCRIT_HYST,
383 mutex_unlock(&data->update_lock);
387 static ssize_t show_alarms(struct device *dev, struct device_attribute *dummy,
390 struct lm90_data *data = lm90_update_device(dev);
391 return sprintf(buf, "%d\n", data->alarms);
394 static ssize_t show_alarm(struct device *dev, struct device_attribute
397 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
398 struct lm90_data *data = lm90_update_device(dev);
399 int bitnr = attr->index;
401 return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
404 static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp11, NULL, 4);
405 static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp11, NULL, 0);
406 static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp8,
408 static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp11,
410 static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp8,
412 static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp11,
414 static SENSOR_DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, show_temp8,
416 static SENSOR_DEVICE_ATTR(temp2_crit, S_IWUSR | S_IRUGO, show_temp8,
418 static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temphyst,
420 static SENSOR_DEVICE_ATTR(temp2_crit_hyst, S_IRUGO, show_temphyst, NULL, 3);
421 static SENSOR_DEVICE_ATTR(temp2_offset, S_IWUSR | S_IRUGO, show_temp11,
424 /* Individual alarm files */
425 static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 0);
426 static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 1);
427 static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_alarm, NULL, 2);
428 static SENSOR_DEVICE_ATTR(temp2_min_alarm, S_IRUGO, show_alarm, NULL, 3);
429 static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 4);
430 static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 5);
431 static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6);
432 /* Raw alarm file for compatibility */
433 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
435 static struct attribute *lm90_attributes[] = {
436 &sensor_dev_attr_temp1_input.dev_attr.attr,
437 &sensor_dev_attr_temp2_input.dev_attr.attr,
438 &sensor_dev_attr_temp1_min.dev_attr.attr,
439 &sensor_dev_attr_temp2_min.dev_attr.attr,
440 &sensor_dev_attr_temp1_max.dev_attr.attr,
441 &sensor_dev_attr_temp2_max.dev_attr.attr,
442 &sensor_dev_attr_temp1_crit.dev_attr.attr,
443 &sensor_dev_attr_temp2_crit.dev_attr.attr,
444 &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr,
445 &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr,
447 &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr,
448 &sensor_dev_attr_temp2_crit_alarm.dev_attr.attr,
449 &sensor_dev_attr_temp2_fault.dev_attr.attr,
450 &sensor_dev_attr_temp2_min_alarm.dev_attr.attr,
451 &sensor_dev_attr_temp2_max_alarm.dev_attr.attr,
452 &sensor_dev_attr_temp1_min_alarm.dev_attr.attr,
453 &sensor_dev_attr_temp1_max_alarm.dev_attr.attr,
454 &dev_attr_alarms.attr,
458 static const struct attribute_group lm90_group = {
459 .attrs = lm90_attributes,
462 /* pec used for ADM1032 only */
463 static ssize_t show_pec(struct device *dev, struct device_attribute *dummy,
466 struct i2c_client *client = to_i2c_client(dev);
467 return sprintf(buf, "%d\n", !!(client->flags & I2C_CLIENT_PEC));
470 static ssize_t set_pec(struct device *dev, struct device_attribute *dummy,
471 const char *buf, size_t count)
473 struct i2c_client *client = to_i2c_client(dev);
474 long val = simple_strtol(buf, NULL, 10);
478 client->flags &= ~I2C_CLIENT_PEC;
481 client->flags |= I2C_CLIENT_PEC;
490 static DEVICE_ATTR(pec, S_IWUSR | S_IRUGO, show_pec, set_pec);
496 /* The ADM1032 supports PEC but not on write byte transactions, so we need
497 to explicitly ask for a transaction without PEC. */
498 static inline s32 adm1032_write_byte(struct i2c_client *client, u8 value)
500 return i2c_smbus_xfer(client->adapter, client->addr,
501 client->flags & ~I2C_CLIENT_PEC,
502 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
505 /* It is assumed that client->update_lock is held (unless we are in
506 detection or initialization steps). This matters when PEC is enabled,
507 because we don't want the address pointer to change between the write
508 byte and the read byte transactions. */
509 static int lm90_read_reg(struct i2c_client* client, u8 reg, u8 *value)
513 if (client->flags & I2C_CLIENT_PEC) {
514 err = adm1032_write_byte(client, reg);
516 err = i2c_smbus_read_byte(client);
518 err = i2c_smbus_read_byte_data(client, reg);
521 dev_warn(&client->dev, "Register %#02x read failed (%d)\n",
530 /* Return 0 if detection is successful, -ENODEV otherwise */
531 static int lm90_detect(struct i2c_client *new_client, int kind,
532 struct i2c_board_info *info)
534 struct i2c_adapter *adapter = new_client->adapter;
535 int address = new_client->addr;
536 const char *name = "";
538 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
542 * Now we do the remaining detection. A negative kind means that
543 * the driver was loaded with no force parameter (default), so we
544 * must both detect and identify the chip. A zero kind means that
545 * the driver was loaded with the force parameter, the detection
546 * step shall be skipped. A positive kind means that the driver
547 * was loaded with the force parameter and a given kind of chip is
548 * requested, so both the detection and the identification steps
552 /* Default to an LM90 if forced */
556 if (kind < 0) { /* detection and identification */
557 int man_id, chip_id, reg_config1, reg_convrate;
559 if ((man_id = i2c_smbus_read_byte_data(new_client,
560 LM90_REG_R_MAN_ID)) < 0
561 || (chip_id = i2c_smbus_read_byte_data(new_client,
562 LM90_REG_R_CHIP_ID)) < 0
563 || (reg_config1 = i2c_smbus_read_byte_data(new_client,
564 LM90_REG_R_CONFIG1)) < 0
565 || (reg_convrate = i2c_smbus_read_byte_data(new_client,
566 LM90_REG_R_CONVRATE)) < 0)
569 if ((address == 0x4C || address == 0x4D)
570 && man_id == 0x01) { /* National Semiconductor */
573 if ((reg_config2 = i2c_smbus_read_byte_data(new_client,
574 LM90_REG_R_CONFIG2)) < 0)
577 if ((reg_config1 & 0x2A) == 0x00
578 && (reg_config2 & 0xF8) == 0x00
579 && reg_convrate <= 0x09) {
581 && (chip_id & 0xF0) == 0x20) { /* LM90 */
584 if ((chip_id & 0xF0) == 0x30) { /* LM89/LM99 */
588 && (chip_id & 0xF0) == 0x10) { /* LM86 */
593 if ((address == 0x4C || address == 0x4D)
594 && man_id == 0x41) { /* Analog Devices */
595 if ((chip_id & 0xF0) == 0x40 /* ADM1032 */
596 && (reg_config1 & 0x3F) == 0x00
597 && reg_convrate <= 0x0A) {
600 if (chip_id == 0x51 /* ADT7461 */
601 && (reg_config1 & 0x1F) == 0x00 /* check compat mode */
602 && reg_convrate <= 0x0A) {
606 if (man_id == 0x4D) { /* Maxim */
608 * The MAX6657, MAX6658 and MAX6659 do NOT have a
609 * chip_id register. Reading from that address will
610 * return the last read value, which in our case is
611 * those of the man_id register. Likewise, the config1
612 * register seems to lack a low nibble, so the value
613 * will be those of the previous read, so in our case
614 * those of the man_id register.
616 if (chip_id == man_id
617 && (address == 0x4C || address == 0x4D)
618 && (reg_config1 & 0x1F) == (man_id & 0x0F)
619 && reg_convrate <= 0x09) {
622 /* The chip_id register of the MAX6680 and MAX6681
623 * holds the revision of the chip.
624 * the lowest bit of the config1 register is unused
625 * and should return zero when read, so should the
626 * second to last bit of config1 (software reset)
629 && (reg_config1 & 0x03) == 0x00
630 && reg_convrate <= 0x07) {
635 if (kind <= 0) { /* identification failed */
636 dev_info(&adapter->dev,
637 "Unsupported chip (man_id=0x%02X, "
638 "chip_id=0x%02X).\n", man_id, chip_id);
643 /* Fill the i2c board info */
646 } else if (kind == adm1032) {
648 /* The ADM1032 supports PEC, but only if combined
649 transactions are not used. */
650 if (i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
651 info->flags |= I2C_CLIENT_PEC;
652 } else if (kind == lm99) {
654 } else if (kind == lm86) {
656 } else if (kind == max6657) {
658 } else if (kind == max6680) {
660 } else if (kind == adt7461) {
663 strlcpy(info->type, name, I2C_NAME_SIZE);
668 static int lm90_probe(struct i2c_client *new_client,
669 const struct i2c_device_id *id)
671 struct i2c_adapter *adapter = to_i2c_adapter(new_client->dev.parent);
672 struct lm90_data *data;
675 data = kzalloc(sizeof(struct lm90_data), GFP_KERNEL);
680 i2c_set_clientdata(new_client, data);
681 mutex_init(&data->update_lock);
683 /* Set the device type */
684 data->kind = id->driver_data;
685 if (data->kind == adm1032) {
686 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
687 new_client->flags &= ~I2C_CLIENT_PEC;
690 /* Initialize the LM90 chip */
691 lm90_init_client(new_client);
693 /* Register sysfs hooks */
694 if ((err = sysfs_create_group(&new_client->dev.kobj, &lm90_group)))
696 if (new_client->flags & I2C_CLIENT_PEC) {
697 if ((err = device_create_file(&new_client->dev,
699 goto exit_remove_files;
701 if (data->kind != max6657) {
702 if ((err = device_create_file(&new_client->dev,
703 &sensor_dev_attr_temp2_offset.dev_attr)))
704 goto exit_remove_files;
707 data->hwmon_dev = hwmon_device_register(&new_client->dev);
708 if (IS_ERR(data->hwmon_dev)) {
709 err = PTR_ERR(data->hwmon_dev);
710 goto exit_remove_files;
716 sysfs_remove_group(&new_client->dev.kobj, &lm90_group);
717 device_remove_file(&new_client->dev, &dev_attr_pec);
724 static void lm90_init_client(struct i2c_client *client)
726 u8 config, config_orig;
727 struct lm90_data *data = i2c_get_clientdata(client);
730 * Start the conversions.
732 i2c_smbus_write_byte_data(client, LM90_REG_W_CONVRATE,
734 if (lm90_read_reg(client, LM90_REG_R_CONFIG1, &config) < 0) {
735 dev_warn(&client->dev, "Initialization failed!\n");
738 config_orig = config;
741 * Put MAX6680/MAX8881 into extended resolution (bit 0x10,
742 * 0.125 degree resolution) and range (0x08, extend range
743 * to -64 degree) mode for the remote temperature sensor.
745 if (data->kind == max6680) {
749 config &= 0xBF; /* run */
750 if (config != config_orig) /* Only write if changed */
751 i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config);
754 static int lm90_remove(struct i2c_client *client)
756 struct lm90_data *data = i2c_get_clientdata(client);
758 hwmon_device_unregister(data->hwmon_dev);
759 sysfs_remove_group(&client->dev.kobj, &lm90_group);
760 device_remove_file(&client->dev, &dev_attr_pec);
761 if (data->kind != max6657)
762 device_remove_file(&client->dev,
763 &sensor_dev_attr_temp2_offset.dev_attr);
769 static int lm90_read16(struct i2c_client *client, u8 regh, u8 regl, u16 *value)
775 * There is a trick here. We have to read two registers to have the
776 * sensor temperature, but we have to beware a conversion could occur
777 * inbetween the readings. The datasheet says we should either use
778 * the one-shot conversion register, which we don't want to do
779 * (disables hardware monitoring) or monitor the busy bit, which is
780 * impossible (we can't read the values and monitor that bit at the
781 * exact same time). So the solution used here is to read the high
782 * byte once, then the low byte, then the high byte again. If the new
783 * high byte matches the old one, then we have a valid reading. Else
784 * we have to read the low byte again, and now we believe we have a
787 if ((err = lm90_read_reg(client, regh, &oldh))
788 || (err = lm90_read_reg(client, regl, &l))
789 || (err = lm90_read_reg(client, regh, &newh)))
792 err = lm90_read_reg(client, regl, &l);
796 *value = (newh << 8) | l;
801 static struct lm90_data *lm90_update_device(struct device *dev)
803 struct i2c_client *client = to_i2c_client(dev);
804 struct lm90_data *data = i2c_get_clientdata(client);
806 mutex_lock(&data->update_lock);
808 if (time_after(jiffies, data->last_updated + HZ * 2) || !data->valid) {
811 dev_dbg(&client->dev, "Updating lm90 data.\n");
812 lm90_read_reg(client, LM90_REG_R_LOCAL_LOW, &data->temp8[0]);
813 lm90_read_reg(client, LM90_REG_R_LOCAL_HIGH, &data->temp8[1]);
814 lm90_read_reg(client, LM90_REG_R_LOCAL_CRIT, &data->temp8[2]);
815 lm90_read_reg(client, LM90_REG_R_REMOTE_CRIT, &data->temp8[3]);
816 lm90_read_reg(client, LM90_REG_R_TCRIT_HYST, &data->temp_hyst);
818 if (data->kind == max6657) {
819 lm90_read16(client, LM90_REG_R_LOCAL_TEMP,
820 MAX6657_REG_R_LOCAL_TEMPL,
823 if (lm90_read_reg(client, LM90_REG_R_LOCAL_TEMP,
825 data->temp11[4] = h << 8;
827 lm90_read16(client, LM90_REG_R_REMOTE_TEMPH,
828 LM90_REG_R_REMOTE_TEMPL, &data->temp11[0]);
830 if (lm90_read_reg(client, LM90_REG_R_REMOTE_LOWH, &h) == 0) {
831 data->temp11[1] = h << 8;
832 if (data->kind != max6657 && data->kind != max6680
833 && lm90_read_reg(client, LM90_REG_R_REMOTE_LOWL,
835 data->temp11[1] |= l;
837 if (lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHH, &h) == 0) {
838 data->temp11[2] = h << 8;
839 if (data->kind != max6657 && data->kind != max6680
840 && lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHL,
842 data->temp11[2] |= l;
845 if (data->kind != max6657) {
846 if (lm90_read_reg(client, LM90_REG_R_REMOTE_OFFSH,
848 && lm90_read_reg(client, LM90_REG_R_REMOTE_OFFSL,
850 data->temp11[3] = (h << 8) | l;
852 lm90_read_reg(client, LM90_REG_R_STATUS, &data->alarms);
854 data->last_updated = jiffies;
858 mutex_unlock(&data->update_lock);
863 static int __init sensors_lm90_init(void)
865 return i2c_add_driver(&lm90_driver);
868 static void __exit sensors_lm90_exit(void)
870 i2c_del_driver(&lm90_driver);
873 MODULE_AUTHOR("Jean Delvare <khali@linux-fr.org>");
874 MODULE_DESCRIPTION("LM90/ADM1032 driver");
875 MODULE_LICENSE("GPL");
877 module_init(sensors_lm90_init);
878 module_exit(sensors_lm90_exit);