summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSanman Pradhan <psanman@juniper.net>2026-03-21 21:12:05 +0300
committerGuenter Roeck <linux@roeck-us.net>2026-03-31 05:45:06 +0300
commit80306ba88ba6891f8cd16d4042beec69e9044de7 (patch)
tree0a069b0aef8531c4dc610517d5674d6eec49635b
parent6be9b04ef3fff87bf329fecae4647196ffefc539 (diff)
downloadlinux-80306ba88ba6891f8cd16d4042beec69e9044de7.tar.xz
hwmon: (pmbus/max31785) check for partial i2c_transfer in read_long_data
i2c_transfer() returns the number of messages successfully transferred, not only a negative errno on failure. When called with two messages (write command byte followed by a read of the 4-byte response), a return value of 1 means the command write succeeded but the read did not complete. In that case, rspbuf remains uninitialized and must not be interpreted as valid data. Treat any return value other than ARRAY_SIZE(msg) as an error, and return -EIO for partial completion. Also return 0 on success instead of the message count, since the caller only needs to distinguish success from failure. Signed-off-by: Sanman Pradhan <psanman@juniper.net> Link: https://lore.kernel.org/r/20260321181052.27129-4-sanman.pradhan@hpe.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
-rw-r--r--drivers/hwmon/pmbus/max31785.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/hwmon/pmbus/max31785.c b/drivers/hwmon/pmbus/max31785.c
index 260aa8fb50f1..3caa76bcbeb5 100644
--- a/drivers/hwmon/pmbus/max31785.c
+++ b/drivers/hwmon/pmbus/max31785.c
@@ -141,13 +141,13 @@ static int max31785_read_long_data(struct i2c_client *client, int page,
*/
pmbus_update_ts(client, 0);
- if (rc < 0)
- return rc;
+ if (rc != ARRAY_SIZE(msg))
+ return rc < 0 ? rc : -EIO;
*data = (rspbuf[0] << (0 * 8)) | (rspbuf[1] << (1 * 8)) |
(rspbuf[2] << (2 * 8)) | (rspbuf[3] << (3 * 8));
- return rc;
+ return 0;
}
static int max31785_get_pwm(struct i2c_client *client, int page)