]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
power: supply: qcom_battmgr: return EAGAIN when firmware service is not up
authorNeil Armstrong <neil.armstrong@linaro.org>
Mon, 15 Jul 2024 12:57:06 +0000 (14:57 +0200)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Fri, 26 Jul 2024 22:17:31 +0000 (00:17 +0200)
The driver returns -ENODEV when the firmware battmrg service hasn't
started yet, while per-se -ENODEV is fine, we usually use -EAGAIN to
tell the user to retry again later. And the power supply core uses
-EGAIN when the device isn't initialized, let's use the same return.

This notably causes an infinite spam of:
thermal thermal_zoneXX: failed to read out thermal zone (-19)
because the thermal core doesn't understand -ENODEV, but only
considers -EAGAIN as a non-fatal error.

While it didn't appear until now, commit [1] fixes thermal core
and no more ignores thermal zones returning an error at first
temperature update.

[1] 5725f40698b9 ("thermal: core: Call monitor_thermal_zone() if zone temperature is invalid")

Link: https://lore.kernel.org/all/2ed4c630-204a-4f80-a37f-f2ca838eb455@linaro.org/
Cc: stable@vger.kernel.org
Fixes: 29e8142b5623 ("power: supply: Introduce Qualcomm PMIC GLINK power supply")
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Tested-by: Stephan Gerhold <stephan.gerhold@linaro.org>
Reviewed-by: Stephan Gerhold <stephan.gerhold@linaro.org>
Link: https://lore.kernel.org/r/20240715-topic-sm8x50-upstream-fix-battmgr-temp-tz-warn-v1-1-16e842ccead7@linaro.org
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/qcom_battmgr.c

index ec163d1bcd189192abcecbcb4e29e0e4251b2e38..44c6301f5f1747a5e1fc61fe6e43dad3a6d7a09d 100644 (file)
@@ -486,7 +486,7 @@ static int qcom_battmgr_bat_get_property(struct power_supply *psy,
        int ret;
 
        if (!battmgr->service_up)
-               return -ENODEV;
+               return -EAGAIN;
 
        if (battmgr->variant == QCOM_BATTMGR_SC8280XP)
                ret = qcom_battmgr_bat_sc8280xp_update(battmgr, psp);
@@ -683,7 +683,7 @@ static int qcom_battmgr_ac_get_property(struct power_supply *psy,
        int ret;
 
        if (!battmgr->service_up)
-               return -ENODEV;
+               return -EAGAIN;
 
        ret = qcom_battmgr_bat_sc8280xp_update(battmgr, psp);
        if (ret)
@@ -748,7 +748,7 @@ static int qcom_battmgr_usb_get_property(struct power_supply *psy,
        int ret;
 
        if (!battmgr->service_up)
-               return -ENODEV;
+               return -EAGAIN;
 
        if (battmgr->variant == QCOM_BATTMGR_SC8280XP)
                ret = qcom_battmgr_bat_sc8280xp_update(battmgr, psp);
@@ -867,7 +867,7 @@ static int qcom_battmgr_wls_get_property(struct power_supply *psy,
        int ret;
 
        if (!battmgr->service_up)
-               return -ENODEV;
+               return -EAGAIN;
 
        if (battmgr->variant == QCOM_BATTMGR_SC8280XP)
                ret = qcom_battmgr_bat_sc8280xp_update(battmgr, psp);