Merge branch 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/staging
* 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/staging: hwmon: (lm93) Add support for LM94
This commit is contained in:
commit
39f3b1a687
@ -6,6 +6,10 @@ Supported chips:
|
|||||||
Prefix 'lm93'
|
Prefix 'lm93'
|
||||||
Addresses scanned: I2C 0x2c-0x2e
|
Addresses scanned: I2C 0x2c-0x2e
|
||||||
Datasheet: http://www.national.com/ds.cgi/LM/LM93.pdf
|
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:
|
Authors:
|
||||||
Mark M. Hoffman <mhoffman@lightlink.com>
|
Mark M. Hoffman <mhoffman@lightlink.com>
|
||||||
@ -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
|
for dynamic Vccp monitoring and PROCHOT. It is designed to monitor a dual
|
||||||
processor Xeon class motherboard with a minimum of external components.
|
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
|
User Interface
|
||||||
--------------
|
--------------
|
||||||
|
@ -618,8 +618,8 @@ config SENSORS_LM93
|
|||||||
depends on I2C
|
depends on I2C
|
||||||
select HWMON_VID
|
select HWMON_VID
|
||||||
help
|
help
|
||||||
If you say yes here you get support for National Semiconductor LM93
|
If you say yes here you get support for National Semiconductor LM93,
|
||||||
sensor chips.
|
LM94, and compatible sensor chips.
|
||||||
|
|
||||||
This driver can also be built as a module. If so, the module
|
This driver can also be built as a module. If so, the module
|
||||||
will be called lm93.
|
will be called lm93.
|
||||||
|
@ -135,6 +135,11 @@
|
|||||||
#define LM93_MFR_ID 0x73
|
#define LM93_MFR_ID 0x73
|
||||||
#define LM93_MFR_ID_PROTOTYPE 0x72
|
#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 */
|
/* SMBus capabilities */
|
||||||
#define LM93_SMBUS_FUNC_FULL (I2C_FUNC_SMBUS_BYTE_DATA | \
|
#define LM93_SMBUS_FUNC_FULL (I2C_FUNC_SMBUS_BYTE_DATA | \
|
||||||
I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_BLOCK_DATA)
|
I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_BLOCK_DATA)
|
||||||
@ -2504,6 +2509,7 @@ static int lm93_detect(struct i2c_client *client, struct i2c_board_info *info)
|
|||||||
{
|
{
|
||||||
struct i2c_adapter *adapter = client->adapter;
|
struct i2c_adapter *adapter = client->adapter;
|
||||||
int mfr, ver;
|
int mfr, ver;
|
||||||
|
const char *name;
|
||||||
|
|
||||||
if (!i2c_check_functionality(adapter, LM93_SMBUS_FUNC_MIN))
|
if (!i2c_check_functionality(adapter, LM93_SMBUS_FUNC_MIN))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
@ -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);
|
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,
|
dev_dbg(&adapter->dev,
|
||||||
"detect failed, bad version id 0x%02x!\n", ver);
|
"detect failed, bad version id 0x%02x!\n", ver);
|
||||||
return -ENODEV;
|
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",
|
dev_dbg(&adapter->dev,"loading %s at %d,0x%02x\n",
|
||||||
client->name, i2c_adapter_id(client->adapter),
|
client->name, i2c_adapter_id(client->adapter),
|
||||||
client->addr);
|
client->addr);
|
||||||
@ -2602,6 +2618,7 @@ static int lm93_remove(struct i2c_client *client)
|
|||||||
|
|
||||||
static const struct i2c_device_id lm93_id[] = {
|
static const struct i2c_device_id lm93_id[] = {
|
||||||
{ "lm93", 0 },
|
{ "lm93", 0 },
|
||||||
|
{ "lm94", 0 },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(i2c, lm93_id);
|
MODULE_DEVICE_TABLE(i2c, lm93_id);
|
||||||
|
Loading…
Reference in New Issue
Block a user