Skip to content

Commit

Permalink
hwmon: (lm95241) Add support for LM95231
Browse files Browse the repository at this point in the history
LM95231 is fully compatible to LM95241; only necessary change is to add
chip detection.

Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Acked-by: Jean Delvare <khali@linux-fr.org>
  • Loading branch information
Guenter Roeck committed Jul 28, 2011
1 parent fffd80c commit 8c1d041
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 14 deletions.
5 changes: 3 additions & 2 deletions drivers/hwmon/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -694,10 +694,11 @@ config SENSORS_LTC4261
be called ltc4261.

config SENSORS_LM95241
tristate "National Semiconductor LM95241 sensor chip"
tristate "National Semiconductor LM95241 and compatibles"
depends on I2C
help
If you say yes here you get support for LM95241 sensor chip.
If you say yes here you get support for LM95231 and LM95241 sensor
chips.

This driver can also be built as a module. If so, the module
will be called lm95241.
Expand Down
31 changes: 19 additions & 12 deletions drivers/hwmon/lm95241.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,9 @@ static const unsigned short normal_i2c[] = {
#define TT_OFF 0
#define TT_ON 1
#define TT_MASK 7
#define MANUFACTURER_ID 0x01
#define DEFAULT_REVISION 0xA4
#define NATSEMI_MAN_ID 0x01
#define LM95231_CHIP_ID 0xA1
#define LM95241_CHIP_ID 0xA4

static const u8 lm95241_reg_address[] = {
LM95241_REG_R_LOCAL_TEMPH,
Expand Down Expand Up @@ -338,20 +339,25 @@ static int lm95241_detect(struct i2c_client *new_client,
struct i2c_board_info *info)
{
struct i2c_adapter *adapter = new_client->adapter;
int address = new_client->addr;
const char *name;
int mfg_id, chip_id;

if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return -ENODEV;

if ((i2c_smbus_read_byte_data(new_client, LM95241_REG_R_MAN_ID)
== MANUFACTURER_ID)
&& (i2c_smbus_read_byte_data(new_client, LM95241_REG_R_CHIP_ID)
== DEFAULT_REVISION)) {
name = DEVNAME;
} else {
dev_dbg(&adapter->dev, "LM95241 detection failed at 0x%02x\n",
address);
mfg_id = i2c_smbus_read_byte_data(new_client, LM95241_REG_R_MAN_ID);
if (mfg_id != NATSEMI_MAN_ID)
return -ENODEV;

chip_id = i2c_smbus_read_byte_data(new_client, LM95241_REG_R_CHIP_ID);
switch (chip_id) {
case LM95231_CHIP_ID:
name = "lm95231";
break;
case LM95241_CHIP_ID:
name = "lm95241";
break;
default:
return -ENODEV;
}

Expand Down Expand Up @@ -431,7 +437,8 @@ static int lm95241_remove(struct i2c_client *client)

/* Driver data (common to all clients) */
static const struct i2c_device_id lm95241_id[] = {
{ DEVNAME, 0 },
{ "lm95231", 0 },
{ "lm95241", 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, lm95241_id);
Expand Down

0 comments on commit 8c1d041

Please sign in to comment.