]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
power: supply: qcom_battmgr: Ignore extra __le32 in info payload
authorStephan Gerhold <stephan.gerhold@linaro.org>
Fri, 12 Jul 2024 10:00:03 +0000 (12:00 +0200)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Fri, 26 Jul 2024 22:18:40 +0000 (00:18 +0200)
Some newer ADSP firmware versions on X1E80100 report an extra __le32 at the
end of the battery information request payload, causing qcom_battmgr to
fail to initialize. Adjust the check to ignore the extra field in the info
payload so we can support both old and newer firmware versions.

Tested-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Stephan Gerhold <stephan.gerhold@linaro.org>
Tested-by: Johan Hovold <johan+linaro@kernel.org>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://lore.kernel.org/r/20240712-x1e80100-battmgr-v1-1-a253d767f493@linaro.org
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/qcom_battmgr.c

index 44c6301f5f1747a5e1fc61fe6e43dad3a6d7a09d..a99937cd733bf8f2608aa36f866c26ed616f564a 100644 (file)
@@ -1007,7 +1007,9 @@ static void qcom_battmgr_sc8280xp_callback(struct qcom_battmgr *battmgr,
                battmgr->error = 0;
                break;
        case BATTMGR_BAT_INFO:
-               if (payload_len != sizeof(resp->info)) {
+               /* some firmware versions report an extra __le32 at the end of the payload */
+               if (payload_len != sizeof(resp->info) &&
+                   payload_len != (sizeof(resp->info) + sizeof(__le32))) {
                        dev_warn(battmgr->dev,
                                 "invalid payload length for battery information request: %zd\n",
                                 payload_len);