From d656b6fde2531a13c4e68a3ce6b9f12bc19d96bb Mon Sep 17 00:00:00 2001 From: Jean Delvare Date: Wed, 9 Dec 2009 20:36:04 +0100 Subject: hwmon: (adt7475) Improve device detection Check the value of register 0x3f as part of the device detection, to make it more robust. Signed-off-by: Jean Delvare Cc: Hans de Goede Cc: Jordan Crouse Cc: "Darrick J. Wong" --- drivers/hwmon/adt7475.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'drivers/hwmon/adt7475.c') diff --git a/drivers/hwmon/adt7475.c b/drivers/hwmon/adt7475.c index 20bab51e16f4..520773b16544 100644 --- a/drivers/hwmon/adt7475.c +++ b/drivers/hwmon/adt7475.c @@ -47,6 +47,7 @@ #define REG_DEVID 0x3D #define REG_VENDID 0x3E +#define REG_DEVID2 0x3F #define REG_STATUS1 0x41 #define REG_STATUS2 0x42 @@ -1014,18 +1015,22 @@ static int adt7475_detect(struct i2c_client *client, int kind, struct i2c_board_info *info) { struct i2c_adapter *adapter = client->adapter; - int vendid, devid; + int vendid, devid, devid2; const char *name; if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) return -ENODEV; vendid = adt7475_read(REG_VENDID); - devid = adt7475_read(REG_DEVID); + devid2 = adt7475_read(REG_DEVID2); + if (vendid != 0x41 || /* Analog Devices */ + (devid2 & 0xf8) != 0x68) + return -ENODEV; - if (vendid == 0x41 && devid == 0x73) + devid = adt7475_read(REG_DEVID); + if (devid == 0x73) name = "adt7473"; - else if (vendid == 0x41 && devid == 0x75 && client->addr == 0x2e) + else if (devid == 0x75 && client->addr == 0x2e) name = "adt7475"; else { dev_dbg(&adapter->dev, -- cgit v1.2.1