Skip to content

Commit

Permalink
hwmon: (lm93) Add support for LM94
Browse files Browse the repository at this point in the history
This patch adds basic support for LM94 to the LM93 driver. LM94 specific
sensors and features are not supported.

Signed-off-by: Guenter Roeck <[email protected]>
Acked-by: Jean Delvare <[email protected]>
  • Loading branch information
Guenter Roeck committed Jan 18, 2011
1 parent a25cecc commit c7bf71c
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 4 deletions.
7 changes: 7 additions & 0 deletions Documentation/hwmon/lm93
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ Supported chips:
Prefix 'lm93'
Addresses scanned: I2C 0x2c-0x2e
Datasheet: http://www.national.com/ds.cgi/LM/LM93.pdf
* National Semiconductor LM94
Prefix 'lm94'
Addresses scanned: I2C 0x2c-0x2e
Datasheet: http://www.national.com/ds.cgi/LM/LM94.pdf

Authors:
Mark M. Hoffman <[email protected]>
Expand Down Expand Up @@ -56,6 +60,9 @@ previous motherboard management ASICs and uses some of the LM85's features
for dynamic Vccp monitoring and PROCHOT. It is designed to monitor a dual
processor Xeon class motherboard with a minimum of external components.

LM94 is also supported in LM93 compatible mode. Extra sensors and features of
LM94 are not supported.


User Interface
--------------
Expand Down
4 changes: 2 additions & 2 deletions drivers/hwmon/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -618,8 +618,8 @@ config SENSORS_LM93
depends on I2C
select HWMON_VID
help
If you say yes here you get support for National Semiconductor LM93
sensor chips.
If you say yes here you get support for National Semiconductor LM93,
LM94, and compatible sensor chips.

This driver can also be built as a module. If so, the module
will be called lm93.
Expand Down
21 changes: 19 additions & 2 deletions drivers/hwmon/lm93.c
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,11 @@
#define LM93_MFR_ID 0x73
#define LM93_MFR_ID_PROTOTYPE 0x72

/* LM94 REGISTER VALUES */
#define LM94_MFR_ID_2 0x7a
#define LM94_MFR_ID 0x79
#define LM94_MFR_ID_PROTOTYPE 0x78

/* SMBus capabilities */
#define LM93_SMBUS_FUNC_FULL (I2C_FUNC_SMBUS_BYTE_DATA | \
I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_BLOCK_DATA)
Expand Down Expand Up @@ -2504,6 +2509,7 @@ static int lm93_detect(struct i2c_client *client, struct i2c_board_info *info)
{
struct i2c_adapter *adapter = client->adapter;
int mfr, ver;
const char *name;

if (!i2c_check_functionality(adapter, LM93_SMBUS_FUNC_MIN))
return -ENODEV;
Expand All @@ -2517,13 +2523,23 @@ static int lm93_detect(struct i2c_client *client, struct i2c_board_info *info)
}

ver = lm93_read_byte(client, LM93_REG_VER);
if (ver != LM93_MFR_ID && ver != LM93_MFR_ID_PROTOTYPE) {
switch (ver) {
case LM93_MFR_ID:
case LM93_MFR_ID_PROTOTYPE:
name = "lm93";
break;
case LM94_MFR_ID_2:
case LM94_MFR_ID:
case LM94_MFR_ID_PROTOTYPE:
name = "lm94";
break;
default:
dev_dbg(&adapter->dev,
"detect failed, bad version id 0x%02x!\n", ver);
return -ENODEV;
}

strlcpy(info->type, "lm93", I2C_NAME_SIZE);
strlcpy(info->type, name, I2C_NAME_SIZE);
dev_dbg(&adapter->dev,"loading %s at %d,0x%02x\n",
client->name, i2c_adapter_id(client->adapter),
client->addr);
Expand Down Expand Up @@ -2602,6 +2618,7 @@ static int lm93_remove(struct i2c_client *client)

static const struct i2c_device_id lm93_id[] = {
{ "lm93", 0 },
{ "lm94", 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, lm93_id);
Expand Down

0 comments on commit c7bf71c

Please sign in to comment.