OSDN Git Service

hwmon: (pmbus/ibm-cffps) Use MFR_ID to choose version
authorBrandon Wyman <bjwyman@gmail.com>
Mon, 4 Oct 2021 14:43:39 +0000 (14:43 +0000)
committerGuenter Roeck <linux@roeck-us.net>
Tue, 12 Oct 2021 14:22:41 +0000 (07:22 -0700)
There are multiple power supplies that will indicate
CFFPS_CCIN_VERSION_1, use the manufacturer ID to determine if it should
be treated as version cffps1 or version cffps2.

Signed-off-by: Brandon Wyman <bjwyman@gmail.com>
Link: https://lore.kernel.org/r/20211004144339.2634330-2-bjwyman@gmail.com
[groeck: Fixed continuation line alignment]
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/pmbus/ibm-cffps.c

index 226a60a..e3294a1 100644 (file)
@@ -508,16 +508,27 @@ static int ibm_cffps_probe(struct i2c_client *client)
                u16 ccin_revision = 0;
                u16 ccin_version = CFFPS_CCIN_VERSION_1;
                int ccin = i2c_smbus_read_word_swapped(client, CFFPS_CCIN_CMD);
+               char mfg_id[I2C_SMBUS_BLOCK_MAX + 2] = { 0 };
 
                if (ccin > 0) {
                        ccin_revision = FIELD_GET(CFFPS_CCIN_REVISION, ccin);
                        ccin_version = FIELD_GET(CFFPS_CCIN_VERSION, ccin);
                }
 
+               rc = i2c_smbus_read_block_data(client, PMBUS_MFR_ID, mfg_id);
+               if (rc < 0) {
+                       dev_err(&client->dev, "Failed to read Manufacturer ID\n");
+                       return rc;
+               }
+
                switch (ccin_version) {
                default:
                case CFFPS_CCIN_VERSION_1:
-                       vs = cffps1;
+                       if ((strncmp(mfg_id, "ACBE", 4) == 0) ||
+                                    (strncmp(mfg_id, "ARTE", 4) == 0))
+                               vs = cffps1;
+                       else
+                               vs = cffps2;
                        break;
                case CFFPS_CCIN_VERSION_2:
                        vs = cffps2;