aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuenter Roeck <linux@roeck-us.net>2015-08-17 09:21:01 -0400
committerGuenter Roeck <linux@roeck-us.net>2015-08-17 19:34:02 -0400
commit00c83371911836c47654e1de5b4706a0e578922a (patch)
tree5d919b6aec4c4c13fb911a430875e12d40558bce
parentee847a252664f54d06bcc6ab2864322cbcb52692 (diff)
hwmon: (ltc2978) Use correct ID mask to detect all chips
Per information from Linear Technologies, the ID mask is 12 bit for all chips of this series. Use this mask to detect chips to ensure that all chip revisions are detected. Suggested-by: Michael Jones <mike@proclivis.com> Tested-by: Michael Jones <mike@proclivis.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
-rw-r--r--drivers/hwmon/pmbus/ltc2978.c39
1 files changed, 17 insertions, 22 deletions
diff --git a/drivers/hwmon/pmbus/ltc2978.c b/drivers/hwmon/pmbus/ltc2978.c
index c3b71668a47f..cc84ef514b8d 100644
--- a/drivers/hwmon/pmbus/ltc2978.c
+++ b/drivers/hwmon/pmbus/ltc2978.c
@@ -56,23 +56,18 @@ enum chips { ltc2974, ltc2975, ltc2977, ltc2978, ltc3880, ltc3882, ltc3883,
56#define LTC2975_MFR_PIN_PEAK 0xc6 56#define LTC2975_MFR_PIN_PEAK 0xc6
57#define LTC2975_MFR_PIN_MIN 0xc7 57#define LTC2975_MFR_PIN_MIN 0xc7
58 58
59#define LTC2974_ID_REV1 0x0212 59#define LTC2978_ID_MASK 0xfff0
60#define LTC2974_ID_REV2 0x0213 60
61#define LTC2975_ID 0x0223 61#define LTC2974_ID 0x0210
62#define LTC2975_ID 0x0220
62#define LTC2977_ID 0x0130 63#define LTC2977_ID 0x0130
63#define LTC2978_ID_REV1 0x0121 64#define LTC2978_ID 0x0120
64#define LTC2978_ID_REV2 0x0122 65#define LTC3880_ID 0x4020
65#define LTC2978A_ID 0x0124
66#define LTC3880_ID 0x4000
67#define LTC3880_ID_MASK 0xff00
68#define LTC3883_ID 0x4300 66#define LTC3883_ID 0x4300
69#define LTC3883_ID_MASK 0xff00
70#define LTC3887_ID 0x4700 67#define LTC3887_ID 0x4700
71#define LTC3887_ID_MASK 0xff00 68#define LTM4676_ID_REV1 0x4400
72#define LTM4676_ID 0x4400 69#define LTM4676_ID_REV2 0x4480
73#define LTM4676_ID_2 0x4480
74#define LTM4676A_ID 0x47e0 70#define LTM4676A_ID 0x47e0
75#define LTM4676_ID_MASK 0xfff0
76 71
77#define LTC2974_NUM_PAGES 4 72#define LTC2974_NUM_PAGES 4
78#define LTC2978_NUM_PAGES 8 73#define LTC2978_NUM_PAGES 8
@@ -463,24 +458,24 @@ static int ltc2978_get_id(struct i2c_client *client)
463 return -ENODEV; 458 return -ENODEV;
464 } 459 }
465 460
466 if (chip_id == LTC2974_ID_REV1 || chip_id == LTC2974_ID_REV2) 461 chip_id &= LTC2978_ID_MASK;
462
463 if (chip_id == LTC2974_ID)
467 return ltc2974; 464 return ltc2974;
468 else if (chip_id == LTC2975_ID) 465 else if (chip_id == LTC2975_ID)
469 return ltc2975; 466 return ltc2975;
470 else if (chip_id == LTC2977_ID) 467 else if (chip_id == LTC2977_ID)
471 return ltc2977; 468 return ltc2977;
472 else if (chip_id == LTC2978_ID_REV1 || chip_id == LTC2978_ID_REV2 || 469 else if (chip_id == LTC2978_ID)
473 chip_id == LTC2978A_ID)
474 return ltc2978; 470 return ltc2978;
475 else if ((chip_id & LTC3880_ID_MASK) == LTC3880_ID) 471 else if (chip_id == LTC3880_ID)
476 return ltc3880; 472 return ltc3880;
477 else if ((chip_id & LTC3883_ID_MASK) == LTC3883_ID) 473 else if (chip_id == LTC3883_ID)
478 return ltc3883; 474 return ltc3883;
479 else if ((chip_id & LTC3887_ID_MASK) == LTC3887_ID) 475 else if (chip_id == LTC3887_ID)
480 return ltc3887; 476 return ltc3887;
481 else if ((chip_id & LTM4676_ID_MASK) == LTM4676_ID || 477 else if (chip_id == LTM4676_ID_REV1 || chip_id == LTM4676_ID_REV2 ||
482 (chip_id & LTM4676_ID_MASK) == LTM4676_ID_2 || 478 chip_id == LTM4676A_ID)
483 (chip_id & LTM4676_ID_MASK) == LTM4676A_ID)
484 return ltm4676; 479 return ltm4676;
485 480
486 dev_err(&client->dev, "Unsupported chip ID 0x%x\n", chip_id); 481 dev_err(&client->dev, "Unsupported chip ID 0x%x\n", chip_id);