hwmon: (pmbus/mpq8785) fix VOUT_MODE mismatch during identification

When MPQ8785 reports VOUT_MODE as VID mode, mpq8785_identify()
configures the driver for direct mode. The subsequent
pmbus_identify_common() check then fails due to a mismatch
between the reported mode and the configured mode, causing
device initialization to fail.

Override the reported VOUT_MODE to direct mode to keep the
driver configuration consistent with the reported mode and
allow successful device initialization.

This does not change how voltages are interpreted, but avoids
a false identification failure caused by mismatched mode
handling.

Fixes: f20b4a9311 ("hwmon: Add driver for MPS MPQ8785 Synchronous Step-Down Converter")
Signed-off-by: Carl Lee <carl.lee@amd.com>
Link: https://lore.kernel.org/r/20260210-dt-bindings-hwmon-pmbus-mpq8785-add-mpq8786-support-v3-1-84636ccfe76f@amd.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
Carl Lee
2026-02-10 15:26:34 +08:00
committed by Guenter Roeck
parent 8bde3e395a
commit 9e33c1dba2

View File

@@ -47,6 +47,33 @@ static int mpq8785_identify(struct i2c_client *client,
return 0;
};
static int mpq8785_read_byte_data(struct i2c_client *client, int page, int reg)
{
int ret;
switch (reg) {
case PMBUS_VOUT_MODE:
ret = pmbus_read_byte_data(client, page, reg);
if (ret < 0)
return ret;
if ((ret >> 5) == 1) {
/*
* The MPQ8785 chip reports VOUT_MODE as VID mode, but the driver
* treats VID as direct mode. Without this, identification would fail
* due to mode mismatch.
* This override ensures the reported mode matches the driver
* configuration, allowing successful initialization.
*/
return PB_VOUT_MODE_DIRECT;
}
return ret;
default:
return -ENODATA;
}
}
static int mpm82504_read_word_data(struct i2c_client *client, int page,
int phase, int reg)
{
@@ -129,6 +156,7 @@ static int mpq8785_probe(struct i2c_client *client)
break;
case mpq8785:
info->identify = mpq8785_identify;
info->read_byte_data = mpq8785_read_byte_data;
break;
default:
return -ENODEV;