mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-04-03 12:05:13 +02:00
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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user