aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon/adm9240.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hwmon/adm9240.c')
-rw-r--r--drivers/hwmon/adm9240.c61
1 files changed, 22 insertions, 39 deletions
diff --git a/drivers/hwmon/adm9240.c b/drivers/hwmon/adm9240.c
index 2444b15f2e9d..20e0481cc206 100644
--- a/drivers/hwmon/adm9240.c
+++ b/drivers/hwmon/adm9240.c
@@ -556,51 +556,34 @@ static int adm9240_detect(struct i2c_client *new_client, int kind,
556 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 556 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
557 return -ENODEV; 557 return -ENODEV;
558 558
559 if (kind == 0) { 559 /* verify chip: reg address should match i2c address */
560 kind = adm9240; 560 if (i2c_smbus_read_byte_data(new_client, ADM9240_REG_I2C_ADDR)
561 } 561 != address) {
562 562 dev_err(&adapter->dev, "detect fail: address match, 0x%02x\n",
563 if (kind < 0) { 563 address);
564 564 return -ENODEV;
565 /* verify chip: reg address should match i2c address */
566 if (i2c_smbus_read_byte_data(new_client, ADM9240_REG_I2C_ADDR)
567 != address) {
568 dev_err(&adapter->dev, "detect fail: address match, "
569 "0x%02x\n", address);
570 return -ENODEV;
571 }
572
573 /* check known chip manufacturer */
574 man_id = i2c_smbus_read_byte_data(new_client,
575 ADM9240_REG_MAN_ID);
576 if (man_id == 0x23) {
577 kind = adm9240;
578 } else if (man_id == 0xda) {
579 kind = ds1780;
580 } else if (man_id == 0x01) {
581 kind = lm81;
582 } else {
583 dev_err(&adapter->dev, "detect fail: unknown manuf, "
584 "0x%02x\n", man_id);
585 return -ENODEV;
586 }
587
588 /* successful detect, print chip info */
589 die_rev = i2c_smbus_read_byte_data(new_client,
590 ADM9240_REG_DIE_REV);
591 dev_info(&adapter->dev, "found %s revision %u\n",
592 man_id == 0x23 ? "ADM9240" :
593 man_id == 0xda ? "DS1780" : "LM81", die_rev);
594 } 565 }
595 566
596 /* either forced or detected chip kind */ 567 /* check known chip manufacturer */
597 if (kind == adm9240) { 568 man_id = i2c_smbus_read_byte_data(new_client, ADM9240_REG_MAN_ID);
569 if (man_id == 0x23) {
598 name = "adm9240"; 570 name = "adm9240";
599 } else if (kind == ds1780) { 571 } else if (man_id == 0xda) {
600 name = "ds1780"; 572 name = "ds1780";
601 } else if (kind == lm81) { 573 } else if (man_id == 0x01) {
602 name = "lm81"; 574 name = "lm81";
575 } else {
576 dev_err(&adapter->dev, "detect fail: unknown manuf, 0x%02x\n",
577 man_id);
578 return -ENODEV;
603 } 579 }
580
581 /* successful detect, print chip info */
582 die_rev = i2c_smbus_read_byte_data(new_client, ADM9240_REG_DIE_REV);
583 dev_info(&adapter->dev, "found %s revision %u\n",
584 man_id == 0x23 ? "ADM9240" :
585 man_id == 0xda ? "DS1780" : "LM81", die_rev);
586
604 strlcpy(info->type, name, I2C_NAME_SIZE); 587 strlcpy(info->type, name, I2C_NAME_SIZE);
605 588
606 return 0; 589 return 0;