aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon/lm87.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hwmon/lm87.c')
-rw-r--r--drivers/hwmon/lm87.c41
1 files changed, 18 insertions, 23 deletions
diff --git a/drivers/hwmon/lm87.c b/drivers/hwmon/lm87.c
index 2e4a3cea95f7..4929b1815eee 100644
--- a/drivers/hwmon/lm87.c
+++ b/drivers/hwmon/lm87.c
@@ -666,37 +666,32 @@ static int lm87_detect(struct i2c_client *new_client, int kind,
666 struct i2c_board_info *info) 666 struct i2c_board_info *info)
667{ 667{
668 struct i2c_adapter *adapter = new_client->adapter; 668 struct i2c_adapter *adapter = new_client->adapter;
669 static const char *names[] = { "lm87", "adm1024" }; 669 const char *name;
670 u8 cid, rev;
670 671
671 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 672 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
672 return -ENODEV; 673 return -ENODEV;
673 674
674 /* Default to an LM87 if forced */ 675 if (lm87_read_value(new_client, LM87_REG_CONFIG) & 0x80)
675 if (kind == 0) 676 return -ENODEV;
676 kind = lm87;
677 677
678 /* Now, we do the remaining detection. */ 678 /* Now, we do the remaining detection. */
679 if (kind < 0) { 679 cid = lm87_read_value(new_client, LM87_REG_COMPANY_ID);
680 u8 cid = lm87_read_value(new_client, LM87_REG_COMPANY_ID); 680 rev = lm87_read_value(new_client, LM87_REG_REVISION);
681 u8 rev = lm87_read_value(new_client, LM87_REG_REVISION); 681
682 682 if (cid == 0x02 /* National Semiconductor */
683 if (cid == 0x02 /* National Semiconductor */ 683 && (rev >= 0x01 && rev <= 0x08))
684 && (rev >= 0x01 && rev <= 0x08)) 684 name = "lm87";
685 kind = lm87; 685 else if (cid == 0x41 /* Analog Devices */
686 else if (cid == 0x41 /* Analog Devices */ 686 && (rev & 0xf0) == 0x10)
687 && (rev & 0xf0) == 0x10) 687 name = "adm1024";
688 kind = adm1024; 688 else {
689 689 dev_dbg(&adapter->dev, "LM87 detection failed at 0x%02x\n",
690 if (kind < 0 690 new_client->addr);
691 || (lm87_read_value(new_client, LM87_REG_CONFIG) & 0x80)) { 691 return -ENODEV;
692 dev_dbg(&adapter->dev,
693 "LM87 detection failed at 0x%02x.\n",
694 new_client->addr);
695 return -ENODEV;
696 }
697 } 692 }
698 693
699 strlcpy(info->type, names[kind - 1], I2C_NAME_SIZE); 694 strlcpy(info->type, name, I2C_NAME_SIZE);
700 695
701 return 0; 696 return 0;
702} 697}