Skip to content

Commit

Permalink
[PATCH] lm83: Add LM82 support
Browse files Browse the repository at this point in the history
Add LM82 temperature sensor support (similar to the LM83,
but less featureful).

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Jordan Crouse authored and Greg Kroah-Hartman committed Jun 22, 2006
1 parent 52ab3f3 commit 43cb7eb
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 19 deletions.
16 changes: 12 additions & 4 deletions Documentation/hwmon/lm83
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ Supported chips:
Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e
Datasheet: Publicly available at the National Semiconductor website
http://www.national.com/pf/LM/LM83.html
* National Semiconductor LM82
Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e
Datasheet: Publicly available at the National Semiconductor website
http://www.national.com/pf/LM/LM82.html


Author: Jean Delvare <khali@linux-fr.org>
Expand All @@ -15,10 +19,11 @@ Description
-----------

The LM83 is a digital temperature sensor. It senses its own temperature as
well as the temperature of up to three external diodes. It is compatible
with many other devices such as the LM84 and all other ADM1021 clones.
The main difference between the LM83 and the LM84 in that the later can
only sense the temperature of one external diode.
well as the temperature of up to three external diodes. The LM82 is
a stripped down version of the LM83 that only supports one external diode.
Both are compatible with many other devices such as the LM84 and all
other ADM1021 clones. The main difference between the LM83 and the LM84
in that the later can only sense the temperature of one external diode.

Using the adm1021 driver for a LM83 should work, but only two temperatures
will be reported instead of four.
Expand All @@ -36,6 +41,9 @@ Unconfirmed motherboards:
Iwill MPX2
Soltek SL-75DRV5

The LM82 is confirmed to have been found on most AMD Geode reference
designs and test platforms.

The driver has been successfully tested by Magnus Forsstr�m, who I'd
like to thank here. More testers will be of course welcome.

Expand Down
4 changes: 2 additions & 2 deletions drivers/hwmon/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -236,11 +236,11 @@ config SENSORS_LM80
will be called lm80.

config SENSORS_LM83
tristate "National Semiconductor LM83"
tristate "National Semiconductor LM83 and compatibles"
depends on HWMON && I2C
help
If you say yes here you get support for National Semiconductor
LM83 sensor chips.
LM82 and LM83 sensor chips.

This driver can also be built as a module. If so, the module
will be called lm83.
Expand Down
50 changes: 37 additions & 13 deletions drivers/hwmon/lm83.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
* Since the datasheet omits to give the chip stepping code, I give it
* here: 0x03 (at register 0xff).
*
* Also supports the LM82 temp sensor, which is basically a stripped down
* model of the LM83. Datasheet is here:
* http://www.national.com/pf/LM/LM82.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
Expand Down Expand Up @@ -52,7 +56,7 @@ static unsigned short normal_i2c[] = { 0x18, 0x19, 0x1a,
* Insmod parameters
*/

I2C_CLIENT_INSMOD_1(lm83);
I2C_CLIENT_INSMOD_2(lm83, lm82);

/*
* The LM83 registers
Expand Down Expand Up @@ -283,6 +287,9 @@ static int lm83_detect(struct i2c_adapter *adapter, int address, int kind)
if (man_id == 0x01) { /* National Semiconductor */
if (chip_id == 0x03) {
kind = lm83;
} else
if (chip_id == 0x01) {
kind = lm82;
}
}

Expand All @@ -296,6 +303,9 @@ static int lm83_detect(struct i2c_adapter *adapter, int address, int kind)

if (kind == lm83) {
name = "lm83";
} else
if (kind == lm82) {
name = "lm82";
}

/* We can fill in the remaining client fields */
Expand All @@ -319,32 +329,46 @@ static int lm83_detect(struct i2c_adapter *adapter, int address, int kind)
goto exit_detach;
}

/*
* The LM82 can only monitor one external diode which is
* at the same register as the LM83 temp3 entry - so we
* declare 1 and 3 common, and then 2 and 4 only for the LM83.
*/

device_create_file(&new_client->dev,
&sensor_dev_attr_temp1_input.dev_attr);
device_create_file(&new_client->dev,
&sensor_dev_attr_temp2_input.dev_attr);
device_create_file(&new_client->dev,
&sensor_dev_attr_temp3_input.dev_attr);
device_create_file(&new_client->dev,
&sensor_dev_attr_temp4_input.dev_attr);

device_create_file(&new_client->dev,
&sensor_dev_attr_temp1_max.dev_attr);
device_create_file(&new_client->dev,
&sensor_dev_attr_temp2_max.dev_attr);
device_create_file(&new_client->dev,
&sensor_dev_attr_temp3_max.dev_attr);
device_create_file(&new_client->dev,
&sensor_dev_attr_temp4_max.dev_attr);

device_create_file(&new_client->dev,
&sensor_dev_attr_temp1_crit.dev_attr);
device_create_file(&new_client->dev,
&sensor_dev_attr_temp2_crit.dev_attr);
device_create_file(&new_client->dev,
&sensor_dev_attr_temp3_crit.dev_attr);
device_create_file(&new_client->dev,
&sensor_dev_attr_temp4_crit.dev_attr);

device_create_file(&new_client->dev, &dev_attr_alarms);

if (kind == lm83) {
device_create_file(&new_client->dev,
&sensor_dev_attr_temp2_input.dev_attr);
device_create_file(&new_client->dev,
&sensor_dev_attr_temp4_input.dev_attr);

device_create_file(&new_client->dev,
&sensor_dev_attr_temp2_max.dev_attr);
device_create_file(&new_client->dev,
&sensor_dev_attr_temp4_max.dev_attr);

device_create_file(&new_client->dev,
&sensor_dev_attr_temp2_crit.dev_attr);
device_create_file(&new_client->dev,
&sensor_dev_attr_temp4_crit.dev_attr);
}

return 0;

exit_detach:
Expand Down

0 comments on commit 43cb7eb

Please sign in to comment.